# ADR-095: 12-Agent Claude SDK 整合 × Telegram 視覺分派

> **狀態**: 🟡 批准實作中
> **日期**: 2026-04-24
> **決策者**: 統帥 + 12-Agent 全景分析團隊

## 背景

AWOOOI 已有兩套 agent 系統：

1. **ADR-009 OpenClaw Agent Teams**（內部 Python class，`src/agents/critic_agent.py` 等）
   - 3 核心 agent：SecurityAgent (weight=0.4) / BlastRadiusAgent (0.3) / ActionPlannerAgent (0.3)
   - ConsensusEngine 加權投票
   - 用於 incident 決策自動化

2. **ADR-082 Phase 2 Multi-Agent Collaboration**（5-agent 辯證）
   - Diagnostician / Solver / Reviewer / Critic / Coordinator
   - `agent_orchestrator.py` 編排，走 `ai_router.py` (Ollama/NIM)
   - 用於 alert → incident 決策鏈

**第三套 agent 系統**：Claude Code `.claude/agents/*.md` 12 份檔案定義（critic / debugger / db-expert / planner / fullstack-engineer / frontend-designer / refactor-specialist / migration-engineer / onboarder / tool-expert / web-researcher / vuln-verifier）。原本只供 Claude Code CLI 使用，**後端 AWOOOI API 未曾調用**。

使用者需求：把這 12 位 Claude Code agent 透過 **Hermes NL 介面**（ADR-094）暴露給 Telegram 群組使用者，以視覺化方式呈現「12 位專家協作」。

## 決策

**視覺分派模式（非多 bot）**，三層共存：

| 系統 | 用途 | 後端 | 狀態 |
|------|------|------|------|
| ADR-009 3 核心 agent | Incident 決策自動化 | Python class | 保留 |
| ADR-082 5-agent 辯證 | Alert → incident 鏈 | `ai_router.py` → Ollama/NIM | 保留 |
| **本 ADR-095 12 Claude Code agent** | Hermes NL 對話回覆 | **`claude-agent-sdk` → Anthropic API** | **新增** |

### 日常工作模式（Game Rules v1）

除 Hermes 對外視覺分派外，12-agent 也定義為專案內部的任務協作模型：

- `12 agents` = 任務分工角色
- `.agents/skills/*.md` 9 份 = 工程守則與落地規範
- 實際工作流 = **先用 12-agent 判型與派工，再落到對應 skill 執行**

對照原則：

| 類型 | 用途 |
|------|------|
| `debugger / db-expert / vuln-verifier / migration-engineer` | 問題診斷與高風險鏈路處理 |
| `frontend-designer / fullstack-engineer / refactor-specialist` | UI、功能落地與重構 |
| `planner / onboarder / critic / web-researcher / tool-expert` | 規劃、導覽、審查、查證、工具整合 |

常設派工規則：

| 任務 | 主責 | 預設協作 |
|------|------|---------|
| 查根因 / 查斷點 | `debugger` | `db-expert`, `tool-expert`, `critic` |
| learning / migration / SQL | `db-expert` | `debugger`, `refactor-specialist` |
| UI / 戰情中心 / i18n | `frontend-designer` | `fullstack-engineer`, `critic` |
| 前後端完整落地 | `fullstack-engineer` | `frontend-designer`, `debugger`, `db-expert` |
| 重構 / 抽層 / 技術債 | `refactor-specialist` | `migration-engineer`, `critic`, `db-expert` |
| Gitea / CI/CD / deploy | `migration-engineer` | `tool-expert`, `vuln-verifier`, `critic` |
| Telegram / approval / callback / 權限 | `vuln-verifier` | `debugger`, `db-expert`, `critic` |

正式規則文件見：`docs/12-agent-game-rules.md`

### 視覺規格（單 bot，用文字前綴模擬 12 分身）

| Agent | Emoji | Hashtag | 中文短稱 | TG handle（文字 prefix，非真 bot）|
|-------|-------|---------|---------|--------------------------------|
| critic | 🔍 | #審查 | 找碴專家 | @hermes-critic |
| vuln-verifier | 🎯 | #漏洞驗證 | 漏洞驗證官 | @hermes-verifier |
| debugger | 🐛 | #除錯 | 除錯偵探 | @hermes-debugger |
| db-expert | 💾 | #資料庫 | DB 軍師 | @hermes-db |
| planner | 📋 | #拆解 | 任務拆解官 | @hermes-planner |
| fullstack-engineer | 🛠️ | #工程 | 全端工程師 | @hermes-engineer |
| frontend-designer | 🎨 | #設計 | 前端設計師 | @hermes-designer |
| refactor-specialist | ♻️ | #重構 | 重構專家 | @hermes-refactor |
| migration-engineer | 🚚 | #升級 | 升級工程師 | @hermes-migration |
| onboarder | 🗺️ | #導覽 | 領航員 | @hermes-onboarder |
| tool-expert | 🧰 | #工具 | 工具專家 | @hermes-tools |
| web-researcher | 📚 | #文檔 | 文獻研究員 | @hermes-web |

### ADR-009 ConsensusEngine weights 擴充（向後相容）

```python
# 保留 SecurityAgent weight=0.4（資安永遠最高）
# 其餘 11 agent 分配 0.6
CONSENSUS_WEIGHTS = {
    "SecurityAgent": 0.4,      # 保留 (ADR-009)
    "BlastRadiusAgent": 0.15,  # 原 0.3 → 0.15
    "ActionPlannerAgent": 0.15, # 原 0.3 → 0.15
    # 新增 9 個 Claude Code agent（只有「核心 3 Consensus + 9 按需」模式下才參與投票）
    "critic": 0.06,
    "debugger": 0.06,
    "db-expert": 0.04,
    "vuln-verifier": 0.04,
    "planner": 0.02,
    "fullstack-engineer": 0.02,
    "refactor-specialist": 0.02,
    "migration-engineer": 0.02,
    "tool-expert": 0.02,
    # onboarder / frontend-designer / web-researcher 不參與投票（諮詢型）
}
# sum = 1.0
```

## 理由

### 為什麼視覺分派而非多 bot
- Telegram API 硬性封鎖 bot-to-bot 訊息（ADR-094 §web-researcher 查證）
- 單人維運 12 token 違反最小憑證面（`reference_secrets_architecture_v2`）
- 視覺識別可達成 80% 多 bot 效果（文字 prefix + emoji + hashtag 三件套）
- 未來若真要多 bot 化，本方案是**前向相容**的（加 token 即可）

### 命名隔離（P0-D3 修）
- `.claude/agents/critic.md`（Claude Code subagent）與 `src/agents/critic_agent.py`（ADR-082 內部 dataclass）**同名不同物**
- 對外 TG 統一呈現為 `@hermes-critic`，內部程式碼名稱不改
- 映射表：`apps/api/src/hermes/display_names.py`

### Claude Agent SDK 整合範式
- SDK 版本：`claude-agent-sdk>=0.1.50`（已裝）→ 0.1.65（最新，升級決策待 T1.2）
- Loader：`apps/api/src/hermes/agent_loader.py` 解析 frontmatter → `AgentDefinition`（camelCase 鍵）
- Hooks：`hermes_hooks.py` **完整複製** `.claude/hooks/awoooi-guard.js` 9 條 DENY 正則（Node hook 對 SDK subprocess 無效，必須 Python 重做）
- MCP：registry 加 `asyncio.Semaphore(5)` 防併發過載

## 後果

### 優點
- 12 位 Claude Code agent 完整對外，覆蓋 SRE 戰情室 80% 諮詢情境
- 視覺分派直觀（`🔍 找碴專家 @hermes-critic #審查`）
- Agent `.md` 定義可熱更新（watch mtime）

### 缺點
- **命名衝突風險**：`.claude/agents/critic.md` vs `src/agents/critic_agent.py` 未來新人易混淆 → 強制 `display_names.py` 單點映射
- **Anthropic API 費用**：每個 NL 回覆 ~$0.01-0.05（Sonnet），濫用需 budget 管控
- **SDK subprocess**：每個 `ClaudeSDKClient` = 一個 subprocess，建議 pool 5 個 client 複用

### 風險
- **12 agent `.md` 變更守門**：需加 CODEOWNERS 強制 PR review，否則誰都能改 system prompt
- **Consensus weights 重分配對現有 incident 決策的回歸影響**：security=0.4 鎖定可緩解，其他 weights 需單元測試覆蓋
- **subagent 無法 spawn 自己的 subagent**（SDK 官方限制）→ 12 agent 不能互相調用，必須由 Hermes router 統一編排

## Rollback

- Feature flag `HERMES_12AGENT_ENABLED=off` → 全部 NL 回覆走 `debugger` 預設 agent
- ConsensusEngine 如有回歸：`ENABLE_12AGENT_CONSENSUS=false` 退回 ADR-009 原 3 agent
- 12 agent `.md` 檔案如有污染：從 `backup/pre-migration-*` tag 還原

## 參考

- 上位：[ADR-009](ADR-009-openclaw-agent-teams.md) / [ADR-082](ADR-082-multi-agent-collaboration.md)
- 平行：[ADR-093](ADR-093-telegram-group-migration.md) / [ADR-094](ADR-094-hermes-nl-interface.md)
- 設計：`/Users/ogt/awoooi/docs/design/hermes-telegram-flows/hermes-flows.html`（Flow 4/5）
- Memory: `feedback_no_ghost_buttons.md` / `project_phase7_round3_telegram_subsystem.md`
- SDK docs: https://code.claude.com/docs/en/agent-sdk/subagents

## 變更紀錄

| 版本 | 日期 | 執行者 | 變更內容 |
|------|------|--------|---------|
| v1.0 | 2026-04-24 | 12-Agent 全景分析 | 初版 Proposed |
| v1.1 | 2026-04-24 | Codex | 補入 12-agent 日常工作模式（Game Rules v1）與 9 skills 對照 |
| v1.2 | 2026-04-25 | Claude Sonnet 4.6 | WS4-WS5 實作完成：display_names.py + agent_loader + safety_hooks + ConsensusEngine weights 宣告 |
