coordinator-patterns
1
总安装量
1
周安装量
#42136
全站排名
安装命令
npx skills add https://github.com/penkzhou/swiss-army-knife-plugin --skill coordinator-patterns
Agent 安装分布
mcpjam
1
claude-code
1
windsurf
1
crush
1
cline
1
Skill 文档
Coordinator éç¨æ¨¡å¼
æ¬ skill å®ä¹äºææ coordinator agents å ±äº«çéç¨æ¨¡å¼ï¼å æ¬ï¼
- Phase éªè¯é»è¾
- é误å¤ç模å¼
- TodoWrite 管ç
- ç¶æè¯´æ
Phase éªè¯é»è¾
ææ master-coordinator å¿
é¡»å¨åå§åæ¶éªè¯ phase åæ°ï¼
def validate_phase(phase_arg, valid_phases):
"""
éªè¯ phase åæ°
Args:
phase_arg: ç¨æ·ä¼ å
¥ç phase åæ°ï¼å¦ "0,1,2" æ "all"ï¼
valid_phases: ææ phase å表ï¼å¦ ["0", "1", "2", "3", "4", "5", "all"]ï¼
Returns:
(is_valid, result): 妿ææï¼result æ¯ phase å表ï¼å¦ææ æï¼result æ¯é误ååº
"""
if phase_arg == "all":
# è¿åæææ°å phasesï¼æé¤ "all"ï¼
return True, sorted([p for p in valid_phases if p != "all"], key=int)
phases = phase_arg.split(",")
invalid_phases = [p for p in phases if p not in valid_phases]
if invalid_phases:
return False, {
"status": "failed",
"error": {
"code": "INVALID_PHASE",
"message": f"æ æç phase åæ°: {invalid_phases}",
"valid_values": valid_phases,
"received": phase_arg,
"suggestion": f"ææå¼: 0-{len(valid_phases)-2} çæ°åæ 'all'ï¼å¤ä¸ªç¨éå·åé"
}
}
return True, sorted(set(phases), key=int)
å工使µçææ Phases
| 工使µ | ææ Phases | 说æ |
|---|---|---|
| Bugfix | 0-5 | 6 é¶æ®µ |
| PR Review | 0-7 | 8 é¶æ®µ |
| CI Job | 0-6 | 7 é¶æ®µ |
| Execute Plan | 0-5 | 6 é¶æ®µ |
é误å¤ç模å¼
ææ coordinator å¿ é¡»å¤ç以ä¸é误类åï¼
JSON è§£æé误
å½ agent è¿åçå å®¹æ æ³è§£æä¸ºææ JSON æ¶ï¼
try:
result = json.loads(agent_output)
except json.JSONDecodeError as e:
return {
"status": "failed",
"error": {
"code": "JSON_PARSE_ERROR",
"message": "Agent è¾åºæ æ³è§£æä¸º JSON",
"phase": current_phase,
"agent": agent_name,
"parse_error": str(e),
"raw_output_preview": agent_output[:500], # å 500 å符ä¾è°è¯
"suggestion": "æ£æ¥ agent æ¯å¦æ£ç¡®è¿å JSON æ ¼å¼ï¼æéè¯å½ä»¤"
}
}
Agent æ§è¡è¶ æ¶
if agent_result.error.code == "TIMEOUT":
return {
"status": "failed",
"error": {
"code": "AGENT_TIMEOUT",
"message": f"Agent {agent_name} æ§è¡è¶
æ¶",
"phase": current_phase,
"timeout_ms": agent_result.error.timeout_ms,
"suggestion": "ä»»å¡å¯è½è¿äºå¤æï¼å»ºè®®æåæç®åè¾å
¥"
}
}
ååºæªæ
å½ agent è¾åºè¶ è¿é¿åº¦éå¶è¢«æªææ¶ï¼
if agent_result.truncated:
# è®°å½è¦åä½å°è¯ç»§ç»
warnings.append({
"code": "OUTPUT_TRUNCATED",
"message": f"Agent {agent_name} è¾åºè¢«æªæ",
"original_length": agent_result.original_length,
"truncated_length": agent_result.truncated_length,
"impact": "å¯è½ä¸¢å¤±é¨åè¯æä¿¡æ¯"
})
# 妿å
³é®å段缺失ï¼å忢
if not validate_required_fields(agent_result):
return {
"status": "failed",
"error": {
"code": "TRUNCATION_DATA_LOSS",
"message": "è¾åºæªæå¯¼è´å
³é®æ°æ®ä¸¢å¤±",
"missing_fields": get_missing_fields(agent_result),
"suggestion": "请ç®åè¾å
¥æåæ¹å¤ç"
}
}
ç¨æ·åæ¶
if user_choice in ["忶", "忢"]:
return {
"status": "user_cancelled",
"phase": current_phase,
"reason": "ç¨æ·éæ©åæ¢æ§è¡",
"completed_work": {...} # 已宿çå·¥ä½
}
Agent è°ç¨å¤±è´¥ï¼éç¨ï¼
if agent_result.status == "failed":
return {
"status": "failed",
"error": {
"phase": current_phase,
"agent": agent_name,
"code": agent_result.error.code,
"message": agent_result.error.message
}
}
é误æ¢å¤æºå¶ï¼å¯éï¼
å¯¹äºæ¯æé误æ¢å¤ç coordinatorï¼
# 坿¢å¤é误类å
RECOVERABLE_ERRORS = {
"TIMEOUT": True, # è¶
æ¶å¯éè¯
"RATE_LIMIT": True, # éæµå¯éè¯
"OUTPUT_TRUNCATED": True, # æªæå¯ç®åè¾å
¥éè¯
}
MAX_RETRIES = 2 # æå¤éè¯ 2 次
def is_recoverable(error):
"""夿é误æ¯å¦å¯æ¢å¤"""
return RECOVERABLE_ERRORS.get(error.code, False)
TodoWrite 管ç
ææ coordinator å¿ é¡»ä½¿ç¨ TodoWrite è·è¸ªæ§è¡è¿åº¦ï¼
åå§å Todo å表
def create_phase_todos(phases, phase_descriptions):
"""
å建 Phase ä»»å¡å表
Args:
phases: Phase å表ï¼å¦ ["0", "1", "2"]ï¼
phase_descriptions: Phase æè¿°æ å°ï¼å¦ {"0": ("é®é¢æ¶é", "æ¶éä¸"), ...}ï¼
Returns:
todos å表
"""
todos = []
for i, phase in enumerate(phases):
desc, active_form = phase_descriptions.get(phase, (f"Phase {phase}", f"æ§è¡ Phase {phase}"))
todos.append({
"content": f"Phase {phase}: {desc}",
"status": "in_progress" if i == 0 else "pending",
"activeForm": active_form
})
return todos
æ´æ° Todo ç¶æ
def on_phase_complete(todos, phase_index):
"""宿 Phase åæ´æ°ç¶æ"""
todos[phase_index]["status"] = "completed"
if phase_index + 1 < len(todos):
todos[phase_index + 1]["status"] = "in_progress"
return todos
å工使µç Phase æè¿°
Bugfix 工使µï¼
BUGFIX_PHASES = {
"0": ("é®é¢æ¶éä¸åç±»", "æ¶éä¸"),
"1": ("è¯æåæ", "åæä¸"),
"2": ("æ¹æ¡è®¾è®¡", "设计ä¸"),
"3": ("æ¹æ¡ææ¡£å", "ææ¡£åä¸"),
"4": ("宿½æ§è¡", "æ§è¡ä¸"),
"5": ("éªè¯ä¸å®¡æ¥", "审æ¥ä¸")
}
PR Review 工使µï¼
PR_REVIEW_PHASES = {
"0": ("åå§å", "åå§åä¸"),
"1": ("è¯è®ºè·å", "è·åè¯è®ºä¸"),
"2": ("è¯è®ºè¿æ»¤", "è¿æ»¤è¯è®ºä¸"),
"3": ("è¯è®ºåç±»", "åç±»è¯è®ºä¸"),
"4": ("ä¿®å¤åè°", "åè°ä¿®å¤ä¸"),
"5": ("åå¤çæ", "çæåå¤ä¸"),
"6": ("åå¤æäº¤", "æäº¤åå¤ä¸"),
"7": ("审æ¥ä¸æ±æ»", "å®¡æ¥æ±æ»ä¸")
}
CI Job 工使µï¼
CI_JOB_PHASES = {
"0": ("åå§å", "åå§åä¸"),
"1": ("æ¥å¿è·å", "è·åæ¥å¿ä¸"),
"2": ("失败åç±»", "å类失败ä¸"),
"3": ("æ ¹å åæ", "åææ ¹å ä¸"),
"4": ("ä¿®å¤æ§è¡", "æ§è¡ä¿®å¤ä¸"),
"5": ("éªè¯ä¸å®¡æ¥", "éªè¯å®¡æ¥ä¸"),
"6": ("æ±æ»æ¥å", "çææ¥åä¸")
}
Execute Plan 工使µï¼
EXECUTE_PLAN_PHASES = {
"0": ("åå§åä¸è®¡åè§£æ", "åå§åä¸"),
"1": ("计åéªè¯", "éªè¯ä¸"),
"2": ("æ¹æ¡ç»å", "ç»åæ¹æ¡ä¸"),
"3": ("æ¹æ¬¡æ§è¡", "æ§è¡ä¸"),
"4": ("Review 审æ¥", "审æ¥ä¸"),
"5": ("æ±æ»æ¥å", "çææ¥åä¸")
}
ç¶æè¯´æ
ææ coordinator è¾åºç status åæ®µä½¿ç¨ç»ä¸çè¯ä¹ï¼
| status | å«ä¹ | éç¨åºæ¯ |
|---|---|---|
success |
ææ Phase æå宿 | æ£å¸¸å®æ |
failed |
æä¸ª Phase å¤±è´¥ä¸æ æ³ç»§ç» | ä¸å¯æ¢å¤é误 |
partial |
é¨åä»»å¡å¤±è´¥ï¼ä½æµç¨å®æ | æå©ä½é®é¢ |
user_cancelled |
ç¨æ·éæ©åæ¢ | ç¨æ·ä¸»å¨åæ¶ |
dry_run_complete |
Dry run 模å¼å®æåæ | –dry-run æ¨¡å¼ |
å¿ å¡«è¾åºå段
æ¯ä¸ª coordinator ç JSON è¾åºå¿ é¡»å å«ï¼
{
"status": "success|failed|partial|user_cancelled|dry_run_complete",
"agent": "xxx-master-coordinator",
"phases_completed": ["phase_0", "phase_1", ...],
"errors": [],
"warnings": []
}
å ³é®åå
- éç¯æ§è¡ï¼ææé»è¾å¨ agent å é¨å®æï¼ä¸ä¾èµå½ä»¤å±
- ç¶æéæï¼æ¯ä¸ª Phase çè¾åºé½ä¿åå¹¶ä¼ éå°ä¸ä¸ Phase
- ç¨æ·æ§å¶ï¼å ³é®å³çç¹ä½¿ç¨ AskUserQuestion 询é®ç¨æ·
- è¿åº¦å¯è§ï¼ä½¿ç¨ TodoWrite è®©ç¨æ·äºè§£æ§è¡è¿åº¦
- é误é离ï¼å个任å¡å¤±è´¥ä¸åºå½±åå ¶ä»ç¬ç«ä»»å¡