mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-28 09:23:08 +08:00
feat: Add 4 new team skills with Generator-Critic loops, shared memory, and dynamic pipelines
Create team-brainstorm (ideator↔challenger GC, quick/deep/full pipelines), team-testing (generator↔executor GC, L1/L2/L3 test layers), team-iterdev (developer↔reviewer GC, task-ledger sprint tracking), and team-uidesign (designer↔reviewer GC, CP-9 dual-track with sync points). Each team includes SKILL.md router, 5 roles, and team-config.json.
This commit is contained in:
372
.claude/skills/team-iterdev/SKILL.md
Normal file
372
.claude/skills/team-iterdev/SKILL.md
Normal file
@@ -0,0 +1,372 @@
|
||||
---
|
||||
name: team-iterdev
|
||||
description: Unified team skill for iterative development team. All roles invoke this skill with --role arg for role-specific execution. Triggers on "team iterdev".
|
||||
allowed-tools: TeamCreate(*), TeamDelete(*), SendMessage(*), TaskCreate(*), TaskUpdate(*), TaskList(*), TaskGet(*), Task(*), AskUserQuestion(*), Read(*), Write(*), Edit(*), Bash(*), Glob(*), Grep(*)
|
||||
---
|
||||
|
||||
# Team IterDev
|
||||
|
||||
持续迭代开发团队技能。通过 Generator-Critic 循环(developer↔reviewer,最多3轮)、任务账本(task-ledger.json)实时进度追踪、共享记忆(Sprint间学习)和动态管道选择,实现增量交付开发。所有团队成员通过 `--role=xxx` 路由。
|
||||
|
||||
## Architecture Overview
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────┐
|
||||
│ Skill(skill="team-iterdev", args="--role=xxx") │
|
||||
└───────────────────┬──────────────────────────────┘
|
||||
│ Role Router
|
||||
┌───────────┬───┼───────────┬───────────┐
|
||||
↓ ↓ ↓ ↓ ↓
|
||||
┌──────────┐┌─────────┐┌─────────┐┌──────┐┌────────┐
|
||||
│coordinator││architect││developer││tester││reviewer│
|
||||
│ roles/ ││ roles/ ││ roles/ ││roles/││ roles/ │
|
||||
└──────────┘└─────────┘└─────────┘└──────┘└────────┘
|
||||
```
|
||||
|
||||
## Role Router
|
||||
|
||||
### Input Parsing
|
||||
|
||||
```javascript
|
||||
const args = "$ARGUMENTS"
|
||||
const roleMatch = args.match(/--role[=\s]+(\w+)/)
|
||||
|
||||
if (!roleMatch) {
|
||||
throw new Error("Missing --role argument. Available roles: coordinator, architect, developer, tester, reviewer")
|
||||
}
|
||||
|
||||
const role = roleMatch[1]
|
||||
const teamName = args.match(/--team[=\s]+([\w-]+)/)?.[1] || "iterdev"
|
||||
```
|
||||
|
||||
### Role Dispatch
|
||||
|
||||
```javascript
|
||||
const VALID_ROLES = {
|
||||
"coordinator": { file: "roles/coordinator.md", prefix: null },
|
||||
"architect": { file: "roles/architect.md", prefix: "DESIGN" },
|
||||
"developer": { file: "roles/developer.md", prefix: "DEV" },
|
||||
"tester": { file: "roles/tester.md", prefix: "VERIFY" },
|
||||
"reviewer": { file: "roles/reviewer.md", prefix: "REVIEW" }
|
||||
}
|
||||
|
||||
if (!VALID_ROLES[role]) {
|
||||
throw new Error(`Unknown role: ${role}. Available: ${Object.keys(VALID_ROLES).join(', ')}`)
|
||||
}
|
||||
|
||||
Read(VALID_ROLES[role].file)
|
||||
```
|
||||
|
||||
### Available Roles
|
||||
|
||||
| Role | Task Prefix | Responsibility | Role File |
|
||||
|------|-------------|----------------|-----------|
|
||||
| `coordinator` | N/A | Sprint规划、积压管理、任务账本维护 | [roles/coordinator.md](roles/coordinator.md) |
|
||||
| `architect` | DESIGN-* | 技术设计、任务分解、架构决策 | [roles/architect.md](roles/architect.md) |
|
||||
| `developer` | DEV-* | 代码实现、增量交付 | [roles/developer.md](roles/developer.md) |
|
||||
| `tester` | VERIFY-* | 测试执行、修复循环、回归检测 | [roles/tester.md](roles/tester.md) |
|
||||
| `reviewer` | REVIEW-* | 代码审查、质量评分、改进建议 | [roles/reviewer.md](roles/reviewer.md) |
|
||||
|
||||
## Shared Infrastructure
|
||||
|
||||
### Role Isolation Rules
|
||||
|
||||
#### Output Tagging(强制)
|
||||
|
||||
```javascript
|
||||
SendMessage({ content: `## [${role}] ...`, summary: `[${role}] ...` })
|
||||
mcp__ccw-tools__team_msg({ summary: `[${role}] ...` })
|
||||
```
|
||||
|
||||
#### Coordinator 隔离
|
||||
|
||||
| 允许 | 禁止 |
|
||||
|------|------|
|
||||
| Sprint 规划 (AskUserQuestion) | ❌ 直接编写代码 |
|
||||
| 创建任务链 (TaskCreate) | ❌ 直接执行测试/审查 |
|
||||
| 维护任务账本 (task-ledger.json) | ❌ 调用 code-developer 等实现类 subagent |
|
||||
| 监控进度 | ❌ 绕过 worker 自行完成 |
|
||||
|
||||
#### Worker 隔离
|
||||
|
||||
| 允许 | 禁止 |
|
||||
|------|------|
|
||||
| 处理自己前缀的任务 | ❌ 处理其他角色前缀的任务 |
|
||||
| 读写 shared-memory.json (自己的字段) | ❌ 为其他角色创建任务 |
|
||||
| SendMessage 给 coordinator | ❌ 直接与其他 worker 通信 |
|
||||
|
||||
### Team Configuration
|
||||
|
||||
```javascript
|
||||
const TEAM_CONFIG = {
|
||||
name: "iterdev",
|
||||
sessionDir: ".workflow/.team/IDS-{slug}-{date}/",
|
||||
msgDir: ".workflow/.team-msg/iterdev/",
|
||||
sharedMemory: "shared-memory.json",
|
||||
taskLedger: "task-ledger.json"
|
||||
}
|
||||
```
|
||||
|
||||
### Task Ledger (创新模式 — 任务账本)
|
||||
|
||||
实时追踪所有 Sprint 任务进度:
|
||||
|
||||
```javascript
|
||||
// task-ledger.json structure
|
||||
{
|
||||
"sprint_id": "sprint-1",
|
||||
"sprint_goal": "...",
|
||||
"tasks": [
|
||||
{
|
||||
"id": "DEV-001",
|
||||
"title": "...",
|
||||
"owner": "developer",
|
||||
"status": "completed", // pending | in_progress | completed | blocked
|
||||
"started_at": "...",
|
||||
"completed_at": "...",
|
||||
"gc_rounds": 0, // Generator-Critic iterations
|
||||
"review_score": null, // reviewer 评分
|
||||
"test_pass_rate": null // tester 通过率
|
||||
}
|
||||
],
|
||||
"metrics": {
|
||||
"total": 5,
|
||||
"completed": 3,
|
||||
"in_progress": 1,
|
||||
"blocked": 0,
|
||||
"velocity": 3 // tasks completed this sprint
|
||||
}
|
||||
}
|
||||
|
||||
// Coordinator updates ledger at each task transition
|
||||
function updateLedger(sessionFolder, taskId, updates) {
|
||||
const ledger = JSON.parse(Read(`${sessionFolder}/task-ledger.json`))
|
||||
const task = ledger.tasks.find(t => t.id === taskId)
|
||||
if (task) Object.assign(task, updates)
|
||||
// Recalculate metrics
|
||||
ledger.metrics.completed = ledger.tasks.filter(t => t.status === 'completed').length
|
||||
ledger.metrics.in_progress = ledger.tasks.filter(t => t.status === 'in_progress').length
|
||||
Write(`${sessionFolder}/task-ledger.json`, JSON.stringify(ledger, null, 2))
|
||||
}
|
||||
```
|
||||
|
||||
### Shared Memory (Sprint间学习)
|
||||
|
||||
```javascript
|
||||
// shared-memory.json — accumulated across sprints
|
||||
{
|
||||
"sprint_history": [
|
||||
{
|
||||
"sprint_id": "sprint-1",
|
||||
"what_worked": ["..."],
|
||||
"what_failed": ["..."],
|
||||
"patterns_learned": ["..."]
|
||||
}
|
||||
],
|
||||
"architecture_decisions": [],
|
||||
"implementation_context": [],
|
||||
"review_feedback_trends": []
|
||||
}
|
||||
```
|
||||
|
||||
### Message Bus
|
||||
|
||||
```javascript
|
||||
mcp__ccw-tools__team_msg({
|
||||
operation: "log", team: teamName, from: role, to: "coordinator",
|
||||
type: "<type>", summary: `[${role}] <summary>`, ref: "<file_path>"
|
||||
})
|
||||
```
|
||||
|
||||
| Role | Types |
|
||||
|------|-------|
|
||||
| coordinator | `sprint_started`, `gc_loop_trigger`, `sprint_complete`, `task_unblocked`, `error`, `shutdown` |
|
||||
| architect | `design_ready`, `design_revision`, `error` |
|
||||
| developer | `dev_complete`, `dev_progress`, `error` |
|
||||
| tester | `verify_passed`, `verify_failed`, `fix_required`, `error` |
|
||||
| reviewer | `review_passed`, `review_revision`, `review_critical`, `error` |
|
||||
|
||||
### CLI Fallback
|
||||
|
||||
```javascript
|
||||
Bash(`ccw team log --team "${teamName}" --from "${role}" --to "coordinator" --type "<type>" --summary "<summary>" --json`)
|
||||
```
|
||||
|
||||
### Task Lifecycle (All Worker Roles)
|
||||
|
||||
```javascript
|
||||
const tasks = TaskList()
|
||||
const myTasks = tasks.filter(t =>
|
||||
t.subject.startsWith(`${VALID_ROLES[role].prefix}-`) &&
|
||||
t.owner === role && t.status === 'pending' && t.blockedBy.length === 0
|
||||
)
|
||||
if (myTasks.length === 0) return
|
||||
const task = TaskGet({ taskId: myTasks[0].id })
|
||||
TaskUpdate({ taskId: task.id, status: 'in_progress' })
|
||||
// Phase 2-4: Role-specific
|
||||
// Phase 5: Report + Loop
|
||||
```
|
||||
|
||||
## Three-Pipeline Architecture
|
||||
|
||||
```
|
||||
Patch (简单修复):
|
||||
DEV-001 → VERIFY-001
|
||||
|
||||
Sprint (标准特性):
|
||||
DESIGN-001 → DEV-001 → [VERIFY-001 + REVIEW-001](parallel)
|
||||
|
||||
Multi-Sprint (大型特性):
|
||||
Sprint 1: DESIGN-001 → DEV-001 → DEV-002(incremental) → VERIFY-001 → DEV-fix → REVIEW-001
|
||||
Sprint 2: DESIGN-002(refined) → DEV-003 → VERIFY-002 → REVIEW-002
|
||||
...
|
||||
```
|
||||
|
||||
### Generator-Critic Loop
|
||||
|
||||
developer ↔ reviewer 循环,最多3轮:
|
||||
|
||||
```
|
||||
DEV → REVIEW → (if review.critical_count > 0 || review.score < 7)
|
||||
→ DEV-fix → REVIEW-2 → (if still issues) → DEV-fix-2 → REVIEW-3
|
||||
→ (max 3 rounds, then accept with warning)
|
||||
```
|
||||
|
||||
### Multi-Sprint Dynamic Downgrade
|
||||
|
||||
```javascript
|
||||
// If Sprint N is progressing well, downgrade Sprint N+1 complexity
|
||||
if (sprintMetrics.velocity >= expectedVelocity && sprintMetrics.review_avg >= 8) {
|
||||
// Next sprint: skip detailed design, use simplified pipeline
|
||||
nextPipeline = 'sprint' // downgrade from multi-sprint
|
||||
}
|
||||
```
|
||||
|
||||
## Unified Session Directory
|
||||
|
||||
```
|
||||
.workflow/.team/IDS-{slug}-{YYYY-MM-DD}/
|
||||
├── team-session.json
|
||||
├── shared-memory.json # Sprint间学习: what_worked / what_failed / patterns_learned
|
||||
├── task-ledger.json # 实时任务进度账本
|
||||
├── design/ # Architect output
|
||||
│ ├── design-001.md
|
||||
│ └── task-breakdown.json
|
||||
├── code/ # Developer tracking
|
||||
│ └── dev-log.md
|
||||
├── verify/ # Tester output
|
||||
│ └── verify-001.json
|
||||
└── review/ # Reviewer output
|
||||
└── review-001.md
|
||||
```
|
||||
|
||||
## Coordinator Spawn Template
|
||||
|
||||
```javascript
|
||||
TeamCreate({ team_name: teamName })
|
||||
|
||||
// Architect
|
||||
Task({
|
||||
subagent_type: "general-purpose",
|
||||
team_name: teamName,
|
||||
name: "architect",
|
||||
prompt: `你是 team "${teamName}" 的 ARCHITECT。
|
||||
当你收到 DESIGN-* 任务时,调用 Skill(skill="team-iterdev", args="--role=architect") 执行。
|
||||
当前需求: ${taskDescription}
|
||||
约束: ${constraints}
|
||||
|
||||
## 角色准则(强制)
|
||||
- 你只能处理 DESIGN-* 前缀的任务
|
||||
- 所有输出必须带 [architect] 标识前缀
|
||||
- 仅与 coordinator 通信
|
||||
|
||||
## 消息总线(必须)
|
||||
每次 SendMessage 前,先调用 mcp__ccw-tools__team_msg 记录。
|
||||
|
||||
工作流程:
|
||||
1. TaskList → 找到 DESIGN-* 任务
|
||||
2. Skill(skill="team-iterdev", args="--role=architect") 执行
|
||||
3. team_msg log + SendMessage
|
||||
4. TaskUpdate completed → 检查下一个任务`
|
||||
})
|
||||
|
||||
// Developer
|
||||
Task({
|
||||
subagent_type: "general-purpose",
|
||||
team_name: teamName,
|
||||
name: "developer",
|
||||
prompt: `你是 team "${teamName}" 的 DEVELOPER。
|
||||
当你收到 DEV-* 任务时,调用 Skill(skill="team-iterdev", args="--role=developer") 执行。
|
||||
当前需求: ${taskDescription}
|
||||
|
||||
## 角色准则(强制)
|
||||
- 你只能处理 DEV-* 前缀的任务
|
||||
- 所有输出必须带 [developer] 标识前缀
|
||||
|
||||
## 消息总线(必须)
|
||||
每次 SendMessage 前,先调用 mcp__ccw-tools__team_msg 记录。
|
||||
|
||||
工作流程:
|
||||
1. TaskList → 找到 DEV-* 任务
|
||||
2. Skill(skill="team-iterdev", args="--role=developer") 执行
|
||||
3. team_msg log + SendMessage
|
||||
4. TaskUpdate completed → 检查下一个任务`
|
||||
})
|
||||
|
||||
// Tester
|
||||
Task({
|
||||
subagent_type: "general-purpose",
|
||||
team_name: teamName,
|
||||
name: "tester",
|
||||
prompt: `你是 team "${teamName}" 的 TESTER。
|
||||
当你收到 VERIFY-* 任务时,调用 Skill(skill="team-iterdev", args="--role=tester") 执行。
|
||||
当前需求: ${taskDescription}
|
||||
|
||||
## 角色准则(强制)
|
||||
- 你只能处理 VERIFY-* 前缀的任务
|
||||
- 所有输出必须带 [tester] 标识前缀
|
||||
|
||||
## 消息总线(必须)
|
||||
每次 SendMessage 前,先调用 mcp__ccw-tools__team_msg 记录。
|
||||
|
||||
工作流程:
|
||||
1. TaskList → 找到 VERIFY-* 任务
|
||||
2. Skill(skill="team-iterdev", args="--role=tester") 执行
|
||||
3. team_msg log + SendMessage
|
||||
4. TaskUpdate completed → 检查下一个任务`
|
||||
})
|
||||
|
||||
// Reviewer
|
||||
Task({
|
||||
subagent_type: "general-purpose",
|
||||
team_name: teamName,
|
||||
name: "reviewer",
|
||||
prompt: `你是 team "${teamName}" 的 REVIEWER。
|
||||
当你收到 REVIEW-* 任务时,调用 Skill(skill="team-iterdev", args="--role=reviewer") 执行。
|
||||
当前需求: ${taskDescription}
|
||||
|
||||
## 角色准则(强制)
|
||||
- 你只能处理 REVIEW-* 前缀的任务
|
||||
- 所有输出必须带 [reviewer] 标识前缀
|
||||
|
||||
## 消息总线(必须)
|
||||
每次 SendMessage 前,先调用 mcp__ccw-tools__team_msg 记录。
|
||||
|
||||
工作流程:
|
||||
1. TaskList → 找到 REVIEW-* 任务
|
||||
2. Skill(skill="team-iterdev", args="--role=reviewer") 执行
|
||||
3. team_msg log + SendMessage
|
||||
4. TaskUpdate completed → 检查下一个任务`
|
||||
})
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
| Scenario | Resolution |
|
||||
|----------|------------|
|
||||
| Unknown --role value | Error with available role list |
|
||||
| Missing --role arg | Error with usage hint |
|
||||
| Role file not found | Error with expected path |
|
||||
| GC loop exceeds 3 rounds | Accept with warning, record in shared memory |
|
||||
| Sprint velocity drops below 50% | Coordinator alerts user, suggests scope reduction |
|
||||
| Task ledger corrupted | Rebuild from TaskList state |
|
||||
Reference in New Issue
Block a user