triflux 3.2.0-dev.1 → 3.2.0-dev.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.ko.md +26 -18
  2. package/README.md +26 -18
  3. package/bin/triflux.mjs +1614 -1084
  4. package/hooks/hooks.json +12 -0
  5. package/hooks/keyword-rules.json +354 -0
  6. package/hub/bridge.mjs +371 -193
  7. package/hub/hitl.mjs +45 -31
  8. package/hub/pipe.mjs +457 -0
  9. package/hub/router.mjs +422 -161
  10. package/hub/server.mjs +429 -344
  11. package/hub/store.mjs +388 -314
  12. package/hub/team/cli-team-common.mjs +348 -0
  13. package/hub/team/cli-team-control.mjs +393 -0
  14. package/hub/team/cli-team-start.mjs +516 -0
  15. package/hub/team/cli-team-status.mjs +269 -0
  16. package/hub/team/cli.mjs +99 -368
  17. package/hub/team/dashboard.mjs +165 -64
  18. package/hub/team/native-supervisor.mjs +300 -0
  19. package/hub/team/native.mjs +62 -0
  20. package/hub/team/nativeProxy.mjs +534 -0
  21. package/hub/team/orchestrator.mjs +99 -35
  22. package/hub/team/pane.mjs +138 -101
  23. package/hub/team/psmux.mjs +297 -0
  24. package/hub/team/session.mjs +608 -186
  25. package/hub/team/shared.mjs +13 -0
  26. package/hub/team/staleState.mjs +299 -0
  27. package/hub/tools.mjs +140 -53
  28. package/hub/workers/claude-worker.mjs +446 -0
  29. package/hub/workers/codex-mcp.mjs +414 -0
  30. package/hub/workers/factory.mjs +18 -0
  31. package/hub/workers/gemini-worker.mjs +349 -0
  32. package/hub/workers/interface.mjs +41 -0
  33. package/hud/hud-qos-status.mjs +1789 -1732
  34. package/package.json +6 -2
  35. package/scripts/__tests__/keyword-detector.test.mjs +234 -0
  36. package/scripts/hub-ensure.mjs +83 -0
  37. package/scripts/keyword-detector.mjs +272 -0
  38. package/scripts/keyword-rules-expander.mjs +521 -0
  39. package/scripts/lib/keyword-rules.mjs +168 -0
  40. package/scripts/psmux-steering-prototype.sh +368 -0
  41. package/scripts/run.cjs +62 -0
  42. package/scripts/setup.mjs +189 -7
  43. package/scripts/test-tfx-route-no-claude-native.mjs +49 -0
  44. package/scripts/tfx-route-worker.mjs +161 -0
  45. package/scripts/tfx-route.sh +943 -508
  46. package/skills/tfx-auto/SKILL.md +90 -564
  47. package/skills/tfx-auto-codex/SKILL.md +77 -0
  48. package/skills/tfx-codex/SKILL.md +1 -4
  49. package/skills/tfx-doctor/SKILL.md +1 -0
  50. package/skills/tfx-gemini/SKILL.md +1 -4
  51. package/skills/tfx-multi/SKILL.md +296 -0
  52. package/skills/tfx-setup/SKILL.md +1 -4
  53. package/skills/tfx-team/SKILL.md +0 -172
@@ -0,0 +1,77 @@
1
+ ---
2
+ name: tfx-auto-codex
3
+ description: Codex 리드형 tfx-auto. Claude 네이티브 역할을 Codex로 치환하고 Gemini 사용은 유지합니다.
4
+ triggers:
5
+ - tfx-auto-codex
6
+ argument-hint: "\"작업 설명\" | N:agent_type \"작업 설명\""
7
+ ---
8
+
9
+ # tfx-auto-codex — Codex 리드형 tfx-auto
10
+
11
+ > 목적: 기존 `tfx-auto`의 오케스트레이션 패턴을 유지하면서
12
+ > Claude 네이티브 역할(`explore`, `verifier`, `test-engineer`, `qa-tester`)을
13
+ > Codex로 치환해 Codex/Gemini만으로 실행한다.
14
+
15
+ ## 핵심 원칙
16
+
17
+ 1. **Codex 라우팅 유지**
18
+ - 구현/분석/리뷰/디버깅/검증은 Codex 우선.
19
+ 2. **Gemini 유지**
20
+ - `designer`, `writer`는 Gemini 경로를 그대로 사용.
21
+ 3. **Claude 네이티브 제거**
22
+ - 실행 시 `TFX_NO_CLAUDE_NATIVE=1`로 강제.
23
+ 4. **고난도 설계는 xhigh**
24
+ - 설계/분해/비판 검토 성격의 작업은 `codex --profile xhigh` 기준으로 운용.
25
+
26
+ ## 사용법
27
+
28
+ ```bash
29
+ /tfx-auto-codex "인증 리팩터링 + UI 개선 + 테스트 보강"
30
+ /tfx-auto-codex 3:codex "src/api, src/auth, src/payment 병렬 리뷰"
31
+ /tfx-auto-codex 2:gemini "온보딩 UI 카피 + 접근성 개선"
32
+ ```
33
+
34
+ ## 실행 규칙
35
+
36
+ `tfx-auto` 워크플로우(입력 파싱 → 트리아지 → 분해 → DAG 실행 → 수집/보고)를 그대로 사용한다.
37
+
38
+ 단, **실행 명령은 아래 환경변수를 반드시 포함**한다:
39
+
40
+ ```bash
41
+ TFX_NO_CLAUDE_NATIVE=1 bash ~/.claude/scripts/tfx-route.sh {agent} '{prompt}' {mcp_profile}
42
+ ```
43
+
44
+ ### 역할 치환 (자동)
45
+
46
+ `TFX_NO_CLAUDE_NATIVE=1`일 때:
47
+
48
+ - `explore` -> Codex `fast`
49
+ - `verifier` -> Codex `thorough review`
50
+ - `test-engineer` -> Codex `high`
51
+ - `qa-tester` -> Codex `thorough review`
52
+
53
+ ## 트리아지 기준
54
+
55
+ - `codex`: 코드 구현/수정/분석/리뷰/디버깅/테스트/검증/리서치
56
+ - `gemini`: 문서/UI/디자인/멀티모달
57
+
58
+ Claude 타입 반환은 기본적으로 허용하지 않는다.
59
+ 분류 결과에 `claude`가 포함되면 `codex`로 치환 후 분해를 진행한다.
60
+ 단, Codex CLI 미설치 환경에서는 실행 안전성을 위해 `claude-native` fallback이 유지될 수 있다.
61
+
62
+ ## 권장 프로필
63
+
64
+ - 설계/계획/비판적 검토: `xhigh`
65
+ - 일반 구현/수정: `high`
66
+ - 리뷰: `thorough`
67
+ - 빠른 탐색: `fast`
68
+
69
+ ## 의존성
70
+
71
+ - `~/.claude/scripts/tfx-route.sh` 최신 동기화 상태
72
+ - Codex CLI 설치
73
+ - Gemini CLI 설치 (UI/문서 경로 사용 시)
74
+
75
+ ## Troubleshooting
76
+
77
+ 문제 발생 시 `/tfx-doctor` 실행. (`--fix` 자동 수정, `--reset` 캐시 초기화)
@@ -62,7 +62,4 @@ argument-hint: "\"작업 설명\" | N:codex \"작업 설명\""
62
62
 
63
63
  ## Troubleshooting
64
64
 
65
- 문제가 발생하면:
66
- 1. `/tfx-doctor` — 진단 실행
67
- 2. `/tfx-doctor --fix` — 자동 수정
68
- 3. `/tfx-doctor --reset` — 캐시 초기화 (HUD 이상 시)
65
+ 문제 발생 시 `/tfx-doctor` 실행. (`--fix` 자동 수정, `--reset` 캐시 초기화)
@@ -34,6 +34,7 @@ argument-hint: "[--fix|--reset]"
34
34
  - 플러그인 등록 상태
35
35
  - MCP 인벤토리 캐시
36
36
  - CLI 이슈 트래커
37
+ - 잔존 팀(orphan teams) 감지 (`~/.claude/teams/`)
37
38
 
38
39
  ### 수정 모드 (`/tfx-doctor --fix`)
39
40
 
@@ -79,7 +79,4 @@ argument-hint: "\"작업 설명\" | N:gemini \"작업 설명\""
79
79
 
80
80
  ## Troubleshooting
81
81
 
82
- 문제가 발생하면:
83
- 1. `/tfx-doctor` — 진단 실행
84
- 2. `/tfx-doctor --fix` — 자동 수정
85
- 3. `/tfx-doctor --reset` — 캐시 초기화 (HUD 이상 시)
82
+ 문제 발생 시 `/tfx-doctor` 실행. (`--fix` 자동 수정, `--reset` 캐시 초기화)
@@ -0,0 +1,296 @@
1
+ ---
2
+ name: tfx-multi
3
+ description: 멀티-CLI 팀 모드. Claude Native Agent Teams + Codex/Gemini 멀티모델 오케스트레이션.
4
+ triggers:
5
+ - tfx-multi
6
+ argument-hint: '"작업 설명" | --agents codex,gemini "작업" | --tmux "작업" | status | stop'
7
+ ---
8
+
9
+ # tfx-multi v2.2 — 슬림 래퍼 + 네비게이션 복원 기반 멀티-CLI 팀 오케스트레이터
10
+
11
+ > Claude Code Native Teams의 Shift+Down 네비게이션을 복원한다.
12
+ > Codex/Gemini 워커마다 최소 프롬프트(~100 토큰)의 슬림 Agent 래퍼를 spawn하여 네비게이션에 등록하고,
13
+ > 실제 작업은 `tfx-route.sh`가 수행한다. task 상태는 `team_task_list`를 truth source로 검증한다.
14
+ > v2.2 현재 — 슬림 래퍼 Agent로 Shift+Down 네비게이션 복원, Opus 토큰 77% 절감.
15
+
16
+ ## 사용법
17
+
18
+ ```
19
+ /tfx-multi "인증 리팩터링 + UI 개선 + 보안 리뷰"
20
+ /tfx-multi --agents codex,gemini "프론트+백엔드"
21
+ /tfx-multi --tmux "작업" # 레거시 tmux 모드
22
+ /tfx-multi status
23
+ /tfx-multi stop
24
+ ```
25
+
26
+ ## 실행 워크플로우
27
+
28
+ ### Phase 0: 사전 점검 정책 (출력 최소화 + 즉시 spawn)
29
+
30
+ > **[필수] Agent spawn 지연 금지 — preflight와 Agent 생성을 병렬로 실행한다.**
31
+ > Lead가 preflight를 순차 완료한 뒤 Agent를 spawn하면 사용자 체감 지연이 발생한다.
32
+ > 수동 모드(`N:agent`)에서는 입력 파싱 직후 TeamCreate + Agent spawn을 먼저 시작하고,
33
+ > preflight는 **동시에 병렬**로 수행한다. preflight 실패 시에만 Agent를 중단한다.
34
+
35
+ - 원칙:
36
+ - **수동 모드:** Phase 1 파싱 → Phase 3a~3c(TeamCreate + Agent spawn) + Phase 0(preflight) **동시 병렬**
37
+ - **자동 모드:** Phase 0(preflight) + Phase 2(triage) **동시 병렬** → Phase 3
38
+ - 사용자가 요청하지 않으면 `Searched for ...`, 개별 `Bash(...)` 로그를 전면 보고하지 않는다.
39
+ - 리드에는 요약 한 줄만 노출한다. 예: `preflight: ok (route/hub)`
40
+ - Hub 점검은 `/status`를 기준으로 한다 (`/health` 단독 판정 금지).
41
+ - 권장 체크 예시 (단일 Bash로 통합):
42
+ - `curl -sf http://127.0.0.1:27888/status >/dev/null && test -f ~/.claude/scripts/tfx-route.sh && echo "preflight: ok" || echo "preflight: FAIL"`
43
+ - 실패 시에만 상세를 노출한다:
44
+ - `tfx-route.sh` 없음
45
+ - Hub 비정상/미기동
46
+ - 필수 CLI 미설치
47
+
48
+ ### Phase 1: 입력 파싱
49
+
50
+ ```
51
+ 입력: "3:codex 리뷰" → 수동 모드: N=3, agent=codex
52
+ 입력: "인증 + UI + 테스트" → 자동 모드: Codex 분류 → Opus 분해
53
+ 입력: "--tmux 인증 + UI" → tmux 레거시 모드 → Phase 3-tmux로 분기
54
+ 입력: "status" → 제어 커맨드
55
+ 입력: "stop" → 제어 커맨드
56
+ ```
57
+
58
+ **제어 커맨드 감지:**
59
+ - `status`, `stop`, `kill`, `attach`, `list`, `send` → `Bash("node bin/triflux.mjs multi {cmd}")` 직행
60
+ (`bin/triflux.mjs` 절대경로는 triflux 패키지 루트 기준)
61
+ - 그 외 → Phase 2 트리아지
62
+
63
+ **--tmux 감지:** 입력에 `--tmux`가 포함되면 Phase 3-tmux로 분기.
64
+
65
+ ### Phase 2: 트리아지 (tfx-auto와 동일)
66
+
67
+ #### 자동 모드 — Codex 분류 → Opus 분해
68
+
69
+ ```bash
70
+ # Step 2a: Codex 분류 (무료)
71
+ Bash("codex exec --full-auto --skip-git-repo-check '다음 작업을 분석하고 각 부분에 적합한 agent를 분류하라.
72
+
73
+ agent 선택:
74
+ - codex: 코드 구현/수정/분석/리뷰/디버깅/설계 (기본값)
75
+ - gemini: 문서/UI/디자인/멀티모달
76
+ - claude: 코드베이스 탐색/테스트 실행/검증 (최후 수단)
77
+
78
+ 작업: {task}
79
+
80
+ JSON만 출력:
81
+ { \"parts\": [{ \"description\": \"...\", \"agent\": \"codex|gemini|claude\" }] }
82
+ '")
83
+ ```
84
+
85
+ > Codex 분류 실패 시 → Opus(오케스트레이터)가 직접 분류+분해
86
+
87
+ ```
88
+ # Step 2b: 인라인 분해
89
+ 분류 결과 → 서브태스크 배열 구성:
90
+ [{ cli: "codex", subtask: "인증 리팩터링", role: "executor" },
91
+ { cli: "gemini", subtask: "UI 개선", role: "designer" },
92
+ { cli: "codex", subtask: "보안 리뷰", role: "reviewer" }]
93
+ ```
94
+
95
+ #### 수동 모드 (`N:agent_type` 또는 `--agents`)
96
+
97
+ Codex 분류 건너뜀 → Opus가 직접 N개 서브태스크 분해.
98
+
99
+ ### Phase 3: Native Teams 실행 (v2.1 개편)
100
+
101
+ 트리아지 결과를 Claude Code 네이티브 Agent Teams로 실행한다.
102
+
103
+ #### Step 3a: 팀 생성
104
+
105
+ ```
106
+ teamName = "tfx-" + Date.now().toString(36).slice(-6)
107
+
108
+ TeamCreate({
109
+ team_name: teamName,
110
+ description: "tfx-multi: {원본 작업 요약}"
111
+ })
112
+ ```
113
+
114
+ #### Step 3b: 공유 작업 등록
115
+
116
+ 각 서브태스크에 대해 `TaskCreate`를 호출하고 `taskId`를 보존한다.
117
+ 리드가 실행 시 사용할 `agentName`도 함께 확정한다.
118
+
119
+ ```
120
+ for each assignment in assignments (index i):
121
+ TaskCreate({
122
+ subject: assignment.subtask,
123
+ description: "CLI: {assignment.cli}, 역할: {assignment.role}\n\n{상세 작업 내용}",
124
+ metadata: { cli: assignment.cli, role: assignment.role }
125
+ })
126
+ taskId = created_task.id
127
+ agentName = "{assignment.cli}-worker-{i+1}"
128
+ runQueue.push({ taskId, agentName, ...assignment })
129
+ ```
130
+
131
+ #### Step 3c: 슬림 래퍼 Agent 실행 (v2.2 네비게이션 복원)
132
+
133
+ > **[필수] Codex/Gemini 서브태스크는 워커 수에 관계없이 반드시 Agent 래퍼를 spawn해야 한다.**
134
+ > 단일 워커(1:gemini 등)여도 Lead가 직접 Bash를 실행하면 안 된다.
135
+ > Agent 래퍼를 생략하면 Shift+Down 네비게이션에 워커가 등록되지 않아 v2.2의 핵심 가치가 사라진다.
136
+ > Lead가 "효율적"이라고 판단해서 Agent를 건너뛰는 것은 금지한다.
137
+
138
+ Codex/Gemini 서브태스크마다 최소 프롬프트의 Agent를 spawn하여 네비게이션에 등록한다.
139
+ Agent 내부에서 `Bash(tfx-route.sh)` 1회 실행 후 결과 보고하고 종료한다.
140
+
141
+ ```
142
+ for each item in runQueue where item.cli in ["codex", "gemini"]:
143
+ Agent({
144
+ name: item.agentName,
145
+ team_name: teamName,
146
+ run_in_background: true,
147
+ prompt: buildSlimWrapperPrompt(item.cli, {
148
+ subtask: item.subtask,
149
+ role: item.role,
150
+ teamName: teamName,
151
+ taskId: item.taskId,
152
+ agentName: item.agentName,
153
+ leadName: "team-lead",
154
+ mcp_profile: mcp_profile
155
+ })
156
+ })
157
+ ```
158
+
159
+ 슬림 래퍼 프롬프트는 `hub/team/native.mjs`의 `buildSlimWrapperPrompt()`가 **단일 truth source**.
160
+ 핵심 동작: Bash 1회 실행(tfx-route.sh) → TaskUpdate(completed) + SendMessage → 종료.
161
+ status는 "completed"만 사용. 실패 여부는 `metadata.result`로 구분.
162
+
163
+ > **[금지] Lead 또는 Agent 래퍼가 `gemini -y -p "..."` 또는 `codex exec "..."`를 직접 호출하면 안 된다.**
164
+ > 직접 호출하면 tfx-route.sh의 모델 지정(`-m gemini-3.1-pro-preview`), MCP 필터, 팀 bridge 연동,
165
+ > Windows 호환 경로, 타임아웃, 후처리(토큰 추적/이슈 로깅)가 모두 누락된다.
166
+ > 반드시 `bash ~/.claude/scripts/tfx-route.sh {role} '{subtask}' {mcp_profile}`을 통해 실행해야 한다.
167
+
168
+ **핵심 차이 vs v2:** 프롬프트 ~100 토큰 (v2의 ~500), task claim/complete/report는 tfx-route.sh가 Named Pipe(우선)/HTTP(fallback) 경유로 수행.
169
+
170
+ `tfx-route.sh` 팀 통합 동작(이미 구현됨, `TFX_TEAM_*` 기반):
171
+ - `TFX_TEAM_NAME`: 팀 식별자
172
+ - `TFX_TEAM_TASK_ID`: 작업 식별자
173
+ - `TFX_TEAM_AGENT_NAME`: 워커 표기 이름
174
+ - `TFX_TEAM_LEAD_NAME`: 리드 수신자 이름 (기본 `team-lead`)
175
+
176
+ Hub 통신 (Named Pipe 우선, HTTP fallback):
177
+ - `bridge.mjs`가 Named Pipe(`\\.\pipe\triflux-{pid}`) 우선 연결, 실패 시 HTTP `/bridge/*` fallback
178
+ - 실행 시작: `node hub/bridge.mjs team-task-update --team {name} --task-id {id} --claim --status in_progress`
179
+ - 실행 종료: `node hub/bridge.mjs team-task-update --team {name} --task-id {id} --status completed|failed`
180
+ - 리드 보고: `node hub/bridge.mjs team-send-message --team {name} --from {agent} --to team-lead --text "..."`
181
+ - 결과 발행: `node hub/bridge.mjs result --agent {id} --topic task.result --file {output}`
182
+
183
+ #### Step 3d: claude 타입만 Agent 직접 실행
184
+
185
+ `cli == claude`인 서브태스크에만 `Agent(subagent_type)`를 사용한다.
186
+
187
+ ```
188
+ Agent({
189
+ name: "claude-worker-{n}",
190
+ team_name: teamName,
191
+ description: "claude-worker-{n}",
192
+ run_in_background: true,
193
+ subagent_type: "{role}",
194
+ prompt: "너는 {teamName}의 Claude 워커이다.
195
+
196
+ 1. TaskGet 후 TaskUpdate(status: in_progress, owner: 너의 이름)로 claim
197
+ 2. 도구를 직접 사용해 작업 수행
198
+ 3. 성공 시 TaskUpdate(status: completed, metadata: {result: 'success'}) + SendMessage(to: team-lead)
199
+ 4. 실패 시 TaskUpdate(status: completed, metadata: {result: 'failed', error: '에러 요약'}) + SendMessage(to: team-lead)
200
+
201
+ 중요: status는 'completed'만 사용. 'failed'는 API 미지원. 실패 여부는 metadata.result로 구분.
202
+ 어떤 경우에도 TaskUpdate + SendMessage 후 반드시 종료하라."
203
+ })
204
+ ```
205
+
206
+ #### Step 3e: 사용자 안내
207
+
208
+ ```
209
+ "팀 '{teamName}' 생성 완료.
210
+ Codex/Gemini 워커가 슬림 래퍼 Agent로 네비게이션에 등록되었습니다.
211
+ Shift+Down으로 다음 워커 (마지막→리드 wrap), Shift+Tab으로 이전 워커 전환이 가능합니다.
212
+ (Shift+Up은 Claude Code 미지원 — 대부분 터미널에서 scroll-up으로 먹힘)"
213
+ ```
214
+
215
+ ### Phase 4: 결과 수집 (truth source = team_task_list)
216
+
217
+ 1. 리드가 Step 3c에서 실행한 모든 백그라운드 Bash 프로세스 완료를 대기한다.
218
+ 2. `team_task_list`를 최종 truth source로 조회한다.
219
+
220
+ ```bash
221
+ Bash("node hub/bridge.mjs team-task-list --team ${teamName}")
222
+ ```
223
+
224
+ 3. `completed` 상태이지만 `metadata.result == "failed"`인 task가 있으면 Claude fallback으로 재시도한다.
225
+ 4. 재시도 후 다시 `team_task_list`를 조회해 최종 상태를 확정한다.
226
+ 5. `send-message`와 `result(task.result)` 이벤트는 진행 관찰 채널로 사용하고, 최종 판정은 반드시 `team_task_list` 기준으로 한다.
227
+ 6. Hub `task-update`에서는 `status: "failed"`를 그대로 사용한다 (Hub API는 자체 상태 관리). Claude Code `TaskUpdate`만 `"completed"` + `metadata.result`로 구분한다.
228
+
229
+ 종합 보고서 예시:
230
+ ```markdown
231
+ ## tfx-multi 실행 결과
232
+
233
+ | # | Worker | CLI | 작업 | 상태 |
234
+ |---|--------|-----|------|------|
235
+ | 1 | codex-worker-1 | codex | 인증 리팩터링 | completed |
236
+ | 2 | gemini-worker-1 | gemini | UI 개선 | completed |
237
+ | 3 | claude-worker-1 | claude | 실패 fallback 재시도 | completed |
238
+ ```
239
+
240
+ ### Phase 5: 정리 (반드시 실행)
241
+
242
+ > **[필수] Phase 5는 성공/실패에 관계없이 반드시 실행해야 한다.**
243
+ > 워커 실패, Bash 에러, fallback 실패 등 어떤 상황에서도 TeamDelete를 건너뛰면 안 된다.
244
+ > TeamDelete를 하지 않으면 `~/.claude/teams/{teamName}/`이 잔존하여 OMC hook이 "team executing"을
245
+ > 반복 감지하는 무한 루프에 빠진다.
246
+
247
+ 정리 순서:
248
+ 1. 모든 백그라운드 Agent 완료를 **최대 30초** 대기한다.
249
+ 2. 30초 후에도 미완료 Agent가 있으면 대기를 중단하고 정리를 진행한다.
250
+ 3. `TeamDelete()`를 호출한다.
251
+ 4. TeamDelete가 실패하면 (활성 멤버 잔존) 수동 정리를 안내한다:
252
+ ```
253
+ rm -rf ~/.claude/teams/{teamName}/ ~/.claude/tasks/{teamName}/
254
+ ```
255
+ 5. 종합 보고서를 출력한다.
256
+
257
+ ### Phase 3-tmux: 레거시 tmux 모드
258
+ --tmux 플래그 시 기존 v1 방식으로 실행: Bash("node {PKG_ROOT}/bin/triflux.mjs multi --no-attach --agents {agents} \\\"{task}\\\"")
259
+ 이후 사용자에게 tmux 세션 연결 안내.
260
+
261
+ ## 에이전트 매핑
262
+ > 에이전트 매핑: codex/gemini → tfx-route.sh, claude → Agent(subagent_type) 직접 실행. 상세는 Phase 3c/3d 참조.
263
+
264
+ ## 전제 조건
265
+
266
+ - **CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1** — settings.json env에 설정 (`tfx setup`이 자동 설정)
267
+ - **codex/gemini CLI** — 해당 에이전트 사용 시
268
+ - **tfx setup** — tfx-route.sh 동기화 + AGENT_TEAMS 자동 설정 (사전 실행 권장)
269
+ - **Hub 활성 상태** — Named Pipe(`\\.\pipe\triflux-{pid}`) 우선, HTTP `127.0.0.1:27888` fallback. `bridge.mjs`가 자동 선택.
270
+ - **출력 정책** — preflight는 비동기/요약 출력이 기본이며, 실패 시에만 상세 출력
271
+
272
+ ## 에러 처리
273
+
274
+ | 에러 | 처리 |
275
+ |------|------|
276
+ | TeamCreate 실패 / Agent Teams 비활성 | `--tmux` 폴백 (Phase 3-tmux로 전환) |
277
+ | tfx-route.sh 없음 | `tfx setup` 실행 안내 |
278
+ | CLI 미설치 (codex/gemini) | 해당 서브태스크를 claude 워커로 대체 |
279
+ | Codex 분류 실패 | Opus 직접 분류+분해 |
280
+ | Bash 실행 실패 (Lead) | task를 `completed` + `metadata.result: "failed"`로 마킹 후 Claude fallback 재시도 |
281
+ | `team_task_list` 조회 실패 | Named Pipe/stdout로 임시 관찰 후 Hub 복구 뒤 상태 재검증 |
282
+ | claude fallback 실패 | 실패 task 목록/원인 요약 후 사용자 승인 대기 |
283
+
284
+ > **[중요] TaskUpdate 상태값 제약:** Claude Code API는 `pending`, `in_progress`, `completed`, `deleted`만 지원한다.
285
+ > `failed` 상태는 존재하지 않으므로 절대 사용하지 마라. 실패는 `status: "completed"` + `metadata: {result: "failed"}`로 표현한다.
286
+ > Hub API(`bridge.mjs team-task-update`)는 자체 상태 관리이므로 `"failed"` 사용 가능.
287
+
288
+ ## 관련
289
+
290
+ | 항목 | 설명 |
291
+ |------|------|
292
+ | `scripts/tfx-route.sh` | 팀 통합 라우터 (`TFX_TEAM_*`, task claim/complete, send-message, Named Pipe/HTTP bridge) |
293
+ | `hub/team/native.mjs` | Native Teams 래퍼 (프롬프트 템플릿, 팀 설정 빌더) |
294
+ | `hub/team/cli.mjs` | tmux 팀 CLI (`--tmux` 레거시 모드) |
295
+ | `tfx-auto` | one-shot 실행 오케스트레이터 (병행 유지) |
296
+ | `tfx-hub` | MCP 메시지 버스 관리 (tmux 모드용) |
@@ -98,7 +98,4 @@ Bash("triflux doctor")
98
98
 
99
99
  ## Troubleshooting
100
100
 
101
- 설정 후에도 문제가 있으면:
102
- 1. `/tfx-doctor` — 상세 진단 실행
103
- 2. `/tfx-doctor --fix` — 파일 동기화 + 캐시 정리
104
- 3. `/tfx-doctor --reset` — 캐시 전체 초기화 (HUD 이상 시)
101
+ 문제 발생 `/tfx-doctor` 실행. (`--fix` 자동 수정, `--reset` 캐시 초기화)
@@ -1,172 +0,0 @@
1
- ---
2
- name: tfx-team
3
- description: 멀티-CLI 팀 모드. tfx-auto와 동일한 트리아지/분해, 실행은 tmux + Hub 기반 interactive 세션.
4
- triggers:
5
- - tfx-team
6
- argument-hint: '"작업 설명" | --agents codex,gemini "작업" | status | stop'
7
- ---
8
-
9
- # tfx-team — tmux + Hub 기반 멀티-CLI 팀 오케스트레이터
10
-
11
- > tfx-auto와 **동일한 트리아지/분해 로직**, 실행 백엔드만 다름.
12
- >
13
- > | | tfx-auto | tfx-team |
14
- > |--|----------|----------|
15
- > | 트리아지 | Codex 분류 → Opus 분해 | **동일** |
16
- > | 실행 | `tfx-route.sh` one-shot | **tmux pane interactive** |
17
- > | 관찰 | stdout 반환 후 종료 | **실시간 네이티브 터미널** |
18
- > | 통신 | 없음 (독립 실행) | **Hub MCP 메시지 버스** |
19
- > | 개입 | 불가 | **`tfx team send N "추가 지시"`** |
20
-
21
- ## 사용법
22
-
23
- ```
24
- /tfx-team "인증 리팩터링 + UI 개선 + 보안 리뷰"
25
- /tfx-team --agents codex,gemini "프론트+백엔드"
26
- /tfx-team status
27
- /tfx-team stop
28
- ```
29
-
30
- ## 실행 워크플로우
31
-
32
- ### Phase 1: 입력 파싱
33
-
34
- ```
35
- 입력: "3:codex 리뷰" → 수동 모드: N=3, agent=codex
36
- 입력: "인증 + UI + 테스트" → 자동 모드: Codex 분류 → Opus 분해
37
- 입력: "status" → 제어 커맨드 (tfx team status)
38
- 입력: "stop" → 제어 커맨드 (tfx team stop)
39
- ```
40
-
41
- **제어 커맨드 감지:**
42
- - `status`, `stop`, `kill`, `attach`, `list`, `send` → `Bash("node bin/triflux.mjs team {cmd}")` 직행
43
- - 그 외 → Phase 2 트리아지
44
-
45
- ### Phase 2: 트리아지 (tfx-auto와 동일)
46
-
47
- #### 자동 모드 — Codex 분류 → Opus 분해
48
-
49
- ```bash
50
- # Step 2a: Codex 분류 (무료)
51
- Bash("codex exec --full-auto --skip-git-repo-check '다음 작업을 분석하고 각 부분에 적합한 agent를 분류하라.
52
-
53
- agent 선택:
54
- - codex: 코드 구현/수정/분석/리뷰/디버깅/설계 (기본값)
55
- - gemini: 문서/UI/디자인/멀티모달
56
- - claude: 코드베이스 탐색/테스트 실행/검증 (최후 수단)
57
-
58
- 작업: {task}
59
-
60
- JSON:
61
- { \"parts\": [{ \"description\": \"...\", \"agent\": \"codex|gemini|claude\" }] }
62
- '")
63
- ```
64
-
65
- > Codex 분류 실패 시 → Opus(오케스트레이터)가 직접 분류+분해
66
-
67
- ```
68
- # Step 2b: Opus 인라인 분해
69
- 분류 결과 → 에이전트 배정:
70
- codex → --agents에 codex 추가
71
- gemini → --agents에 gemini 추가
72
- claude → --agents에 claude 추가 (또는 codex로 대체 — claude는 최후 수단)
73
-
74
- 결과: agents 배열 + subtasks 배열
75
- ```
76
-
77
- #### 수동 모드 (`N:agent_type`)
78
-
79
- Codex 분류 건너뜀 → Opus가 직접 N개 서브태스크 분해.
80
-
81
- ### Phase 3: tmux 팀 실행
82
-
83
- 트리아지 결과를 `tfx team` CLI로 실행:
84
-
85
- ```bash
86
- # agents 배열과 작업을 tfx team에 전달
87
- Bash("node {PKG_ROOT}/bin/triflux.mjs team --agents {agents.join(',')} \"{task}\"")
88
- ```
89
-
90
- **내부 동작 (hub/team/ 모듈):**
91
- 1. Hub lazy-start (`hub/server.mjs`)
92
- 2. tmux 세션 생성 (2x2 or 1xN 레이아웃)
93
- 3. Pane 0: Dashboard (실시간 상태)
94
- 4. Pane 1~N: 각 CLI interactive 모드 시작 (codex/gemini/claude)
95
- 5. 3초 대기 (CLI 초기화)
96
- 6. 각 pane에 서브태스크 프롬프트 주입 (load-buffer + paste-buffer)
97
- 7. tmux attach → 사용자에게 제어권
98
-
99
- ### Phase 4: 실시간 관찰 + 개입
100
-
101
- tmux 세션 내에서:
102
- - `Ctrl+B → 방향키`: pane 전환
103
- - `Ctrl+B → D`: 세션 분리 (백그라운드)
104
- - `Ctrl+B → Z`: pane 전체화면
105
-
106
- 세션 분리 후 제어:
107
- ```bash
108
- /tfx-team status # 팀 상태 확인
109
- /tfx-team send 1 "추가 지시" # Pane 1에 입력
110
- /tfx-team attach # 세션 재연결
111
- /tfx-team stop # graceful 종료
112
- ```
113
-
114
- ### Phase 5: 에이전트 간 통신
115
-
116
- Hub MCP 도구가 각 CLI에 등록되어 있으면 자동 통신:
117
- - `register`: 에이전트 등록
118
- - `publish`: 결과 발행 (topic: task.result)
119
- - `poll_messages`: 다른 에이전트 메시지 수신
120
- - `ask`: 다른 에이전트에게 질문
121
-
122
- MCP 미등록 시 REST 폴백 (프롬프트에 curl 명령 포함).
123
-
124
- ## 에이전트 매핑
125
-
126
- | 분류 결과 | CLI | 비고 |
127
- |----------|-----|------|
128
- | codex | `codex` (interactive) | MCP: ~/.codex/config.json |
129
- | gemini | `gemini` (interactive) | MCP: ~/.gemini/settings.json |
130
- | claude | `claude` (interactive) | MCP: .mcp.json |
131
-
132
- > **중요:** tfx-auto와 달리 세부 에이전트(executor, debugger 등)로 분류하지 않음.
133
- > tmux pane에는 CLI 단위(codex/gemini/claude)로 실행하고,
134
- > 프롬프트에 역할(구현/리뷰/디버깅)을 명시하여 CLI가 알아서 수행.
135
-
136
- ## tfx-auto와의 차이 요약
137
-
138
- | 항목 | tfx-auto | tfx-team |
139
- |------|----------|----------|
140
- | 트리아지 | Codex 분류 → Opus 분해 | **동일** |
141
- | 실행 단위 | 에이전트(executor, reviewer 등) | CLI(codex, gemini, claude) |
142
- | 실행 방식 | `tfx-route.sh` (one-shot, 블랙박스) | tmux pane (interactive, 관찰 가능) |
143
- | 결과 수집 | stdout 파싱 | Hub publish/poll |
144
- | 개입 | 불가 | `tfx team send` |
145
- | 통신 | 없음 | Hub MCP 메시지 버스 |
146
- | Dashboard | 없음 | Pane 0 실시간 상태 |
147
- | tmux 필요 | 아니오 | **예** |
148
- | 종료 | 자동 (실행 완료) | 수동 (`tfx team stop`) |
149
-
150
- ## 전제 조건
151
-
152
- - **tmux** — 필수 (Git Bash: v3.6a, WSL2, macOS, Linux)
153
- - **codex/gemini CLI** — 해당 에이전트 사용 시
154
- - **tfx setup** — Hub MCP 자동 등록 (사전 실행 권장)
155
-
156
- ## 에러 처리
157
-
158
- | 에러 | 처리 |
159
- |------|------|
160
- | tmux 미설치 | 안내 메시지 + WSL2 설치 가이드 |
161
- | Hub 시작 실패 | `tfx hub start` 수동 실행 안내 |
162
- | CLI 미설치 | 해당 pane 건너뜀 + 경고 |
163
- | MCP 미등록 | REST 폴백 (curl) |
164
- | Codex 분류 실패 | Opus 직접 분류+분해 |
165
-
166
- ## 관련
167
-
168
- | 항목 | 설명 |
169
- |------|------|
170
- | `hub/team/` | tmux + Hub 팀 모듈 (session, pane, orchestrator, dashboard, cli) |
171
- | `tfx-auto` | one-shot 실행 오케스트레이터 (기존, 병행 유지) |
172
- | `tfx-hub` | MCP 메시지 버스 관리 (start/stop/status) |