aigroup-workflow 1.2.5 → 1.2.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.
- package/{.dev-agents/ella/PERSONA.md → .claude/agents/ella.md} +37 -16
- package/.claude/agents/get-current-datetime.md +1 -3
- package/.claude/agents/init-architect.md +2 -4
- package/.claude/agents/jarvis.md +193 -0
- package/{.dev-agents/kyle/PERSONA.md → .claude/agents/kyle.md} +168 -127
- package/.claude/commands/init-project.md +2 -4
- package/.dev-agents/shared/.workflow-state +5 -0
- package/CLAUDE.md +15 -37
- package/README.md +83 -55
- package/cli/commands/update.mjs +2 -2
- package/cli/utils/scaffold.mjs +14 -31
- package/docs/ARCHITECTURE.md +13 -10
- package/docs/dispatch-rules.md +18 -24
- package/package.json +1 -1
- package/scripts/harness/lint-delegation.sh +164 -0
- package/scripts/harness/lint-structure.sh +7 -7
- package/scripts/harness/run-all.sh +1 -0
- package/skills/max/workflow/subagent-driven-development/SKILL.md +10 -30
- package/.claude/commands/ella-design.md +0 -36
- package/.claude/commands/ella-handoff.md +0 -36
- package/.claude/commands/ella-prototype.md +0 -36
- package/.claude/commands/ella-spec.md +0 -36
- package/.claude/commands/ella-style.md +0 -36
- package/.claude/commands/ella.md +0 -37
- package/.claude/commands/jarvis.md +0 -71
- package/.claude/commands/kyle.md +0 -87
- package/.dev-agents/jarvis/PERSONA.md +0 -178
package/CLAUDE.md
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 角色:麦克斯 (Max) — 项目经理
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
你是麦克斯 (Max),项目经理兼用户个人助理。你不直接写代码、做设计或做测试。
|
|
6
|
-
你的价值在于理解需求、驱动工作流、整合成果。
|
|
3
|
+
你是麦克斯 (Max),项目经理兼用户个人助理。不直接写代码、做设计或做测试,价值在于需求分析、任务拆解、驱动工作流、进度跟踪、风险预警、熵管理,以及通过 Agent 工具派遣子代理整合成果。
|
|
7
4
|
|
|
8
5
|
## 全局铁律
|
|
9
6
|
|
|
@@ -24,13 +21,15 @@
|
|
|
24
21
|
需求收集 → 需求验证 → 方案设计 → 任务拆解 → 实施开发 → 测试验证 → 文档更新 → 分支收尾
|
|
25
22
|
```
|
|
26
23
|
|
|
27
|
-
**禁止**:design 完成前派遣
|
|
24
|
+
**禁止**:design 完成前派遣 Jarvis;planning 完成前派遣 Jarvis;development 完成前派遣 Kyle
|
|
28
25
|
|
|
29
26
|
状态机命令 → `scripts/harness/workflow-state.sh`(status/init/advance/gate/reset/exempt)
|
|
30
27
|
|
|
31
|
-
|
|
28
|
+
简单任务豁免:纯知识问答、单行修改、配置调整、文档笔误。判断标准:涉及 2+ 文件或设计决策就走完整管道。
|
|
29
|
+
|
|
30
|
+
**豁免 ≠ 自己动手**:豁免的是 8 阶段流程,不是派遣规则。涉及代码、设计、测试或验证,无论任务大小,必须派遣对应子 Agent(Jarvis/Ella/Kyle)执行,禁止在当前对话中角色切换。
|
|
32
31
|
|
|
33
|
-
|
|
32
|
+
## 知识库地图
|
|
34
33
|
|
|
35
34
|
| 需要了解 | 查阅 |
|
|
36
35
|
|---------|------|
|
|
@@ -43,18 +42,6 @@
|
|
|
43
42
|
| 技术债追踪 | `docs/tech-debt-tracker.md` |
|
|
44
43
|
| Harness 转向循环 | `docs/steering-loop.md` |
|
|
45
44
|
|
|
46
|
-
## 强制工作流管道(8 阶段)
|
|
47
|
-
|
|
48
|
-
```
|
|
49
|
-
需求收集 → 需求验证 → 方案设计 → 任务拆解 → 实施开发 → 测试验证 → 文档更新 → 分支收尾
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
详见 → `docs/workflow-pipeline.md`
|
|
53
|
-
|
|
54
|
-
简单任务豁免:纯知识问答、单行修改、配置调整、文档笔误。判断标准:涉及 2+ 文件或设计决策就走完整管道。
|
|
55
|
-
|
|
56
|
-
**豁免 ≠ 自己动手**:简单任务豁免的是 8 阶段流程,不是派遣规则。只要涉及代码、设计、测试或验证,无论任务大小,Max **必须派遣对应子 Agent** 执行(Jarvis 写代码、Ella 做设计、Kyle 做测试和代码验证),禁止在当前对话中直接操作。
|
|
57
|
-
|
|
58
45
|
## 工作流技能
|
|
59
46
|
|
|
60
47
|
| 阶段 | 技能 | 路径 |
|
|
@@ -82,27 +69,18 @@
|
|
|
82
69
|
|
|
83
70
|
## 团队派遣(Agent 工具)
|
|
84
71
|
|
|
85
|
-
|
|
72
|
+
三人已注册为 Claude Code 原生子代理(`.claude/agents/{ella,jarvis,kyle}.md`),用 `subagent_type` 派遣:
|
|
86
73
|
|
|
87
74
|
| 成员 | 角色 | 派遣方式 |
|
|
88
75
|
|------|------|---------|
|
|
89
|
-
| 艾拉 (Ella) | UI/UX 设计师 | `Agent({
|
|
90
|
-
| 贾维斯 (Jarvis) | 全栈开发 | `Agent({
|
|
91
|
-
| 凯尔 (Kyle) | 质量保障(测试+验证) | `Agent({
|
|
92
|
-
|
|
93
|
-
详见 → `docs/dispatch-rules.md`
|
|
94
|
-
|
|
95
|
-
## Harness 传感器
|
|
96
|
-
|
|
97
|
-
开发完成后,Agent 应运行 `scripts/harness/run-all.sh` 自检。
|
|
98
|
-
传感器覆盖:结构完整性 + 文档健康 + 工作流产物 + **流程合规**
|
|
76
|
+
| 艾拉 (Ella) | UI/UX 设计师 | `Agent({ subagent_type: "ella", description: "...", prompt: "..." })` |
|
|
77
|
+
| 贾维斯 (Jarvis) | 全栈开发 | `Agent({ subagent_type: "jarvis", description: "...", prompt: "..." })` |
|
|
78
|
+
| 凯尔 (Kyle) | 质量保障(测试+验证) | `Agent({ subagent_type: "kyle", description: "...", prompt: "..." })` |
|
|
99
79
|
|
|
100
|
-
|
|
80
|
+
产物工作区:`.dev-agents/shared/`(`designs/ tasks/ reviews/ templates/`)
|
|
101
81
|
|
|
102
|
-
|
|
82
|
+
## Harness 自检
|
|
103
83
|
|
|
104
|
-
|
|
84
|
+
开发完成后运行 `scripts/harness/run-all.sh`,按 [FAIL] 提示的 [FIX] 修复直至全部通过。
|
|
105
85
|
|
|
106
|
-
-
|
|
107
|
-
- **不能做**:直接写项目代码、做 UI 设计、做测试验收、做代码验证
|
|
108
|
-
- **铁律**:任何涉及代码/设计/测试/验证的操作,不论任务大小,必须派遣子 Agent(Jarvis/Ella/Kyle)执行
|
|
86
|
+
<!-- aiGroup 框架边界(init-architect 保留区至此,以下由 /init-project 生成) -->
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](LICENSE)
|
|
5
5
|
[](https://claude.ai/code)
|
|
6
6
|
|
|
7
|
-
> 单入口 AI
|
|
7
|
+
> 单入口 AI 团队:Max 指挥官接收需求,按需自动派遣原生子代理(Ella/Jarvis/Kyle)执行。
|
|
8
8
|
> 内置门禁式工作流:需求澄清 → 方案设计 → 实现计划 → 子代理开发 → 两阶段审查 → 分支收尾。
|
|
9
9
|
|
|
10
10
|
## 快速开始
|
|
@@ -65,7 +65,9 @@ claude
|
|
|
65
65
|
|
|
66
66
|
### 三种使用模式
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
**模式一:自然语言描述(推荐)**
|
|
69
|
+
|
|
70
|
+
直接描述需求即可,Max 会根据任务类型自动调用对应子代理(通过 `Agent({subagent_type: ...})`):
|
|
69
71
|
|
|
70
72
|
```
|
|
71
73
|
你: 帮我做一个用户认证系统
|
|
@@ -75,17 +77,28 @@ claude
|
|
|
75
77
|
→ Max 收尾集成
|
|
76
78
|
```
|
|
77
79
|
|
|
78
|
-
|
|
80
|
+
**模式二:指定角色派遣(明确意图时)**
|
|
81
|
+
|
|
82
|
+
在描述中点名角色,Max 会跳过判断直接派遣:
|
|
79
83
|
|
|
80
84
|
```
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
/init-project 我的项目 # 初始化项目 AI 上下文
|
|
85
|
-
/git-commit # 智能 Git 提交
|
|
85
|
+
你: 让 Ella 设计一个登录页面
|
|
86
|
+
你: 找 Jarvis 实现用户认证 API
|
|
87
|
+
你: 请 Kyle 审查用户模块代码
|
|
86
88
|
```
|
|
87
89
|
|
|
88
|
-
|
|
90
|
+
子代理身份、门控、技能加载都由 `.claude/agents/<role>.md` 自动注入,Max 无需在 prompt 里重复 PERSONA。
|
|
91
|
+
|
|
92
|
+
**模式三:项目级斜杠命令(工具类操作)**
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
/init-project 我的项目 # 初始化项目 AI 上下文(根级+模块级 CLAUDE.md)
|
|
96
|
+
/git-commit # 智能 Git 提交(Conventional Commits)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
这是仅有的两个保留的 slash 命令——都是项目工具,不是角色派遣。角色派遣统一走 Agent 工具。
|
|
100
|
+
|
|
101
|
+
**模式四:简单问答(轻量任务)**
|
|
89
102
|
|
|
90
103
|
```
|
|
91
104
|
你: 这个项目用的什么技术栈?
|
|
@@ -96,23 +109,27 @@ claude
|
|
|
96
109
|
|
|
97
110
|
## 团队成员
|
|
98
111
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
|
102
|
-
|
|
103
|
-
|
|
|
104
|
-
|
|
|
112
|
+
三名子代理以 Claude Code **原生子代理**形式定义在 `.claude/agents/`,Max 作为宿主会话通过 Agent 工具调用:
|
|
113
|
+
|
|
114
|
+
| 成员 | 角色 | 定义位置 | 技能数 | 负责什么 |
|
|
115
|
+
|------|------|---------|--------|---------|
|
|
116
|
+
| 麦克斯 (Max) | 项目经理 | `CLAUDE.md`(宿主会话) | 16 | 需求分析、任务拆解、进度协调、工作流管道 |
|
|
117
|
+
| 艾拉 (Ella) | UI/UX 设计师 | `.claude/agents/ella.md` | 10 | 界面设计、交互原型、前端框架参考 |
|
|
118
|
+
| 贾维斯 (Jarvis) | 全栈开发 | `.claude/agents/jarvis.md` | 45 | 架构设计、前后端编码、API、DevOps |
|
|
119
|
+
| 凯尔 (Kyle) | 质量保障 | `.claude/agents/kyle.md` | 7 | 代码审查、测试策略、安全审计、E2E |
|
|
120
|
+
|
|
121
|
+
> "Max" 是宿主 Claude 会话的代号,不是独立 agent——所有规则由 `CLAUDE.md` 加载。
|
|
122
|
+
> Ella/Jarvis/Kyle 是**真子代理**,拥有独立 context window、工具集和门控。
|
|
105
123
|
|
|
106
|
-
##
|
|
124
|
+
## 可用斜杠命令
|
|
107
125
|
|
|
108
126
|
| 命令 | 说明 |
|
|
109
127
|
|------|------|
|
|
110
|
-
| `/
|
|
111
|
-
| `/jarvis <任务>` | 派遣开发 — 编码、技术方案、Bug 修复 |
|
|
112
|
-
| `/kyle <任务>` | 派遣质量保障 — 代码审查、功能验收 |
|
|
113
|
-
| `/init-project <名称>` | 初始化项目 AI 上下文 — 生成根级和模块级 CLAUDE.md 索引 |
|
|
128
|
+
| `/init-project <名称>` | 初始化项目 AI 上下文 — 生成根级和模块级 `CLAUDE.md`,保留 aiGroup 框架 |
|
|
114
129
|
| `/git-commit` | 智能 Git 提交 — 分析变更、生成 Conventional Commits 信息 |
|
|
115
130
|
|
|
131
|
+
角色派遣**没有专属 slash 命令**——Claude Code 原生机制下,子代理由 `Agent({subagent_type})` 工具调用,触发方式是用户自然语言描述或明确点名角色(见上文"三种使用模式")。
|
|
132
|
+
|
|
116
133
|
## 工作流程
|
|
117
134
|
|
|
118
135
|
### 总体协作流程
|
|
@@ -150,16 +167,16 @@ sequenceDiagram
|
|
|
150
167
|
Max->>Max: 分析并拆解任务
|
|
151
168
|
|
|
152
169
|
Note over Max,Ella: 阶段一 设计
|
|
153
|
-
Max->>Ella:
|
|
154
|
-
Ella-->>Max: 设计完成
|
|
170
|
+
Max->>Ella: Agent(subagent_type=ella)
|
|
171
|
+
Ella-->>Max: 设计完成 + 压缩报告
|
|
155
172
|
|
|
156
173
|
Note over Max,Jarvis: 阶段二 开发
|
|
157
|
-
Max->>Jarvis:
|
|
158
|
-
Jarvis-->>Max: 开发完成
|
|
174
|
+
Max->>Jarvis: Agent(subagent_type=jarvis) + 设计稿路径
|
|
175
|
+
Jarvis-->>Max: 开发完成 + 验证证据
|
|
159
176
|
|
|
160
177
|
Note over Max,Kyle: 阶段三 验收
|
|
161
|
-
Max->>Kyle:
|
|
162
|
-
Kyle-->>Max:
|
|
178
|
+
Max->>Kyle: Agent(subagent_type=kyle) + 代码路径
|
|
179
|
+
Kyle-->>Max: 两阶段审查结论
|
|
163
180
|
|
|
164
181
|
Max-->>User: 汇总全流程结果
|
|
165
182
|
```
|
|
@@ -169,21 +186,21 @@ sequenceDiagram
|
|
|
169
186
|
```mermaid
|
|
170
187
|
flowchart LR
|
|
171
188
|
subgraph CTX["独立上下文窗口"]
|
|
172
|
-
MaxCtx["Max\
|
|
173
|
-
EllaCtx["Ella\n
|
|
174
|
-
JarvisCtx["Jarvis\n
|
|
175
|
-
KyleCtx["Kyle\n
|
|
189
|
+
MaxCtx["Max\nCLAUDE.md 注入"]
|
|
190
|
+
EllaCtx["Ella\n.claude/agents/ella.md"]
|
|
191
|
+
JarvisCtx["Jarvis\n.claude/agents/jarvis.md"]
|
|
192
|
+
KyleCtx["Kyle\n.claude/agents/kyle.md"]
|
|
176
193
|
end
|
|
177
194
|
|
|
178
|
-
subgraph SHARED["共享产物目录"]
|
|
195
|
+
subgraph SHARED["共享产物目录 .dev-agents/shared/"]
|
|
179
196
|
Tasks[("tasks/")]
|
|
180
197
|
Designs[("designs/")]
|
|
181
198
|
Reviews[("reviews/")]
|
|
182
199
|
end
|
|
183
200
|
|
|
184
|
-
MaxCtx -->|"
|
|
185
|
-
MaxCtx -->|"
|
|
186
|
-
MaxCtx -->|"
|
|
201
|
+
MaxCtx -->|"Agent 派遣\n任务+产物路径"| EllaCtx
|
|
202
|
+
MaxCtx -->|"Agent 派遣\n任务+设计稿路径"| JarvisCtx
|
|
203
|
+
MaxCtx -->|"Agent 派遣\n代码路径+规格"| KyleCtx
|
|
187
204
|
|
|
188
205
|
EllaCtx -->|写入设计稿| Designs
|
|
189
206
|
JarvisCtx -->|读取设计稿| Designs
|
|
@@ -195,7 +212,7 @@ flowchart LR
|
|
|
195
212
|
style KyleCtx fill:#FF9800,color:#fff
|
|
196
213
|
```
|
|
197
214
|
|
|
198
|
-
>
|
|
215
|
+
> **关键规则**:子代理之间不能直接通信,所有上下文由 Max 在 `Agent` 调用的 prompt 中注入;跨代理协作通过 `.dev-agents/shared/` 目录下的文件实现。子代理身份(PERSONA/门控/技能清单)不需要注入,由 Claude Code 从 agent 定义文件自动加载。
|
|
199
216
|
|
|
200
217
|
## 工作流技能(门禁式管道)
|
|
201
218
|
|
|
@@ -237,7 +254,7 @@ Stage 1 不通过 → 修复 → 重审 → 通过后才进入 Stage 2。
|
|
|
237
254
|
```mermaid
|
|
238
255
|
flowchart TB
|
|
239
256
|
subgraph MAX["Max 项目经理"]
|
|
240
|
-
M1["workflow\n8阶段工作流管道"]
|
|
257
|
+
M1["workflow\n8 阶段工作流管道"]
|
|
241
258
|
M2["PM 辅助技能\n竞品分析/PRD/会议纪要等"]
|
|
242
259
|
end
|
|
243
260
|
|
|
@@ -297,10 +314,13 @@ npx aigroup-workflow init
|
|
|
297
314
|
|
|
298
315
|
```bash
|
|
299
316
|
# 必须复制
|
|
300
|
-
CLAUDE.md #
|
|
317
|
+
CLAUDE.md # 宿主会话规则(Max 的"宪法")
|
|
301
318
|
docs/ # 知识库
|
|
302
|
-
.claude/
|
|
303
|
-
.
|
|
319
|
+
.claude/agents/ # 原生子代理定义(ella/jarvis/kyle/init-architect/...)
|
|
320
|
+
.claude/commands/ # 工具类斜杠命令(init-project/git-commit)
|
|
321
|
+
.claude/hooks.json # Hooks 配置
|
|
322
|
+
.claude/settings.json # 权限配置
|
|
323
|
+
.dev-agents/shared/ # 子代理协作产物目录(空目录结构)
|
|
304
324
|
scripts/harness/ # Harness 传感器
|
|
305
325
|
|
|
306
326
|
# 按需复制
|
|
@@ -322,7 +342,7 @@ bash scripts/harness/run-all.sh
|
|
|
322
342
|
|
|
323
343
|
```
|
|
324
344
|
aiGroup/
|
|
325
|
-
├── CLAUDE.md #
|
|
345
|
+
├── CLAUDE.md # 宿主会话规则(Max 的"宪法")
|
|
326
346
|
├── package.json # npm 包配置
|
|
327
347
|
├── bin/aigroup.mjs # CLI 入口
|
|
328
348
|
├── cli/ # CLI 实现
|
|
@@ -332,23 +352,23 @@ aiGroup/
|
|
|
332
352
|
├── .claude/ # Claude Code 配置
|
|
333
353
|
│ ├── settings.json # 权限设置
|
|
334
354
|
│ ├── hooks.json # Harness Hooks
|
|
335
|
-
│
|
|
336
|
-
│
|
|
337
|
-
│
|
|
338
|
-
│
|
|
339
|
-
│ ├──
|
|
340
|
-
│
|
|
341
|
-
├── .
|
|
342
|
-
│
|
|
343
|
-
│
|
|
344
|
-
|
|
345
|
-
│ └──
|
|
355
|
+
│ ├── commands/ # 工具类斜杠命令
|
|
356
|
+
│ │ ├── init-project.md # /init-project
|
|
357
|
+
│ │ └── git-commit.md # /git-commit
|
|
358
|
+
│ └── agents/ # 原生子代理定义(Agent({subagent_type}) 调用)
|
|
359
|
+
│ ├── ella.md # 艾拉(UI/UX 设计师)
|
|
360
|
+
│ ├── jarvis.md # 贾维斯(全栈开发)
|
|
361
|
+
│ ├── kyle.md # 凯尔(质量保障)
|
|
362
|
+
│ ├── init-architect.md # 项目初始化架构师
|
|
363
|
+
│ └── get-current-datetime.md
|
|
364
|
+
├── .dev-agents/shared/ # 角色间协作产物工作区
|
|
365
|
+
│ └── tasks/ designs/ reviews/ templates/
|
|
346
366
|
├── skills/ # 技能库(按角色分组)
|
|
347
367
|
│ ├── max/ # PM: workflow(11) + 辅助技能(5)
|
|
348
368
|
│ ├── ella/ # 设计: UI/UX + 前端框架(10)
|
|
349
369
|
│ ├── jarvis/ # 开发: 45 Skills
|
|
350
370
|
│ └── kyle/ # QA: 7 Skills
|
|
351
|
-
└── scripts/harness/ # Harness
|
|
371
|
+
└── scripts/harness/ # Harness 传感器套件(5 个传感器)
|
|
352
372
|
```
|
|
353
373
|
|
|
354
374
|
## Harness Engineering
|
|
@@ -364,6 +384,16 @@ Agent = Model + Harness
|
|
|
364
384
|
| **推理型反馈** | AI 审查 | Kyle 两阶段审查 |
|
|
365
385
|
| **熵管理** | 防退化 | entropy-management + 质量评分 |
|
|
366
386
|
|
|
387
|
+
### 传感器套件(5 个)
|
|
388
|
+
|
|
389
|
+
| 传感器 | 覆盖 |
|
|
390
|
+
|-------|------|
|
|
391
|
+
| `lint-structure.sh` | 目录结构、核心文件、子代理定义 |
|
|
392
|
+
| `lint-docs.sh` | 文档健康、交叉引用有效性 |
|
|
393
|
+
| `lint-workflow-artifacts.sh` | 工作流产物完整性 |
|
|
394
|
+
| `lint-process.sh` | 流程合规检查 |
|
|
395
|
+
| `lint-delegation.sh` | 派遣契约检查(防止 prompt 重复定义子代理内容) |
|
|
396
|
+
|
|
367
397
|
```bash
|
|
368
398
|
bash scripts/harness/run-all.sh # 全量检查
|
|
369
399
|
```
|
|
@@ -377,12 +407,10 @@ bash scripts/harness/run-all.sh # 全量检查
|
|
|
377
407
|
| `aig update` | 增量更新 |
|
|
378
408
|
| `aig check` | 健康检查 |
|
|
379
409
|
| `aig status` | 工作流状态 |
|
|
380
|
-
| `/ella <任务>` | 派遣设计师 |
|
|
381
|
-
| `/jarvis <任务>` | 派遣开发 |
|
|
382
|
-
| `/kyle <任务>` | 派遣 QA |
|
|
383
410
|
| `/init-project <名称>` | 项目 AI 上下文初始化 |
|
|
384
411
|
| `/git-commit` | 智能 Git 提交 |
|
|
385
412
|
|
|
413
|
+
> 角色派遣无专属 slash 命令——自然语言描述即可,Max 通过 `Agent` 工具自动调用子代理。
|
|
386
414
|
> `aig` 是 `aigroup` 的短别名。npx 用户:`npx aigroup-workflow <命令>`。
|
|
387
415
|
|
|
388
416
|
## 致谢
|
package/cli/commands/update.mjs
CHANGED
|
@@ -31,13 +31,13 @@ export async function update(ctx) {
|
|
|
31
31
|
log.dim('将覆盖更新:')
|
|
32
32
|
log.dim(' • scripts/harness/*(传感器脚本)')
|
|
33
33
|
log.dim(' • skills/max/workflow/*(工作流技能)')
|
|
34
|
-
log.dim(' • .claude/commands
|
|
34
|
+
log.dim(' • .claude/commands/*(通用命令)')
|
|
35
|
+
log.dim(' • .claude/agents/*(原生子代理定义)')
|
|
35
36
|
log.dim('')
|
|
36
37
|
log.dim('不会触碰:')
|
|
37
38
|
log.dim(' • CLAUDE.md(项目入口)')
|
|
38
39
|
log.dim(' • docs/*(知识库文档)')
|
|
39
40
|
log.dim(' • .dev-agents/shared/*(工作产物)')
|
|
40
|
-
log.dim(' • .dev-agents/*/PERSONA.md(角色定义)')
|
|
41
41
|
|
|
42
42
|
if (!skipPrompt) {
|
|
43
43
|
const proceed = await confirm('确认更新?', true)
|
package/cli/utils/scaffold.mjs
CHANGED
|
@@ -56,31 +56,21 @@ export const HOOKS_FILES = [
|
|
|
56
56
|
'.claude/agents/get-current-datetime.md',
|
|
57
57
|
]
|
|
58
58
|
|
|
59
|
-
/**
|
|
59
|
+
/** 角色资产(原生子代理:`.claude/agents/{name}.md`) */
|
|
60
60
|
export const AGENT_ASSETS = {
|
|
61
61
|
jarvis: {
|
|
62
62
|
label: '贾维斯 (Jarvis) — 全栈开发工程师',
|
|
63
|
-
|
|
64
|
-
commands: ['.claude/commands/jarvis.md'],
|
|
63
|
+
agents: ['.claude/agents/jarvis.md'],
|
|
65
64
|
skills: ['skills/jarvis'],
|
|
66
65
|
},
|
|
67
66
|
ella: {
|
|
68
67
|
label: '艾拉 (Ella) — UI/UX 设计师',
|
|
69
|
-
|
|
70
|
-
commands: [
|
|
71
|
-
'.claude/commands/ella.md',
|
|
72
|
-
'.claude/commands/ella-design.md',
|
|
73
|
-
'.claude/commands/ella-handoff.md',
|
|
74
|
-
'.claude/commands/ella-prototype.md',
|
|
75
|
-
'.claude/commands/ella-spec.md',
|
|
76
|
-
'.claude/commands/ella-style.md',
|
|
77
|
-
],
|
|
68
|
+
agents: ['.claude/agents/ella.md'],
|
|
78
69
|
skills: ['skills/ella'],
|
|
79
70
|
},
|
|
80
71
|
kyle: {
|
|
81
72
|
label: '凯尔 (Kyle) — 质量保证工程师',
|
|
82
|
-
|
|
83
|
-
commands: ['.claude/commands/kyle.md'],
|
|
73
|
+
agents: ['.claude/agents/kyle.md'],
|
|
84
74
|
skills: ['skills/kyle'],
|
|
85
75
|
},
|
|
86
76
|
}
|
|
@@ -98,14 +88,9 @@ export const UPDATABLE_DIRS = [
|
|
|
98
88
|
|
|
99
89
|
export const UPDATABLE_FILES = [
|
|
100
90
|
'.claude/hooks.json',
|
|
101
|
-
'.claude/
|
|
102
|
-
'.claude/
|
|
103
|
-
'.claude/
|
|
104
|
-
'.claude/commands/ella-handoff.md',
|
|
105
|
-
'.claude/commands/ella-prototype.md',
|
|
106
|
-
'.claude/commands/ella-spec.md',
|
|
107
|
-
'.claude/commands/ella-style.md',
|
|
108
|
-
'.claude/commands/kyle.md',
|
|
91
|
+
'.claude/agents/jarvis.md',
|
|
92
|
+
'.claude/agents/ella.md',
|
|
93
|
+
'.claude/agents/kyle.md',
|
|
109
94
|
'.claude/commands/init-project.md',
|
|
110
95
|
'.claude/commands/git-commit.md',
|
|
111
96
|
'.claude/agents/init-architect.md',
|
|
@@ -246,10 +231,7 @@ export function scaffold(pkgRoot, projectRoot, options = {}) {
|
|
|
246
231
|
if (!agent) continue
|
|
247
232
|
let agentCopied = 0
|
|
248
233
|
|
|
249
|
-
for (const
|
|
250
|
-
agentCopied += copyDirRecursive(join(pkgRoot, dir), join(projectRoot, dir), { overwrite })
|
|
251
|
-
}
|
|
252
|
-
for (const file of agent.commands) {
|
|
234
|
+
for (const file of agent.agents) {
|
|
253
235
|
const ok = copySingleFile(join(pkgRoot, file), join(projectRoot, file), overwrite)
|
|
254
236
|
if (ok) agentCopied++
|
|
255
237
|
}
|
|
@@ -278,18 +260,19 @@ export function scaffoldUpdate(pkgRoot, projectRoot) {
|
|
|
278
260
|
}
|
|
279
261
|
sections.push({ name: '工作流技能 + 传感器', count: totalCopied })
|
|
280
262
|
|
|
281
|
-
//
|
|
263
|
+
// 更新命令/子代理文件(覆盖)
|
|
282
264
|
let cmdCopied = 0
|
|
283
265
|
const config = readConfig(projectRoot)
|
|
284
266
|
const agents = config?.agents || ['jarvis', 'ella', 'kyle']
|
|
267
|
+
const roleIds = new Set(['jarvis', 'ella', 'kyle'])
|
|
285
268
|
for (const file of UPDATABLE_FILES) {
|
|
286
|
-
//
|
|
287
|
-
const
|
|
288
|
-
if (
|
|
269
|
+
// 角色子代理文件:仅更新用户选中的角色
|
|
270
|
+
const m = file.match(/agents\/([\w-]+)\.md$/)
|
|
271
|
+
if (m && roleIds.has(m[1]) && !agents.includes(m[1])) continue
|
|
289
272
|
const ok = copySingleFile(join(pkgRoot, file), join(projectRoot, file), true)
|
|
290
273
|
if (ok) cmdCopied++
|
|
291
274
|
}
|
|
292
|
-
sections.push({ name: '
|
|
275
|
+
sections.push({ name: '命令/子代理文件', count: cmdCopied })
|
|
293
276
|
totalCopied += cmdCopied
|
|
294
277
|
|
|
295
278
|
return { totalCopied, sections }
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -19,15 +19,11 @@ ai-agent-workflowGroup/
|
|
|
19
19
|
│ ├── QUALITY_SCORE.md # 质量评分追踪
|
|
20
20
|
│ ├── tech-debt-tracker.md # 技术债追踪
|
|
21
21
|
│ └── steering-loop.md # 转向循环机制
|
|
22
|
-
├── .dev-agents/
|
|
23
|
-
│ ├──
|
|
24
|
-
│ ├──
|
|
25
|
-
│ ├──
|
|
26
|
-
│ └──
|
|
27
|
-
│ ├── tasks/ # 实现计划
|
|
28
|
-
│ ├── designs/ # 设计方案与设计稿
|
|
29
|
-
│ ├── reviews/ # 审查报告
|
|
30
|
-
│ └── templates/ # 文档模板
|
|
22
|
+
├── .dev-agents/shared/ # Agent 间协作产物工作区
|
|
23
|
+
│ ├── tasks/ # 实现计划
|
|
24
|
+
│ ├── designs/ # 设计方案与设计稿
|
|
25
|
+
│ ├── reviews/ # 审查报告
|
|
26
|
+
│ └── templates/ # 文档模板
|
|
31
27
|
├── skills/ # 技能库
|
|
32
28
|
│ ├── max/ # PM 技能
|
|
33
29
|
│ │ ├── workflow/ # 工作流技能(8 阶段管道 + 横切技能)
|
|
@@ -44,7 +40,14 @@ ai-agent-workflowGroup/
|
|
|
44
40
|
│ └── *.sh # 维护脚本
|
|
45
41
|
└── .claude/ # Claude Code 配置
|
|
46
42
|
├── settings.json # 权限配置
|
|
47
|
-
|
|
43
|
+
├── hooks.json # Hook 配置
|
|
44
|
+
├── commands/ # 通用斜杠命令(/init-project /git-commit)
|
|
45
|
+
└── agents/ # 原生子代理定义
|
|
46
|
+
├── ella.md # 艾拉(UI/UX 设计师)
|
|
47
|
+
├── jarvis.md # 贾维斯(全栈开发)
|
|
48
|
+
├── kyle.md # 凯尔(质量保障)
|
|
49
|
+
├── init-architect.md # 项目初始化架构师
|
|
50
|
+
└── get-current-datetime.md
|
|
48
51
|
```
|
|
49
52
|
|
|
50
53
|
## 核心设计决策
|
package/docs/dispatch-rules.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
```
|
|
6
6
|
❌ 角色切换(禁止):
|
|
7
|
-
Max
|
|
7
|
+
Max 在当前对话里"变成" Jarvis 写代码
|
|
8
8
|
→ 这只是同一个 Claude 在角色扮演,没有上下文隔离
|
|
9
9
|
|
|
10
10
|
✅ Agent 工具派遣(正确):
|
|
@@ -16,41 +16,33 @@
|
|
|
16
16
|
|
|
17
17
|
## 团队成员
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|------|------|---------|---------|
|
|
21
|
-
| 艾拉 (Ella) | UI/UX 设计师 | `.dev-agents/ella/PERSONA.md` | 页面设计、交互原型、设计规范 |
|
|
22
|
-
| 贾维斯 (Jarvis) | 全栈开发 | `.dev-agents/jarvis/PERSONA.md` | 前后端编码、技术方案、Bug 修复 |
|
|
23
|
-
| 凯尔 (Kyle) | 质量保障 | `.dev-agents/kyle/PERSONA.md` | 代码审查、测试验证、安全审计 |
|
|
19
|
+
三人已注册为 Claude Code **原生子代理**,定义文件位于 `.claude/agents/`:
|
|
24
20
|
|
|
25
|
-
|
|
21
|
+
| 成员 | 角色 | 原生子代理 | 派遣场景 |
|
|
22
|
+
|------|------|-----------|---------|
|
|
23
|
+
| 艾拉 (Ella) | UI/UX 设计师 | `.claude/agents/ella.md` | 页面设计、交互原型、设计规范 |
|
|
24
|
+
| 贾维斯 (Jarvis) | 全栈开发 | `.claude/agents/jarvis.md` | 前后端编码、技术方案、Bug 修复 |
|
|
25
|
+
| 凯尔 (Kyle) | 质量保障 | `.claude/agents/kyle.md` | 代码审查、测试验证、安全审计 |
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
## 派遣方式
|
|
28
28
|
|
|
29
|
-
Max 在工作流管道中驱动时,使用 **Agent
|
|
29
|
+
Max 在工作流管道中驱动时,使用 **Agent 工具的 `subagent_type` 参数** 派遣子代理。子代理定义文件里已包含角色身份、门控检查、技能加载规则和报告规范,无需在 prompt 里重复。
|
|
30
30
|
|
|
31
31
|
```
|
|
32
32
|
Agent({
|
|
33
|
-
|
|
33
|
+
subagent_type: "jarvis", // ella / jarvis / kyle
|
|
34
|
+
description: "Jarvis: 实现登录接口",
|
|
34
35
|
prompt: "
|
|
35
|
-
先读取 `.dev-agents/[角色]/PERSONA.md` 了解你的角色。
|
|
36
|
-
|
|
37
|
-
[前置门控检查]
|
|
38
36
|
[任务全文]
|
|
39
|
-
[
|
|
37
|
+
[上下文信息:设计文档路径、实现计划路径等]
|
|
40
38
|
[完成标准]
|
|
41
39
|
"
|
|
42
40
|
})
|
|
43
41
|
```
|
|
44
42
|
|
|
45
|
-
### 用户直接派遣(快捷命令)
|
|
46
|
-
|
|
47
|
-
用户可以直接使用 `/jarvis`、`/ella`、`/kyle` 命令。这些命令会将任务注入当前对话。
|
|
48
|
-
|
|
49
|
-
**注意**:`/jarvis` 等快捷命令是用户手动使用的。Max 在工作流中派遣时,必须使用 Agent 工具,不是 `/jarvis` 命令。
|
|
50
|
-
|
|
51
43
|
## 派遣铁律
|
|
52
44
|
|
|
53
|
-
1. **
|
|
45
|
+
1. **subagent_type 派遣** — Max 必须通过 `subagent_type` 参数指定角色,禁止用通用 Agent + 读 PERSONA 的老模式
|
|
54
46
|
2. **单一职责** — 设计找艾拉、编码找贾维斯、审查找凯尔,不混派
|
|
55
47
|
3. **可并行则并行** — 独立任务的 Agent 调用可以并行发起
|
|
56
48
|
4. **管道顺序** — 需求收集 → 需求验证 → 方案设计 → 任务拆解 → 开发 → 测试验证 → 文档更新
|
|
@@ -63,9 +55,11 @@ Agent 之间不能直接通信。Max 负责在 Agent 工具的 prompt 中注入
|
|
|
63
55
|
|
|
64
56
|
| 派遣对象 | prompt 必须注入的内容 |
|
|
65
57
|
|---------|---------------------|
|
|
66
|
-
| Jarvis(开发) |
|
|
67
|
-
| Kyle(审查) |
|
|
68
|
-
| Ella(设计) |
|
|
58
|
+
| Jarvis(开发) | 任务全文 + 设计文档路径 + 实现计划路径 |
|
|
59
|
+
| Kyle(审查) | 审查规格 + 代码文件路径 + 实现计划路径 |
|
|
60
|
+
| Ella(设计) | 需求文档 + 现有设计规范 |
|
|
61
|
+
|
|
62
|
+
> 门控检查、身份定义、技能加载由子代理自身执行,Max 不必重复注入。
|
|
69
63
|
|
|
70
64
|
## 产出规范
|
|
71
65
|
|