aigroup-workflow 2.0.1 → 2.0.2

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.
@@ -335,6 +335,8 @@ export function scaffold(pkgRoot, projectRoot, options = {}) {
335
335
  }
336
336
 
337
337
  // 5. Skill 模块(manifest 驱动)
338
+ // Claude Code 启动自动加载位置:.claude/skills/<name>/SKILL.md
339
+ // Codex 端按文件路径手动加载,沿用根 skills/<name>/SKILL.md
338
340
  const allSkillModules = getSkillModules(pkgRoot)
339
341
  const selectedIds = modules || getDefaultSkillModuleIds(pkgRoot)
340
342
 
@@ -347,8 +349,19 @@ export function scaffold(pkgRoot, projectRoot, options = {}) {
347
349
  if (!modTargets.some(t => targets.includes(t))) continue
348
350
 
349
351
  let modCopied = 0
350
- for (const path of mod.paths) {
351
- modCopied += copyDirRecursive(join(pkgRoot, path), join(projectRoot, path), { overwrite })
352
+ for (const skillPath of mod.paths) {
353
+ const src = join(pkgRoot, skillPath)
354
+ // skills/<name> → 根据 target 决定落盘位置
355
+ // Claude target:.claude/skills/<name>(Claude Code 自动加载)
356
+ // Codex target:skills/<name>(文件路径手动加载)
357
+ if (targets.includes('claude')) {
358
+ const claudeDest = join(projectRoot, skillPath.replace(/^skills\//, '.claude/skills/'))
359
+ modCopied += copyDirRecursive(src, claudeDest, { overwrite })
360
+ }
361
+ if (targets.includes('codex')) {
362
+ const codexDest = join(projectRoot, skillPath)
363
+ modCopied += copyDirRecursive(src, codexDest, { overwrite })
364
+ }
352
365
  }
353
366
  sections.push({
354
367
  name: `skill 模块: ${modId} — ${mod.description || ''}`,
@@ -420,18 +433,21 @@ export function scaffoldUpdate(pkgRoot, projectRoot) {
420
433
  totalCopied += codexCopied
421
434
  }
422
435
 
423
- // Skill 模块
436
+ // Skill 模块(按 target 分流:claude → .claude/skills/,codex → skills/)
424
437
  const allSkillModules = getSkillModules(pkgRoot)
425
438
  for (const modId of modules) {
426
439
  const mod = allSkillModules.find(m => m.id === modId)
427
440
  if (!mod) continue
428
441
  let modCopied = 0
429
- for (const path of mod.paths) {
430
- modCopied += copyDirRecursive(
431
- join(pkgRoot, path),
432
- join(projectRoot, path),
433
- { overwrite: true }
434
- )
442
+ for (const skillPath of mod.paths) {
443
+ const src = join(pkgRoot, skillPath)
444
+ if (targets.includes('claude')) {
445
+ const claudeDest = join(projectRoot, skillPath.replace(/^skills\//, '.claude/skills/'))
446
+ modCopied += copyDirRecursive(src, claudeDest, { overwrite: true })
447
+ }
448
+ if (targets.includes('codex')) {
449
+ modCopied += copyDirRecursive(src, join(projectRoot, skillPath), { overwrite: true })
450
+ }
435
451
  }
436
452
  sections.push({ name: `skill 模块: ${modId}`, count: modCopied })
437
453
  totalCopied += modCopied
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aigroup-workflow",
3
- "version": "2.0.1",
3
+ "version": "2.0.2",
4
4
  "description": "AI 团队协作框架 — 通过角色派遣、工作流管道和 Harness 传感器驱动 AI 协作开发",
5
5
  "type": "module",
6
6
  "bin": {
@@ -22,7 +22,7 @@ AI Agent 会复制仓库中已有的模式——包括不好的模式。随着
22
22
  ## 触发条件
23
23
 
24
24
  - 完成 5 个以上任务后(定期维护)
25
- - Kyle 审查中反复出现同类问题(模式漂移信号)
25
+ - `code-reviewer` 审查中反复出现同类问题(模式漂移信号)
26
26
  - 用户主动要求代码库健康检查
27
27
  - 怀疑文档与代码不一致
28
28
  - 新成员加入前(确保仓库状态良好)
@@ -22,7 +22,7 @@ description: 当所有实现任务完成并通过审查后使用。验证测试
22
22
 
23
23
  在使用本技能之前,必须满足:
24
24
  - 所有实现任务已完成
25
- - Kyle 的两阶段审查(规格 + 质量)已通过
25
+ - `code-reviewer` 双阶段审查(Stage 1 规格 + Stage 2 代码质量)已通过
26
26
  - 最终整体审查已通过
27
27
 
28
28
  ## 流程
@@ -5,33 +5,31 @@ description: 当有实现计划且任务相互独立时使用。使用 Agent 工
5
5
 
6
6
  # 子代理驱动开发
7
7
 
8
- 使用 **Agent 工具** 按实现计划逐任务派遣新的隔离子代理(Jarvis)执行,每个任务完成后由审查子代理(Kyle)进行两阶段审查。
8
+ 按实现计划逐任务派遣独立子代理执行(实现 + 测试),每任务完成后由 `code-reviewer` 执行两阶段审查。
9
9
 
10
10
  ## 关键概念:真正的子代理 vs 角色切换
11
11
 
12
12
  ```
13
13
  ❌ 错误方式(角色切换):
14
- 主会话 在当前对话里"假装变成 Jarvis"然后开始写代码
15
- 共享上下文、无隔离、主会话 的项目管理视角被污染
14
+ 主会话在当前对话里"假装变成实现 agent"然后开始写代码
15
+ 共享上下文、无隔离、协调视角被污染
16
16
 
17
17
  ✅ 正确方式(Agent 工具派遣):
18
- 主会话 调用 Agent({subagent_type: "jarvis", ...}) → 创建独立子代理
19
- 子代理有自己的上下文、技能和门控
20
- 子代理完成后返回结果给 主会话 主会话 继续协调
18
+ 主会话调用 Agent({ subagent_type: "tdd-guide", ... }) → 创建独立子代理
19
+ 子代理有自己的上下文与工具权限
20
+ 子代理完成后返回结果主会话继续协调
21
21
  ```
22
22
 
23
- **铁律:主会话 自己绝不写代码。所有开发/审查工作必须通过 Agent 工具委派给隔离的子代理(`.claude/agents/{ella,jarvis,kyle}.md`)。**
23
+ **铁律:主会话不亲自写代码 / 做审查 / 跑测试。所有这些工作通过 Agent 工具委派给隔离的子代理(详见 `.claude/agents/`)。**
24
24
 
25
25
  ## 铁律
26
26
 
27
- ```
28
- 1. 使用 Agent 工具派遣,不是角色切换。主会话 不写代码。
27
+ 1. 使用 Agent 工具派遣,不是角色切换
29
28
  2. 每个任务一个全新子代理,禁止复用上下文
30
- 3. 两阶段审查顺序不可颠倒:先规格符合性,再代码质量
31
- 4. 审查不通过 = 修复 + 重新审查,不得跳过
29
+ 3. 两阶段审查顺序不可颠倒:先规格符合性(Stage 1),再代码质量(Stage 2)
30
+ 4. 审查不通过 = 修复 + 重审,不得跳过
32
31
  5. 禁止并行派遣多个实现子代理(避免冲突)
33
- 6. 不让子代理自己读计划文件,由 主会话 提取任务全文注入 prompt
34
- ```
32
+ 6. 不让子代理自己读计划文件,由主会话提取任务全文注入 prompt
35
33
 
36
34
  ## 流程
37
35
 
@@ -40,171 +38,136 @@ description: 当有实现计划且任务相互独立时使用。使用 Agent 工
40
38
 
41
39
  ┌──────────── 每个任务循环 ────────────┐
42
40
  │ │
43
- │ Agent 工具派遣 Jarvis(含完整任务) │
41
+ │ Agent 派遣实现 agent(含完整任务) │
44
42
  │ ↓ │
45
- Jarvis 实现、测试、提交、自检
43
+ 实现 agent:实现 + 测试 + 自检
46
44
  │ ↓ │
47
- │ Agent 工具派遣 Kyle:规格符合性审查
48
- ├─ 不通过 Agent 派遣 Jarvis 修复
49
- └─ 通过
50
- Agent 工具派遣 Kyle:代码质量审查
51
- │ ├─ 不通过 → Agent 派遣 Jarvis 修复
52
- │ └─ 通过 ↓
45
+ │ Agent 派遣 code-reviewer
46
+ (单次响应输出 Stage 1 + Stage 2)
47
+ ├─ Stage 1 不通过 → 派遣实现修复
48
+ └─ Stage 1 通过 ↓
49
+ │ ├─ Stage 2 不通过 → 派遣实现修复
50
+ │ └─ Stage 2 通过 ↓
53
51
  │ 标记任务完成 │
54
52
  │ │
55
53
  └───────────────────────────────────────┘
56
54
 
57
- 所有任务完成 → 推进到 testing 阶段
55
+ 所有任务完成 → 进入测试 / 文档更新 phase
58
56
  ```
59
57
 
60
- ## 派遣 Jarvis 实现子代理 — 具体操作
58
+ ## 派遣实现子代理
61
59
 
62
- 主会话 必须使用 **Agent 工具** 派遣 Jarvis。以下是具体的调用方式:
60
+ 按任务类型选择 agent:
63
61
 
64
- ### 步骤 1:准备 prompt
62
+ | 任务类型 | 派遣 |
63
+ |---------|------|
64
+ | TDD 流程(先写失败测试)| `tdd-guide` |
65
+ | 构建 / 类型 / 依赖错误 | `build-error-resolver` |
66
+ | 死代码清理 / 重构 | `refactor-cleaner` |
67
+ | 文档更新 | `doc-updater` |
68
+ | 关键浏览器路径 | `e2e-runner` |
69
+ | 其他实现工作 | 主对话直接做(不需要切 agent) |
65
70
 
66
- Jarvis 子代理已在 `.claude/agents/jarvis.md` 里定义了身份、门控、必读技能和报告规范,prompt 只需注入**任务本身和上下文**:
71
+ ### Prompt 模板
67
72
 
68
- ```
69
- prompt 模板:
73
+ agent 身份 / 工具 / 输出格式已在 `.claude/agents/<name>.md` frontmatter 注入,prompt 只写**任务**和**上下文**:
70
74
 
75
+ ```
71
76
  ## 任务
72
- [此处粘贴从实现计划中提取的完整任务文本,包含:
73
- - 要修改的文件和路径
74
- - 完整代码
75
- - 测试代码
76
- - 验证命令和预期输出]
77
+ [从实现计划中粘贴该任务全文:要改的文件 / 完整代码 / 测试 / 验证命令]
77
78
 
78
79
  ## 上下文
79
80
  - 该任务在整体计划中的位置:第 N/M 个任务
80
- - 设计文档路径:.orchestration/<session>/architect/YYYY-MM-DD-xxx-design.md
81
- - 实现计划路径:.orchestration/<session>/planner/YYYY-MM-DD-xxx-plan.md
82
-
83
- ## 工作规范
84
- - 遵循 TDD:先写失败测试 → 确认失败 → 写最小实现 → 确认通过 → 提交
85
- - 参照实现计划中的验收条件逐项确认
86
- ```
87
-
88
- ### 步骤 2:调用 Agent 工具
81
+ - session:<session 名>
82
+ - 设计文档路径:.orchestration/<session>/architect/handoff.md
83
+ - 实现计划路径:.orchestration/<session>/planner/handoff.md
89
84
 
90
- ```
91
- Agent({
92
- subagent_type: "jarvis",
93
- description: "Jarvis: [任务简述]",
94
- prompt: "[上面组装好的 prompt]"
95
- })
85
+ ## 验收
86
+ - 测试全绿(命令 + 输出)
87
+ - 改动文件在 handoff 中列出
96
88
  ```
97
89
 
98
- ### 步骤 3:处理返回结果
90
+ ### 处理返回
99
91
 
100
- 子代理完成后会返回结果给 主会话。主会话 根据状态处理:
92
+ | 状态 | 主会话动作 |
93
+ |------|-----------|
94
+ | **DONE** | 派 `code-reviewer` 审查 |
95
+ | **DONE_WITH_CONCERNS** | 先评估疑虑再决定 |
96
+ | **NEEDS_CONTEXT** | 补上下文,重新派遣 |
97
+ | **BLOCKED** | 评估阻塞原因(见下) |
101
98
 
102
- | 状态 | 主会话 的处理方式 |
103
- |------|-------------|
104
- | **DONE** | 进入审查:Agent 工具派遣 Kyle |
105
- | **DONE_WITH_CONCERNS** | 先评估疑虑,再决定是否审查 |
106
- | **NEEDS_CONTEXT** | 补充上下文,重新 Agent 派遣 |
107
- | **BLOCKED** | 评估阻塞原因(见下文) |
99
+ **BLOCKED 处理**:
108
100
 
109
- ### BLOCKED 处理
101
+ 1. 上下文不足 → 补 + 重派
102
+ 2. 任务太大 → 拆小再派
103
+ 3. 计划本身错 → 回到 `planner` 修计划
104
+ 4. **永远不要**忽略阻塞或强推
110
105
 
111
- 1. 上下文问题 → 补充上下文,重新派遣
112
- 2. 任务太大 → 拆分为更小的任务
113
- 3. 计划有问题 → 上报给用户讨论
114
- 4. **永远不要**忽略阻塞或强制重试
106
+ ## 派遣审查子代理
115
107
 
116
- ## 派遣 Kyle 审查子代理 — 具体操作
108
+ ### `code-reviewer`(双阶段一次完成)
117
109
 
118
- Kyle 子代理已在 `.claude/agents/kyle.md` 里定义了身份、门控、两阶段审查流程和报告模板,prompt 只需注入**审查基准和对象**:
119
-
120
- ### Stage 1:规格符合性审查
110
+ agent `.claude/agents/code-reviewer.md` 已规定输出格式包含 Stage 1 + Stage 2,prompt 只写**审查基准**和**对象**:
121
111
 
122
112
  ```
123
113
  Agent({
124
- subagent_type: "kyle",
125
- description: "Kyle: Stage 1 规格审查 - [功能名]",
126
- prompt: "
127
- ## Stage 1:规格符合性审查
128
-
129
- 审查基准(实现计划规格):
130
- [此处粘贴实现计划中该任务的完整规格]
131
-
132
- Jarvis 修改的文件:
133
- [此处列出 Jarvis 报告中的变更文件列表]
134
-
135
- 设计文档路径:.orchestration/<session>/architect/YYYY-MM-DD-xxx-design.md
136
-
137
- ### 检查要求
138
- - 代码是否实现了计划的每条要求?
139
- - 多做了什么?(未要求的功能 = 需要移除)
140
- - 少做了什么?(遗漏的需求 = 需要补充)
141
-
142
- ## 输出
143
- 审查报告保存到 `.orchestration/<session>/code-reviewer/YYYY-MM-DD-xxx-review.md`
144
- 结论:通过 / 不通过(附具体问题清单)
145
- "
114
+ subagent_type: "code-reviewer",
115
+ description: "Code review: [功能名]",
116
+ prompt: `
117
+ ## 审查基准(Stage 1 用)
118
+ [粘贴实现计划中该任务的完整规格]
119
+
120
+ ## 审查对象
121
+ - 实现 agent 报告的变更文件清单
122
+ - session:<session 名>
123
+ - 设计文档:.orchestration/<session>/architect/handoff.md
124
+
125
+ 主会话会把你的响应抄进 .orchestration/<session>/code-reviewer/handoff.md
126
+ 按 agent frontmatter 规定的格式输出 Stage 1 + Stage 2 + Verdict。
127
+ `
146
128
  })
147
129
  ```
148
130
 
149
- ### Stage 2:代码质量审查(Stage 1 通过后)
131
+ ### 安全敏感时追加 `security-reviewer`
132
+
133
+ 涉及 auth / 支付 / PII / 外部输入 / 加密时,追加:
150
134
 
151
135
  ```
152
136
  Agent({
153
- subagent_type: "kyle",
154
- description: "Kyle: Stage 2 质量审查 - [功能名]",
155
- prompt: "
156
- ## Stage 2:代码质量审查(Stage 1 已通过)
157
-
158
- 代码变更的 git diff:
159
- ```bash
160
- git diff HEAD~1
161
- ```
162
-
163
- ### 检查要求
164
- - 代码是否干净、可读、可维护?
165
- - 有无安全隐患?
166
- - 有无性能问题?
167
- - 测试是否充分?
168
- - 命名是否清晰?
169
-
170
- ## 输出
171
- 在 `.orchestration/<session>/code-reviewer/` 的审查报告中追加 Stage 2 结论
172
- 结论:通过 / 不通过(附问题清单和修复建议)
173
- "
137
+ subagent_type: "security-reviewer",
138
+ description: "Security review: [功能名]",
139
+ prompt: "[审查范围 + git diff 引用]"
174
140
  })
175
141
  ```
176
142
 
177
143
  ## 审查不通过的修复循环
178
144
 
179
145
  ```
180
- Kyle Stage 1 不通过
181
- 主会话 提取问题清单
182
- → Agent 派遣新的 Jarvis 子代理修复
183
- → Agent 派遣新的 Kyle 重审 Stage 1
184
-
185
- Kyle Stage 2 不通过
186
- 主会话 提取问题清单
187
- → Agent 派遣新的 Jarvis 子代理修复
188
- → Agent 派遣新的 Kyle 重审 Stage 2
146
+ Stage 1 不通过
147
+ 主会话提取问题清单
148
+ → Agent 派遣实现 agent 修复
149
+ → Agent 派遣新 code-reviewer 重审
150
+
151
+ Stage 2 不通过
152
+ 同上
189
153
  ```
190
154
 
191
- **每次修复和重审都是新的 Agent 调用**,不复用之前的子代理。
155
+ **每次修复和重审都是新的 Agent 调用**——不复用之前的子代理。
192
156
 
193
157
  ## Red Flags — 停下来
194
158
 
195
159
  | 信号 | 行动 |
196
160
  |------|------|
197
- | 主会话 自己开始写代码 | 停,使用 Agent 工具派遣 Jarvis |
198
- | 在当前对话中"变成 Jarvis" | 停,这是角色切换不是子代理 |
199
- | Stage 1 通过前开始 Stage 2 | 停,先完成规格审查 |
200
- | 审查发现问题但跳过了 | 停,Jarvis 修复后重审 |
161
+ | 主会话自己开始写代码 | 停,派遣实现 agent |
162
+ | "在当前对话中变成 X agent" | 停,这是角色切换不是子代理 |
163
+ | Stage 1 通过前开始 Stage 2 | 停,按 agent 输出格式顺序 |
164
+ | 审查发现问题但跳过 | 停,修复后重审 |
201
165
  | 同时派遣多个实现子代理 | 停,一次只能一个 |
202
- | Jarvis 报告 BLOCKED 但继续强推 | 停,评估阻塞原因 |
203
- | 没有实现计划就开始执行 | 停,先完成 writing-plans |
166
+ | 实现 agent 报告 BLOCKED 但继续强推 | 停,评估阻塞原因 |
167
+ | 没有实现计划就开始执行 | 停,先 `planner` 出计划 |
204
168
 
205
- ## 关联技能
169
+ ## 关联
206
170
 
207
- - **writing-plans** 产出实现计划(本技能的输入)
208
- - **testing** 测试验证阶段(本技能完成后的下一阶段)
209
- - **verification-before-completion** Jarvis 每个任务完成时必须验证
210
- - **systematic-debugging** — Jarvis 遇到 Bug 时使用
171
+ - 输入:`writing-plans` / `planner` 产出的实现计划
172
+ - 之后:测试验证 / 文档更新 phase
173
+ - 横切:`verification-before-completion` / `systematic-debugging`
@@ -13,13 +13,13 @@ description: 当你有了设计方案或需求规格,在动手写代码之前
13
13
 
14
14
  假设执行者是有能力的开发者,但对项目的工具链和问题域几乎一无所知,测试设计能力不强。
15
15
 
16
- **上下文**:此技能应在 brainstorming 技能完成设计批准后调用。
16
+ **上下文**:此技能在需求工程 / 方案设计完成后调用,由 `planner` agent 或主会话使用。
17
17
 
18
- **计划保存到**:`.orchestration/<session>/planner/YYYY-MM-DD-<功能名>-plan.md`
18
+ **产物**:主会话把 planner 响应写入 `.orchestration/<session>/planner/handoff.md`。
19
19
 
20
20
  ## 范围检查
21
21
 
22
- 如果设计方案覆盖了多个独立子系统,应该在 brainstorming 阶段就拆分为子项目。
22
+ 如果设计方案覆盖了多个独立子系统,应该在需求工程阶段就拆分为子项目。
23
23
  如果没有拆分,建议分成独立的计划——每个子系统一个。每个计划应能独立产出可工作、可测试的软件。
24
24
 
25
25
  ## 文件结构
@@ -57,7 +57,7 @@ description: 当你有了设计方案或需求规格,在动手写代码之前
57
57
 
58
58
  **技术栈**:[关键技术/库]
59
59
 
60
- **设计文档**:[链接到 brainstorming 产出的设计文档]
60
+ **设计文档**:`.orchestration/<session>/architect/handoff.md`
61
61
 
62
62
  ---
63
63
  ```
@@ -137,21 +137,21 @@ git commit -m "feat: 添加某功能"
137
137
 
138
138
  保存计划后,向用户提供执行选项:
139
139
 
140
- > "计划已保存到 `.orchestration/<session>/planner/<文件名>.md`。推荐执行方式:
140
+ > "计划已保存到 `.orchestration/<session>/planner/handoff.md`。推荐执行方式:
141
141
  >
142
- > **子代理驱动(推荐)** — 主会话按任务派遣 Jarvis 执行,每任务独立上下文,Kyle 两阶段审查
142
+ > **子代理驱动(推荐)** — 主会话按任务派遣实现 agent(如 `tdd-guide`)执行,每任务独立上下文,`code-reviewer` 双阶段审查
143
143
  >
144
144
  > 确认后开始执行?"
145
145
 
146
146
  **如果选择子代理驱动:**
147
- - 使用 subagent-driven-development 技能
148
- - 每任务派遣新的 Jarvis 子代理 + Kyle 两阶段审查
147
+ - 加载 `subagent-driven-development` 技能
148
+ - 每任务派遣新的实现 agent + `code-reviewer` 双阶段审查
149
149
 
150
150
  ## Red Flags — 停下来
151
151
 
152
152
  | 信号 | 行动 |
153
153
  |------|------|
154
- | 没有设计方案就开始写计划 | 停下来,先完成 brainstorming |
154
+ | 没有设计方案就开始写计划 | 停下来,先完成需求工程 / architect 设计 |
155
155
  | 任务步骤没有代码块 | 不合格,补上完整代码 |
156
156
  | 出现"待定""TODO"等占位符 | 不合格,现在就确定内容 |
157
157
  | 计划没有引用设计文档 | 在计划头补上设计文档链接 |
@@ -160,6 +160,7 @@ git commit -m "feat: 添加某功能"
160
160
 
161
161
  ## 关联技能
162
162
 
163
- - **brainstorming** — 产出设计方案(本技能的输入)
163
+ - **requirement-engineering** — 产出需求文档(本技能的输入)
164
+ - **architecture-designer** — 方案 / ADR(本技能的另一输入)
164
165
  - **subagent-driven-development** — 执行本计划(本技能的输出)
165
166
  - **verification-before-completion** — 每个任务完成时验证