triflux 3.2.0-dev.1 → 3.2.0-dev.3
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.
- package/bin/triflux.mjs +185 -43
- package/hooks/hooks.json +12 -0
- package/hub/bridge.mjs +137 -51
- package/hub/server.mjs +100 -29
- package/hub/team/cli.mjs +1080 -113
- package/hub/team/native-supervisor.mjs +300 -0
- package/hub/team/native.mjs +92 -0
- package/hub/team/nativeProxy.mjs +460 -0
- package/hub/team/orchestrator.mjs +99 -35
- package/hub/team/pane.mjs +30 -16
- package/hub/team/session.mjs +359 -16
- package/hub/tools.mjs +113 -15
- package/package.json +1 -1
- package/scripts/setup.mjs +95 -0
- package/scripts/team-keyword.mjs +35 -0
- package/scripts/tfx-route.sh +138 -102
- package/skills/tfx-team/SKILL.md +239 -152
package/skills/tfx-team/SKILL.md
CHANGED
|
@@ -1,172 +1,259 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: tfx-team
|
|
3
|
-
description: 멀티-CLI 팀 모드.
|
|
4
|
-
triggers:
|
|
5
|
-
- tfx-team
|
|
6
|
-
argument-hint: '"작업 설명" | --agents codex,gemini "작업" | status | stop'
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# tfx-team —
|
|
10
|
-
|
|
11
|
-
>
|
|
12
|
-
>
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
1
|
+
---
|
|
2
|
+
name: tfx-team
|
|
3
|
+
description: 멀티-CLI 팀 모드. Claude Native Agent Teams + Codex/Gemini 멀티모델 오케스트레이션.
|
|
4
|
+
triggers:
|
|
5
|
+
- tfx-team
|
|
6
|
+
argument-hint: '"작업 설명" | --agents codex,gemini "작업" | --tmux "작업" | status | stop'
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# tfx-team v2.1 — Lead Direct Bash 기반 멀티-CLI 팀 오케스트레이터
|
|
10
|
+
|
|
11
|
+
> Claude Code Native Teams는 유지하되, Codex/Gemini 실행 경로에서 Claude teammate 래퍼를 제거한다.
|
|
12
|
+
> 리드가 `tfx-route.sh`를 직접 병렬 실행하고, task 상태는 `team_task_list`를 truth source로 검증한다.
|
|
13
|
+
|
|
14
|
+
| 구분 | v2 (기존) | v2.1 (현재) |
|
|
15
|
+
|--|--|--|
|
|
16
|
+
| 실행 | `Agent(teammate)` → `Bash(tfx-route.sh)` | `Lead` → `Bash(tfx-route.sh)` 직접 |
|
|
17
|
+
| teammate | Claude Opus 인스턴스 × N | Codex/Gemini용 없음 |
|
|
18
|
+
| task claim | teammate가 `TaskUpdate` 호출 | `tfx-route.sh`가 Hub bridge로 claim |
|
|
19
|
+
| 결과 보고 | teammate가 `SendMessage` 호출 | `tfx-route.sh`가 Hub bridge로 `send-message` 호출 |
|
|
20
|
+
| 결과 수집 | SendMessage 자동 수신 중심 | `team_task_list` 폴링 + stdout/결과 로그 |
|
|
21
|
+
| 정리 | `shutdown_request` × N 후 `TeamDelete` | `TeamDelete` 직접 |
|
|
22
|
+
| Opus 토큰 | N × 래퍼 오버헤드 | 래퍼 오버헤드 0 |
|
|
23
|
+
|
|
24
|
+
## 사용법
|
|
25
|
+
|
|
23
26
|
```
|
|
24
27
|
/tfx-team "인증 리팩터링 + UI 개선 + 보안 리뷰"
|
|
25
28
|
/tfx-team --agents codex,gemini "프론트+백엔드"
|
|
29
|
+
/tfx-team --tmux "작업" # 레거시 tmux 모드
|
|
26
30
|
/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
|
-
입력: "
|
|
38
|
-
입력: "
|
|
39
|
-
|
|
31
|
+
/tfx-team stop
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 실행 워크플로우
|
|
35
|
+
|
|
36
|
+
### Phase 1: 입력 파싱
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
입력: "3:codex 리뷰" → 수동 모드: N=3, agent=codex
|
|
40
|
+
입력: "인증 + UI + 테스트" → 자동 모드: Codex 분류 → Opus 분해
|
|
41
|
+
입력: "--tmux 인증 + UI" → tmux 레거시 모드 → Phase 3-tmux로 분기
|
|
42
|
+
입력: "status" → 제어 커맨드
|
|
43
|
+
입력: "stop" → 제어 커맨드
|
|
44
|
+
```
|
|
40
45
|
|
|
41
46
|
**제어 커맨드 감지:**
|
|
42
47
|
- `status`, `stop`, `kill`, `attach`, `list`, `send` → `Bash("node bin/triflux.mjs team {cmd}")` 직행
|
|
48
|
+
(`bin/triflux.mjs` 절대경로는 triflux 패키지 루트 기준)
|
|
43
49
|
- 그 외 → Phase 2 트리아지
|
|
44
50
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
51
|
+
**--tmux 감지:** 입력에 `--tmux`가 포함되면 Phase 3-tmux로 분기.
|
|
52
|
+
|
|
53
|
+
### Phase 2: 트리아지 (tfx-auto와 동일)
|
|
54
|
+
|
|
55
|
+
#### 자동 모드 — Codex 분류 → Opus 분해
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# Step 2a: Codex 분류 (무료)
|
|
59
|
+
Bash("codex exec --full-auto --skip-git-repo-check '다음 작업을 분석하고 각 부분에 적합한 agent를 분류하라.
|
|
60
|
+
|
|
61
|
+
agent 선택:
|
|
62
|
+
- codex: 코드 구현/수정/분석/리뷰/디버깅/설계 (기본값)
|
|
63
|
+
- gemini: 문서/UI/디자인/멀티모달
|
|
64
|
+
- claude: 코드베이스 탐색/테스트 실행/검증 (최후 수단)
|
|
65
|
+
|
|
66
|
+
작업: {task}
|
|
67
|
+
|
|
68
|
+
JSON만 출력:
|
|
69
|
+
{ \"parts\": [{ \"description\": \"...\", \"agent\": \"codex|gemini|claude\" }] }
|
|
70
|
+
'")
|
|
71
|
+
```
|
|
64
72
|
|
|
65
73
|
> Codex 분류 실패 시 → Opus(오케스트레이터)가 직접 분류+분해
|
|
66
74
|
|
|
67
75
|
```
|
|
68
|
-
# Step 2b:
|
|
69
|
-
분류 결과 →
|
|
70
|
-
codex
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
결과: agents 배열 + subtasks 배열
|
|
76
|
+
# Step 2b: 인라인 분해
|
|
77
|
+
분류 결과 → 서브태스크 배열 구성:
|
|
78
|
+
[{ cli: "codex", subtask: "인증 리팩터링", role: "executor" },
|
|
79
|
+
{ cli: "gemini", subtask: "UI 개선", role: "designer" },
|
|
80
|
+
{ cli: "codex", subtask: "보안 리뷰", role: "reviewer" }]
|
|
75
81
|
```
|
|
76
|
-
|
|
77
|
-
#### 수동 모드 (`N:agent_type`)
|
|
78
|
-
|
|
79
|
-
Codex 분류 건너뜀 → Opus가 직접 N개 서브태스크 분해.
|
|
80
|
-
|
|
81
|
-
### Phase 3:
|
|
82
|
-
|
|
83
|
-
트리아지 결과를
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
Bash("node {PKG_ROOT}/bin/triflux.mjs team --agents {agents.join(',')} \"{task}\"")
|
|
82
|
+
|
|
83
|
+
#### 수동 모드 (`N:agent_type` 또는 `--agents`)
|
|
84
|
+
|
|
85
|
+
Codex 분류 건너뜀 → Opus가 직접 N개 서브태스크 분해.
|
|
86
|
+
|
|
87
|
+
### Phase 3: Native Teams 실행 (v2.1 개편)
|
|
88
|
+
|
|
89
|
+
트리아지 결과를 Claude Code 네이티브 Agent Teams로 실행한다.
|
|
90
|
+
|
|
91
|
+
#### Step 3a: 팀 생성
|
|
92
|
+
|
|
88
93
|
```
|
|
94
|
+
teamName = "tfx-" + Date.now().toString(36).slice(-6)
|
|
95
|
+
|
|
96
|
+
TeamCreate({
|
|
97
|
+
team_name: teamName,
|
|
98
|
+
description: "tfx-team: {원본 작업 요약}"
|
|
99
|
+
})
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
#### Step 3b: 공유 작업 등록
|
|
103
|
+
|
|
104
|
+
각 서브태스크에 대해 `TaskCreate`를 호출하고 `taskId`를 보존한다.
|
|
105
|
+
리드가 실행 시 사용할 `agentName`도 함께 확정한다.
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
for each assignment in assignments (index i):
|
|
109
|
+
TaskCreate({
|
|
110
|
+
subject: assignment.subtask,
|
|
111
|
+
description: "CLI: {assignment.cli}, 역할: {assignment.role}\n\n{상세 작업 내용}",
|
|
112
|
+
metadata: { cli: assignment.cli, role: assignment.role }
|
|
113
|
+
})
|
|
114
|
+
taskId = created_task.id
|
|
115
|
+
agentName = "{assignment.cli}-worker-{i+1}"
|
|
116
|
+
runQueue.push({ taskId, agentName, ...assignment })
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
#### Step 3c: 리드가 직접 Bash 병렬 실행 (teammate 스폰 제거)
|
|
120
|
+
|
|
121
|
+
Codex/Gemini 서브태스크는 teammate를 만들지 않고, 리드가 직접 `Bash(..., run_in_background=true)`를 병렬 호출한다.
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
for each item in runQueue where item.cli in ["codex", "gemini"]:
|
|
125
|
+
Bash(
|
|
126
|
+
"TFX_TEAM_NAME={teamName} TFX_TEAM_TASK_ID={item.taskId} TFX_TEAM_AGENT_NAME={item.agentName} TFX_TEAM_LEAD_NAME=team-lead bash ~/.claude/scripts/tfx-route.sh {item.role} \"{item.subtask}\" {mcp_profile}",
|
|
127
|
+
run_in_background=true
|
|
128
|
+
)
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
`tfx-route.sh` 팀 통합 동작(이미 구현됨, `TFX_TEAM_*` 기반):
|
|
132
|
+
- `TFX_TEAM_NAME`: 팀 식별자
|
|
133
|
+
- `TFX_TEAM_TASK_ID`: 작업 식별자
|
|
134
|
+
- `TFX_TEAM_AGENT_NAME`: 워커 표기 이름
|
|
135
|
+
- `TFX_TEAM_LEAD_NAME`: 리드 수신자 이름 (기본 `team-lead`)
|
|
136
|
+
|
|
137
|
+
Bridge 연동:
|
|
138
|
+
- 실행 시작 시 `POST /bridge/team/task-update`로 `claim + in_progress`
|
|
139
|
+
- 실행 종료 시 `POST /bridge/team/task-update`로 `completed|failed`
|
|
140
|
+
- 리드 보고 `POST /bridge/team/send-message`
|
|
141
|
+
- 이벤트 채널 `POST /bridge/result` (`topic=task.result`) 발행
|
|
142
|
+
|
|
143
|
+
#### Step 3d: claude 타입만 Agent 직접 실행
|
|
144
|
+
|
|
145
|
+
`cli == claude`인 서브태스크에만 `Agent(subagent_type)`를 사용한다.
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
Agent({
|
|
149
|
+
name: "claude-worker-{n}",
|
|
150
|
+
team_name: teamName,
|
|
151
|
+
description: "claude-worker-{n}",
|
|
152
|
+
run_in_background: true,
|
|
153
|
+
subagent_type: "{role}",
|
|
154
|
+
prompt: "너는 {teamName}의 Claude 워커이다.
|
|
155
|
+
|
|
156
|
+
1. TaskGet 후 TaskUpdate(status: in_progress, owner: 너의 이름)로 claim
|
|
157
|
+
2. 도구를 직접 사용해 작업 수행
|
|
158
|
+
3. 성공 시 TaskUpdate(status: completed) + SendMessage(to: team-lead)
|
|
159
|
+
4. 실패 시 TaskUpdate(status: failed) + SendMessage(to: team-lead)"
|
|
160
|
+
})
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
#### Step 3e: 사용자 안내
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
"팀 '{teamName}' 생성 완료.
|
|
167
|
+
Codex/Gemini 작업은 리드가 백그라운드 Bash로 병렬 실행 중이며,
|
|
168
|
+
claude 작업만 teammate로 실행됩니다."
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Phase 4: 결과 수집 (truth source = team_task_list)
|
|
172
|
+
|
|
173
|
+
1. 리드가 Step 3c에서 실행한 모든 백그라운드 Bash 프로세스 완료를 대기한다.
|
|
174
|
+
2. `team_task_list`를 최종 truth source로 조회한다.
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
Bash("curl -sf http://127.0.0.1:27888/bridge/team/task-list -H \"Content-Type: application/json\" -d \"{\\\"team_name\\\":\\\"${teamName}\\\"}\"")
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
3. 상태가 `failed`인 task가 있으면 Claude fallback으로 재시도한다.
|
|
181
|
+
4. 재시도 후 다시 `team_task_list`를 조회해 최종 상태를 확정한다.
|
|
182
|
+
5. `send-message`와 `/bridge/result(task.result)` 이벤트는 진행 관찰 채널로 사용하고, 최종 판정은 반드시 `team_task_list` 기준으로 한다.
|
|
183
|
+
|
|
184
|
+
종합 보고서 예시:
|
|
185
|
+
```markdown
|
|
186
|
+
## tfx-team 실행 결과
|
|
187
|
+
|
|
188
|
+
| # | Worker | CLI | 작업 | 상태 |
|
|
189
|
+
|---|--------|-----|------|------|
|
|
190
|
+
| 1 | codex-worker-1 | codex | 인증 리팩터링 | completed |
|
|
191
|
+
| 2 | gemini-worker-1 | gemini | UI 개선 | completed |
|
|
192
|
+
| 3 | claude-worker-1 | claude | 실패 fallback 재시도 | completed |
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Phase 5: 정리 (간소화)
|
|
196
|
+
|
|
197
|
+
teammate 래퍼를 제거했으므로 `shutdown_request` 브로드캐스트를 사용하지 않는다.
|
|
198
|
+
정리 단계는 `TeamDelete()` 직접 호출로 마무리한다.
|
|
199
|
+
|
|
200
|
+
> **중요:** claude 타입 백그라운드 Agent가 아직 실행 중이면 `TeamDelete`가 실패할 수 있다. 해당 작업 완료를 확인한 뒤 삭제한다.
|
|
201
|
+
|
|
202
|
+
### Phase 3-tmux: 레거시 tmux 모드
|
|
203
|
+
|
|
204
|
+
`--tmux` 플래그가 있으면 기존 v1 방식으로 실행:
|
|
89
205
|
|
|
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
206
|
```bash
|
|
108
|
-
|
|
109
|
-
/
|
|
110
|
-
/tfx-team attach # 세션 재연결
|
|
111
|
-
/tfx-team stop # graceful 종료
|
|
207
|
+
# PKG_ROOT: triflux 패키지 루트 (Bash로 확인)
|
|
208
|
+
Bash("node {PKG_ROOT}/bin/triflux.mjs team --no-attach --agents {agents.join(',')} \"{task}\"")
|
|
112
209
|
```
|
|
113
210
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
Hub MCP 도구가 각 CLI에 등록되어 있으면 자동 통신:
|
|
117
|
-
- `register`: 에이전트 등록
|
|
118
|
-
- `publish`: 결과 발행 (topic: task.result)
|
|
119
|
-
- `poll_messages`: 다른 에이전트 메시지 수신
|
|
120
|
-
- `ask`: 다른 에이전트에게 질문
|
|
121
|
-
|
|
122
|
-
MCP 미등록 시 REST 폴백 (프롬프트에 curl 명령 포함).
|
|
123
|
-
|
|
124
|
-
## 에이전트 매핑
|
|
211
|
+
이후 Phase 4-5 대신 사용자에게 tmux 세션 안내:
|
|
125
212
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
|
139
|
-
|
|
140
|
-
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
|
159
|
-
|
|
160
|
-
|
|
|
161
|
-
|
|
|
162
|
-
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
|
169
|
-
|
|
170
|
-
| `hub/team
|
|
171
|
-
| `tfx-auto` | one-shot 실행 오케스트레이터 (
|
|
172
|
-
| `tfx-hub` | MCP 메시지 버스 관리 (
|
|
213
|
+
```
|
|
214
|
+
"tmux 세션이 생성되었습니다.
|
|
215
|
+
tmux attach -t {sessionId} 세션 연결
|
|
216
|
+
Ctrl+B → 방향키 pane 전환
|
|
217
|
+
Ctrl+B → D 세션 분리
|
|
218
|
+
Ctrl+B → Z pane 전체화면"
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## 에이전트 매핑
|
|
222
|
+
|
|
223
|
+
| 분류 결과 | CLI | 역할 | 실행 방법 |
|
|
224
|
+
|----------|-----|------|----------|
|
|
225
|
+
| codex | codex | Lead 직접 라우팅 | `TFX_TEAM_* bash ~/.claude/scripts/tfx-route.sh {role} "{task}" {mcp_profile}` |
|
|
226
|
+
| gemini | gemini | Lead 직접 라우팅 | `TFX_TEAM_* bash ~/.claude/scripts/tfx-route.sh {role} "{task}" {mcp_profile}` |
|
|
227
|
+
| claude | claude | Claude 직접 실행 | `Agent(subagent_type={role})`로 직접 수행 |
|
|
228
|
+
|
|
229
|
+
> **핵심 아이디어:** Codex/Gemini 작업은 `tfx-route.sh`가 팀 상태 동기화까지 직접 수행한다.
|
|
230
|
+
> 리드는 오케스트레이션에 집중하고, Claude 토큰은 래퍼 오버헤드 없이 필요한 직접 실행(`claude` 타입)에만 사용한다.
|
|
231
|
+
|
|
232
|
+
## 전제 조건
|
|
233
|
+
|
|
234
|
+
- **CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1** — settings.json env에 설정 (`tfx setup`이 자동 설정)
|
|
235
|
+
- **codex/gemini CLI** — 해당 에이전트 사용 시
|
|
236
|
+
- **tfx setup** — tfx-route.sh 동기화 + AGENT_TEAMS 자동 설정 (사전 실행 권장)
|
|
237
|
+
- **Hub bridge 활성 상태** — 기본 `http://127.0.0.1:27888` (`/bridge/team/*`, `/bridge/result` 사용)
|
|
238
|
+
|
|
239
|
+
## 에러 처리
|
|
240
|
+
|
|
241
|
+
| 에러 | 처리 |
|
|
242
|
+
|------|------|
|
|
243
|
+
| TeamCreate 실패 / Agent Teams 비활성 | `--tmux` 폴백 (Phase 3-tmux로 전환) |
|
|
244
|
+
| tfx-route.sh 없음 | `tfx setup` 실행 안내 |
|
|
245
|
+
| CLI 미설치 (codex/gemini) | 해당 서브태스크를 claude 워커로 대체 |
|
|
246
|
+
| Codex 분류 실패 | Opus 직접 분류+분해 |
|
|
247
|
+
| Bash 실행 실패 (Lead) | task를 `failed`로 마킹 후 Claude fallback 재시도 |
|
|
248
|
+
| `team_task_list` 조회 실패 | `/bridge/result`/stdout로 임시 관찰 후 bridge 복구 뒤 상태 재검증 |
|
|
249
|
+
| claude fallback 실패 | 실패 task 목록/원인 요약 후 사용자 승인 대기 |
|
|
250
|
+
|
|
251
|
+
## 관련
|
|
252
|
+
|
|
253
|
+
| 항목 | 설명 |
|
|
254
|
+
|------|------|
|
|
255
|
+
| `scripts/tfx-route.sh` | 팀 통합 라우터 (`TFX_TEAM_*`, task claim/complete, send-message, `/bridge/result`) |
|
|
256
|
+
| `hub/team/native.mjs` | Native Teams 래퍼 (프롬프트 템플릿, 팀 설정 빌더) |
|
|
257
|
+
| `hub/team/cli.mjs` | tmux 팀 CLI (`--tmux` 레거시 모드) |
|
|
258
|
+
| `tfx-auto` | one-shot 실행 오케스트레이터 (병행 유지) |
|
|
259
|
+
| `tfx-hub` | MCP 메시지 버스 관리 (tmux 모드용) |
|