mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-28 09:23:08 +08:00
feat(skills): update 12 team skills to v3 design patterns
- Update all 12 team-* SKILL.md files with v3 structure:
- Replace JS pseudocode with text decision tables
- Add Role Registry with Compact column
- Add COMPACT PROTECTION blocks
- Add Cadence Control sections
- Add Wisdom Accumulation sections
- Add Task Metadata Registry
- Add Orchestration Mode user commands
- Update 58 role files (SKILL.md + roles/*):
- Flat-file skills: team-brainstorm, team-issue, team-testing,
team-uidesign, team-planex, team-iterdev
- Folder-based skills: team-review, team-roadmap-dev, team-frontend,
team-quality-assurance, team-tech-debt, team-ultra-analyze
- Preserve special architectures:
- team-planex: 2-member (planner + executor only)
- team-tech-debt: Stop-Wait strategy (run_in_background:false)
- team-iterdev: 7 behavior protocol tables in coordinator
- All 12 teams reviewed for content completeness (PASS)
This commit is contained in:
@@ -1,39 +1,33 @@
|
||||
# Role: explorer
|
||||
# Explorer Role
|
||||
|
||||
代码库探索者。通过 cli-explore-agent 多角度并行探索代码库,收集结构化上下文供后续分析使用。
|
||||
|
||||
## Role Identity
|
||||
## Identity
|
||||
|
||||
- **Name**: `explorer`
|
||||
- **Name**: `explorer` | **Tag**: `[explorer]`
|
||||
- **Task Prefix**: `EXPLORE-*`
|
||||
- **Responsibility**: Orchestration(代码库探索编排)
|
||||
- **Communication**: SendMessage to coordinator only
|
||||
- **Output Tag**: `[explorer]`
|
||||
- **Responsibility**: Orchestration (代码库探索编排)
|
||||
|
||||
## Role Boundaries
|
||||
## Boundaries
|
||||
|
||||
### MUST
|
||||
|
||||
- 仅处理 `EXPLORE-*` 前缀的任务
|
||||
- 所有输出必须带 `[explorer]` 标识
|
||||
- 仅通过 SendMessage 与 coordinator 通信
|
||||
- 严格在代码库探索职责范围内工作
|
||||
- 将探索结果写入 shared-memory.json 的 `explorations` 字段
|
||||
- Only process `EXPLORE-*` prefixed tasks
|
||||
- All output (SendMessage, team_msg, logs) must carry `[explorer]` identifier
|
||||
- Only communicate with coordinator via SendMessage
|
||||
- Work strictly within codebase exploration responsibility scope
|
||||
- Write exploration results to shared-memory.json `explorations` field
|
||||
|
||||
### MUST NOT
|
||||
|
||||
- ❌ 执行深度分析(属于 analyst)
|
||||
- ❌ 处理用户反馈(属于 discussant)
|
||||
- ❌ 生成结论或建议(属于 synthesizer)
|
||||
- ❌ 为其他角色创建任务
|
||||
- ❌ 直接与其他 worker 通信
|
||||
- Execute deep analysis (belongs to analyst)
|
||||
- Handle user feedback (belongs to discussant)
|
||||
- Generate conclusions or recommendations (belongs to synthesizer)
|
||||
- Create tasks for other roles (TaskCreate is coordinator-exclusive)
|
||||
- Communicate directly with other worker roles
|
||||
- Omit `[explorer]` identifier in any output
|
||||
|
||||
## Message Types
|
||||
|
||||
| Type | Direction | Trigger | Description |
|
||||
|------|-----------|---------|-------------|
|
||||
| `exploration_ready` | explorer → coordinator | 探索完成 | 包含发现的文件、模式、关键发现 |
|
||||
| `error` | explorer → coordinator | 探索失败 | 阻塞性错误 |
|
||||
---
|
||||
|
||||
## Toolbox
|
||||
|
||||
@@ -43,90 +37,117 @@
|
||||
|---------|------|-------|-------------|
|
||||
| `explore` | [commands/explore.md](commands/explore.md) | Phase 3 | cli-explore-agent 并行探索 |
|
||||
|
||||
### Subagent Capabilities
|
||||
### Tool Capabilities
|
||||
|
||||
| Agent Type | Used By | Purpose |
|
||||
|------------|---------|---------|
|
||||
| `cli-explore-agent` | explore.md | 多角度代码库探索 |
|
||||
| Tool | Type | Used By | Purpose |
|
||||
|------|------|---------|---------|
|
||||
| `Task` | Subagent | explore.md | Spawn cli-explore-agent for codebase exploration |
|
||||
| `Read` | File | explorer | Read session files and exploration context |
|
||||
| `Write` | File | explorer | Write exploration results |
|
||||
| `Glob` | File | explorer | Find relevant files |
|
||||
| `mcp__ace-tool__search_context` | MCP | explorer | ACE semantic search fallback |
|
||||
| `Grep` | Search | explorer | Pattern search fallback |
|
||||
|
||||
### CLI Capabilities
|
||||
---
|
||||
|
||||
> Explorer 不直接使用 CLI 分析工具(通过 cli-explore-agent 间接使用)
|
||||
## Message Types
|
||||
|
||||
| Type | Direction | Trigger | Description |
|
||||
|------|-----------|---------|-------------|
|
||||
| `exploration_ready` | explorer → coordinator | 探索完成 | 包含发现的文件、模式、关键发现 |
|
||||
| `error` | explorer → coordinator | 探索失败 | 阻塞性错误 |
|
||||
|
||||
## Message Bus
|
||||
|
||||
Before every SendMessage, log via `mcp__ccw-tools__team_msg`:
|
||||
|
||||
```
|
||||
mcp__ccw-tools__team_msg({
|
||||
operation: "log",
|
||||
team: "ultra-analyze",
|
||||
from: "explorer",
|
||||
to: "coordinator",
|
||||
type: "exploration_ready",
|
||||
summary: "[explorer] EXPLORE complete: <summary>",
|
||||
ref: "<output-path>"
|
||||
})
|
||||
```
|
||||
|
||||
**CLI fallback** (when MCP unavailable):
|
||||
|
||||
```
|
||||
Bash("ccw team log --team ultra-analyze --from explorer --to coordinator --type exploration_ready --summary \"[explorer] ...\" --ref <path> --json")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Execution (5-Phase)
|
||||
|
||||
### Phase 1: Task Discovery
|
||||
|
||||
```javascript
|
||||
// Parse agent name from --agent-name arg (for parallel instances) or default to 'explorer'
|
||||
const agentNameMatch = args.match(/--agent-name[=\s]+([\w-]+)/)
|
||||
const agentName = agentNameMatch ? agentNameMatch[1] : 'explorer'
|
||||
> See SKILL.md Shared Infrastructure -> Worker Phase 1: Task Discovery
|
||||
|
||||
const tasks = TaskList()
|
||||
const myTasks = tasks.filter(t =>
|
||||
t.subject.startsWith('EXPLORE-') &&
|
||||
t.owner === agentName &&
|
||||
t.status === 'pending' &&
|
||||
t.blockedBy.length === 0
|
||||
)
|
||||
Standard task discovery flow: TaskList -> filter by prefix `EXPLORE-*` + owner match + pending + unblocked -> TaskGet -> TaskUpdate in_progress.
|
||||
|
||||
if (myTasks.length === 0) return // idle
|
||||
|
||||
const task = TaskGet({ taskId: myTasks[0].id })
|
||||
TaskUpdate({ taskId: task.id, status: 'in_progress' })
|
||||
```
|
||||
For parallel instances, parse `--agent-name` from arguments for owner matching. Falls back to `explorer` for single-instance roles.
|
||||
|
||||
### Phase 2: Context & Scope Assessment
|
||||
|
||||
```javascript
|
||||
// 从任务描述中提取上下文
|
||||
const sessionFolder = task.description.match(/session:\s*(.+)/)?.[1]?.trim()
|
||||
const topic = task.description.match(/topic:\s*(.+)/)?.[1]?.trim()
|
||||
const perspective = task.description.match(/perspective:\s*(.+)/)?.[1]?.trim() || 'general'
|
||||
const dimensions = (task.description.match(/dimensions:\s*(.+)/)?.[1]?.trim() || 'general').split(', ')
|
||||
**Loading steps**:
|
||||
|
||||
// 读取 shared memory
|
||||
let sharedMemory = {}
|
||||
try { sharedMemory = JSON.parse(Read(`${sessionFolder}/shared-memory.json`)) } catch {}
|
||||
1. Extract session path from task description
|
||||
2. Extract topic, perspective, dimensions from task metadata
|
||||
3. Read shared-memory.json for existing context
|
||||
4. Determine exploration number from task subject (EXPLORE-N)
|
||||
|
||||
// 评估探索范围
|
||||
const exploreNum = task.subject.match(/EXPLORE-(\d+)/)?.[1] || '001'
|
||||
```
|
||||
**Context extraction**:
|
||||
|
||||
| Field | Source | Pattern |
|
||||
|-------|--------|---------|
|
||||
| sessionFolder | task description | `session:\s*(.+)` |
|
||||
| topic | task description | `topic:\s*(.+)` |
|
||||
| perspective | task description | `perspective:\s*(.+)` or default "general" |
|
||||
| dimensions | task description | `dimensions:\s*(.+)` or default "general" |
|
||||
|
||||
### Phase 3: Codebase Exploration
|
||||
|
||||
```javascript
|
||||
// Read commands/explore.md for full cli-explore-agent implementation
|
||||
Read("commands/explore.md")
|
||||
Delegate to `commands/explore.md` if available, otherwise execute inline.
|
||||
|
||||
**Exploration strategy**:
|
||||
|
||||
| Condition | Strategy |
|
||||
|-----------|----------|
|
||||
| Single perspective | Direct cli-explore-agent spawn |
|
||||
| Multi-perspective | Per-perspective exploration with focused prompts |
|
||||
| Limited context | ACE search + Grep fallback |
|
||||
|
||||
**cli-explore-agent spawn**:
|
||||
|
||||
```
|
||||
|
||||
**核心策略**: 通过 cli-explore-agent 执行代码库探索
|
||||
|
||||
```javascript
|
||||
Task({
|
||||
subagent_type: "cli-explore-agent",
|
||||
run_in_background: false,
|
||||
description: `Explore codebase: ${topic} (${perspective})`,
|
||||
description: "Explore codebase: <topic> (<perspective>)",
|
||||
prompt: `
|
||||
## Analysis Context
|
||||
Topic: ${topic}
|
||||
Perspective: ${perspective}
|
||||
Dimensions: ${dimensions.join(', ')}
|
||||
Session: ${sessionFolder}
|
||||
Topic: <topic>
|
||||
Perspective: <perspective>
|
||||
Dimensions: <dimensions>
|
||||
Session: <session-folder>
|
||||
|
||||
## MANDATORY FIRST STEPS
|
||||
1. Run: ccw tool exec get_modules_by_depth '{}'
|
||||
2. Execute relevant searches based on topic keywords
|
||||
3. Read: .workflow/project-tech.json (if exists)
|
||||
|
||||
## Exploration Focus (${perspective} angle)
|
||||
${dimensions.map(d => `- ${d}: Identify relevant code patterns and structures`).join('\n')}
|
||||
## Exploration Focus (<perspective> angle)
|
||||
<dimensions map to exploration focus areas>
|
||||
|
||||
## Output
|
||||
Write findings to: ${sessionFolder}/explorations/exploration-${exploreNum}.json
|
||||
Write findings to: <session-folder>/explorations/exploration-<num>.json
|
||||
|
||||
Schema: {
|
||||
perspective: "${perspective}",
|
||||
perspective: "<perspective>",
|
||||
relevant_files: [{path, relevance, summary}],
|
||||
patterns: [string],
|
||||
key_findings: [string],
|
||||
@@ -139,102 +160,50 @@ Schema: {
|
||||
|
||||
### Phase 4: Result Validation
|
||||
|
||||
```javascript
|
||||
// 验证探索结果
|
||||
const outputPath = `${sessionFolder}/explorations/exploration-${exploreNum}.json`
|
||||
let explorationResult = {}
|
||||
try {
|
||||
explorationResult = JSON.parse(Read(outputPath))
|
||||
} catch {
|
||||
// Agent 未写入文件,使用空结果
|
||||
explorationResult = {
|
||||
perspective,
|
||||
relevant_files: [],
|
||||
patterns: [],
|
||||
key_findings: ['Exploration produced no structured output'],
|
||||
questions_for_analysis: [],
|
||||
_metadata: { agent: 'cli-explore-agent', timestamp: new Date().toISOString(), status: 'partial' }
|
||||
}
|
||||
Write(outputPath, JSON.stringify(explorationResult, null, 2))
|
||||
}
|
||||
**Validation steps**:
|
||||
|
||||
// 基本质量检查
|
||||
const hasFiles = explorationResult.relevant_files?.length > 0
|
||||
const hasFindings = explorationResult.key_findings?.length > 0
|
||||
| Check | Method | Action on Failure |
|
||||
|-------|--------|-------------------|
|
||||
| Output file exists | Read output path | Create empty result structure |
|
||||
| Has relevant files | Check array length | Trigger ACE fallback |
|
||||
| Has findings | Check key_findings | Note partial results |
|
||||
|
||||
**ACE fallback** (when exploration produces no output):
|
||||
|
||||
if (!hasFiles && !hasFindings) {
|
||||
// 探索结果为空,尝试 ACE 搜索兜底
|
||||
const aceResults = mcp__ace-tool__search_context({
|
||||
project_root_path: ".",
|
||||
query: topic
|
||||
})
|
||||
// 补充到结果中
|
||||
}
|
||||
```
|
||||
mcp__ace-tool__search_context({
|
||||
project_root_path: ".",
|
||||
query: <topic>
|
||||
})
|
||||
```
|
||||
|
||||
**Quality validation**:
|
||||
|
||||
| Metric | Threshold | Action |
|
||||
|--------|-----------|--------|
|
||||
| relevant_files count | > 0 | Proceed |
|
||||
| key_findings count | > 0 | Proceed |
|
||||
| Both empty | - | Use ACE fallback, mark partial |
|
||||
|
||||
### Phase 5: Report to Coordinator
|
||||
|
||||
```javascript
|
||||
// 更新 shared memory
|
||||
sharedMemory.explorations = sharedMemory.explorations || []
|
||||
sharedMemory.explorations.push({
|
||||
id: `exploration-${exploreNum}`,
|
||||
perspective,
|
||||
file_count: explorationResult.relevant_files?.length || 0,
|
||||
finding_count: explorationResult.key_findings?.length || 0,
|
||||
timestamp: new Date().toISOString()
|
||||
})
|
||||
Write(`${sessionFolder}/shared-memory.json`, JSON.stringify(sharedMemory, null, 2))
|
||||
> See SKILL.md Shared Infrastructure -> Worker Phase 5: Report
|
||||
|
||||
const resultSummary = `${perspective} 视角: ${explorationResult.relevant_files?.length || 0} 个相关文件, ${explorationResult.key_findings?.length || 0} 个发现`
|
||||
Standard report flow: team_msg log -> SendMessage with `[explorer]` prefix -> TaskUpdate completed -> Loop to Phase 1 for next task.
|
||||
|
||||
mcp__ccw-tools__team_msg({
|
||||
operation: "log",
|
||||
team: teamName,
|
||||
from: "explorer",
|
||||
to: "coordinator",
|
||||
type: "exploration_ready",
|
||||
summary: `[explorer] ${resultSummary}`,
|
||||
ref: outputPath
|
||||
})
|
||||
**Shared memory update**:
|
||||
|
||||
SendMessage({
|
||||
type: "message",
|
||||
recipient: "coordinator",
|
||||
content: `## [explorer] Exploration Results
|
||||
|
||||
**Task**: ${task.subject}
|
||||
**Perspective**: ${perspective}
|
||||
**Status**: ${hasFiles || hasFindings ? 'Findings Available' : 'Limited Results'}
|
||||
|
||||
### Summary
|
||||
${resultSummary}
|
||||
|
||||
### Top Findings
|
||||
${(explorationResult.key_findings || []).slice(0, 5).map(f => `- ${f}`).join('\n')}
|
||||
|
||||
### Questions for Analysis
|
||||
${(explorationResult.questions_for_analysis || []).slice(0, 3).map(q => `- ${q}`).join('\n')}
|
||||
|
||||
### Output
|
||||
${outputPath}`,
|
||||
summary: `[explorer] EXPLORE complete: ${resultSummary}`
|
||||
})
|
||||
|
||||
TaskUpdate({ taskId: task.id, status: 'completed' })
|
||||
|
||||
// Check for next task
|
||||
const nextTasks = TaskList().filter(t =>
|
||||
t.subject.startsWith('EXPLORE-') &&
|
||||
t.owner === agentName &&
|
||||
t.status === 'pending' &&
|
||||
t.blockedBy.length === 0
|
||||
)
|
||||
|
||||
if (nextTasks.length > 0) {
|
||||
// Continue with next task → back to Phase 1
|
||||
}
|
||||
```
|
||||
sharedMemory.explorations.push({
|
||||
id: "exploration-<num>",
|
||||
perspective: <perspective>,
|
||||
file_count: <count>,
|
||||
finding_count: <count>,
|
||||
timestamp: <timestamp>
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Error Handling
|
||||
|
||||
@@ -245,3 +214,4 @@ if (nextTasks.length > 0) {
|
||||
| Exploration scope too broad | Narrow to topic keywords, report partial |
|
||||
| Agent timeout | Use partial results, note incomplete |
|
||||
| Session folder missing | Create it, warn coordinator |
|
||||
| Context/Plan file not found | Notify coordinator, request location |
|
||||
|
||||
Reference in New Issue
Block a user