home / skills / catlog22 / claude-code-workflow / team-issue

team-issue skill

/.claude/skills/team-issue

This skill coordinates and streamlines team issue resolution by routing tasks to role-specific agents and aggregating progress across phases.

npx playbooks add skill catlog22/claude-code-workflow --skill team-issue

Review the files below or copy the command above to add this skill to your agents.

Files (8)
SKILL.md
13.1 KB
---
name: team-issue
description: Unified team skill for issue resolution. All roles invoke this skill with --role arg for role-specific execution. Triggers on "team issue".
allowed-tools: TeamCreate(*), TeamDelete(*), SendMessage(*), TaskCreate(*), TaskUpdate(*), TaskList(*), TaskGet(*), Task(*), AskUserQuestion(*), Read(*), Write(*), Edit(*), Bash(*), Glob(*), Grep(*)
---

# Team Issue Resolution

Unified team skill for issue processing pipeline. All team members invoke this skill with `--role=xxx` for role-specific execution.

**Scope**: Issue 处理流程(plan → queue → execute)。Issue 创建/发现由 `issue-discover` 独立处理,CRUD 管理由 `issue-manage` 独立处理。

## Architecture Overview

```
┌───────────────────────────────────────────┐
│  Skill(skill="team-issue")                │
│  args="--role=xxx [issue-ids] [--mode=M]" │
└───────────────┬───────────────────────────┘
                │ Role Router
    ┌───────────┼───────────┬───────────┬───────────┬───────────┐
    ↓           ↓           ↓           ↓           ↓           ↓
┌──────────┐┌──────────┐┌──────────┐┌──────────┐┌──────────┐┌──────────┐
│coordinator││explorer  ││planner   ││reviewer  ││integrator││implementer│
│ 编排调度  ││EXPLORE-* ││SOLVE-*   ││AUDIT-*   ││MARSHAL-* ││BUILD-*   │
└──────────┘└──────────┘└──────────┘└──────────┘└──────────┘└──────────┘
```

## Command Architecture

```
roles/
├── coordinator.md      # Pipeline 编排(Phase 1/5 inline, Phase 2-4 core logic)
├── explorer.md         # 上下文分析(ACE + cli-explore-agent)
├── planner.md          # 方案设计(wraps issue-plan-agent)
├── reviewer.md         # 方案审查(技术可行性 + 风险评估)
├── integrator.md       # 队列编排(wraps issue-queue-agent)
└── implementer.md      # 代码实现(wraps code-developer)
```

## Role Router

### Input Parsing

Parse `$ARGUMENTS` to extract `--role`:

```javascript
const args = "$ARGUMENTS"
const roleMatch = args.match(/--role[=\s]+(\w+)/)

if (!roleMatch) {
  // No --role: this is a coordinator entry point
  // Extract issue IDs and mode from args directly
  // → Read roles/coordinator.md and execute
  Read("roles/coordinator.md")
  return
}

const role = roleMatch[1]
const teamName = "issue"
```

### Role Dispatch

```javascript
const VALID_ROLES = {
  "coordinator": { file: "roles/coordinator.md", prefix: null },
  "explorer":    { file: "roles/explorer.md", prefix: "EXPLORE" },
  "planner":     { file: "roles/planner.md", prefix: "SOLVE" },
  "reviewer":    { file: "roles/reviewer.md", prefix: "AUDIT" },
  "integrator":  { file: "roles/integrator.md", prefix: "MARSHAL" },
  "implementer": { file: "roles/implementer.md", prefix: "BUILD" }
}

if (!VALID_ROLES[role]) {
  throw new Error(`Unknown role: ${role}. Available: ${Object.keys(VALID_ROLES).join(', ')}`)
}

// Read and execute role-specific logic
Read(VALID_ROLES[role].file)
// → Execute the 5-phase process defined in that file
```

### Available Roles

| Role | Task Prefix | Responsibility | Reuses Agent | Role File |
|------|-------------|----------------|--------------|-----------|
| `coordinator` | N/A | Pipeline 编排、模式选择、任务分派 | - | [roles/coordinator.md](roles/coordinator.md) |
| `explorer` | EXPLORE-* | 上下文分析、影响面评估 | cli-explore-agent | [roles/explorer.md](roles/explorer.md) |
| `planner` | SOLVE-* | 方案设计、任务分解 | issue-plan-agent | [roles/planner.md](roles/planner.md) |
| `reviewer` | AUDIT-* | 方案审查、风险评估 | - (新角色) | [roles/reviewer.md](roles/reviewer.md) |
| `integrator` | MARSHAL-* | 冲突检测、队列编排 | issue-queue-agent | [roles/integrator.md](roles/integrator.md) |
| `implementer` | BUILD-* | 代码实现、结果提交 | code-developer | [roles/implementer.md](roles/implementer.md) |

## Shared Infrastructure

### Role Isolation Rules

**核心原则**: 每个角色仅能执行自己职责范围内的工作。

#### Output Tagging(强制)

所有角色的输出必须带 `[role_name]` 标识前缀:

```javascript
// SendMessage — content 和 summary 都必须带标识
SendMessage({
  content: `## [${role}] ...`,
  summary: `[${role}] ...`
})

// team_msg — summary 必须带标识
mcp__ccw-tools__team_msg({
  summary: `[${role}] ...`
})
```

#### Coordinator 隔离

| 允许 | 禁止 |
|------|------|
| 需求澄清 (AskUserQuestion) | ❌ 直接编写/修改代码 |
| 创建任务链 (TaskCreate) | ❌ 调用 issue-plan-agent 等实现类 agent |
| 分发任务给 worker | ❌ 直接执行分析/审查 |
| 监控进度 (消息总线) | ❌ 绕过 worker 自行完成任务 |
| 汇报结果给用户 | ❌ 修改源代码或产物文件 |

#### Worker 隔离

| 允许 | 禁止 |
|------|------|
| 处理自己前缀的任务 | ❌ 处理其他角色前缀的任务 |
| SendMessage 给 coordinator | ❌ 直接与其他 worker 通信 |
| 使用 Toolbox 中声明的工具 | ❌ 为其他角色创建任务 (TaskCreate) |
| 委派给复用的 agent | ❌ 修改不属于本职责的资源 |

### Team Configuration

```javascript
const TEAM_CONFIG = {
  name: "issue",
  sessionDir: ".workflow/.team-plan/issue/",
  msgDir: ".workflow/.team-msg/issue/",
  issueDataDir: ".workflow/issues/"
}
```

### Message Bus (All Roles)

Every SendMessage **before**, must call `mcp__ccw-tools__team_msg` to log:

```javascript
mcp__ccw-tools__team_msg({
  operation: "log",
  team: "issue",
  from: role,          // current role name
  to: "coordinator",
  type: "<type>",
  summary: "[role] <summary>",
  ref: "<file_path>"   // optional
})
```

**Message types by role**:

| Role | Types |
|------|-------|
| coordinator | `task_assigned`, `pipeline_update`, `escalation`, `shutdown`, `error` |
| explorer | `context_ready`, `impact_assessed`, `error` |
| planner | `solution_ready`, `multi_solution`, `error` |
| reviewer | `approved`, `rejected`, `concerns`, `error` |
| integrator | `queue_ready`, `conflict_found`, `error` |
| implementer | `impl_complete`, `impl_failed`, `error` |

### CLI 回退

当 `mcp__ccw-tools__team_msg` MCP 不可用时:

```javascript
Bash(`ccw team log --team "issue" --from "${role}" --to "coordinator" --type "<type>" --summary "<摘要>" --json`)
```

### Task Lifecycle (All Roles)

```javascript
// Standard task lifecycle every role follows
// Phase 1: Discovery
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 // idle
const task = TaskGet({ taskId: myTasks[0].id })
TaskUpdate({ taskId: task.id, status: 'in_progress' })

// Phase 2-4: Role-specific (see roles/{role}.md)

// Phase 5: Report + Loop — 所有输出必须带 [role] 标识
mcp__ccw-tools__team_msg({ operation: "log", team: "issue", from: role, to: "coordinator", type: "...", summary: `[${role}] ...` })
SendMessage({ type: "message", recipient: "coordinator", content: `## [${role}] ...`, summary: `[${role}] ...` })
TaskUpdate({ taskId: task.id, status: 'completed' })
// Check for next task → back to Phase 1
```

## Pipeline Modes

```
Quick Mode (1-2 simple issues):
  EXPLORE-001 → SOLVE-001 → MARSHAL-001 → BUILD-001

Full Mode (complex issues, with review):
  EXPLORE-001 → SOLVE-001 → AUDIT-001 ─┬─(approved)→ MARSHAL-001 → BUILD-001..N(parallel)
                                         └─(rejected)→ SOLVE-fix → AUDIT-002(re-review, max 2x)

Batch Mode (5-100 issues):
  EXPLORE-001..N(batch≤5) → SOLVE-001..N(batch≤3) → AUDIT-001(batch) → MARSHAL-001 → BUILD-001..M(DAG parallel)
```

### Mode Auto-Detection

```javascript
function detectMode(issueIds, userMode) {
  if (userMode) return userMode  // 用户显式指定

  const count = issueIds.length
  if (count <= 2) {
    // Check complexity via issue priority
    const issues = issueIds.map(id => JSON.parse(Bash(`ccw issue status ${id} --json`)))
    const hasHighPriority = issues.some(i => i.priority >= 4)
    return hasHighPriority ? 'full' : 'quick'
  }
  return 'batch'
}
```

## Coordinator Spawn Template

```javascript
TeamCreate({ team_name: "issue" })

// Explorer
Task({
  subagent_type: "general-purpose",
  team_name: "issue",
  name: "explorer",
  prompt: `你是 team "issue" 的 EXPLORER。

当你收到 EXPLORE-* 任务时,调用 Skill(skill="team-issue", args="--role=explorer") 执行。

当前需求: ${taskDescription}
约束: ${constraints}

## 角色准则(强制)
- 你只能处理 EXPLORE-* 前缀的任务,不得执行其他角色的工作
- 所有输出(SendMessage、team_msg)必须带 [explorer] 标识前缀
- 仅与 coordinator 通信,不得直接联系其他 worker
- 不得使用 TaskCreate 为其他角色创建任务

## 消息总线(必须)
每次 SendMessage 前,先调用 mcp__ccw-tools__team_msg 记录。

工作流程:
1. TaskList → 找到 EXPLORE-* 任务
2. Skill(skill="team-issue", args="--role=explorer") 执行
3. team_msg log + SendMessage 结果给 coordinator(带 [explorer] 标识)
4. TaskUpdate completed → 检查下一个任务`
})

// Planner
Task({
  subagent_type: "general-purpose",
  team_name: "issue",
  name: "planner",
  prompt: `你是 team "issue" 的 PLANNER。

当你收到 SOLVE-* 任务时,调用 Skill(skill="team-issue", args="--role=planner") 执行。

当前需求: ${taskDescription}
约束: ${constraints}

## 角色准则(强制)
- 你只能处理 SOLVE-* 前缀的任务
- 所有输出必须带 [planner] 标识前缀
- 仅与 coordinator 通信

## 消息总线(必须)
每次 SendMessage 前,先调用 mcp__ccw-tools__team_msg 记录。

工作流程:
1. TaskList → 找到 SOLVE-* 任务
2. Skill(skill="team-issue", args="--role=planner") 执行
3. team_msg log + SendMessage 结果给 coordinator
4. TaskUpdate completed → 检查下一个任务`
})

// Reviewer
Task({
  subagent_type: "general-purpose",
  team_name: "issue",
  name: "reviewer",
  prompt: `你是 team "issue" 的 REVIEWER。

当你收到 AUDIT-* 任务时,调用 Skill(skill="team-issue", args="--role=reviewer") 执行。

当前需求: ${taskDescription}
约束: ${constraints}

## 角色准则(强制)
- 你只能处理 AUDIT-* 前缀的任务
- 所有输出必须带 [reviewer] 标识前缀
- 仅与 coordinator 通信
- 你是质量门控角色,审查方案但不修改代码

## 消息总线(必须)
每次 SendMessage 前,先调用 mcp__ccw-tools__team_msg 记录。

工作流程:
1. TaskList → 找到 AUDIT-* 任务
2. Skill(skill="team-issue", args="--role=reviewer") 执行
3. team_msg log + SendMessage 结果给 coordinator
4. TaskUpdate completed → 检查下一个任务`
})

// Integrator
Task({
  subagent_type: "general-purpose",
  team_name: "issue",
  name: "integrator",
  prompt: `你是 team "issue" 的 INTEGRATOR。

当你收到 MARSHAL-* 任务时,调用 Skill(skill="team-issue", args="--role=integrator") 执行。

当前需求: ${taskDescription}
约束: ${constraints}

## 角色准则(强制)
- 你只能处理 MARSHAL-* 前缀的任务
- 所有输出必须带 [integrator] 标识前缀
- 仅与 coordinator 通信

## 消息总线(必须)
每次 SendMessage 前,先调用 mcp__ccw-tools__team_msg 记录。

工作流程:
1. TaskList → 找到 MARSHAL-* 任务
2. Skill(skill="team-issue", args="--role=integrator") 执行
3. team_msg log + SendMessage 结果给 coordinator
4. TaskUpdate completed → 检查下一个任务`
})

// Implementer
Task({
  subagent_type: "general-purpose",
  team_name: "issue",
  name: "implementer",
  prompt: `你是 team "issue" 的 IMPLEMENTER。

当你收到 BUILD-* 任务时,调用 Skill(skill="team-issue", args="--role=implementer") 执行。

当前需求: ${taskDescription}
约束: ${constraints}

## 角色准则(强制)
- 你只能处理 BUILD-* 前缀的任务
- 所有输出必须带 [implementer] 标识前缀
- 仅与 coordinator 通信

## 消息总线(必须)
每次 SendMessage 前,先调用 mcp__ccw-tools__team_msg 记录。

工作流程:
1. TaskList → 找到 BUILD-* 任务
2. Skill(skill="team-issue", args="--role=implementer") 执行
3. team_msg log + SendMessage 结果给 coordinator
4. TaskUpdate completed → 检查下一个任务`
})
```

## Error Handling

| Scenario | Resolution |
|----------|------------|
| Unknown --role value | Error with available role list |
| Missing --role arg | Default to coordinator role |
| Role file not found | Error with expected path (roles/{name}.md) |
| Task prefix conflict | Log warning, proceed |

Overview

This skill provides a unified team pipeline for issue resolution where each team role is invoked with a --role argument. It orchestrates planning, queuing, review, integration, and implementation while enforcing role isolation and standardized messaging. The skill fits into CLI-driven, JSON-based multi-agent workflows for repeatable issue processing.

How this skill works

The skill parses CLI arguments to identify the requested role or defaults to a coordinator entry point. It routes execution to role-specific logic (explorer, planner, reviewer, integrator, implementer, coordinator) and enforces a five-phase task lifecycle: discovery, role work, reporting, completion, and loop. Every role logs via a central message API and prefixes all outputs with its role tag to preserve traceability and isolation.

When to use it

  • Orchestrating end-to-end issue resolution across multiple specialized workers.
  • Automating batch or parallel handling of large sets of issues from CLI pipelines.
  • Enforcing strict role separation and audit trails in multi-agent workflows.
  • Running mode-detected pipelines: quick, full (with review), or batch processing.
  • Integrating with existing automated agents for planning, queueing, or development.

Best practices

  • Always invoke with --role=<role> for worker runs; omit --role to run the coordinator.
  • Tag every SendMessage and summary with the role prefix (e.g., [planner]) for traceability.
  • Use the provided message logging API before each SendMessage; fall back to CLI logging if unavailable.
  • Keep each role strictly within its responsibilities to avoid cross-role side effects.
  • Prefer auto-detected pipeline mode unless a specific mode is required for complex workflows.

Example use cases

  • Quickly route two low-complexity issues through EXPLORE → SOLVE → MARSHAL → BUILD.
  • Run full mode for high-priority issues that require a review gate (AUDIT) before integration.
  • Process a batch of 10 issues in parallel with staged exploration and task decomposition.
  • Use the coordinator to spawn worker tasks and monitor progress through the message bus.
  • Invoke implementer role to run code development tasks wrapped by a code-developer agent.

FAQ

What happens if --role is missing?

The skill defaults to the coordinator path, which handles pipeline orchestration and task dispatch.

How are outputs and logs standardized?

Every role must call the team message API before SendMessage and prefix content and summaries with the role tag for consistent logging.