triflux 3.2.0-dev.8 → 3.3.0-dev.1

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 (52) hide show
  1. package/bin/triflux.mjs +1296 -1055
  2. package/hooks/hooks.json +17 -0
  3. package/hooks/keyword-rules.json +20 -4
  4. package/hooks/pipeline-stop.mjs +54 -0
  5. package/hub/bridge.mjs +517 -318
  6. package/hub/hitl.mjs +45 -31
  7. package/hub/pipe.mjs +457 -0
  8. package/hub/pipeline/index.mjs +121 -0
  9. package/hub/pipeline/state.mjs +164 -0
  10. package/hub/pipeline/transitions.mjs +114 -0
  11. package/hub/router.mjs +422 -161
  12. package/hub/schema.sql +14 -0
  13. package/hub/server.mjs +499 -424
  14. package/hub/store.mjs +388 -314
  15. package/hub/team/cli-team-common.mjs +348 -0
  16. package/hub/team/cli-team-control.mjs +393 -0
  17. package/hub/team/cli-team-start.mjs +516 -0
  18. package/hub/team/cli-team-status.mjs +269 -0
  19. package/hub/team/cli.mjs +75 -1475
  20. package/hub/team/dashboard.mjs +1 -9
  21. package/hub/team/native.mjs +190 -130
  22. package/hub/team/nativeProxy.mjs +165 -78
  23. package/hub/team/orchestrator.mjs +15 -20
  24. package/hub/team/pane.mjs +137 -103
  25. package/hub/team/psmux.mjs +506 -0
  26. package/hub/team/session.mjs +393 -330
  27. package/hub/team/shared.mjs +13 -0
  28. package/hub/team/staleState.mjs +299 -0
  29. package/hub/tools.mjs +105 -31
  30. package/hub/workers/claude-worker.mjs +446 -0
  31. package/hub/workers/codex-mcp.mjs +414 -0
  32. package/hub/workers/factory.mjs +18 -0
  33. package/hub/workers/gemini-worker.mjs +349 -0
  34. package/hub/workers/interface.mjs +41 -0
  35. package/hud/hud-qos-status.mjs +1790 -1788
  36. package/package.json +4 -1
  37. package/scripts/__tests__/keyword-detector.test.mjs +8 -8
  38. package/scripts/keyword-detector.mjs +15 -0
  39. package/scripts/lib/keyword-rules.mjs +4 -1
  40. package/scripts/preflight-cache.mjs +72 -0
  41. package/scripts/psmux-steering-prototype.sh +368 -0
  42. package/scripts/setup.mjs +136 -71
  43. package/scripts/tfx-route-worker.mjs +161 -0
  44. package/scripts/tfx-route.sh +485 -91
  45. package/skills/tfx-auto/SKILL.md +90 -564
  46. package/skills/tfx-auto-codex/SKILL.md +1 -3
  47. package/skills/tfx-codex/SKILL.md +1 -4
  48. package/skills/tfx-doctor/SKILL.md +1 -0
  49. package/skills/tfx-gemini/SKILL.md +1 -4
  50. package/skills/tfx-multi/SKILL.md +378 -0
  51. package/skills/tfx-setup/SKILL.md +1 -4
  52. package/skills/tfx-team/SKILL.md +0 -304
@@ -26,69 +26,29 @@ argument-hint: "<command|task> [args...]"
26
26
 
27
27
  # tfx-auto — 통합 CLI 오케스트레이터
28
28
 
29
- > **MANDATORY EXECUTION RULE — 이 규칙을 반드시 따르라**
29
+ > **MANDATORY RULES**
30
30
  >
31
- > **작업 실행 시** (Phase 3), **절대 Task() 직접 호출하지 마라.**
32
- > 아래 Claude 네이티브 유지 대상을 제외한 **모든 에이전트는 반드시 Bash("bash ~/.claude/scripts/tfx-route.sh ...")실행**하라.
33
- >
34
- > **Bash(tfx-route.sh)로 실행해야 하는 에이전트:**
35
- > executor, build-fixer, debugger, deep-executor, architect, planner, critic, analyst,
36
- > code-reviewer, security-reviewer, quality-reviewer, scientist, document-specialist,
37
- > designer, writer
38
- >
39
- > **Task()로 실행해야 하는 에이전트 (Claude 네이티브 — 예외 4개만):**
40
- > explore, verifier, test-engineer, qa-tester
41
- >
42
- > **트리아지 (Phase 2)는 예외:** Codex `--full-auto` + Claude 인라인 보정. Agent 스폰 없음.
43
- >
44
- > **위반 시 Codex 무료 토큰 대신 Claude 유료 토큰을 낭비하게 된다.**
45
-
46
- > **COST RULE — Codex/Gemini 최대 활용, Claude 최소화**
47
- >
48
- > Codex Pro 무료 기간 — **모든 작업을 가능한 한 Codex/Gemini에 할당하라.**
49
- >
50
- > **라우팅 우선순위 (반드시 순서대로):**
51
- > 1. **Codex 우선** — 코드 구현/수정/분석/리뷰/디버깅/리서치/설계 전부
52
- > 2. **Gemini 우선** — 문서/UI/디자인/멀티모달
53
- > 3. **Claude는 최후 수단** — Glob/Grep/Bash 직접 접근이 필수인 경우만 (탐색/테스트/검증)
54
- >
55
- > **Codex 분류 시**: `claude`를 선택하기 전에 "이 작업이 Codex로 가능한가?" 반드시 재확인.
56
- > 코드 읽기/분석도 Codex로 가능하다. 리서치도 Codex(MCP: context7, brave-search)로 가능하다.
57
- > **claude는 Glob/Grep/Read/Bash 직접 실행이 반드시 필요할 때만 선택하라.**
31
+ > 1. **실행**: CLI 에이전트는 반드시 `Bash("bash ~/.claude/scripts/tfx-route.sh ...")`. Claude 네이티브(explore/verifier/test-engineer/qa-tester) `Agent()`.
32
+ > 2. **비용**: Codex 우선 Gemini Claude 최후 수단. `claude` 선택 전 "Codex가능한가?" 재확인.
33
+ > 3. **DAG**: SEQUENTIAL/DAG이면 레벨 기반 순차 실행. `.omc/context/{sid}/` 생성, context_output 저장, 실패 시 후속 SKIP.
34
+ > 4. **트리아지**: Codex `--full-auto` 분류 + Opus 인라인 분해. Agent 스폰 금지.
58
35
 
59
- > **DAG 실행 필수 체크리스트 — Phase 3 진입 전 확인**
60
- >
61
- > 1. graph_type이 SEQUENTIAL 또는 DAG이면 → **반드시 레벨 기반 순차 실행**
62
- > 2. `.omc/context/{session_id}/` 디렉토리 생성했는가?
63
- > 3. Level 0 완료 후 context_output 파일을 저장했는가?
64
- > 4. Level 1+ 태스크에 tfx-route.sh **5번째 인자로 context file**을 전달했는가?
65
- > 5. 실패한 태스크의 후속 의존 태스크를 SKIP 처리했는가?
36
+ ## 모드
66
37
 
67
- ## 3가지 모드
38
+ | 입력 형식 | 모드 | 트리아지 |
39
+ |-----------|------|----------|
40
+ | `/implement JWT 추가` | 커맨드 숏컷 | 없음 (즉시 실행) |
41
+ | `/tfx-auto "리팩터링 + UI"` | 자동 | Codex 분류 → Opus 분해 |
42
+ | `/tfx-auto 3:codex "리뷰"` | 수동 | Opus 분해만 |
68
43
 
69
- | 입력 형식 | 모드 | 트리아지 | 예시 |
70
- |-----------|------|----------|------|
71
- | `/implement JWT 추가` | **커맨드 숏컷** | 없음 (즉시 실행) | 단일 에이전트 직행 |
72
- | `/tfx-auto "리팩터링 + UI 개선"` | **자동** | Codex 분류 → Opus 분해 | 복잡한 작업 자동 분배 |
73
- | `/tfx-auto 3:codex "리뷰"` | **수동** | Opus 분해만 | 에이전트 직접 지정 |
44
+ ## 커맨드 숏컷
74
45
 
75
- ## 사용법
76
-
77
- ```
78
- /implement JWT 인증 미들웨어 추가 ← 커맨드 숏컷
79
- /tfx-auto "작업 설명" ← 자동 모드
80
- /tfx-auto N:agent_type "작업 설명" ← 수동 모드
81
- ```
82
-
83
- ## 커맨드 숏컷 (트리아지 없이 즉시 실행)
84
-
85
- 커맨드명이 매칭되면 트리아지를 건너뛰고 tfx-route.sh로 즉시 라우팅.
86
- 타임아웃은 tfx-route.sh 에이전트별 기본값 사용.
46
+ 커맨드명 매칭 시 트리아지 없이 즉시 실행. 패턴: `Bash("bash ~/.claude/scripts/tfx-route.sh {에이전트} '{PROMPT}' {MCP}")`.
87
47
 
88
48
  ### Codex 직행
89
49
 
90
- | 커맨드 | 에이전트 | MCP 프로필 |
91
- |--------|---------|-----------|
50
+ | 커맨드 | 에이전트 | MCP |
51
+ |--------|---------|-----|
92
52
  | `implement` | executor | implement |
93
53
  | `build` | build-fixer | implement |
94
54
  | `research` | document-specialist | analyze |
@@ -98,568 +58,134 @@ argument-hint: "<command|task> [args...]"
98
58
  | `cleanup` | executor | implement |
99
59
  | `pm` | planner | analyze |
100
60
 
101
- ```bash
102
- Bash("bash ~/.claude/scripts/tfx-route.sh {에이전트} '{PROMPT}' {MCP프로필}")
103
- ```
104
-
105
- ### Codex 2단계 (분석 → 실행)
61
+ ### 2단계: `improve`
106
62
 
107
- | 커맨드 | 1단계 | 2단계 | 비고 |
108
- |--------|-------|-------|------|
109
- | `improve` | code-reviewer (review) | executor (implement) | 2단계는 사용자 승인 후 |
63
+ 1단계 `code-reviewer '{PROMPT}' review` 사용자 승인 → 2단계 `executor '리뷰 반영: {요약}' implement`
110
64
 
111
- ```bash
112
- # 1단계 — 분석
113
- Bash("bash ~/.claude/scripts/tfx-route.sh code-reviewer '{PROMPT}' review")
114
- # 사용자에게 분석 결과 보고, 승인 요청
115
- # 2단계 — 수정 (승인 시)
116
- Bash("bash ~/.claude/scripts/tfx-route.sh executor '리뷰 결과 반영: {1단계_결과_요약}' implement")
117
- ```
65
+ ### 병렬
118
66
 
119
- ### Codex 병렬 (동시 다중 에이전트)
120
-
121
- | 커맨드 | 에이전트들 | MCP 프로필 |
122
- |--------|----------|-----------|
67
+ | 커맨드 | 에이전트들 (병렬, run_in_background=true) | MCP |
68
+ |--------|------------------------------------------|-----|
123
69
  | `analyze` | quality-reviewer + security-reviewer | review |
124
70
  | `spec-panel` | architect + analyst + critic | analyze |
125
71
  | `business-panel` | analyst + architect | analyze |
126
72
 
127
- ```bash
128
- # analyze — 2개 병렬
129
- Bash("bash ~/.claude/scripts/tfx-route.sh quality-reviewer '{PROMPT}' review", run_in_background=true)
130
- Bash("bash ~/.claude/scripts/tfx-route.sh security-reviewer '{PROMPT}' review", run_in_background=true)
131
-
132
- # spec-panel — 3개 병렬
133
- Bash("bash ~/.claude/scripts/tfx-route.sh architect '기술 실현성 평가: {PROMPT}' analyze", run_in_background=true)
134
- Bash("bash ~/.claude/scripts/tfx-route.sh analyst '요구사항 완전성 평가: {PROMPT}' analyze", run_in_background=true)
135
- Bash("bash ~/.claude/scripts/tfx-route.sh critic '비판적 검토: {PROMPT}' analyze", run_in_background=true)
136
-
137
- # business-panel — 2개 병렬
138
- Bash("bash ~/.claude/scripts/tfx-route.sh analyst '시장/전략 분석: {PROMPT}' analyze", run_in_background=true)
139
- Bash("bash ~/.claude/scripts/tfx-route.sh architect '기술-비즈니스 연계 분석: {PROMPT}' analyze", run_in_background=true)
140
- ```
141
-
142
73
  ### Gemini 직행
143
74
 
144
- | 커맨드 | 에이전트 | MCP 프로필 |
145
- |--------|---------|-----------|
75
+ | 커맨드 | 에이전트 | MCP |
76
+ |--------|---------|-----|
146
77
  | `explain` | writer | docs |
147
78
  | `document` | writer | docs |
148
79
 
149
- ```bash
150
- Bash("bash ~/.claude/scripts/tfx-route.sh writer '{PROMPT}' docs")
151
- ```
152
-
153
80
  ### Claude 네이티브
154
81
 
155
- | 커맨드 | 에이전트 | 모델 |
156
- |--------|---------|------|
157
- | `test` | test-engineer | sonnet |
158
- | `reflect` | verifier | sonnet |
159
-
160
- ```
161
- Agent(subagent_type="oh-my-claudecode:test-engineer", model="sonnet", prompt="{PROMPT}")
162
- Agent(subagent_type="oh-my-claudecode:verifier", model="sonnet", prompt="{PROMPT}")
163
- ```
164
-
165
- ### 복합 워크플로우
166
-
167
- #### estimate — 규모 추정
168
-
169
- ```bash
170
- # 1. 탐색 (Claude Haiku)
171
- Agent(subagent_type="oh-my-claudecode:explore", model="haiku",
172
- prompt="다음 작업의 영향 범위 탐색 — 관련 파일, 모듈, 의존성 목록화: {PROMPT}")
173
-
174
- # 2. 분석 (Codex)
175
- Bash("bash ~/.claude/scripts/tfx-route.sh analyst '탐색 결과: {explore_결과}. 작업: {PROMPT}. 평가: 영향범위, 복잡도(S/M/L/XL), 리스크, 선행조건, 권장실행방식' analyze")
176
- ```
177
-
178
- #### index-repo — 코드베이스 인덱싱
179
-
180
- ```bash
181
- # mode 파싱: "mode=quick" → QUICK, "mode=update" → UPDATE, 기본 → FULL
182
-
183
- # 1. 구조 탐색 (Claude Haiku)
184
- Agent(subagent_type="oh-my-claudecode:explore", model="haiku",
185
- prompt="코드베이스 전체 구조 매핑: 디렉토리 트리, 진입점, 설정 파일, 테스트 구조")
82
+ | 커맨드 | 실행 |
83
+ |--------|------|
84
+ | `test` | `Agent(subagent_type="oh-my-claudecode:test-engineer", model="sonnet")` |
85
+ | `reflect` | `Agent(subagent_type="oh-my-claudecode:verifier", model="sonnet")` |
186
86
 
187
- # 2. 의존성 분석 (QUICK이면 생략, Claude Haiku)
188
- Agent(subagent_type="oh-my-claudecode:explore", model="haiku",
189
- prompt="모듈 간 import 관계 분석: 내부 import 그래프, 순환 의존성, API 경계, 공유 유틸리티")
87
+ ### 복합
190
88
 
191
- # 3. PROJECT_INDEX.md 생성 (Write 도구)
192
- ```
89
+ | 커맨드 | 흐름 |
90
+ |--------|------|
91
+ | `estimate` | explore(haiku) → analyst(codex): 영향범위, 복잡도(S/M/L/XL), 리스크 |
92
+ | `index-repo` | explore(haiku) × 2 → Write(PROJECT_INDEX.md). mode=quick/update/full |
193
93
 
194
- ## 자동/수동 병렬 모드 (트리아지 실행)
94
+ ## 트리아지
195
95
 
196
- ### 파라미터
96
+ **자동 모드:**
97
+ 1. Codex 분류: `codex exec --full-auto --skip-git-repo-check` → JSON `{parts: [{description, agent: "codex|gemini|claude"}]}`
98
+ 2. Opus 인라인 분해: `{graph_type: "INDEPENDENT|SEQUENTIAL|DAG", subtasks: [{id, description, scope, agent, mcp_profile, depends_on, context_output, context_input}]}`
99
+ 3. 실패 시 Opus가 직접 분류+분해
197
100
 
198
- - **N** (선택) 워커 (1-10). 미지정 시 Opus가 자동 결정
199
- - **agent_type** (선택) — `codex`, `gemini`, `claude`, 또는 OMC 에이전트명
200
- - **task** (필수) — 작업 설명
201
-
202
- ### 에이전트 매핑
101
+ **수동 모드 (`N:agent_type`):** Codex 분류 건너뜀 Opus가 N개 서브태스크 분해. N > 10 거부.
203
102
 
204
- | 입력 | CLI | 용도 |
205
- |------|-----|------|
206
- | `codex` / `executor` / `debugger` / `deep-executor` | Codex CLI | 코드 구현/분석/디버깅 |
207
- | `gemini` / `designer` / `writer` | Gemini CLI | 문서/UI |
208
- | `claude` / `explore` / `verifier` / `test-engineer` | Claude Task | 탐색/검증 (네이티브) |
209
- | `code-reviewer` / `security-reviewer` / `quality-reviewer` | Codex CLI (exec review) | 리뷰 (전용 review 커맨드) |
210
- | `scientist` | Codex CLI (high, 480s) | 일반 리서치 (검색+요약) |
211
- | `scientist-deep` | Codex CLI (thorough, 1200s) | 심층 리서치 (논문 분석, 교차 검증) |
212
- | `document-specialist` | Codex CLI | 문서 조사 (analyze MCP) |
213
- | `architect` / `planner` / `critic` / `analyst` | Codex CLI (xhigh + Opus 검증) | 설계/계획 (analyze MCP) |
103
+ ## 실행
214
104
 
215
- ### 예시
105
+ ### CLI 에이전트 (Codex/Gemini)
216
106
 
217
107
  ```bash
218
- # 자동 모드 AI가 분류 + 분해
219
- /tfx-auto "인증 모듈 리팩터링 + 로그인 UI 개선 + 테스트 추가"
220
- /tfx-auto "이 프로젝트의 보안 취약점 분석"
221
- /tfx-auto "src/api 전체 TypeScript 에러 수정"
222
-
223
- # 수동 모드 — agent 직접 지정
224
- /tfx-auto 3:codex "src/api, src/auth, src/payment 각각 리뷰"
225
- /tfx-auto 2:gemini "UI 컴포넌트 접근성 개선"
226
- /tfx-auto 1:codex "결제 모듈 구현"
227
- ```
228
-
229
- ## 필수 조건
230
-
231
- - `~/.claude/scripts/tfx-route.sh` — CLI 라우팅 래퍼 (필수)
232
- - **codex** CLI: `npm install -g @openai/codex` (codex 워커 사용 시)
233
- - **gemini** CLI: `npm install -g @google/gemini-cli` (gemini 워커 사용 시)
234
- - tmux **불필요**
235
-
236
- ## 아키텍처
237
-
238
- ### 트리아지 (Codex 분류 → Opus 설계)
239
-
240
- ```
241
- 사용자 입력
242
- |
243
- +-- agent 지정됨? ──YES──→ [Opus 인라인 분해] → 병렬 실행
244
- |
245
- NO
246
- |
247
- v
248
- [Codex 분류] (--full-auto, 무료)
249
- "이 작업은 codex/gemini/claude 중 뭐가 적합?"
250
- → 가벼운 분류 결과
251
- |
252
- v
253
- [Opus 설계+분해] (인라인, Agent 스폰 없음)
254
- → 구체 에이전트 매핑 + scope + DAG 설계
255
- → 오케스트레이터 자체가 Opus이므로 별도 Agent 불필요
256
- |
257
- v
258
- [tfx-route.sh × N 병렬 실행]
259
- → Windows면 Gemini 안정화 자동 적용
260
- |
261
- v
262
- [결과 수집 + 보고]
263
- ```
264
-
265
- > **설계는 Opus 품질, 비용은 최소화:**
266
- > - 분류(가벼운 작업) → Codex 무료
267
- > - 설계+분해(품질 중요) → Opus 인라인 (오케스트레이터가 직접)
268
- > - Agent 스폰 없음 → MANDATORY RULE 준수 + 오버헤드 제거
269
-
270
- ### 전체 실행 흐름
271
-
272
- ```
273
- User: "/tfx-auto 인증 리팩터링 + UI 개선 + 테스트"
274
- |
275
- v
276
- [Phase 1: 입력 파싱] — 자동 모드 감지
277
- |
278
- v
279
- [Phase 2a: Codex 분류]
280
- Bash("codex exec --full-auto --skip-git-repo-check '분류 프롬프트'")
281
- → [{auth 리팩터링, codex}, {UI 개선, gemini}, {테스트, claude}]
282
- (실패 시 Opus가 직접 분류+분해)
283
- |
284
- v
285
- [Phase 2b: Opus 설계+분해 (인라인)]
286
- codex → executor (implement, scope: src/auth/)
287
- gemini → designer (docs, scope: src/components/login/)
288
- claude → test-engineer (Claude 네이티브)
289
- graph_type: DAG, depends_on 설정
290
- |
291
- v
292
- [Phase 3: 병렬 실행]
293
- Bash("tfx-route.sh executor '리팩터링' implement", run_in_background=true)
294
- Bash("tfx-route.sh designer 'UI 개선' docs", run_in_background=true)
295
- Agent(subagent_type="oh-my-claudecode:test-engineer", model="sonnet", run_in_background=true)
296
- |
297
- v
298
- [Phase 4: 결과 수집]
299
- [Phase 5: 실패 처리 → Claude fallback]
300
- [Phase 6: 보고]
301
- ```
108
+ # Level 0 / INDEPENDENT
109
+ Bash("bash ~/.claude/scripts/tfx-route.sh {agent} '{prompt}' {mcp_profile}", run_in_background=true)
302
110
 
303
- ## 워크플로우
304
-
305
- ### Phase 1: 입력 파싱 (모드 감지)
306
-
307
- 사용자 입력에서 모드를 자동 감지:
308
-
309
- ```
310
- 입력: "3:codex src/api 리뷰"
311
- → 수동 모드: N=3, agent=codex, task="src/api 리뷰"
312
-
313
- 입력: "인증 모듈 리팩터링 + UI 개선"
314
- → 자동 모드: task="인증 모듈 리팩터링 + UI 개선"
315
- ```
316
-
317
- **감지 규칙:**
318
- - `N:agent_type` 패턴 존재 → 수동 모드
319
- - 그 외 → 자동 모드
320
- - N > 10이면 거부
321
-
322
- ### Phase 2: 트리아지 (Codex 분류 → Opus 설계)
323
-
324
- #### 자동 모드 — Step 2a: Codex 분류
325
-
326
- Codex가 작업 유형을 분류 (무료, 가벼운 작업):
327
-
328
- ```bash
329
- Bash("codex exec --full-auto --skip-git-repo-check '다음 작업을 분석하고 각 부분에 적합한 agent를 분류하라.
330
-
331
- agent 선택:
332
- - codex: 코드 구현/수정/분석/리뷰/디버깅/설계 (기본값 — 확신 없으면 codex)
333
- - gemini: 문서/UI/디자인/멀티모달
334
- - claude: 코드베이스 탐색/테스트 실행/검증 (최후 수단)
335
-
336
- 리서치 agent:
337
- - scientist: 일반 리서치 (high, 480s)
338
- - scientist-deep: 심층 리서치 (thorough, 1200s)
339
-
340
- 작업: {task}
341
-
342
- JSON 형식:
343
- {
344
- \"parts\": [
345
- { \"description\": \"...\", \"agent\": \"codex|gemini|claude\" }
346
- ]
347
- }
348
- '")
349
- ```
350
-
351
- > **Codex 분류 실패 시:** 오케스트레이터(Opus)가 직접 분류+분해 수행.
352
-
353
- #### 자동 모드 — Step 2b: Opus 설계+분해 (인라인)
354
-
355
- 분류 결과를 받아 **오케스트레이터(Opus)가 직접** 설계+분해. Agent 스폰 없음.
356
-
357
- ```
358
- 오케스트레이터가 인라인으로 수행:
359
- 1. 분류 결과를 기반으로 독립적인 서브태스크로 분해
360
- 2. 각 서브태스크에 구체 agent 배정:
361
- - codex → executor / debugger / deep-executor / scientist 등
362
- - gemini → designer / writer
363
- - claude → explore / test-engineer / verifier
364
- 3. scope (파일/모듈/영역) 명시
365
- 4. 의존 관계 설정 (depends_on, context_output, context_input)
366
- 5. graph_type 결정 (INDEPENDENT / SEQUENTIAL / DAG)
367
-
368
- 결과 JSON:
369
- {
370
- "graph_type": "INDEPENDENT|SEQUENTIAL|DAG",
371
- "subtasks": [
372
- {
373
- "id": "t1",
374
- "description": "...",
375
- "scope": "src/auth/",
376
- "agent": "executor",
377
- "mcp_profile": "implement",
378
- "depends_on": [],
379
- "context_output": "t1-auth-refactor.md",
380
- "context_input": []
381
- }
382
- ]
383
- }
384
-
385
- 의존 관계 규칙:
386
- - depends_on: 선행 태스크 ID 목록. 순환 금지.
387
- - context_output: 후속 태스크에 전달할 결과 파일명
388
- - context_input: 참조할 선행 태스크의 context_output 목록
111
+ # Level 1+ (컨텍스트 의존) — 4번째=timeout(빈값), 5번째=context_file
112
+ Bash("bash ~/.claude/scripts/tfx-route.sh {agent} '{prompt}' {mcp_profile} '' .omc/context/{sid}/combined-{tid}.md", run_in_background=true)
389
113
  ```
390
114
 
391
- > **왜 Agent 스폰이 아닌 인라인인가?**
392
- > 오케스트레이터 자체가 Opus. 같은 모델의 Agent를 스폰하면 오버헤드만 추가.
393
- > 설계 품질은 Opus급 그대로, 토큰 절약 + MANDATORY RULE 준수.
394
-
395
- #### 수동 모드 — Opus 인라인 분해
396
-
397
- agent가 지정된 경우 (`N:agent_type`), Codex 분류를 건너뛰고 Opus가 직접 분해:
398
-
399
- ```
400
- 오케스트레이터가 인라인으로 처리:
401
- 1. 작업을 정확히 {N}개의 독립 서브태스크로 분해
402
- 2. 모든 서브태스크에 {agent_type} 배정
403
- 3. 각 서브태스크는 파일 충돌 없이 독립 실행 가능해야 함
404
- 4. JSON 형식으로 구성 후 Phase 3으로 진행
405
- ```
406
-
407
- ### Phase 3: DAG 기반 실행
408
-
409
- graph_type에 따라 실행 전략이 달라진다:
410
-
411
- #### INDEPENDENT: 전부 병렬 (기존 동작과 동일)
412
-
413
- 모든 서브태스크를 단일 메시지에서 병렬로 실행:
414
-
415
- ```bash
416
- Bash("bash ~/.claude/scripts/tfx-route.sh {agent} '{prompt}' {mcp_profile}",
417
- run_in_background=true)
418
- ```
419
-
420
- #### SEQUENTIAL / DAG: 레벨 기반 실행
421
-
422
- **Step 1: 토폴로지 정렬 → 레벨 할당**
423
-
424
- depends_on 관계를 분석하여 실행 레벨을 결정:
425
- - Level 0: depends_on이 빈 태스크 (루트)
426
- - Level N: 모든 의존 태스크가 Level 0~(N-1)에 속하는 태스크
427
-
428
- 예시:
429
- ```
430
- t1(리서치A), t2(리서치B) → Level 0 (병렬)
431
- t3(구현, depends_on:[t1,t2]) → Level 1 (t1,t2 완료 후)
432
- t4(테스트, depends_on:[t3]) → Level 2 (t3 완료 후)
433
- ```
434
-
435
- **Step 2: 컨텍스트 디렉토리 생성**
436
-
437
- ```bash
438
- Bash("mkdir -p .omc/context/{session_id}")
439
- ```
440
-
441
- **Step 3: 레벨별 순차 실행**
115
+ ### Claude 네이티브
442
116
 
443
117
  ```
444
- For each level L from 0 to max_level:
445
-
446
- 1. 해당 레벨의 모든 태스크를 수집
447
-
448
- 2. 각 태스크에 대해:
449
- a. context_input이 있으면 → 컨텍스트 머지:
450
- # 다중 선행 컨텍스트를 하나로 합침
451
- for ctx in context_input:
452
- echo "=== Context from: {source_task_id} ===" >> combined.md
453
- cat .omc/context/{session_id}/{ctx} >> combined.md
454
- b. CLI 에이전트:
455
- Bash("bash ~/.claude/scripts/tfx-route.sh {agent} '{prompt}' {mcp} {timeout} {context_file}",
456
- run_in_background=(같은 레벨에 다른 태스크가 있으면))
457
- c. Claude 네이티브 에이전트:
458
- Agent(subagent_type="oh-my-claudecode:{agent}", model="{model}",
459
- prompt="{prompt}\n\n<prior_context>\n{context_content}\n</prior_context>",
460
- run_in_background=(같은 레벨에 다른 태스크가 있으면))
461
-
462
- 3. 해당 레벨의 모든 태스크 완료 대기
463
-
464
- 4. 각 완료된 태스크에 대해:
465
- a. context_output이 있으면 → 결과 저장:
466
- - CLI: OUTPUT 섹션 추출 → .omc/context/{session_id}/{context_output}
467
- - Claude: 반환값 → .omc/context/{session_id}/{context_output}
468
- b. 실패/타임아웃 → 의존 태스크 SKIP 처리 (실패 전파)
469
-
470
- 5. 다음 레벨로 진행
471
- ```
472
-
473
- #### CLI 에이전트 실행 (Codex/Gemini)
474
-
475
- ```bash
476
- # 컨텍스트 없는 경우 (Level 0 또는 독립)
477
- Bash("bash ~/.claude/scripts/tfx-route.sh {agent} '{prompt}' {mcp_profile}",
478
- run_in_background=true)
479
-
480
- # 컨텍스트 있는 경우 (Level 1+, 의존 태스크)
481
- Bash("bash ~/.claude/scripts/tfx-route.sh {agent} '{prompt}' {mcp_profile} .omc/context/{sid}/combined-{task_id}.md",
482
- run_in_background=true)
118
+ Agent(subagent_type="oh-my-claudecode:{agent}", model="{model}", prompt="{prompt}", run_in_background=true)
119
+ # 컨텍스트 있으면 prompt에 <prior_context>...</prior_context> 추가
483
120
  ```
484
121
 
485
- **Windows Gemini 안정화 (자동 적용):**
486
- - Gemini 워커에 `--timeout 60` 플래그 자동 추가
487
- - health check: 실행 후 10초 내 응답 없으면 재시작
488
- - `enableInteractiveShell=false`로 node-pty 우회
489
-
490
- #### Claude 네이티브 에이전트
122
+ ### 에이전트 매핑
491
123
 
492
- ```
493
- # 컨텍스트 없는 경우
494
- Agent(subagent_type="oh-my-claudecode:{agent}", model="{model}",
495
- prompt="{prompt}", run_in_background=true)
496
-
497
- # 컨텍스트 있는 경우
498
- Agent(subagent_type="oh-my-claudecode:{agent}", model="{model}",
499
- prompt="{prompt}\n\n<prior_context>\n{context_from_file}\n</prior_context>",
500
- run_in_background=true)
501
- ```
124
+ | 입력 | CLI | MCP |
125
+ |------|-----|-----|
126
+ | codex / executor / debugger / deep-executor | Codex | implement |
127
+ | architect / planner / critic / analyst | Codex (xhigh) | analyze |
128
+ | scientist / document-specialist | Codex | analyze |
129
+ | code-reviewer / security-reviewer / quality-reviewer | Codex (review) | review |
130
+ | gemini / designer / writer | Gemini | docs |
131
+ | claude / explore / verifier / test-engineer / qa-tester | Claude native | — |
502
132
 
503
- #### MCP 프로필 자동 결정
133
+ ### MCP 프로필 자동 결정
504
134
 
505
- | 에이전트 | MCP 프로필 |
506
- |----------|-----------|
135
+ | 에이전트 | MCP |
136
+ |----------|-----|
507
137
  | executor, build-fixer, debugger, deep-executor | implement |
508
- | architect, planner, critic, analyst | analyze |
509
- | scientist, document-specialist | analyze |
138
+ | architect, planner, critic, analyst, scientist, document-specialist | analyze |
510
139
  | code-reviewer, security-reviewer, quality-reviewer | review |
511
140
  | designer, writer | docs |
512
141
 
513
- #### 컨텍스트 머지 규칙
142
+ ### 결과 파싱
514
143
 
515
- 1. 선행 태스크 출력에 `=== Context from: {task_id} ({agent}: {description}) ===` 헤더 추가
516
- 2. 합친 크기가 32KB 초과 시 → 각 선행 출력을 비례 절삭
517
- 3. 선행 출력 경고 출력, 해당 섹션 건너뜀
144
+ | exit_code + status | 사용할 출력 |
145
+ |--------------------|-----------|
146
+ | 0 + success | `=== OUTPUT ===` 섹션 |
147
+ | 124 + timeout | `=== PARTIAL OUTPUT ===` |
148
+ | ≠0 + failed | STDERR → Claude fallback |
518
149
 
519
- #### OUTPUT 섹션 추출 (CLI 결과에서)
150
+ OUTPUT 추출: `echo "$result" | sed -n '/^=== OUTPUT ===/,/^=== /{/^=== OUTPUT ===/d;/^=== /d;p}'`
520
151
 
521
- tfx-route.sh 출력에서 `=== OUTPUT ===` ~ 다음 `===` 사이의 내용을 추출:
522
- ```bash
523
- # OUTPUT 추출
524
- echo "$result" | sed -n '/^=== OUTPUT ===/,/^=== /{/^=== OUTPUT ===/d;/^=== /d;p}'
525
- ```
152
+ ### 실패 처리
526
153
 
527
- #### 토큰 스냅샷 (실행 전/후)
154
+ 1차 `Agent(subagent_type="oh-my-claudecode:executor", model="sonnet")` fallback.
155
+ 2차 연속 실패 → 실패 보고 + 성공 결과만 종합.
528
156
 
529
- 서브태스크 실행 전, 토큰 상태를 캡처:
530
- ```bash
531
- Bash("node ~/.claude/scripts/token-snapshot.mjs snapshot pre-{subtask_id}")
532
- ```
533
-
534
- 각 서브태스크 완료 후, 토큰 상태 캡처 + diff 계산:
535
- ```bash
536
- Bash("node ~/.claude/scripts/token-snapshot.mjs snapshot post-{subtask_id}")
537
- Bash("node ~/.claude/scripts/token-snapshot.mjs diff pre-{subtask_id} post-{subtask_id} --agent {agent} --cli {cli} --id {subtask_id}")
538
- ```
539
-
540
- > **참고:** tfx-route.sh가 실행별 토큰을 JSONL 로그에 직접 기록하므로, 병렬 실행 시에도 정확한 추적 가능.
541
- > 스냅샷 diff는 단일 워커 검증용, 로그 토큰은 병렬 워커 구분용으로 이중 추적.
542
-
543
- ### Phase 4: 결과 수집
544
-
545
- 모든 백그라운드 작업 완료 후 결과 수집.
546
-
547
- #### CLI 워커 결과 파싱
548
-
549
- `=== TFX-ROUTE RESULT ===` 헤더에서:
550
-
551
- | 필드 | 의미 |
552
- |------|------|
553
- | `exit_code: 0` + `status: success` | 성공. OUTPUT 섹션 사용 |
554
- | `exit_code: 0` + `status: success_with_warnings` | 성공 + 경고 |
555
- | `exit_code: 124` + `status: timeout` | 타임아웃. PARTIAL OUTPUT 사용 |
556
- | `exit_code: ≠0` + `status: failed` | 실패. STDERR 확인 |
557
-
558
- #### DAG 모드 추가 처리
559
-
560
- - 각 레벨 완료 후 context_output 파일 저장
561
- - 실패한 태스크의 모든 후속 의존 태스크를 SKIPPED로 마킹
562
- - 부분 성공: 완료된 태스크의 컨텍스트 파일은 보존
563
-
564
- **실패 전파 규칙:**
565
- | 시나리오 | 처리 |
566
- |----------|------|
567
- | Level N 태스크 실패 | 해당 태스크에 직접/간접 의존하는 모든 태스크를 SKIPPED |
568
- | Level N 태스크 타임아웃 | 실패와 동일 처리 |
569
- | 같은 레벨 일부 실패 | 다른 독립 태스크는 계속 실행 |
570
- | 전체 레벨 실패 | 이후 레벨 전부 SKIP |
571
-
572
- ### Phase 5: 실패 처리
573
-
574
- 1. **1차 실패** → Claude 네이티브 에이전트로 fallback:
575
- ```
576
- Agent(subagent_type="oh-my-claudecode:executor", model="sonnet",
577
- prompt="{failed_subtask}")
578
- ```
579
-
580
- 2. **2차 연속 실패** → 해당 서브태스크 실패 보고. 나머지 성공 결과만 종합.
581
-
582
- 3. **전체 타임아웃** → 부분 결과 보고 + 타임아웃 안내.
583
-
584
- ### Phase 6: 보고
157
+ ### 보고 형식
585
158
 
586
159
  ```markdown
587
160
  ## tfx-auto 완료
588
-
589
- **모드**: 자동 | **트리아지**: Codex 분류 Opus 분해
590
- **그래프**: {INDEPENDENT|SEQUENTIAL|DAG} | **레벨**: {max_level+1}
591
-
592
- | # | 서브태스크 | Agent | CLI | MCP | 레벨 | 의존 | 상태 | 시간 |
593
- |---|----------|-------|-----|-----|------|------|------|------|
594
- | t1 | 리서치A | scientist | codex | analyze | 0 | - | success | 45s |
595
- | t2 | 리서치B | scientist | codex | analyze | 0 | - | success | 50s |
596
- | t3 | 구현 | executor | codex | implement | 1 | t1,t2 | success | 30s |
597
- | t4 | 테스트 | test-engineer | claude | — | 2 | t3 | success | 25s |
598
-
599
- ### 컨텍스트 체인
600
- t1 → t3 (t1-research-a.md, 2.3KB)
601
- t2 → t3 (t2-research-b.md, 1.8KB)
602
- t3 → t4 (t3-implementation.md, 4.1KB)
603
-
604
- ### 워커 t1: 리서치A
605
- (출력 요약)
606
-
607
- ### 워커 t2: 리서치B
608
- (출력 요약)
609
-
610
- ### 워커 t3: 구현
611
- (출력 요약)
612
-
613
- ### 워커 t4: 테스트
161
+ **모드**: {auto|manual} | **그래프**: {type} | **레벨**: {N}
162
+ | # | 서브태스크 | Agent | CLI | MCP | 레벨 | 상태 | 시간 |
163
+ ### 워커 {n}: {제목}
614
164
  (출력 요약)
615
-
616
165
  ### Token Savings Report
617
-
618
- | # | 서브태스크 | Agent | CLI | Input | Output | Claude 비용(추정) | 실제 비용 | 절약 |
619
- |---|----------|-------|-----|-------|--------|-----------------|---------|------|
620
- | t1 | 리서치A | scientist | codex | 138K | 1.7K | $0.44 | $0.00 | $0.44 |
621
- | t2 | 리서치B | scientist | codex | 52K | 3.1K | $0.20 | $0.00 | $0.20 |
622
- | t3 | 구현 | executor | codex | 95K | 2.4K | $0.30 | $0.00 | $0.30 |
623
- | t4 | 테스트 | test-engineer | claude | — | — | (Claude native) | — | — |
624
-
625
- **총 절약: $0.94** (Codex $0.94)
626
-
627
- 전체 소요: 50s(L0) + 30s(L1) + 25s(L2) = 105s (순차) | 트리아지: Sonnet+Opus ~8s
166
+ (node ~/.claude/scripts/token-snapshot.mjs report {session-id})
628
167
  ```
629
168
 
630
- > **토큰 보고서 생성 방법:** Phase 4 완료 후, 각 서브태스크의 diff 결과를 종합하여 위 테이블 출력.
631
- > Claude 네이티브 에이전트(explore, verifier, test-engineer, qa-tester)는 토큰 측정 불가 → "Claude native" 표시.
632
- > ```bash
633
- > Bash("node ~/.claude/scripts/token-snapshot.mjs report {session-id}")
634
- > ```
169
+ ## 필수 조건
170
+
171
+ - `~/.claude/scripts/tfx-route.sh` (필수)
172
+ - codex: `npm install -g @openai/codex` | gemini: `npm install -g @google/gemini-cli`
635
173
 
636
174
  ## 에러 레퍼런스
637
175
 
638
- | 에러 | 원인 | 처리 |
639
- |------|------|------|
640
- | `tfx-route.sh: not found` | 래퍼 스크립트 미설치 | `~/.claude/scripts/tfx-route.sh` 생성 |
641
- | `codex: command not found` | Codex CLI 미설치 | `npm install -g @openai/codex` |
642
- | `gemini: command not found` | Gemini CLI 미설치 | `npm install -g @google/gemini-cli` |
643
- | `status: timeout` | CLI 타임아웃 (에이전트별 동적) | 타임아웃 늘리거나 작업 범위 축소 |
644
- | `status: failed` | CLI 에러 | stderr 로그 확인 → Claude fallback |
645
- | `N > 10` | 워커 수 초과 | 10 이하로 조정 |
646
- | Codex 분류 실패 | 모호한 작업 설명 | 기본값 codex로 fallback |
647
- | Opus 분해 실패 | 작업 분해 불가 | 단일 워커로 실행 |
648
- | 순환 의존 감지 | depends_on에 순환 존재 | 분해 재시도 또는 사용자에게 확인 |
649
- | 컨텍스트 파일 미생성 | 선행 태스크 출력 비어있음 | 경고 후 컨텍스트 없이 실행 |
650
- | 컨텍스트 크기 초과 | 합친 컨텍스트 > 32KB | 비례 절삭 후 실행 |
651
- | SKIPPED 태스크 발생 | 선행 태스크 실패 | 부분 성공 보고 + 수동 재실행 안내 |
652
-
653
- ## 관련
654
-
655
- | 항목 | 설명 |
176
+ | 에러 | 처리 |
656
177
  |------|------|
657
- | `~/.claude/scripts/tfx-route.sh` | CLI 라우팅 래퍼 (필수) |
658
- | `/omc-teams` | tmux 기반 CLI 워커 (별도) |
178
+ | `tfx-route.sh: not found` | tfx-route.sh 생성 |
179
+ | `codex/gemini: not found` | npm install -g |
180
+ | timeout / failed | stderr → Claude fallback |
181
+ | N > 10 | 10 이하로 조정 |
182
+ | 순환 의존 | 분해 재시도 |
183
+ | 컨텍스트 > 32KB | 비례 절삭 |
659
184
 
660
185
  ## Troubleshooting
661
186
 
662
- CLI 실행 오류나 HUD 문제 발생 시:
663
- 1. `/tfx-doctor` — 진단 실행
664
- 2. `/tfx-doctor --fix` — 자동 수정
665
- 3. `/tfx-doctor --reset` — 캐시 초기화
187
+ `/tfx-doctor` 진단 | `/tfx-doctor --fix` 자동 수정 | `/tfx-doctor --reset` 캐시 초기화
188
+
189
+ ## 상세 레퍼런스
190
+
191
+ DAG 알고리즘, 컨텍스트 머지 규칙, 토큰 스냅샷, 보고서 상세 → [`docs/tfx-auto-internals.md`](../../docs/tfx-auto-internals.md)