@modus-ai/modus 0.1.0

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 (58) hide show
  1. package/README.md +121 -0
  2. package/bin/modus.js +2 -0
  3. package/dist/cli/index.d.ts +2 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +39 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/commands/config.d.ts +2 -0
  8. package/dist/commands/config.d.ts.map +1 -0
  9. package/dist/commands/config.js +66 -0
  10. package/dist/commands/config.js.map +1 -0
  11. package/dist/commands/init.d.ts +2 -0
  12. package/dist/commands/init.d.ts.map +1 -0
  13. package/dist/commands/init.js +89 -0
  14. package/dist/commands/init.js.map +1 -0
  15. package/dist/commands/update.d.ts +2 -0
  16. package/dist/commands/update.d.ts.map +1 -0
  17. package/dist/commands/update.js +19 -0
  18. package/dist/commands/update.js.map +1 -0
  19. package/dist/generators/codebuddy.d.ts +3 -0
  20. package/dist/generators/codebuddy.d.ts.map +1 -0
  21. package/dist/generators/codebuddy.js +77 -0
  22. package/dist/generators/codebuddy.js.map +1 -0
  23. package/dist/index.d.ts +4 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +4 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/utils/config.d.ts +13 -0
  28. package/dist/utils/config.d.ts.map +1 -0
  29. package/dist/utils/config.js +25 -0
  30. package/dist/utils/config.js.map +1 -0
  31. package/dist/utils/file-system.d.ts +11 -0
  32. package/dist/utils/file-system.d.ts.map +1 -0
  33. package/dist/utils/file-system.js +41 -0
  34. package/dist/utils/file-system.js.map +1 -0
  35. package/package.json +55 -0
  36. package/schemas/harness-schema.yaml +91 -0
  37. package/schemas/knowledge-schema.yaml +174 -0
  38. package/schemas/plan-schema.yaml +42 -0
  39. package/schemas/spec-schema.yaml +64 -0
  40. package/templates/commands/harness.md +46 -0
  41. package/templates/commands/init.md +16 -0
  42. package/templates/commands/plan.md +28 -0
  43. package/templates/commands/spec.md +37 -0
  44. package/templates/commands/vibe.md +18 -0
  45. package/templates/knowledge-catalog.md +26 -0
  46. package/templates/skills/modus-harness/SKILL.md +247 -0
  47. package/templates/skills/modus-harness-agents/00-skills-builder/SKILL.md +293 -0
  48. package/templates/skills/modus-harness-agents/01-analysis/SKILL.md +135 -0
  49. package/templates/skills/modus-harness-agents/02-dev/SKILL.md +102 -0
  50. package/templates/skills/modus-harness-agents/03-test/SKILL.md +84 -0
  51. package/templates/skills/modus-harness-agents/04-perf/SKILL.md +109 -0
  52. package/templates/skills/modus-harness-agents/05-security/SKILL.md +116 -0
  53. package/templates/skills/modus-harness-agents/06-review/SKILL.md +123 -0
  54. package/templates/skills/modus-harness-agents/07-deploy/SKILL.md +101 -0
  55. package/templates/skills/modus-init/SKILL.md +227 -0
  56. package/templates/skills/modus-plan/SKILL.md +246 -0
  57. package/templates/skills/modus-spec/SKILL.md +255 -0
  58. package/templates/skills/modus-vibe/SKILL.md +150 -0
@@ -0,0 +1,255 @@
1
+ # modus-spec(OpenSpec 规范驱动开发)
2
+
3
+ **触发条件:** 用户运行 `/modus:spec [需求描述]` 时使用此 Skill。
4
+
5
+ ## 职责
6
+
7
+ 规范驱动开发入口。在 `/modus:plan` 的基础上增加 OpenSpec 风格的行为规格(delta specs),明确「系统的 WHAT」而非「HOW」。通过**三级渐进加载**获取业务上下文,产出物包含 proposal、delta specs、design、tasks,归档后将 delta specs 合并到主规格库,并从中提取带类型标签的知识回写到 Skill。
8
+
9
+ ---
10
+
11
+ ## 执行流程
12
+
13
+ ### Step 0:读取项目宪法 + 断点续跑检查
14
+
15
+ **读取 constitution:**
16
+ 读取 `modus/config.yaml` 的 `constitution` 字段,作为 Spec 编写的最高优先级约束。`hard_rules` 中的规则必须体现在 Scenario 的 THEN 断言中。
17
+
18
+ **断点续跑检查:**
19
+ 扫描 `modus/changes/` 目录,检查是否存在同名的 `.modus-state.yaml`:
20
+ - 若存在且 `status: in-progress`,提示用户恢复或重新开始
21
+ - 若用户选择继续,跳到对应未完成步骤
22
+
23
+ ### Step 1:Level 1 加载——读知识目录(~200 tokens)
24
+
25
+ 读取 `modus/knowledge-catalog.md`,了解当前可用 Skill 及状态。
26
+ 若不存在,与 vibe/plan 模式相同的降级提示。
27
+
28
+ ### Step 2:域匹配与确认(有则更新,无则新增)
29
+
30
+ 基于 catalog 目录信息,结合用户 prompt,判断涉及的业务域:
31
+
32
+ ```
33
+ 根据你的需求,我认为涉及以下业务域:
34
+
35
+ ✓ order(订单域) [verified] → 将在前置步骤中更新
36
+ ✓ payment(支付域) [proven] → 将在前置步骤中更新
37
+ ? export(导出域) [未初始化] → 将在前置步骤中新建
38
+
39
+ 确认?
40
+ ```
41
+
42
+ ### Step 3:澄清用户意图(AskUserQuestion)
43
+
44
+ 确认域后,在规范编写前,提出 1-3 个关键澄清问题。
45
+
46
+ **Spec 模式特别关注的澄清方向:**
47
+
48
+ ```
49
+ 为了写出准确的行为规格,我需要确认:
50
+
51
+ 1. [行为边界] {具体业务场景的边界情况},系统应该怎么处理?
52
+ (直接影响 GIVEN/WHEN/THEN 场景的编写)
53
+
54
+ 2. [MODIFIED vs ADDED] 这是修改 {已有需求名称} 的行为,
55
+ 还是新增一个独立的需求?(影响 delta spec 使用 MODIFIED 还是 ADDED)
56
+
57
+ 3. [REMOVED 确认] 原有的 {已有功能} 是否明确废弃,
58
+ 还是保留并共存?
59
+
60
+ 4. [验收标准] 你期望的测试 Scenario 中,有哪些边界情况必须覆盖?
61
+
62
+ 5. [已知风险] ⚠️ Skill 中记录了:{pitfall},Spec 中是否需要为此添加保护性场景?
63
+ ```
64
+
65
+ 等待用户回答后,输出意图摘要:
66
+
67
+ ```
68
+ 理解已确认:
69
+ - 核心行为变更: {ADDED/MODIFIED/REMOVED 各几条}
70
+ - 关键 Scenario: {用户明确提及的测试场景}
71
+ - 废弃内容: {若有}
72
+ - 项目约束: {来自 constitution 的关键规则}
73
+
74
+ 开始前置更新 Skill,然后生成规范文档。
75
+ ```
76
+
77
+ ### Step 4:前置 Skill 更新(Level 2 加载,同 /modus:plan Step 4)
78
+
79
+ 调用 `modus-harness-00-skills-builder` 模式 B,读取并更新相关 Skill。
80
+
81
+ ### Step 5:生成规范文档
82
+
83
+ 基于已澄清的意图,生成文档到 `modus/changes/{name}/`。
84
+
85
+ **写入状态文件:**
86
+ 创建 `modus/changes/{name}/.modus-state.yaml`:
87
+ ```yaml
88
+ mode: spec
89
+ name: {name}
90
+ status: in-progress
91
+ domains: [{domain1}]
92
+ delta_stats:
93
+ added: 0
94
+ modified: 0
95
+ removed: 0
96
+ tasks_completed: "0/?"
97
+ scenarios_covered: "0/?"
98
+ completed: []
99
+ pending: [proposal, specs, design, tasks]
100
+ created: {ISO8601时间戳}
101
+ ```
102
+
103
+ **产出物依赖:**
104
+
105
+ ```
106
+ proposal.md
107
+
108
+ ├──► specs/{domain}/spec.md (delta specs)
109
+
110
+ └──► design.md
111
+
112
+
113
+ tasks.md
114
+ ```
115
+
116
+ **1. proposal.md** — 意图与范围(同 /plan)
117
+
118
+ **2. specs/{domain}/spec.md** — Delta 规格(核心差异)
119
+
120
+ 使用 ADDED/MODIFIED/REMOVED 三段式描述行为变更:
121
+
122
+ ```markdown
123
+ # Delta: {域名} — {功能名称}
124
+
125
+ ## ADDED Requirements(新增行为)
126
+
127
+ ### Requirement: {需求名称}
128
+ 系统 SHALL {可观测的行为描述,不涉及实现细节}。
129
+
130
+ #### Scenario: Happy Path — {场景名称}
131
+ - GIVEN {前置条件}
132
+ - WHEN {触发动作}
133
+ - THEN {预期结果}
134
+ - AND {附加结果}
135
+
136
+ #### Scenario: 边界条件 — {上限/下限场景}
137
+ - GIVEN {处于边界的前置条件}
138
+ - WHEN {触发动作}
139
+ - THEN {边界行为}
140
+
141
+ #### Scenario: 异常场景 — {错误处理}
142
+ - GIVEN {前置条件}
143
+ - WHEN {错误触发}
144
+ - THEN 系统 SHALL 返回 {错误码} 和明确的错误提示
145
+
146
+ ## MODIFIED Requirements(修改行为)
147
+
148
+ ### Requirement: {已有需求名称}
149
+ {新的完整描述}
150
+ (原描述:{原来的描述})
151
+
152
+ ## REMOVED Requirements(废弃行为)
153
+
154
+ ### Requirement: {已废弃需求}
155
+ (废弃原因:{原因})
156
+ ```
157
+
158
+ 生成 delta specs 后更新 `.modus-state.yaml` 的 `delta_stats`。
159
+
160
+ **3. design.md** — 技术方案(同 /plan)
161
+
162
+ **4. tasks.md** — 实现清单(含场景驱动的规格验证章节)
163
+
164
+ 在 tasks.md 末尾加入**场景驱动的验证章节**——每个 TODO 项直接追踪到 delta spec 中对应的 Scenario:
165
+
166
+ ```markdown
167
+ ## N. 规格验证(场景驱动)
168
+ # 每一项对应 delta spec 中的一个 Scenario,确保代码与规格一致
169
+
170
+ - [ ] N.1 [Happy Path] {Scenario名称} 有对应单元测试(GIVEN: X, WHEN: Y, THEN: Z)
171
+ - [ ] N.2 [边界条件] {上限=50} 的边界场景有单元测试,超出时返回 {错误码}
172
+ - [ ] N.3 [异常场景] {失败回滚} 场景有集成测试,验证事务完整性
173
+ - [ ] N.4 [接口一致性] {POST /api/v1/{domain}/xxx} 接口行为与 Scenario 一致(通过 API 测试验证)
174
+ - [ ] N.5 [宪法约束] {constitution.hard_rules 中与本次相关的规则} 在代码中得到体现
175
+ ```
176
+
177
+ 生成每份文档后更新 `.modus-state.yaml` 的 `completed` 列表和 `scenarios_covered`。
178
+
179
+ ### Step 6:询问归档 ⏸️ 【人工审批节点】
180
+
181
+ ```
182
+ 规范文档已生成:
183
+ modus/changes/{name}/proposal.md
184
+ modus/changes/{name}/specs/{domain}/spec.md ← delta specs({N}个场景)
185
+ modus/changes/{name}/design.md
186
+ modus/changes/{name}/tasks.md
187
+ modus/changes/{name}/.modus-state.yaml
188
+
189
+ 是否归档?归档后:
190
+ 1. delta specs 将合并到 modus/specs/{domain}/spec.md(主规格库)
191
+ 2. 变更文件夹移动到 modus/changes/archive/{YYYY-MM-DD}-{name}/
192
+ ```
193
+
194
+ ⏸️ **等待人工确认**(支持异步:可以在任意时间回复)
195
+
196
+ **归档时的 delta 合并规则:**
197
+ - `## ADDED Requirements` → 追加到主 spec 对应章节末尾
198
+ - `## MODIFIED Requirements` → 替换主 spec 中对应的 Requirement
199
+ - `## REMOVED Requirements` → 从主 spec 中删除对应 Requirement
200
+
201
+ 如果主 spec 不存在,创建新文件并填入所有 ADDED 内容。
202
+
203
+ 归档完成后更新 `.modus-state.yaml`:`status: archived`。
204
+
205
+ ### Step 7:后置 Skill 更新(知识提取与回写)
206
+
207
+ 归档完成后,调用 `modus-harness-00-skills-builder` 模式 C,从 delta specs 中系统性提取知识:
208
+
209
+ 1. `## ADDED Requirements` 中的新业务流程 → `[process]` 追加到业务 Skill
210
+ 2. 新增实体/字段/枚举 → `[model]` 追加到业务 Skill
211
+ 3. 新约束规则(SHALL/SHALL NOT 描述) → `[guideline]` 追加到业务 Skill
212
+ 4. Scenario 中暴露的边界条件/失败模式 → `[pitfall]` 追加到业务 Skill
213
+ 5. 更新 `modus/knowledge-catalog.md` 的 `last_referenced`
214
+
215
+ 输出知识提取摘要:
216
+ ```
217
+ 📚 知识已提取并回写到 Skill:
218
+ - [process] order 域:新增批量审批流程(提交→校验→执行→通知)
219
+ - [guideline] order 域:批量操作上限 50 条(来自 Scenario: 边界条件)
220
+ - [pitfall] order 域:全批失败回滚逻辑需配合 @Transactional + 分布式锁
221
+ - knowledge-catalog.md 已更新(order 域 maturity: draft→verified)
222
+ ```
223
+
224
+ ---
225
+
226
+ ## 主规格库结构
227
+
228
+ ```
229
+ modus/
230
+ ├── specs/ ← 当前系统行为的真相来源
231
+ │ ├── order/spec.md
232
+ │ └── payment/spec.md
233
+ ├── changes/ ← 进行中的变更
234
+ │ └── add-batch-approve/
235
+ │ ├── .modus-state.yaml ← 状态文件(断点续跑)
236
+ │ ├── proposal.md
237
+ │ ├── specs/order/spec.md ← delta specs
238
+ │ ├── design.md
239
+ │ └── tasks.md
240
+ └── changes/archive/
241
+ └── 2026-04-20-add-batch-approve/
242
+ ├── .modus-state.yaml ← status: archived
243
+ └── ...
244
+ ```
245
+
246
+ ---
247
+
248
+ ## Spec 质量原则
249
+
250
+ - Spec 描述「什么」,design 描述「怎么做」
251
+ - 每个 Scenario 必须可测试(可直接写成自动化测试)
252
+ - 使用 SHALL(必须)、SHOULD(应该)、MAY(可以)
253
+ - 避免在 spec 中出现类名、方法名、框架名
254
+ - tasks.md 的规格验证章节**必须与 Scenario 一一对应**,不得遗漏
255
+ - constitution 的 hard_rules 必须在 Scenario 中得到体现
@@ -0,0 +1,150 @@
1
+ # modus-vibe(氛围编程)
2
+
3
+ **触发条件:** 用户运行 `/modus:vibe [描述]` 时使用此 Skill。
4
+
5
+ 支持快速模式:`/modus:vibe --quick [描述]` 跳过 Skill 预更新和域确认,适合简单的单文件改动。
6
+
7
+ ## 职责
8
+
9
+ 氛围编程入口。在编码前先通过**三级渐进加载**获取相关业务上下文,让 AI 以「懂业务的资深开发者」身份工作,而不是从零开始理解项目。
10
+
11
+ ---
12
+
13
+ ## 执行流程
14
+
15
+ ### Step 0:读取项目宪法(硬性约束)
16
+
17
+ 读取 `modus/config.yaml`(若存在),提取 `constitution` 字段:
18
+
19
+ ```yaml
20
+ constitution:
21
+ tech_stack: "..."
22
+ hard_rules: [...]
23
+ key_patterns: [...]
24
+ ```
25
+
26
+ 将 `hard_rules` 作为**最高优先级约束**,在整个编码过程中强制遵守,不因业务需要而妥协。
27
+
28
+ 若文件不存在或 `constitution` 为空,跳过此步。
29
+
30
+ ### Step 1:Level 1 加载——读知识目录(~200 tokens)
31
+
32
+ 读取 `modus/knowledge-catalog.md`(全景目录索引):
33
+ - 了解当前项目有哪些可用的 Skill
34
+ - 识别各 Skill 的 maturity 状态
35
+ - 为 Step 2 的域匹配做准备
36
+
37
+ **如果 `knowledge-catalog.md` 不存在:**
38
+
39
+ ```
40
+ ⚠️ 未找到知识目录(modus/knowledge-catalog.md)
41
+
42
+ 建议先运行 /modus:init 初始化知识库,可以让 AI 更准确地理解项目。
43
+
44
+ 是否:
45
+ A. 现在运行快速初始化(约 2-5 分钟)?
46
+ B. 继续使用降级模式(无业务上下文,结果质量可能降低)?
47
+ ```
48
+
49
+ - 选 A → 执行 `/modus:init` 流程,完成后继续
50
+ - 选 B → 跳过知识加载,直接进入编码
51
+
52
+ ### Step 2:快速模式判断
53
+
54
+ **如果用户使用 `--quick` 标志:**
55
+ - 跳过 Step 3(域识别与确认)和 Step 4(Level 2 加载)
56
+ - 直接进入 Step 5(澄清意图)
57
+ - 仍然遵守 Step 0 读取的 constitution 约束
58
+
59
+ **如果是普通模式,继续 Step 3。**
60
+
61
+ ### Step 3:域匹配与确认(Level 2 预备)
62
+
63
+ 基于 `knowledge-catalog.md` 的目录信息,结合用户 prompt,**无需读取完整 SKILL.md**,仅凭目录中的一行摘要判断涉及哪些业务域:
64
+
65
+ ```
66
+ 根据你的需求,我认为涉及以下业务域:
67
+
68
+ ✓ order(订单域)— 订单创建、状态流转 [verified] → 将加载完整 Skill
69
+ ✓ payment(支付域)— 支付发起、回调 [proven] → 将加载完整 Skill
70
+ ? logistics(物流域)— 发货跟踪 [未初始化] → 是否顺便新建?
71
+
72
+ 确认以上分类?(直接回车确认,或告诉我调整)
73
+ ```
74
+
75
+ **`⚠️` 标注的 Skill** 表示可能已过时,提醒用户:「该 Skill 距上次引用已超过阈值,内容可能过时,将以代码为准」。
76
+
77
+ 若用户确认新建缺失的 Skill,调用 Skills Builder SubAgent(模式 A)新建后再继续。
78
+
79
+ ### Step 4:Level 2 加载——读匹配 Skill(~3000 tokens/个)
80
+
81
+ 读取用户确认的业务域对应的完整 SKILL.md 文件,将其内容作为背景知识。
82
+
83
+ **注意事项:**
84
+ - 只加载确认相关的域,不相关的域 Skill **不读取**(节省 token)
85
+ - 若 Skill 的 `maturity` 为 `draft`,提示:「该 Skill 较新,若与代码有出入,以代码为准」
86
+ - 对 Skill 中的内容进行「有则更新无则新增」的感知:
87
+ - 若当前代码与 Skill 记录有出入,以代码为准,并在回复末尾标注「Skill 更新建议」
88
+ - 若 Skill 没有覆盖此次需求的概念,在编码过程中补充
89
+
90
+ ### Step 5:澄清用户意图(AskUserQuestion)
91
+
92
+ 在开始编码前,确保充分理解用户意图。根据用户 prompt 和已加载的 Skill 上下文,提出 1-3 个关键澄清问题。
93
+
94
+ **提问原则:**
95
+ - 只问影响实现方向的关键问题,不问可以从代码中推断的细节
96
+ - 若 prompt 已足够明确(有具体接口名、明确功能描述),可跳过此步
97
+ - 从 Skill 的 `[pitfall]` 条目中检查是否存在与本次需求相关的已知坑,若有则主动提醒
98
+
99
+ **示例问题类型:**
100
+ ```
101
+ 为了准确实现,我需要确认几点:
102
+
103
+ 1. [范围] 这次修改只影响 {domain} 域,还是还涉及 {other domain}?
104
+ 2. [行为] {具体业务规则的歧义点,如「审批拒绝后是否可以重新提交」}?
105
+ 3. [约束] 有没有特殊的兼容性要求(如需要兼容历史数据 / 不能修改现有接口签名)?
106
+ 4. [风险] ⚠️ 此功能涉及到已知的 {pitfall},请确认是否已考虑到?
107
+ ```
108
+
109
+ 等待用户回答后,输出理解摘要:
110
+
111
+ ```
112
+ 好的,我的理解是:
113
+ - {要点1}
114
+ - {要点2}
115
+ - 遵守项目约束:{来自 constitution 的关键规则}
116
+
117
+ 如果理解无误,我来开始实现。
118
+ ```
119
+
120
+ ### Step 6:执行编码任务(Level 3 按需加载)
121
+
122
+ 基于已加载的业务上下文和澄清后的意图,执行用户的编码请求:
123
+
124
+ - 遵循项目已有的代码风格和命名规范(从 Skill 提取)
125
+ - **严格遵守 constitution 中的 hard_rules**(比 Skill 中的建议优先级更高)
126
+ - 引用已知的实体、接口、关键文件(避免臆造)
127
+ - **Level 3 加载:** 需要具体代码实现时,按需读取 Skill 中 `关键文件索引` 指向的实际代码文件(而非预先全量读取)
128
+ - 对不确定的业务规则,优先参考 Skill 中的规则描述
129
+ - 如发现 Skill 中记录有误或过时,在回复末尾标注「Skill 更新建议」
130
+
131
+ ### Step 7(可选):Skill 更新建议
132
+
133
+ 如果在编码过程中发现业务 Skill 有遗漏或错误,在回复末尾追加:
134
+
135
+ ```
136
+ 📝 Skill 更新建议(运行 /modus:plan 或 /modus:spec 时会自动应用):
137
+ - [model] order 域:发现 OrderStatus 枚举新增了 PENDING_REVIEW 状态
138
+ - [pitfall] order 域:批量操作时若不分页会导致内存溢出
139
+ ```
140
+
141
+ ---
142
+
143
+ ## 氛围编程原则
144
+
145
+ - **先理解再编码**:先复述对需求的理解,确认后再写代码
146
+ - **有据可依**:引用的实体、字段、接口名必须来自 Skill 或已有代码
147
+ - **风格一致**:生成的代码应与项目现有风格保持一致
148
+ - **宪法优先**:constitution.hard_rules 是不可违反的底线,优先于一切
149
+ - **按需加载**:不预先读取所有 Skill,降低 token 消耗
150
+ - **主动补全**:发现明显缺失(如缺少参数校验、日志)时主动补充