- 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)
20 KiB
name, description, allowed-tools
| name | description | allowed-tools |
|---|---|---|
| team-ultra-analyze | Unified team skill for deep collaborative analysis. All roles invoke this skill with --role arg for role-specific execution. Triggers on "team ultra-analyze", "team analyze". | TeamCreate(*), TeamDelete(*), SendMessage(*), TaskCreate(*), TaskUpdate(*), TaskList(*), TaskGet(*), Task(*), AskUserQuestion(*), Read(*), Write(*), Edit(*), Bash(*), Glob(*), Grep(*) |
Team Ultra Analyze
Deep collaborative analysis team skill. Splits monolithic analysis into 5-role collaboration: explore -> analyze -> discuss -> synthesize. Supports Quick/Standard/Deep pipeline modes with configurable depth (N parallel agents). Discussion loops enable user-guided progressive understanding. All members route via --role=xxx.
Architecture
+-------------------------------------------------------------+
| Skill(skill="team-ultra-analyze") |
| args="topic description" or args="--role=xxx" |
+----------------------------+--------------------------------+
| Role Router
+---- --role present? ----+
| NO | YES
v v
Orchestration Mode Role Dispatch
(auto -> coordinator) (route to role.md)
|
+-----+------+----------+-----------+
v v v v v
coordinator explorer analyst discussant synthesizer
EXPLORE-* ANALYZE-* DISCUSS-* SYNTH-*
Command Architecture
roles/
+-- coordinator/
| +-- role.md # Orchestration: topic clarification, pipeline selection, discussion loop, reporting
| +-- commands/
| +-- dispatch.md # Task chain creation and dependency management
| +-- monitor.md # Progress monitoring + discussion loop
+-- explorer/
| +-- role.md # Codebase exploration
| +-- commands/
| +-- explore.md # cli-explore-agent parallel exploration
+-- analyst/
| +-- role.md # Deep analysis
| +-- commands/
| +-- analyze.md # CLI multi-perspective analysis
+-- discussant/
| +-- role.md # Discussion processing + direction adjustment
| +-- commands/
| +-- deepen.md # Deep-dive exploration
+-- synthesizer/
+-- role.md # Synthesis and conclusions
+-- commands/
+-- synthesize.md # Cross-perspective integration
Design principle: role.md retains Phase 1 (Task Discovery) and Phase 5 (Report) inline. Phase 2-4 delegate to commands/*.md based on complexity.
Role Router
Input Parsing
Parse $ARGUMENTS to extract --role and optional --agent-name. If --role is absent, enter Orchestration Mode (auto route to coordinator). The --agent-name parameter supports parallel instances (e.g., explorer-1, analyst-2) and is passed through to role.md for task discovery filtering.
Role Registry
| Role | File | Task Prefix | Type | Compact |
|---|---|---|---|---|
| coordinator | roles/coordinator/role.md | (none) | orchestrator | compress: must re-read |
| explorer | roles/explorer/role.md | EXPLORE-* | parallel worker | compress: must re-read |
| analyst | roles/analyst/role.md | ANALYZE-* | parallel worker | compress: must re-read |
| discussant | roles/discussant/role.md | DISCUSS-* | pipeline | compress: must re-read |
| synthesizer | roles/synthesizer/role.md | SYNTH-* | pipeline | compress: must re-read |
COMPACT PROTECTION: Role files are execution documents, not reference material. When context compression occurs and role instructions are reduced to summaries, you must immediately
Readthe corresponding role.md to reload before continuing execution. Never execute any Phase based on compressed summaries alone.
Dispatch
- Extract
--rolefrom arguments - If no
--role-> route to coordinator (Orchestration Mode) - Look up role in registry -> Read the role file -> Execute its phases
Orchestration Mode
When invoked without --role, coordinator auto-starts. User just provides the analysis topic.
Invocation: Skill(skill="team-ultra-analyze", args="analysis topic description")
Lifecycle:
User provides analysis topic
-> coordinator Phase 1-3: topic clarification -> TeamCreate -> pipeline selection -> create task chain
-> coordinator Phase 4: spawn depth explorers in parallel (background) -> STOP
-> Explorers execute -> SendMessage callback -> coordinator spawns analysts
-> Analysts execute -> SendMessage callback -> coordinator spawns discussant
-> Discussion loop (Deep mode: user feedback -> deepen -> re-analyze -> repeat)
-> coordinator spawns synthesizer -> final conclusions -> Phase 5 report
User Commands (wake suspended coordinator):
| Command | Action |
|---|---|
check / status |
Output execution status diagram, do not advance pipeline |
resume / continue |
Check worker status, advance to next pipeline step |
Shared Infrastructure
The following templates apply to all worker roles. Each role.md only needs to define Phase 2-4 role-specific logic.
Worker Phase 1: Task Discovery (shared by all workers)
Each worker executes the same task discovery flow on startup:
- Call
TaskList()to get all tasks - Filter: subject matches this role's prefix + owner matches this agent's name + status is pending + blockedBy is empty
- No tasks -> idle wait
- Has tasks ->
TaskGetfor details ->TaskUpdatemark in_progress
Resume Artifact Check (prevent duplicate output after recovery):
- Check if this task's output artifacts already exist
- Artifacts complete -> skip to Phase 5 report completion
- Artifacts incomplete or missing -> execute Phase 2-4 normally
Worker Phase 5: Report (shared by all workers)
Standard report flow after task completion:
- Message Bus: Call
mcp__ccw-tools__team_msgto log message- Parameters: operation="log", team=, from=, to="coordinator", type=, summary="[]
", ref= - CLI fallback: When MCP unavailable ->
ccw team log --team <team> --from <role> --to coordinator --type <type> --summary "[<role>] ..." --json
- Parameters: operation="log", team=, from=, to="coordinator", type=, summary="[]
- SendMessage: Send result to coordinator (both content and summary prefixed with
[<role>]) - TaskUpdate: Mark task completed
- Loop: Return to Phase 1 to check for next task
Wisdom Accumulation (all roles)
Cross-task knowledge accumulation. Coordinator creates wisdom/ directory during session initialization.
Directory:
<session-folder>/wisdom/
+-- learnings.md # Patterns and insights
+-- decisions.md # Analysis direction decisions
+-- conventions.md # Codebase conventions discovered
+-- issues.md # Known risks and issues
Worker load (Phase 2): Extract Session: <path> from task description, read wisdom directory files.
Worker contribute (Phase 4/5): Write discoveries from this task into corresponding wisdom files.
Role Isolation Rules
| Allowed | Prohibited |
|---|---|
| Process tasks matching own prefix | Process tasks with other role prefixes |
| SendMessage to coordinator | Communicate directly with other workers |
| Read/write shared-memory.json (own fields) | Create tasks for other roles |
| Delegate to commands/*.md | Modify resources outside own responsibility |
Coordinator additionally prohibited: directly executing code exploration or analysis, directly calling cli-explore-agent or CLI analysis tools, bypassing workers to complete work.
Shared Memory
Core shared artifact stored at <session-folder>/shared-memory.json. Each role reads the full memory but writes only to its own designated field:
| Role | Write Field |
|---|---|
| explorer | explorations |
| analyst | analyses |
| discussant | discussions |
| synthesizer | synthesis |
| coordinator | decision_trail + current_understanding |
On startup, read the file. After completing work, update own field and write back. If file does not exist, initialize with empty object.
Message Bus (All Roles)
All roles log messages before sending via SendMessage. Call mcp__ccw-tools__team_msg with: operation="log", team=, from=, to="coordinator", type=, summary="[]
| Role | Types |
|---|---|
| coordinator | pipeline_selected, discussion_round, direction_adjusted, task_unblocked, error, shutdown |
| explorer | exploration_ready, error |
| analyst | analysis_ready, error |
| discussant | discussion_processed, error |
| synthesizer | synthesis_ready, error |
CLI fallback: When MCP unavailable -> ccw team log --team "<team>" --from "<role>" --to "coordinator" --type "<type>" --summary "<summary>" --json
Three-Mode Pipeline Architecture
Quick: EXPLORE-001 -> ANALYZE-001 -> SYNTH-001
Standard: [EXPLORE-001..depth](parallel) -> [ANALYZE-001..depth](parallel) -> DISCUSS-001 -> SYNTH-001
Deep: [EXPLORE-001..depth] -> [ANALYZE-001..depth] -> DISCUSS-001 -> ANALYZE-fix -> DISCUSS-002 -> ... -> SYNTH-001
Mode Auto-Detection
Parse --mode from arguments first. If not specified, auto-detect from topic description:
| Condition | Mode | Depth |
|---|---|---|
--mode=quick explicit or topic contains "quick/overview/fast" |
Quick | 1 |
--mode=deep explicit or topic contains "deep/thorough/detailed/comprehensive" |
Deep | N (from perspectives) |
| Default (no match) | Standard | N (from perspectives) |
Depth is determined by the number of selected analysis perspectives (e.g., architecture, implementation, performance, security, concept, comparison, decision). Quick mode always uses depth=1. Standard/Deep mode uses depth = number of selected perspectives.
Discussion Loop (Deep Mode)
coordinator(AskUser) -> DISCUSS-N(deepen) -> [optional ANALYZE-fix] -> coordinator(AskUser) -> ... -> SYNTH
Maximum 5 discussion rounds. If exceeded, force synthesis and offer continuation option.
Decision Recording Protocol
CRITICAL: Inherited from the original analyze-with-file command. During analysis, the following must be immediately recorded to discussion.md:
| Trigger | What to Record | Target Section |
|---|---|---|
| Direction choice | What was chosen, why, which alternatives were rejected | #### Decision Log |
| Key finding | Discovery content, impact scope, confidence level | #### Key Findings |
| Assumption change | Old assumption -> new understanding, reason for change, impact | #### Corrected Assumptions |
| User feedback | User's raw input, adoption/adjustment rationale | #### User Input |
Cadence Control
Beat model: Event-driven. Each beat = coordinator wakes -> processes callback -> spawns next phase -> STOP.
Beat Cycle (single beat)
=====================================================================
Event Coordinator Workers
---------------------------------------------------------------------
callback/resume --> +- handleCallback -+
| mark completed |
| check pipeline |
+- handleSpawnNext -+
| find ready tasks |
| spawn workers ---+--> [Worker A] Phase 1-5
| (parallel OK) --+--> [Worker B] Phase 1-5
+- STOP (idle) -----+ |
|
callback <----------------------------------------+
(next beat) SendMessage + TaskUpdate(completed)
=====================================================================
Discussion Loop Beat (Deep mode with configurable depth):
Phase 1 (explore): Spawn depth explorers simultaneously
EXPLORE-1, EXPLORE-2, ..., EXPLORE-depth (all parallel)
-> All complete -> coordinator wakes
Phase 2 (analyze): Spawn depth analysts simultaneously
ANALYZE-1, ANALYZE-2, ..., ANALYZE-depth (all parallel)
-> All complete -> coordinator wakes
Phase 3 (discuss): Spawn 1 discussant
DISCUSS-001
-> Complete -> coordinator asks user for direction
Phase 3a (loop): If user requests deeper analysis (Deep mode only):
-> Spawn ANALYZE-fix tasks -> DISCUSS-002 -> ask user -> repeat
-> Maximum 5 rounds
Phase 4 (synth): Spawn 1 synthesizer
SYNTHESIZE-001
-> Complete -> coordinator reports to user
Pipeline Beat Views:
Quick (3 beats, serial)
------------------------------------------------------
Beat 1 2 3
| | |
EXPLORE -> ANALYZE -> SYNTH
Standard (4 beats, parallel windows)
------------------------------------------------------
Beat 1 2 3 4
+----- ... ----+ +----- ... ----+ | |
E1 || E2 || EN A1 || A2 || AN -> DISCUSS -> SYNTH
+---- parallel ---+ +---- parallel ---+
Deep (4+ beats, with discussion loop)
------------------------------------------------------
Beat 1 2 3 3a... 4
+-...-+ +-...-+ | +-- loop --+ |
E1||EN A1||AN -> DISC -> A-fix->DISC -> SYNTH
(max 5 rounds)
Checkpoints:
| Trigger | Location | Behavior |
|---|---|---|
| Discussion round (Deep mode) | After DISCUSS-N completes | Pause, AskUser for direction/continuation |
| Discussion loop limit | >5 rounds | Force synthesis, offer continuation |
| Pipeline stall | No ready + no running | Check missing tasks, report to user |
Stall detection (coordinator handleCheck):
| Check | Condition | Resolution |
|---|---|---|
| Worker unresponsive | in_progress task with no callback | Report waiting tasks, suggest user resume |
| Pipeline deadlock | No ready + no running + has pending | Check blockedBy chain, report blockage |
| Discussion loop over limit | DISCUSS round > 5 | Terminate loop, output latest discussion state |
Task Metadata Registry
| Task ID | Role | Phase | Dependencies | Description |
|---|---|---|---|---|
| EXPLORE-1..depth | explorer | explore | (none) | Parallel codebase exploration, one per perspective |
| ANALYZE-1..depth | analyst | analyze | EXPLORE-1..depth (all complete) | Parallel deep analysis, one per perspective |
| DISCUSS-001 | discussant | discuss | ANALYZE-1..depth (all complete) | Process analysis results, identify gaps |
| ANALYZE-fix-N | analyst | discuss-loop | DISCUSS-N | Re-analysis for specific areas (Deep mode only) |
| DISCUSS-002..N | discussant | discuss-loop | ANALYZE-fix-N | Subsequent discussion rounds (Deep mode, max 5) |
| SYNTHESIZE-001 | synthesizer | synthesize | Last DISCUSS-N | Cross-perspective integration and conclusions |
Dynamic task creation: Coordinator creates EXPLORE-1 through EXPLORE-depth and ANALYZE-1 through ANALYZE-depth based on the number of selected perspectives. Discussion loop tasks (ANALYZE-fix-N, DISCUSS-002+) are created dynamically in Deep mode based on user feedback.
Coordinator Spawn Template
When coordinator spawns workers, use background mode (Spawn-and-Stop pattern). The coordinator determines the depth (number of parallel agents) based on selected perspectives.
Phase 1 - Spawn Explorers: Create depth explorer agents in parallel (EXPLORE-1 through EXPLORE-depth). Each explorer receives its assigned perspective/domain and agent name for task matching. All spawned with run_in_background:true. Coordinator stops after spawning and waits for callbacks.
Phase 2 - Spawn Analysts: After all explorers complete, create depth analyst agents in parallel (ANALYZE-1 through ANALYZE-depth). Each analyst receives its assigned perspective matching the corresponding explorer. All spawned with run_in_background:true. Coordinator stops.
Phase 3 - Spawn Discussant: After all analysts complete, create 1 discussant. It processes all analysis results and presents findings to user. Coordinator stops.
Phase 3a - Discussion Loop (Deep mode only): Based on user feedback, coordinator may create additional ANALYZE-fix and DISCUSS tasks. Loop continues until user is satisfied or 5 rounds reached.
Phase 4 - Spawn Synthesizer: After final discussion round, create 1 synthesizer. It integrates all explorations, analyses, and discussions into final conclusions. Coordinator stops.
Quick mode exception: When depth=1, spawn single explorer, single analyst, single discussant, single synthesizer -- all as simple agents without numbered suffixes.
Single spawn example (worker template used for all roles):
Task({
subagent_type: "general-purpose",
description: "Spawn <role> worker",
team_name: <team-name>,
name: "<agent-name>",
run_in_background: true,
prompt: `You are team "<team-name>" <ROLE> (<agent-name>).
Your agent name is "<agent-name>", use it for task discovery owner matching.
## Primary Instruction
All work must be executed by calling Skill for role definition:
Skill(skill="team-ultra-analyze", args="--role=<role> --agent-name=<agent-name>")
Current topic: <task-description>
Session: <session-folder>
## Role Rules
- Only process <PREFIX>-* tasks where owner === "<agent-name>"
- All output prefixed with [<role>] identifier
- Communicate only with coordinator
- Do not use TaskCreate for other roles
- Call mcp__ccw-tools__team_msg before every SendMessage
## Workflow
1. Call Skill -> load role definition and execution logic
2. Execute role.md 5-Phase process
3. team_msg + SendMessage result to coordinator
4. TaskUpdate completed -> check next task`
})
Team Configuration
| Setting | Value |
|---|---|
| Team name | ultra-analyze |
| Session directory | .workflow/.team/UAN-{slug}-{date}/ |
| Shared memory file | shared-memory.json |
| Analysis dimensions | architecture, implementation, performance, security, concept, comparison, decision |
| Max discussion rounds | 5 |
Unified Session Directory
.workflow/.team/UAN-{slug}-{YYYY-MM-DD}/
+-- shared-memory.json # Exploration/analysis/discussion/synthesis shared memory
+-- discussion.md # Understanding evolution and discussion timeline
+-- explorations/ # Explorer output
| +-- exploration-001.json
| +-- exploration-002.json
+-- analyses/ # Analyst output
| +-- analysis-001.json
| +-- analysis-002.json
+-- discussions/ # Discussant output
| +-- discussion-round-001.json
+-- conclusions.json # Synthesizer output
+-- wisdom/ # Cross-task knowledge
| +-- learnings.md
| +-- decisions.md
| +-- conventions.md
| +-- issues.md
Session Resume
Coordinator supports --resume / --continue for interrupted sessions:
- Scan
.workflow/.team/UAN-*/for active/paused sessions - Multiple matches -> AskUserQuestion for selection
- Audit TaskList -> reconcile session state with task status
- Reset in_progress -> pending (interrupted tasks)
- Rebuild team and spawn needed workers only
- Create missing tasks with correct blockedBy
- Kick first executable task -> Phase 4 coordination loop
Error Handling
| Scenario | Resolution |
|---|---|
| Unknown --role value | Error with available role list |
| Missing --role arg | Orchestration Mode -> coordinator |
| Role file not found | Error with expected path (roles/{name}/role.md) |
| Task prefix conflict | Log warning, proceed |
| Discussion loop stuck >5 rounds | Force synthesis, offer continuation |
| CLI tool unavailable | Fallback chain: gemini -> codex -> manual analysis |
| Explorer agent fails | Continue with available context, note limitation |