@s_s/harmonia 1.1.1 → 1.3.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.
- package/README.md +413 -205
- package/build/core/dispatch.d.ts +16 -13
- package/build/core/dispatch.js +38 -33
- package/build/core/dispatch.js.map +1 -1
- package/build/core/docs.d.ts +15 -11
- package/build/core/docs.js +24 -19
- package/build/core/docs.js.map +1 -1
- package/build/core/issues.d.ts +37 -0
- package/build/core/issues.js +100 -0
- package/build/core/issues.js.map +1 -0
- package/build/core/registry.d.ts +63 -6
- package/build/core/registry.js +109 -8
- package/build/core/registry.js.map +1 -1
- package/build/core/reviews.d.ts +9 -8
- package/build/core/reviews.js +22 -20
- package/build/core/reviews.js.map +1 -1
- package/build/core/state.d.ts +18 -10
- package/build/core/state.js +50 -27
- package/build/core/state.js.map +1 -1
- package/build/core/steps.d.ts +8 -7
- package/build/core/steps.js +21 -19
- package/build/core/steps.js.map +1 -1
- package/build/core/types.d.ts +32 -1
- package/build/index.js +34 -3
- package/build/index.js.map +1 -1
- package/build/setup/templates.js +79 -3
- package/build/setup/templates.js.map +1 -1
- package/build/tools/approve-doc.js +9 -2
- package/build/tools/approve-doc.js.map +1 -1
- package/build/tools/dispatch-role.js +8 -4
- package/build/tools/dispatch-role.js.map +1 -1
- package/build/tools/doc-tools.js +100 -21
- package/build/tools/doc-tools.js.map +1 -1
- package/build/tools/get-project-status.js +108 -17
- package/build/tools/get-project-status.js.map +1 -1
- package/build/tools/issue-tools.d.ts +10 -0
- package/build/tools/issue-tools.js +169 -0
- package/build/tools/issue-tools.js.map +1 -0
- package/build/tools/iteration-start.d.ts +13 -0
- package/build/tools/iteration-start.js +103 -0
- package/build/tools/iteration-start.js.map +1 -0
- package/build/tools/patch-start.d.ts +14 -0
- package/build/tools/patch-start.js +97 -0
- package/build/tools/patch-start.js.map +1 -0
- package/build/tools/project-init.d.ts +5 -1
- package/build/tools/project-init.js +28 -14
- package/build/tools/project-init.js.map +1 -1
- package/build/tools/report-dispatch.js +23 -19
- package/build/tools/report-dispatch.js.map +1 -1
- package/build/tools/set-scale.js +7 -4
- package/build/tools/set-scale.js.map +1 -1
- package/build/tools/update-phase.js +11 -7
- package/build/tools/update-phase.js.map +1 -1
- package/build/tools/utils.d.ts +34 -0
- package/build/tools/utils.js +61 -0
- package/build/tools/utils.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
> _众声喧哗之中,和谐不是沉默,而是各得其所。_
|
|
4
4
|
|
|
5
|
-
Multi-agent orchestration MCP server with pluggable workflows.
|
|
6
|
-
|
|
7
5
|
Harmonia 是一个基于 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 的智能体编排服务器。它为 AI 编程助手(Claude Code、OpenCode、OpenClaw、Codex)提供项目管理工具,让多个 AI agent 在预定义的工作流中按角色协作完成软件开发任务。
|
|
8
6
|
|
|
9
7
|
## 核心理念
|
|
@@ -15,89 +13,186 @@ Harmonia 是一个基于 [Model Context Protocol (MCP)](https://modelcontextprot
|
|
|
15
13
|
|
|
16
14
|
## 特性
|
|
17
15
|
|
|
18
|
-
|
|
16
|
+
- **工作流编排** — 5 阶段、4 角色、15 种文档类型,按项目规模自动调整
|
|
17
|
+
- **迭代管理** — 同一项目支持多次迭代,每次迭代独立的状态和文档
|
|
18
|
+
- **文档结构校验** — Markdown 标题结构和 JSON 字段/类型自动校验
|
|
19
|
+
- **逐步文档写入** — 大型文档拆分为多步,每步独立校验,支持步骤回滚
|
|
20
|
+
- **覆盖配置** — 三层合并的配置系统,灵活控制审批规则、角色绑定、能力映射
|
|
21
|
+
- **跨 Agent 边界守卫** — hook 脚本拦截越权操作 + 角色提示词注入约束上下文
|
|
22
|
+
- **工具访问控制** — 基于 MCP tool 级别的角色白名单/黑名单
|
|
19
23
|
|
|
20
|
-
|
|
21
|
-
- 4 个角色:PM / 架构师 / 开发者 / 测试
|
|
22
|
-
- 15 种文档类型,按项目规模(small / medium / large)自动调整必选/可选
|
|
23
|
-
- 项目规模延迟设定 — PRD 审批后由 PM 设定,设定后不可更改
|
|
24
|
-
- 角色调度与报告机制(`role_dispatch` / `dispatch_report`)
|
|
24
|
+
## 快速开始
|
|
25
25
|
|
|
26
|
-
###
|
|
26
|
+
### 安装
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
```bash
|
|
29
|
+
npm install -g @s_s/harmonia
|
|
30
|
+
```
|
|
29
31
|
|
|
30
|
-
###
|
|
32
|
+
### 配置 MCP 服务器
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
将 Harmonia 注册为你的 AI 编程助手的 MCP 服务器:
|
|
33
35
|
|
|
34
|
-
|
|
36
|
+
<details>
|
|
37
|
+
<summary><strong>Claude Code</strong></summary>
|
|
35
38
|
|
|
36
|
-
|
|
39
|
+
通过命令行:
|
|
37
40
|
|
|
41
|
+
```bash
|
|
42
|
+
claude mcp add --transport stdio harmonia -- harmonia
|
|
38
43
|
```
|
|
39
|
-
|
|
40
|
-
|
|
44
|
+
|
|
45
|
+
或添加到 `.mcp.json`:
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"mcpServers": {
|
|
50
|
+
"harmonia": {
|
|
51
|
+
"command": "harmonia"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
41
55
|
```
|
|
42
56
|
|
|
43
|
-
|
|
57
|
+
</details>
|
|
44
58
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- `review: { "prd": true, "tech-design": false }` — 按文档类型逐一配置
|
|
48
|
-
- 通过 `review_set_rule` 工具设置
|
|
49
|
-
- **角色配置** — 为每个角色指定 agent 类型和模型
|
|
50
|
-
- `agent` — 执行角色的 agent 类型(opencode / claude-code / openclaw / codex)
|
|
51
|
-
- `model` — 模型覆盖(如使用不同能力级别的模型)
|
|
52
|
-
- 通过 `guard_set` 工具设置
|
|
53
|
-
- **能力映射** — 将角色的抽象能力映射到具体工具
|
|
54
|
-
- `capabilities.{capId}` — 指定工具类型(skill / mcp)、工具名、服务器名、静态参数
|
|
55
|
-
- 通过 `guard_set` 工具设置
|
|
59
|
+
<details>
|
|
60
|
+
<summary><strong>OpenCode</strong></summary>
|
|
56
61
|
|
|
57
|
-
|
|
62
|
+
添加到 `opencode.json`:
|
|
58
63
|
|
|
59
64
|
```json
|
|
60
65
|
{
|
|
61
|
-
"
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
"
|
|
65
|
-
"model": "claude-sonnet-4-20250514",
|
|
66
|
-
"capabilities": {
|
|
67
|
-
"read_file": {
|
|
68
|
-
"type": "mcp",
|
|
69
|
-
"tool": "read_file",
|
|
70
|
-
"server": "filesystem"
|
|
71
|
-
}
|
|
72
|
-
}
|
|
66
|
+
"mcp": {
|
|
67
|
+
"harmonia": {
|
|
68
|
+
"type": "local",
|
|
69
|
+
"command": ["harmonia"]
|
|
73
70
|
}
|
|
74
71
|
}
|
|
75
72
|
}
|
|
76
73
|
```
|
|
77
74
|
|
|
78
|
-
|
|
75
|
+
</details>
|
|
79
76
|
|
|
80
|
-
|
|
77
|
+
<details>
|
|
78
|
+
<summary><strong>Codex</strong></summary>
|
|
81
79
|
|
|
82
|
-
|
|
83
|
-
- **OpenCode** — TypeScript plugin hook
|
|
84
|
-
- **OpenClaw** — handler.ts hook
|
|
80
|
+
通过命令行:
|
|
85
81
|
|
|
86
|
-
|
|
82
|
+
```bash
|
|
83
|
+
codex mcp add harmonia -- harmonia
|
|
84
|
+
```
|
|
87
85
|
|
|
88
|
-
|
|
86
|
+
或添加到 `~/.codex/config.toml`:
|
|
89
87
|
|
|
90
|
-
|
|
88
|
+
```toml
|
|
89
|
+
[mcp_servers.harmonia]
|
|
90
|
+
command = "harmonia"
|
|
91
|
+
```
|
|
91
92
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
</details>
|
|
94
|
+
|
|
95
|
+
<details>
|
|
96
|
+
<summary><strong>OpenClaw</strong>(通过 mcporter)</summary>
|
|
97
|
+
|
|
98
|
+
添加到 `config/mcporter.json`(全局配置用 `~/.mcporter/mcporter.json`):
|
|
99
|
+
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"mcpServers": {
|
|
103
|
+
"harmonia": {
|
|
104
|
+
"command": "harmonia"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
或通过 mcporter 命令行:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
mcporter config add harmonia --command harmonia --scope home
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
</details>
|
|
117
|
+
|
|
118
|
+
### 初始化
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
harmonia setup --agent openclaw
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
`harmonia setup` 一键完成:
|
|
125
|
+
|
|
126
|
+
1. 注入 PM 提示词到 agent 配置文件(AGENTS.md / CLAUDE.md)
|
|
127
|
+
2. 安装 agent hook 脚本(边界守卫 + 主动提醒)
|
|
128
|
+
|
|
129
|
+
之后启动你的 AI 编程助手,用自然语言告诉它你要做什么即可。
|
|
130
|
+
|
|
131
|
+
### 使用示例
|
|
132
|
+
|
|
133
|
+
setup 完成后,AI 编程助手已被注入 PM 提示词。你只需要用自然语言描述需求,PM 会自动调用 Harmonia 工具驱动整个流程。
|
|
134
|
+
|
|
135
|
+
**启动新项目:**
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
你:我想开发一个命令行待办事项工具,用 TypeScript 写,支持增删改查和优先级排序。
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
> PM 会先调用 `project_status()` 检查是否有已注册项目,发现没有后,会和你沟通确认项目名称和目录路径,然后调用 `project_init` 注册项目、`iteration_start` 开始第一次迭代,接着进入需求澄清阶段撰写 PRD。
|
|
142
|
+
|
|
143
|
+
**为已有代码库添加新功能:**
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
你:我的项目在 /Users/me/api-server,想给它加上用户认证模块,帮我管理一下。
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
> 和启动新项目流程相同——PM 会确认项目信息后调用 `project_init` + `iteration_start`。`project_init` 只是将项目注册到 Harmonia,不会修改你的源码目录。
|
|
150
|
+
|
|
151
|
+
**继续已注册的项目:**
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
你:继续之前的 todo-cli 项目。
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
> PM 调用 `project_status("todo-cli")` 获取当前迭代的阶段、文档、调度记录等状态,根据进度恢复工作。
|
|
158
|
+
|
|
159
|
+
**开始新一轮迭代:**
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
你:todo-cli 需要加一些新功能,开始新的迭代。
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
> PM 调用 `iteration_start("todo-cli")` 创建新迭代(如 iter-2),从需求澄清阶段重新开始。上一轮迭代的文档和状态保留不变。
|
|
166
|
+
|
|
167
|
+
**查看所有项目:**
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
你:我有哪些项目?
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
> PM 调用 `project_status()`(无参数)返回所有已注册项目及其当前迭代状态。
|
|
174
|
+
|
|
175
|
+
### CLI 命令
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
harmonia 启动 MCP stdio 服务器(供 agent 调用)
|
|
179
|
+
harmonia setup 初始化 agent 配置(注入提示词 + 安装 hook)
|
|
180
|
+
harmonia unregister <name> 注销项目(默认同时删除数据目录)
|
|
181
|
+
harmonia --help 显示帮助信息
|
|
182
|
+
harmonia --version 显示版本号
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
| 命令 | 选项 | 说明 |
|
|
186
|
+
| ------------ | ---------------- | --------------------------------------------------------------------------------------------- |
|
|
187
|
+
| `setup` | `--agent <type>` | agent 类型:`opencode` / `claude-code` / `codex` / `openclaw`。建议显式指定,省略时自动检测。 |
|
|
188
|
+
| `unregister` | `--keep-data` | 仅移除注册表条目,保留项目数据目录。默认同时删除数据目录。 |
|
|
95
189
|
|
|
96
190
|
## MCP 工具一览
|
|
97
191
|
|
|
98
192
|
| 工具 | 说明 |
|
|
99
193
|
| ------------------- | -------------------------------------------------- |
|
|
100
194
|
| `project_init` | 注册项目,创建数据目录,初始化工作流 |
|
|
195
|
+
| `iteration_start` | 开始新迭代(创建 iter-N 目录,重置阶段状态) |
|
|
101
196
|
| `project_set_scale` | 设定项目规模(PRD 审批后,不可更改) |
|
|
102
197
|
| `project_status` | 查看项目状态(无参数返回项目列表,有参数返回详情) |
|
|
103
198
|
| `phase_update` | 推进项目阶段 |
|
|
@@ -110,12 +205,14 @@ Harmonia 是一个基于 [Model Context Protocol (MCP)](https://modelcontextprot
|
|
|
110
205
|
| `role_prompt` | 获取角色提示词(含约束上下文注入) |
|
|
111
206
|
| `role_dispatch` | 调度角色执行任务 |
|
|
112
207
|
| `dispatch_report` | 角色报告任务完成状态 |
|
|
113
|
-
| `guard_set` |
|
|
114
|
-
| `guard_get` |
|
|
208
|
+
| `guard_set` | 设置角色的 agent/model/能力覆盖 |
|
|
209
|
+
| `guard_get` | 查看当前覆盖配置 |
|
|
115
210
|
|
|
116
|
-
##
|
|
211
|
+
## 工作流
|
|
117
212
|
|
|
118
|
-
|
|
213
|
+
### 阶段与角色
|
|
214
|
+
|
|
215
|
+
Harmonia 使用声明式工作流定义。内置的 `dev` 工作流(软件开发流程)包含 5 个阶段和 4 个角色:
|
|
119
216
|
|
|
120
217
|
```
|
|
121
218
|
clarify (需求澄清) → PM 产出 PRD、用户故事
|
|
@@ -129,141 +226,304 @@ test (测试) → 测试编写测试、输出测试报告
|
|
|
129
226
|
deliver (交付验收) → PM 验收成果、输出复盘记录
|
|
130
227
|
```
|
|
131
228
|
|
|
132
|
-
|
|
229
|
+
| 角色 | 说明 | 默认模型 | 并行 |
|
|
230
|
+
| ------ | -------------------------------------- | -------- | ---- |
|
|
231
|
+
| PM | 需求澄清、文档撰写、任务分派、验收交付 | medium | 否 |
|
|
232
|
+
| 架构师 | 代码分析、技术方案、任务拆解 | strong | 否 |
|
|
233
|
+
| 开发者 | 编码实现、单元测试、代码质量 | medium | 是 |
|
|
234
|
+
| 测试 | 测试计划、测试执行、测试报告 | medium | 否 |
|
|
235
|
+
|
|
236
|
+
### 文档类型
|
|
237
|
+
|
|
238
|
+
`dev` 工作流定义了 15 种文档类型。每种文档按项目规模(small / medium / large)有不同的要求等级:
|
|
239
|
+
|
|
240
|
+
| 文档 ID | 名称 | 阶段 | 规模行为 (S/M/L) | 默认审批 |
|
|
241
|
+
| ----------------- | ------------------- | ------- | ---------------------- | -------- |
|
|
242
|
+
| `prd` | 需求文档 | clarify | full / full / full | **是** |
|
|
243
|
+
| `user-stories` | 用户故事 + 验收标准 | clarify | full / full / full | 否 |
|
|
244
|
+
| `fsd` | 功能规格 | clarify | skip / full / full | 否 |
|
|
245
|
+
| `prototype` | 高保真原型 | clarify | skip / optional / full | **是** |
|
|
246
|
+
| `project-plan` | 项目计划 | clarify | skip / optional / full | 否 |
|
|
247
|
+
| `tech-design` | 技术方案 | design | lite / full / full | 否 |
|
|
248
|
+
| `data-model` | 数据模型设计 | design | skip / optional / full | 否 |
|
|
249
|
+
| `api-design` | API 设计 | design | skip / optional / full | 否 |
|
|
250
|
+
| `task-breakdown` | 任务拆解 | design | full / full / full | 否 |
|
|
251
|
+
| `risk-assessment` | 技术风险评估 | design | skip / skip / full | 否 |
|
|
252
|
+
| `code` | 代码实现 | develop | full / full / full | 否 |
|
|
253
|
+
| `test-plan` | 测试计划 | test | skip / full / full | 否 |
|
|
254
|
+
| `test-report` | 测试报告 | test | full / full / full | 否 |
|
|
255
|
+
| `deploy` | 部署文档 | deliver | skip / skip / optional | 否 |
|
|
256
|
+
| `retrospective` | 复盘记录 | deliver | full / full / full | 否 |
|
|
257
|
+
|
|
258
|
+
> **规模行为说明**:`full` = 必须产出;`lite` = 简化版;`optional` = 可选产出;`skip` = 跳过
|
|
259
|
+
|
|
260
|
+
项目规模在 PRD 审批后由 PM 通过 `project_set_scale` 设定,设定后不可更改。
|
|
261
|
+
|
|
262
|
+
### 逐步文档写入
|
|
263
|
+
|
|
264
|
+
大型文档可拆分为多个步骤(steps),每步独立写入并校验:
|
|
265
|
+
|
|
266
|
+
- 每步有独立的 JSON Schema 校验
|
|
267
|
+
- 重写某步时自动清除后续步骤记录
|
|
268
|
+
- `project_status` 中展示步骤进度
|
|
269
|
+
|
|
270
|
+
例如 PRD 的写入流程:
|
|
133
271
|
|
|
134
272
|
1. `requirements` — 需求结构化(JSON)
|
|
135
273
|
2. `completeness-check` — 完整性校验(JSON)
|
|
136
274
|
3. `draft` — PRD 草稿(Markdown)
|
|
137
275
|
4. `final` — PRD 最终版(Markdown)
|
|
138
276
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
```bash
|
|
142
|
-
npm install -g @s_s/harmonia
|
|
143
|
-
```
|
|
277
|
+
### 自定义工作流
|
|
144
278
|
|
|
145
|
-
|
|
279
|
+
Harmonia 使用两层工作流查找机制:
|
|
146
280
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
```
|
|
281
|
+
1. **自定义目录**(高优先级):`<data_dir>/harmonia/.workflows/<name>/`
|
|
282
|
+
2. **内置目录**(回退):`<package>/workflows/<name>/`
|
|
150
283
|
|
|
151
|
-
|
|
284
|
+
自定义工作流会覆盖同名的内置工作流。内置工作流随包版本自动更新,零维护。
|
|
152
285
|
|
|
153
|
-
|
|
154
|
-
2. 安装 agent hook 脚本(边界守卫 + 主动提醒)
|
|
286
|
+
在全局数据目录下创建 `.workflows/<name>/` 目录:
|
|
155
287
|
|
|
156
|
-
|
|
288
|
+
```
|
|
289
|
+
<data_dir>/harmonia/.workflows/
|
|
290
|
+
└── my-workflow/
|
|
291
|
+
├── workflow.json # 工作流定义(阶段、角色、文档类型)
|
|
292
|
+
├── roles/ # 角色提示词
|
|
293
|
+
│ ├── pm.md
|
|
294
|
+
│ └── ...
|
|
295
|
+
└── schemas/ # 文档 Schema(可选)
|
|
296
|
+
├── prd.json
|
|
297
|
+
├── prd.requirements.json # 步骤 Schema
|
|
298
|
+
└── ...
|
|
299
|
+
```
|
|
157
300
|
|
|
158
|
-
|
|
301
|
+
`workflow.json` 格式:
|
|
159
302
|
|
|
303
|
+
```json
|
|
304
|
+
{
|
|
305
|
+
"name": "my-workflow",
|
|
306
|
+
"description": "自定义工作流描述",
|
|
307
|
+
"version": "1.0.0",
|
|
308
|
+
"author": "your-name",
|
|
309
|
+
"phases": [ ... ],
|
|
310
|
+
"docs": { ... }
|
|
311
|
+
}
|
|
160
312
|
```
|
|
161
|
-
harmonia 启动 MCP stdio 服务器(供 agent 调用)
|
|
162
|
-
harmonia setup 初始化 agent 配置(注入提示词 + 安装 hook)
|
|
163
|
-
harmonia --help 显示帮助信息
|
|
164
|
-
harmonia --version 显示版本号
|
|
165
|
-
```
|
|
166
313
|
|
|
167
|
-
`
|
|
314
|
+
可参考内置 `dev` 工作流(`node_modules/@s_s/harmonia/workflows/dev/`)作为模板。
|
|
315
|
+
|
|
316
|
+
工作流选择规则:
|
|
168
317
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
| `--agent <type>` | agent 类型:`opencode` / `claude-code` / `codex` / `openclaw` | 建议显式指定。省略时通过 cwd 和 `~` 下的配置文件自动检测。 |
|
|
318
|
+
- 只有一个可用工作流时自动选中
|
|
319
|
+
- 多个可用工作流时,需在 `project_init` 中指定 `workflow` 参数
|
|
172
320
|
|
|
173
|
-
##
|
|
321
|
+
## 覆盖配置
|
|
174
322
|
|
|
175
|
-
|
|
323
|
+
Harmonia 提供三层合并的配置覆盖系统,让你无需修改工作流定义即可自定义行为。
|
|
176
324
|
|
|
177
|
-
|
|
178
|
-
<summary><strong>Claude Code</strong></summary>
|
|
325
|
+
### 合并优先级
|
|
179
326
|
|
|
180
|
-
|
|
327
|
+
```
|
|
328
|
+
项目级 overrides.json > 全局 overrides.json > 工作流默认值
|
|
329
|
+
```
|
|
181
330
|
|
|
182
|
-
|
|
183
|
-
|
|
331
|
+
| 层级 | 文件位置 | 作用域 |
|
|
332
|
+
| ------------ | ---------------------------------------------- | ---------------------- |
|
|
333
|
+
| 工作流默认值 | `workflow.json` 中的定义 | 所有使用该工作流的项目 |
|
|
334
|
+
| 全局覆盖 | `<data_dir>/harmonia/overrides.json` | 所有项目 |
|
|
335
|
+
| 项目覆盖 | `<data_dir>/harmonia/<project>/overrides.json` | 仅该项目(跨迭代共享) |
|
|
336
|
+
|
|
337
|
+
项目级覆盖只需要写你想改的字段,未设置的字段自动回退到全局覆盖,再回退到工作流默认值。
|
|
338
|
+
|
|
339
|
+
### 完整结构
|
|
340
|
+
|
|
341
|
+
```typescript
|
|
342
|
+
// overrides.json 的完整类型定义
|
|
343
|
+
interface OverrideConfig {
|
|
344
|
+
// 审批规则
|
|
345
|
+
review?: boolean | Record<string, boolean>;
|
|
346
|
+
|
|
347
|
+
// 角色配置
|
|
348
|
+
roles?: Record<
|
|
349
|
+
string,
|
|
350
|
+
{
|
|
351
|
+
agent?: 'opencode' | 'claude-code' | 'openclaw' | 'codex';
|
|
352
|
+
model?: string;
|
|
353
|
+
capabilities?: Record<
|
|
354
|
+
string,
|
|
355
|
+
{
|
|
356
|
+
type: 'skill' | 'mcp';
|
|
357
|
+
tool: string;
|
|
358
|
+
server?: string; // type 为 'mcp' 时必填
|
|
359
|
+
params?: Record<string, unknown>;
|
|
360
|
+
notes?: string;
|
|
361
|
+
}
|
|
362
|
+
>;
|
|
363
|
+
}
|
|
364
|
+
>;
|
|
365
|
+
}
|
|
184
366
|
```
|
|
185
367
|
|
|
186
|
-
|
|
368
|
+
完整示例:
|
|
187
369
|
|
|
188
370
|
```json
|
|
189
371
|
{
|
|
190
|
-
"
|
|
191
|
-
"
|
|
192
|
-
|
|
372
|
+
"review": {
|
|
373
|
+
"prd": true,
|
|
374
|
+
"tech-design": true,
|
|
375
|
+
"prototype": false
|
|
376
|
+
},
|
|
377
|
+
"roles": {
|
|
378
|
+
"architect": {
|
|
379
|
+
"agent": "claude-code",
|
|
380
|
+
"model": "claude-sonnet-4-20250514"
|
|
381
|
+
},
|
|
382
|
+
"developer": {
|
|
383
|
+
"agent": "opencode",
|
|
384
|
+
"model": "claude-sonnet-4-20250514",
|
|
385
|
+
"capabilities": {
|
|
386
|
+
"read_file": {
|
|
387
|
+
"type": "mcp",
|
|
388
|
+
"tool": "read_file",
|
|
389
|
+
"server": "filesystem"
|
|
390
|
+
}
|
|
391
|
+
}
|
|
193
392
|
}
|
|
194
393
|
}
|
|
195
394
|
}
|
|
196
395
|
```
|
|
197
396
|
|
|
198
|
-
|
|
397
|
+
### 审批规则(review)
|
|
199
398
|
|
|
200
|
-
|
|
201
|
-
<summary><strong>OpenCode</strong></summary>
|
|
399
|
+
控制哪些文档在 `doc_write` 后需要用户通过 `doc_approve` 审批。
|
|
202
400
|
|
|
203
|
-
|
|
401
|
+
三种配置方式:
|
|
402
|
+
|
|
403
|
+
| 写法 | 含义 |
|
|
404
|
+
| ------------------------------------------------ | ---------------------------------------------------------------------- |
|
|
405
|
+
| `"review": true` | 全局开启——所有文档写入后都需要审批 |
|
|
406
|
+
| `"review": false` | 全局关闭——所有文档写入后无需审批 |
|
|
407
|
+
| `"review": { "prd": true, "tech-design": true }` | 按文档类型逐一控制——只有指定为 `true` 的需要审批,未列出的回退到下一层 |
|
|
408
|
+
|
|
409
|
+
`dev` 工作流默认审批的文档:
|
|
410
|
+
|
|
411
|
+
| 文档 | 默认 review |
|
|
412
|
+
| ----------- | ----------- |
|
|
413
|
+
| `prd` | `true` |
|
|
414
|
+
| `prototype` | `true` |
|
|
415
|
+
| 其余 13 种 | `false` |
|
|
416
|
+
|
|
417
|
+
通过 `review_set_rule` 工具设置,或直接编辑 `overrides.json`。
|
|
418
|
+
|
|
419
|
+
### 角色配置(agent / model)
|
|
420
|
+
|
|
421
|
+
为角色指定执行的 agent 类型和模型:
|
|
204
422
|
|
|
205
423
|
```json
|
|
206
424
|
{
|
|
207
|
-
"
|
|
208
|
-
"
|
|
209
|
-
"
|
|
210
|
-
"
|
|
425
|
+
"roles": {
|
|
426
|
+
"architect": {
|
|
427
|
+
"agent": "claude-code",
|
|
428
|
+
"model": "claude-sonnet-4-20250514"
|
|
211
429
|
}
|
|
212
430
|
}
|
|
213
431
|
}
|
|
214
432
|
```
|
|
215
433
|
|
|
434
|
+
- `agent` — 执行该角色的 AI 编程助手类型
|
|
435
|
+
- `model` — 覆盖角色的默认模型(角色提示词 frontmatter 中定义了默认模型等级:`strong` / `medium`)
|
|
436
|
+
|
|
437
|
+
通过 `guard_set` 工具设置,或直接编辑 `overrides.json`。
|
|
438
|
+
|
|
439
|
+
### 能力映射(capabilities)
|
|
440
|
+
|
|
441
|
+
角色提示词中声明了该角色需要的抽象能力(如"读取文件"、"分析代码库"),能力映射将这些抽象能力绑定到具体的工具实现。
|
|
442
|
+
|
|
443
|
+
`dev` 工作流各角色的能力:
|
|
444
|
+
|
|
445
|
+
<details>
|
|
446
|
+
<summary><strong>PM</strong>(10 个能力)</summary>
|
|
447
|
+
|
|
448
|
+
| 能力 ID | 描述 |
|
|
449
|
+
| ---------------------- | -------------------------- |
|
|
450
|
+
| `clarify-requirements` | 与用户沟通,理解和澄清需求 |
|
|
451
|
+
| `assess-scale` | 评估项目规模 |
|
|
452
|
+
| `write-prd` | 撰写需求文档 |
|
|
453
|
+
| `write-user-stories` | 撰写用户故事和验收标准 |
|
|
454
|
+
| `write-fsd` | 撰写功能规格文档 |
|
|
455
|
+
| `write-prototype` | 创建高保真 HTML 原型 |
|
|
456
|
+
| `write-project-plan` | 撰写项目计划 |
|
|
457
|
+
| `dispatch-tasks` | 将任务分派给开发者 |
|
|
458
|
+
| `track-progress` | 跟踪项目进度和阶段状态 |
|
|
459
|
+
| `accept-deliver` | 验收成果并输出复盘记录 |
|
|
460
|
+
|
|
216
461
|
</details>
|
|
217
462
|
|
|
218
463
|
<details>
|
|
219
|
-
<summary><strong
|
|
464
|
+
<summary><strong>架构师</strong>(6 个能力)</summary>
|
|
220
465
|
|
|
221
|
-
|
|
466
|
+
| 能力 ID | 描述 |
|
|
467
|
+
| ----------------------- | -------------------- |
|
|
468
|
+
| `analyze-codebase` | 阅读理解现有代码结构 |
|
|
469
|
+
| `write-tech-design` | 撰写技术方案文档 |
|
|
470
|
+
| `write-data-model` | 设计数据模型 |
|
|
471
|
+
| `write-api-design` | 设计 API 接口 |
|
|
472
|
+
| `write-task-breakdown` | 拆解开发任务 |
|
|
473
|
+
| `write-risk-assessment` | 评估技术风险 |
|
|
222
474
|
|
|
223
|
-
|
|
224
|
-
codex mcp add harmonia -- harmonia
|
|
225
|
-
```
|
|
475
|
+
</details>
|
|
226
476
|
|
|
227
|
-
|
|
477
|
+
<details>
|
|
478
|
+
<summary><strong>开发者</strong>(3 个能力)</summary>
|
|
228
479
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
480
|
+
| 能力 ID | 描述 |
|
|
481
|
+
| ------------------ | ------------------------------------ |
|
|
482
|
+
| `implement-code` | 按任务拆解编码实现功能 |
|
|
483
|
+
| `write-unit-tests` | 为关键逻辑编写单元测试 |
|
|
484
|
+
| `ensure-quality` | 代码质量保障(lint、类型检查、规范) |
|
|
233
485
|
|
|
234
486
|
</details>
|
|
235
487
|
|
|
236
488
|
<details>
|
|
237
|
-
<summary><strong
|
|
489
|
+
<summary><strong>测试</strong>(3 个能力)</summary>
|
|
238
490
|
|
|
239
|
-
|
|
491
|
+
| 能力 ID | 描述 |
|
|
492
|
+
| ------------------- | ------------------ |
|
|
493
|
+
| `write-test-plan` | 撰写测试计划 |
|
|
494
|
+
| `execute-tests` | 编写并执行测试用例 |
|
|
495
|
+
| `write-test-report` | 撰写测试报告 |
|
|
496
|
+
|
|
497
|
+
</details>
|
|
498
|
+
|
|
499
|
+
配置示例——将架构师的"分析代码库"能力绑定到 MCP filesystem 工具:
|
|
240
500
|
|
|
241
501
|
```json
|
|
242
502
|
{
|
|
243
|
-
"
|
|
244
|
-
"
|
|
245
|
-
"
|
|
503
|
+
"roles": {
|
|
504
|
+
"architect": {
|
|
505
|
+
"capabilities": {
|
|
506
|
+
"analyze-codebase": {
|
|
507
|
+
"type": "mcp",
|
|
508
|
+
"tool": "read_file",
|
|
509
|
+
"server": "filesystem",
|
|
510
|
+
"notes": "用于读取项目源码文件"
|
|
511
|
+
}
|
|
512
|
+
}
|
|
246
513
|
}
|
|
247
514
|
}
|
|
248
515
|
}
|
|
249
516
|
```
|
|
250
517
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
```bash
|
|
254
|
-
mcporter config add harmonia --command harmonia --scope home
|
|
255
|
-
```
|
|
518
|
+
通过 `guard_set` 工具设置,或直接编辑 `overrides.json`。
|
|
256
519
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
## 全局目录
|
|
520
|
+
## 数据目录
|
|
260
521
|
|
|
261
522
|
Harmonia 的所有项目数据存储在平台特定的数据目录中(通过 [agent-kit](https://github.com/anthropics/agent-kit) 管理),**不会在项目源码目录中创建任何文件**。
|
|
262
523
|
|
|
263
|
-
全局目录结构:
|
|
264
|
-
|
|
265
524
|
```
|
|
266
525
|
<data_dir>/harmonia/
|
|
526
|
+
├── registry.json # 项目注册表
|
|
267
527
|
├── overrides.json # 全局覆盖配置
|
|
268
528
|
├── .workflows/ # 自定义工作流目录
|
|
269
529
|
│ └── <workflow_name>/
|
|
@@ -271,68 +531,27 @@ Harmonia 的所有项目数据存储在平台特定的数据目录中(通过 [
|
|
|
271
531
|
│ ├── roles/
|
|
272
532
|
│ └── schemas/
|
|
273
533
|
├── <project_name>/
|
|
274
|
-
│ ├──
|
|
275
|
-
│ ├──
|
|
276
|
-
│ ├──
|
|
277
|
-
│ ├──
|
|
278
|
-
│ │ ├──
|
|
279
|
-
│ │ ├──
|
|
280
|
-
│ │ ├──
|
|
534
|
+
│ ├── overrides.json # 项目级覆盖配置(跨迭代共享)
|
|
535
|
+
│ ├── iter-1/ # 第 1 次迭代
|
|
536
|
+
│ │ ├── state.json # 项目状态(当前阶段、规模等)
|
|
537
|
+
│ │ ├── sessions.json # 会话记录
|
|
538
|
+
│ │ ├── dispatches.json # 调度记录
|
|
539
|
+
│ │ ├── reviews.json # 审批记录
|
|
540
|
+
│ │ ├── steps.json # 文档步骤进度
|
|
541
|
+
│ │ └── docs/ # 文档产出物
|
|
542
|
+
│ │ ├── prd.md
|
|
543
|
+
│ │ ├── prd.requirements.json
|
|
544
|
+
│ │ └── ...
|
|
545
|
+
│ ├── iter-2/ # 第 2 次迭代
|
|
281
546
|
│ │ └── ...
|
|
282
|
-
│
|
|
283
|
-
│ └── dispatch/ # 调度记录
|
|
547
|
+
│ └── ...
|
|
284
548
|
└── <other_project>/
|
|
285
549
|
└── ...
|
|
286
550
|
```
|
|
287
551
|
|
|
288
|
-
##
|
|
289
|
-
|
|
290
|
-
Harmonia 使用两层工作流查找机制:
|
|
291
|
-
|
|
292
|
-
1. **自定义目录**(高优先级):`<data_dir>/harmonia/.workflows/<name>/`
|
|
293
|
-
2. **内置目录**(回退):`<package>/workflows/<name>/`
|
|
294
|
-
|
|
295
|
-
自定义工作流会覆盖同名的内置工作流。内置工作流随包版本自动更新,零维护。
|
|
296
|
-
|
|
297
|
-
### 创建自定义工作流
|
|
298
|
-
|
|
299
|
-
在全局数据目录下创建 `.workflows/<name>/` 目录:
|
|
300
|
-
|
|
301
|
-
```
|
|
302
|
-
<data_dir>/harmonia/.workflows/
|
|
303
|
-
└── my-workflow/
|
|
304
|
-
├── workflow.json # 工作流定义(阶段、角色、文档类型)
|
|
305
|
-
├── roles/ # 角色提示词
|
|
306
|
-
│ ├── pm.md
|
|
307
|
-
│ └── ...
|
|
308
|
-
└── schemas/ # 文档 Schema(可选)
|
|
309
|
-
├── prd.json
|
|
310
|
-
├── prd.requirements.json # 步骤 Schema
|
|
311
|
-
└── ...
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
### workflow.json 格式
|
|
315
|
-
|
|
316
|
-
```json
|
|
317
|
-
{
|
|
318
|
-
"name": "my-workflow",
|
|
319
|
-
"description": "自定义工作流描述",
|
|
320
|
-
"version": "1.0.0",
|
|
321
|
-
"author": "your-name",
|
|
322
|
-
"phases": [ ... ],
|
|
323
|
-
"docs": { ... }
|
|
324
|
-
}
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
可参考内置 `dev` 工作流(`node_modules/@s_s/harmonia/workflows/dev/`)作为模板。
|
|
328
|
-
|
|
329
|
-
### project_init 工作流选择
|
|
330
|
-
|
|
331
|
-
- 只有一个可用工作流时自动选中
|
|
332
|
-
- 多个可用工作流时,需在 `project_init` 中指定 `workflow` 参数
|
|
333
|
-
- 示例:`project_init(project_name="my-app", project_dir="/path/to/src", workflow="my-workflow")`
|
|
552
|
+
## 开发
|
|
334
553
|
|
|
335
|
-
|
|
554
|
+
### 项目结构
|
|
336
555
|
|
|
337
556
|
```
|
|
338
557
|
harmonia/
|
|
@@ -344,15 +563,15 @@ harmonia/
|
|
|
344
563
|
│ │ ├── types.ts # 核心类型定义
|
|
345
564
|
│ │ ├── state.ts # 项目状态管理
|
|
346
565
|
│ │ ├── docs.ts # 文档读写
|
|
347
|
-
│ │ ├── schema.ts #
|
|
348
|
-
│ │ ├── steps.ts #
|
|
566
|
+
│ │ ├── schema.ts # Schema 校验引擎
|
|
567
|
+
│ │ ├── steps.ts # 步骤管理
|
|
349
568
|
│ │ ├── dispatch.ts # 角色调度
|
|
350
569
|
│ │ ├── registry.ts # 项目注册表
|
|
351
570
|
│ │ ├── workflow.ts # 工作流加载
|
|
352
|
-
│ │ ├── overrides.ts #
|
|
571
|
+
│ │ ├── overrides.ts # 覆盖配置管理
|
|
353
572
|
│ │ └── reviews.ts # 文档审批
|
|
354
|
-
│ ├── tools/ #
|
|
355
|
-
│ ├── hooks/ #
|
|
573
|
+
│ ├── tools/ # MCP 工具注册
|
|
574
|
+
│ ├── hooks/ # Agent Hook 系统
|
|
356
575
|
│ │ ├── content.ts # Hook 内容生成
|
|
357
576
|
│ │ ├── install.ts # Hook 安装逻辑
|
|
358
577
|
│ │ ├── claude-code.ts # Claude Code hook 适配
|
|
@@ -366,30 +585,19 @@ harmonia/
|
|
|
366
585
|
│ ├── workflow.json # 工作流定义
|
|
367
586
|
│ ├── roles/ # 角色提示词 (pm.md, architect.md, ...)
|
|
368
587
|
│ └── schemas/ # 文档 + 步骤 Schema
|
|
369
|
-
|
|
370
|
-
└── .dev-logs/ # 开发日志
|
|
588
|
+
└── tests/ # 测试
|
|
371
589
|
```
|
|
372
590
|
|
|
373
|
-
|
|
591
|
+
### 开发命令
|
|
374
592
|
|
|
375
593
|
```bash
|
|
376
|
-
# 安装依赖
|
|
377
|
-
npm
|
|
378
|
-
|
|
379
|
-
#
|
|
380
|
-
npm run
|
|
381
|
-
|
|
382
|
-
#
|
|
383
|
-
npm run dev
|
|
384
|
-
|
|
385
|
-
# 运行测试
|
|
386
|
-
npm test
|
|
387
|
-
|
|
388
|
-
# 运行测试(watch 模式)
|
|
389
|
-
npm run test:watch
|
|
390
|
-
|
|
391
|
-
# 代码格式化
|
|
392
|
-
npm run prettier:fix
|
|
594
|
+
npm install # 安装依赖
|
|
595
|
+
npm run build # 构建
|
|
596
|
+
npm run dev # 开发模式(watch)
|
|
597
|
+
npm test # 运行测试
|
|
598
|
+
npm run test:watch # 测试 watch 模式
|
|
599
|
+
npm run prettier:fix # 代码格式化
|
|
600
|
+
npm run release # 发布版本
|
|
393
601
|
```
|
|
394
602
|
|
|
395
603
|
## License
|