ccw-loop-b
npx skills add https://github.com/catlog22/claude-code-workflow --skill ccw-loop-b
Agent 安装分布
Skill 文档
CCW Loop-B – Hybrid Orchestrator Pattern
åè°å¨ + ä¸ç¨ worker çè¿ä»£å¼å工使µãæ¯æä¸ç§æ§è¡æ¨¡å¼ï¼Interactive / Auto / Parallelï¼ï¼æ¯ä¸ª action ç±ç¬ç« worker agent æ§è¡ï¼åè°å¨è´è´£è°åº¦ãç¶æç®¡çåç»ææ±èã
Architecture Overview
+------------------------------------------------------------+
| Main Coordinator |
| èè´£: ç¶æç®¡ç + worker è°åº¦ + ç»ææ±è + ç¨æ·äº¤äº |
+------------------------------------------------------------+
| | |
v v v
+----------------+ +----------------+ +----------------+
| Worker-Develop | | Worker-Debug | | Worker-Validate|
| 䏿³¨: 代ç å®ç° | | 䏿³¨: é®é¢è¯æ | | 䏿³¨: æµè¯éªè¯ |
+----------------+ +----------------+ +----------------+
| | |
v v v
.workers/ .workers/ .workers/
develop.output.json debug.output.json validate.output.json
Subagent API
| API | ä½ç¨ | 注æäºé¡¹ |
|---|---|---|
spawn_agent({ message }) |
å建 workerï¼è¿å agent_id |
馿¡ message å è½½è§è² |
wait({ ids, timeout_ms }) |
çå¾ ç»æ | å¯ä¸åç»æå ¥å£ï¼é close |
send_input({ id, message }) |
ç»§ç»äº¤äº/è¿½é® | interrupt=true æ
ç¨ |
close_agent({ id }) |
å ³éåæ¶ | ä¸å¯éï¼ç¡®è®¤ä¸å交äºåæå ³é |
Key Design Principles
- åè°å¨ä¿æè½»é: åªåè°åº¦åç¶æç®¡çï¼å ·ä½å·¥ä½äº¤ç» worker
- Worker èè´£åä¸: æ¯ä¸ª worker 䏿³¨ä¸ä¸ªé¢åï¼develop/debug/validateï¼
- è§è²è·¯å¾ä¼ é: Worker èªå·±è¯»åè§è²æä»¶ï¼ä¸»æµç¨ä¸ä¼ éå 容
- å»¶è¿ close_agent: 确认ä¸åéè¦äº¤äºåæå ³é worker
- 䏤鶿®µå·¥ä½æµ: 夿任å¡å æ¾æ¸ åæ§è¡ï¼åå°è¿å·¥
- æ¹éçå¾
ä¼å: å¹¶è¡æ¨¡å¼ç¨
wait({ ids: [...] })æ¹éçå¾ - ç»ææ åå: Worker è¾åºéµå¾ªç»ä¸ WORKER_RESULT æ ¼å¼
- çµæ´»æ¨¡å¼åæ¢: æ ¹æ®ä»»å¡å¤æåº¦éæ© interactive/auto/parallel
Arguments
| Arg | Required | Description |
|---|---|---|
| TASK | One of TASK or –loop-id | Task description (for new loop) |
| –loop-id | One of TASK or –loop-id | Existing loop ID to continue |
| –mode | No | interactive (default) / auto / parallel |
Execution Modes
Mode: Interactive (default)
åè°å¨å±ç¤ºèåï¼ç¨æ·éæ© actionï¼spawn å¯¹åº worker æ§è¡ã
Coordinator -> Show menu -> User selects -> spawn worker -> wait -> Display result -> Loop
Mode: Auto
èªå¨æé¢è®¾é¡ºåºæ§è¡ï¼worker 宿ååè°å¨å³å®ä¸ä¸æ¥ã
Init -> Develop -> [if issues] Debug -> Validate -> [if fail] Loop back -> Complete
Mode: Parallel
å¹¶è¡ spawn å¤ä¸ª workerï¼batch wait æ±èç»æï¼åè°å¨ç»¼åå³çã
Coordinator -> spawn [develop, debug, validate] in parallel -> wait({ ids: all }) -> Merge -> Decide
Execution Flow
Input Parsing:
ââ Parse arguments (TASK | --loop-id + --mode)
ââ Convert to structured context (loopId, state, mode)
Phase 1: Session Initialization
ââ Ref: phases/01-session-init.md
ââ Create new loop OR resume existing loop
ââ Initialize state file and directory structure
ââ Output: loopId, state, progressDir, mode
Phase 2: Orchestration Loop
ââ Ref: phases/02-orchestration-loop.md
ââ Mode dispatch: interactive / auto / parallel
ââ Worker spawn with structured prompt (Goal/Scope/Context/Deliverables)
ââ Wait + timeout handling + result parsing
ââ State update per iteration
ââ close_agent on loop exit
Phase Reference Documents (read on-demand when phase executes):
| Phase | Document | Purpose |
|---|---|---|
| 1 | phases/01-session-init.md | Argument parsing, state creation/resume, directory init |
| 2 | phases/02-orchestration-loop.md | 3-mode orchestration, worker spawn, batch wait, result merge |
Data Flow
User Input (TASK | --loop-id + --mode)
â
[Parse Arguments]
â loopId, state, mode
Phase 1: Session Initialization
â loopId, state (initialized/resumed), progressDir
Phase 2: Orchestration Loop
â
ââââ Interactive Mode âââââââââââââââââââââââââââââââââââ
â showMenu â user selects â spawn worker â wait â â
â parseResult â updateState â close worker â loop â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
ââââ Auto Mode ââââââââââââââââââââââââââââââââââââââââââ
â selectNext â spawn worker â wait â parseResult â â
â updateState â close worker â [loop_back?] â next â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
ââââ Parallel Mode ââââââââââââââââââââââââââââââââââââââ
â spawn [develop, debug, validate] â batch wait â â
â mergeOutputs â coordinator decides â close all â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
return finalState
Session Structure
{projectRoot}/.workflow/.loop/
âââ {loopId}.json # Master state (API + Skill shared)
âââ {loopId}.workers/ # Worker structured outputs
â âââ init.output.json
â âââ develop.output.json
â âââ debug.output.json
â âââ validate.output.json
â âââ complete.output.json
âââ {loopId}.progress/ # Human-readable progress
âââ develop.md
âââ debug.md
âââ validate.md
âââ summary.md
State Management
Master state file: {projectRoot}/.workflow/.loop/{loopId}.json
{
"loop_id": "loop-b-20260122-abc123",
"title": "Task title",
"description": "Full task description",
"mode": "interactive | auto | parallel",
"status": "running | paused | completed | failed",
"current_iteration": 0,
"max_iterations": 10,
"created_at": "ISO8601",
"updated_at": "ISO8601",
"skill_state": {
"phase": "init | develop | debug | validate | complete",
"action_index": 0,
"workers_completed": [],
"parallel_results": null,
"pending_tasks": [],
"completed_tasks": [],
"findings": []
}
}
Control Signal Checking: åè°å¨å¨æ¯æ¬¡ spawn worker åæ£æ¥ state.status:
runningâ continuepausedâ exit gracefully, wait for resumefailedâ terminate
Recovery: If state corrupted, rebuild from .progress/ markdown files and .workers/*.output.json.
Worker Catalog
| Worker | Role File | Purpose | Output Files |
|---|---|---|---|
| init | ccw-loop-b-init.md | ä¼è¯åå§åãä»»å¡è§£æ | init.output.json |
| develop | ccw-loop-b-develop.md | 代ç å®ç°ãéæ | develop.output.json, develop.md |
| debug | ccw-loop-b-debug.md | é®é¢è¯æãå设éªè¯ | debug.output.json, debug.md |
| validate | ccw-loop-b-validate.md | æµè¯æ§è¡ãè¦çç | validate.output.json, validate.md |
| complete | ccw-loop-b-complete.md | æ»ç»æ¶å°¾ | complete.output.json, summary.md |
Worker Dependencies
| Worker | Depends On | Leads To |
|---|---|---|
| init | – | develop (auto) / menu (interactive) |
| develop | init | validate / debug |
| debug | init | develop / validate |
| validate | develop or debug | complete / develop (if fail) |
| complete | – | Terminal |
Worker Sequences
Simple Task (Auto): init â develop â validate â complete
Complex Task (Auto): init â develop â validate (fail) â debug â develop â validate â complete
Bug Fix (Auto): init â debug â develop â validate â complete
Analysis (Parallel): init â [develop â debug â validate] â complete
Interactive: init â menu â user selects â worker â menu â ...
Worker Prompt Protocol
Spawn Message Structure (§7.1)
function buildWorkerPrompt(action, loopId, state) {
return `
## TASK ASSIGNMENT
### MANDATORY FIRST STEPS (Agent Execute)
1. **Read role definition**: ~/.codex/agents/ccw-loop-b-${action}.md (MUST read first)
2. Read: ${projectRoot}/.workflow/project-tech.json
3. Read: ${projectRoot}/.workflow/project-guidelines.json
---
Goal: ${goalForAction(action, state)}
Scope:
- å¯å: ${allowedScope(action)}
- ä¸å¯å: ${forbiddenScope(action)}
- ç®å½éå¶: ${directoryScope(action, state)}
Context:
- Loop ID: ${loopId}
- State: ${projectRoot}/.workflow/.loop/${loopId}.json
- Output: ${projectRoot}/.workflow/.loop/${loopId}.workers/${action}.output.json
- Progress: ${projectRoot}/.workflow/.loop/${loopId}.progress/${action}.md
Deliverables:
- æ WORKER_RESULT æ ¼å¼è¾åº
- åå
¥ output.json å progress.md
Quality bar:
- ${qualityCriteria(action)}
`
}
å ³é®: è§è²æä»¶ç± worker èªå·±è¯»åï¼ä¸»æµç¨åªä¼ éè·¯å¾ãä¸åµå ¥è§è²å 容ã
Worker Output Format (WORKER_RESULT)
WORKER_RESULT:
- action: {action_name}
- status: success | failed | needs_input
- summary: <brief summary>
- files_changed: [list]
- next_suggestion: <suggested next action>
- loop_back_to: <action name if needs loop back, or null>
DETAILED_OUTPUT:
<action-specific structured output>
Two-Phase Clarification (§5.2)
Worker éå°æ¨¡ç³éæ±æ¶éç¨ä¸¤é¶æ®µæ¨¡å¼:
é¶æ®µ 1: Worker è¾åº CLARIFICATION_NEEDED + Open questions
é¶æ®µ 2: åè°å¨æ¶éç¨æ·åç â send_input â Worker ç»§ç»æ§è¡
// è§£æ worker æ¯å¦éè¦æ¾æ¸
if (output.includes('CLARIFICATION_NEEDED')) {
const userAnswers = await collectUserAnswers(output)
send_input({
id: workerId,
message: `## CLARIFICATION ANSWERS\n${userAnswers}\n\n## CONTINUE EXECUTION`
})
const finalResult = wait({ ids: [workerId], timeout_ms: 600000 })
}
Parallel Split Strategy (§6)
Strategy 1: æèè´£åæåï¼æ¨èï¼
| Worker | èè´£ | 交ä»ç© | ç¦æ¢äºé¡¹ |
|---|---|---|---|
| develop | å®ä½å ¥å£ãè°ç¨é¾ãå®ç°æ¹æ¡ | åæ´ç¹æ¸ å | ä¸åæµè¯ |
| debug | é®é¢è¯æãé£é©è¯ä¼° | é®é¢æ¸ å+ä¿®å¤å»ºè®® | ä¸å代ç |
| validate | æµè¯çç¥ãè¦çåæ | æµè¯ç»æ+è´¨éæ¥å | 䏿¹å®ç° |
Strategy 2: ææ¨¡ååæå
Worker 1: src/auth/** â è®¤è¯æ¨¡ååæ´
Worker 2: src/api/** â API å±åæ´
Worker 3: src/database/** â æ°æ®å±åæ´
æååå
- æä»¶é离: é¿å å¤ä¸ª worker åæ¶ä¿®æ¹å䏿件
- èè´£åä¸: æ¯ä¸ª worker åªåä¸ä»¶äº
- è¾¹çæ¸
æ°: è¶
åºèå´ç¨
CLARIFICATION_NEEDED请æ±ç¡®è®¤ - æå°ä¸ä¸æ: åªä¼ é宿任塿éçæå°ä¿¡æ¯
Result Merge (Parallel Mode)
function mergeWorkerOutputs(outputs) {
return {
develop: parseWorkerResult(outputs.develop),
debug: parseWorkerResult(outputs.debug),
validate: parseWorkerResult(outputs.validate),
conflicts: detectConflicts(outputs), // æ£æ¥ worker é´å»ºè®®å²çª
merged_at: getUtc8ISOString()
}
}
å²çªæ£æµ: å½å¤ä¸ª worker 建议修æ¹å䏿件æ¶ï¼åè°å¨æ è®°å²çªï¼ç±ç¨æ·å³å®ã
TodoWrite Pattern
Phase-Level Tracking (Attached)
[
{"content": "Phase 1: Session Initialization", "status": "completed"},
{"content": "Phase 2: Orchestration Loop (auto mode)", "status": "in_progress"},
{"content": " â Worker: init", "status": "completed"},
{"content": " â Worker: develop (task 2/5)", "status": "in_progress"},
{"content": " â Worker: validate", "status": "pending"},
{"content": " â Worker: complete", "status": "pending"}
]
Parallel Mode Tracking
[
{"content": "Phase 1: Session Initialization", "status": "completed"},
{"content": "Phase 2: Parallel Analysis", "status": "in_progress"},
{"content": " â Worker: develop (parallel)", "status": "in_progress"},
{"content": " â Worker: debug (parallel)", "status": "in_progress"},
{"content": " â Worker: validate (parallel)", "status": "in_progress"},
{"content": " â Merge results", "status": "pending"}
]
Core Rules
- Start Immediately: First action is TodoWrite initialization, then Phase 1 execution
- Progressive Phase Loading: Read phase docs ONLY when that phase is about to execute
- Parse Every Output: Extract WORKER_RESULT from worker output for next decision
- Worker çå½å¨æ: spawn â wait â [send_input if needed] â closeï¼ä¸é¿æä¿ç worker
- ç»ææä¹
å: Worker è¾åºåå
¥
{projectRoot}/.workflow/.loop/{loopId}.workers/ - ç¶æåæ¥: æ¯æ¬¡ worker å®æåæ´æ° master state
- è¶ æ¶å¤ç: send_input è¯·æ±æ¶æï¼åè¶ æ¶å使ç¨å·²æç»æç»§ç»
- DO NOT STOP: Continuous execution until completed, paused, or max iterations
Error Handling
| Error Type | Recovery |
|---|---|
| Worker timeout | send_input è¯·æ±æ¶æ â åè¶ æ¶åè·³è¿ |
| Worker failed | Log error, åè°å¨å³çæ¯å¦éè¯ |
| Batch wait partial timeout | 使ç¨å·²å®æç»æç»§ç» |
| State corrupted | ä» progress æä»¶å worker output é建 |
| Conflicting worker results | æ è®°å²çªï¼ç±ç¨æ·å³å® |
| Max iterations reached | çææ»ç»ï¼è®°å½æªå®æé¡¹ |
Coordinator Checklist
Before Each Phase
- Read phase reference document
- Check current state and control signals
- Update TodoWrite with phase tasks
After Each Worker
- Parse WORKER_RESULT from output
- Persist output to
.workers/{action}.output.json - Update master state file
- close_agent (确认ä¸åéè¦äº¤äº)
- Determine next action (continue / loop back / complete)
Reference Documents
| Document | Purpose |
|---|---|
| workers/ | Worker å®ä¹ (init, develop, debug, validate, complete) |
Usage
# Interactive mode (default)
/ccw-loop-b TASK="Implement user authentication"
# Auto mode
/ccw-loop-b --mode=auto TASK="Fix login bug"
# Parallel analysis mode
/ccw-loop-b --mode=parallel TASK="Analyze and improve payment module"
# Resume existing loop
/ccw-loop-b --loop-id=loop-b-20260122-abc123