triflux 8.11.2 → 8.12.2

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 (103) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.ko.md +1 -1
  3. package/README.md +1 -1
  4. package/hooks/hooks.json +56 -51
  5. package/hub/pipeline/index.mjs +318 -318
  6. package/hub/routing/q-learning.mjs +2 -1
  7. package/hub/schema.sql +146 -146
  8. package/hub/team/cli/commands/kill.mjs +37 -37
  9. package/hub/team/cli/commands/start/index.mjs +3 -2
  10. package/hub/team/cli/commands/start/parse-args.mjs +5 -0
  11. package/hub/team/cli/commands/start/start-headless.mjs +2 -1
  12. package/hub/team/cli/commands/stop.mjs +31 -31
  13. package/hub/team/cli/commands/task.mjs +30 -30
  14. package/hub/team/cli/help.mjs +41 -40
  15. package/hub/team/cli/services/hub-client.mjs +208 -208
  16. package/hub/team/cli/services/native-control.mjs +118 -118
  17. package/hub/team/cli/services/runtime-mode.mjs +62 -62
  18. package/hub/team/cli/services/state-store.mjs +48 -48
  19. package/hub/team/dashboard-anchor.mjs +14 -0
  20. package/hub/team/dashboard.mjs +274 -274
  21. package/hub/team/headless.mjs +44 -19
  22. package/hub/team/native.mjs +649 -649
  23. package/hub/tools.mjs +554 -554
  24. package/hub/workers/delegator-mcp.mjs +21 -1
  25. package/package.json +1 -1
  26. package/scripts/__tests__/remote-spawn-transfer.test.mjs +117 -0
  27. package/scripts/__tests__/remote-spawn.test.mjs +78 -0
  28. package/scripts/cache-buildup.mjs +401 -0
  29. package/scripts/headless-guard.mjs +10 -3
  30. package/scripts/hub-ensure.mjs +120 -120
  31. package/scripts/lib/mcp-filter.mjs +720 -720
  32. package/scripts/lib/remote-spawn-transfer.mjs +196 -0
  33. package/scripts/mcp-check.mjs +237 -127
  34. package/scripts/mcp-gateway-ensure.mjs +6 -8
  35. package/scripts/mcp-gateway-integration-test.mjs +228 -0
  36. package/scripts/mcp-gateway-start.mjs +42 -16
  37. package/scripts/mcp-gateway-start.ps1 +17 -14
  38. package/scripts/mcp-gateway-verify.mjs +1 -1
  39. package/scripts/preflight-cache.mjs +137 -137
  40. package/scripts/remote-spawn.mjs +404 -40
  41. package/scripts/setup.mjs +18 -0
  42. package/scripts/tfx-route-worker.mjs +165 -165
  43. package/scripts/tfx-route.sh +85 -16
  44. package/scripts/token-snapshot.mjs +575 -575
  45. package/skills/tfx-analysis/SKILL.md +101 -101
  46. package/skills/tfx-autopilot/SKILL.md +112 -112
  47. package/skills/tfx-autoresearch/SKILL.md +1 -0
  48. package/skills/tfx-autoroute/SKILL.md +184 -184
  49. package/skills/tfx-codex-swarm/SKILL.md +449 -0
  50. package/skills/tfx-codex-swarm/evals/evals.json +26 -0
  51. package/skills/tfx-codex-swarm-workspace/iteration-1/benchmark.json +33 -0
  52. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/eval_metadata.json +42 -0
  53. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/grading.json +11 -0
  54. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/analysis.md +87 -0
  55. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/classification.md +35 -0
  56. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/commands.sh +275 -0
  57. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/routing.md +56 -0
  58. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/timing.json +5 -0
  59. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/grading.json +11 -0
  60. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/analysis.md +92 -0
  61. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/classification.md +71 -0
  62. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/commands.sh +264 -0
  63. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/routing.md +113 -0
  64. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/timing.json +5 -0
  65. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/eval_metadata.json +32 -0
  66. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/grading.json +9 -0
  67. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/analysis.md +96 -0
  68. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/classification.md +38 -0
  69. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/commands.sh +151 -0
  70. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/routing.md +51 -0
  71. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/timing.json +5 -0
  72. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/grading.json +9 -0
  73. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/analysis.md +127 -0
  74. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/classification.md +57 -0
  75. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/commands.sh +129 -0
  76. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/routing.md +84 -0
  77. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/timing.json +5 -0
  78. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/eval_metadata.json +27 -0
  79. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/grading.json +8 -0
  80. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/analysis.md +98 -0
  81. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/classification.md +65 -0
  82. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/commands.sh +123 -0
  83. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/routing.md +66 -0
  84. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/timing.json +5 -0
  85. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/grading.json +8 -0
  86. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/analysis.md +88 -0
  87. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/classification.md +40 -0
  88. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/commands.sh +130 -0
  89. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/routing.md +61 -0
  90. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/timing.json +5 -0
  91. package/skills/tfx-profile/SKILL.md +141 -51
  92. package/skills/tfx-qa/SKILL.md +117 -117
  93. package/skills/tfx-remote-spawn/references/hosts.json +16 -16
  94. package/skills/tfx-review/SKILL.md +51 -51
  95. package/skills/tfx-setup/SKILL.md +20 -0
  96. package/tui/gemini-profile.mjs +254 -0
  97. package/tui/setup.mjs +36 -1
  98. package/scripts/claude-logged.ps1 +0 -54
  99. package/scripts/demo-tui.mjs +0 -59
  100. package/skills/.omc/state/agent-replay-8f0e10a9-9693-4410-96f5-a6b07e8ed995.jsonl +0 -1
  101. package/skills/.omc/state/idle-notif-cooldown.json +0 -3
  102. package/skills/.omc/state/last-tool-error.json +0 -7
  103. package/skills/.omc/state/subagent-tracking.json +0 -7
@@ -1,184 +1,184 @@
1
- ---
2
- name: tfx-autoroute
3
- description: "작업 유형에 따라 최적 모델을 자동 선택하여 실행해야 할 때 사용한다. 'sisyphus', '시지프스', 'auto-route', '알아서 라우팅', '최적 모델로' 같은 요청에 사용. 어떤 CLI를 쓸지 모르겠을 때, 또는 실패 시 자동 모델 승격이 필요할 때 적극 활용."
4
- triggers:
5
- - sisyphus
6
- - 끝없이
7
- - never stop
8
- - 시지프스
9
- - auto-route
10
- argument-hint: "<작업 설명>"
11
- ---
12
-
13
- # tfx-autoroute — Auto-Routing Autonomous Executor
14
-
15
- > oh-my-openagent Sisyphus agent 오마주. 바위는 멈추지 않는다 — 그리고 올바른 산을 고른다.
16
- > "실패하면 더 강한 모델로. 성공할 때까지."
17
-
18
- ## 용도
19
-
20
- - 작업 유형을 모르겠을 때 자동으로 최적 CLI 선택
21
- - 실패 허용 없이 끝까지 완수해야 할 때
22
- - Haiku로 충분한 작업에 Opus를 낭비하지 않을 때
23
- - 비용 최적화 + 완수율 극대화
24
-
25
- ## 핵심 원리
26
-
27
- ```
28
- 1. IntentGate로 작업 유형 분류
29
- 2. 유형에 맞는 최적 CLI/모델에 라우팅
30
- 3. 실패 시 자동 승격 (Haiku → Sonnet → Opus, Codex normal → xhigh)
31
- 4. 최종 실패 시에만 사용자에게 보고
32
- ```
33
-
34
- ## 워크플로우
35
-
36
- ### Step 0: 라우팅 전략 선택
37
-
38
- 실행 전에 AskUserQuestion으로 모델 라우팅 전략을 선택받는다:
39
-
40
- ```
41
- AskUserQuestion:
42
- "기본 라우팅 전략을 선택하세요:"
43
- 1. 자동 (IntentGate 판단) [기본]
44
- 2. 성능 우선 (Codex 위주)
45
- 3. 비용 절약 (Haiku 위주)
46
- 4. 정확도 우선 (Opus 위주)
47
- ```
48
-
49
- - 1번 선택 → Step 1의 IntentGate 분류를 정상 수행
50
- - 2번 선택 → primary_cli를 Codex(xhigh)로 고정, 실패 시에만 Opus fallback
51
- - 3번 선택 → primary_cli를 Claude Haiku로 고정, 실패 시 Sonnet → Codex 순 승격
52
- - 4번 선택 → primary_cli를 Claude Opus로 고정, fallback 없음
53
-
54
- 사용자가 빈 응답을 보내면 기본값 1번(자동)을 적용한다.
55
-
56
- ### Step 1: IntentGate 분류
57
-
58
- 사용자 입력을 분석하여 작업 카테고리와 복잡도를 판단한다:
59
-
60
- ```
61
- 분류 결과:
62
- {
63
- "category": "visual | deep | quick | code | research | review",
64
- "complexity": "trivial | simple | moderate | complex | extreme",
65
- "estimated_tokens": N,
66
- "routing": {
67
- "primary_cli": "gemini | codex | claude",
68
- "primary_model": "flash | normal | haiku",
69
- "fallback_chain": ["sonnet", "opus"]
70
- }
71
- }
72
- ```
73
-
74
- ### Step 2: 카테고리 라우팅
75
-
76
- | 카테고리 | Primary CLI | Primary 모델 | 이유 |
77
- |----------|-------------|-------------|------|
78
- | visual (UI/디자인/멀티모달) | Gemini | flash | 시각적 처리 최적 |
79
- | deep (아키텍처/설계/분석) | Codex | xhigh | 깊은 추론 필요 |
80
- | quick (간단한 수정/질문) | Claude | haiku | 최소 비용 |
81
- | code (구현/디버깅/리팩터링) | Codex | normal | 코드 작성 최적 |
82
- | research (검색/문서/조사) | Codex | normal | MCP 접근 |
83
- | review (리뷰/검증/QA) | Codex | thorough | 꼼꼼한 검토 |
84
-
85
- ### Step 3: 실행
86
-
87
- 라우팅 결과에 따라 실행한다:
88
-
89
- ```
90
- if primary_cli == "codex":
91
- Bash("bash ~/.claude/scripts/tfx-route.sh codex '{prompt}' implement")
92
-
93
- elif primary_cli == "gemini":
94
- Bash("bash ~/.claude/scripts/tfx-route.sh gemini '{prompt}' implement")
95
-
96
- elif primary_cli == "claude":
97
- if primary_model == "haiku":
98
- Agent(model="haiku", prompt="{prompt}")
99
- else:
100
- Agent(model="sonnet", prompt="{prompt}")
101
- ```
102
-
103
- ### Step 4: 실패 감지 및 자동 승격
104
-
105
- 실행 결과를 평가하고, 실패 시 fallback chain을 따라 승격한다:
106
-
107
- ```
108
- 실패 판단 기준:
109
- - exit_code != 0
110
- - 출력에 "error", "failed", "unable to" 포함
111
- - 출력이 비어 있음
112
- - 출력이 프롬프트를 반복하기만 함 (hallucination)
113
-
114
- 승격 체인:
115
- Level 0: primary (최소 비용)
116
- ↓ 실패
117
- Level 1: 동일 CLI, 모델 한 단계 승격
118
- 예: haiku → sonnet, codex normal → codex xhigh
119
- ↓ 실패
120
- Level 2: CLI 전환 + 강한 모델
121
- 예: gemini → codex xhigh, codex → claude opus
122
- ↓ 실패
123
- Level 3: Claude Opus 직접 실행 (최후 수단)
124
- ↓ 실패
125
- Level 4: 사용자에게 보고 + 도움 요청 (AskUserQuestion)
126
- ```
127
-
128
- ### Step 5: 결과 보고
129
-
130
- ```markdown
131
- ## Sisyphus 완료
132
-
133
- **작업**: {task_description}
134
- **분류**: {category} / {complexity}
135
- **라우팅**: {primary_cli} ({primary_model})
136
- **승격 횟수**: {escalation_count}
137
- **최종 실행**: {final_cli} ({final_model})
138
-
139
- ### 실행 경로
140
- | 시도 | CLI | 모델 | 결과 | 토큰 |
141
- |------|-----|------|------|------|
142
- | 1 | Haiku | haiku | 실패 (불완전) | ~1K |
143
- | 2 | Codex | normal | 성공 | ~3K |
144
-
145
- ### 결과
146
- {output}
147
-
148
- ### 비용 절감
149
- Primary Opus였다면: ~{opus_cost}K tokens
150
- 실제 사용: ~{actual_cost}K tokens
151
- 절감: {savings}%
152
- ```
153
-
154
- ## Anti-Stuck 메커니즘
155
-
156
- ```
157
- 같은 에러로 2회 연속 실패 시:
158
- → 에러 메시지를 다음 프롬프트에 포함하여 우회 시도
159
-
160
- 승격 체인 전체 소진 시 (Level 4):
161
- → AskUserQuestion: "다음 작업이 모든 모델에서 실패했습니다.
162
- 에러: {error}. 접근 방식을 변경하시겠습니까?"
163
- ```
164
-
165
- ## 토큰 예산
166
-
167
- 가변. 최소 비용 라우팅이 핵심이므로 고정 예산 없음.
168
-
169
- | 시나리오 | 예상 토큰 |
170
- |----------|----------|
171
- | 1회 성공 (haiku) | ~2K |
172
- | 1회 성공 (codex) | ~5K |
173
- | 1회 승격 후 성공 | ~8K |
174
- | 2회 승격 후 성공 | ~15K |
175
- | 전체 체인 소진 | ~25K |
176
-
177
- ## 사용 예
178
-
179
- ```
180
- /tfx-autoroute "이 함수의 타입 에러 수정해"
181
- /tfx-autoroute "프로젝트 구조 분석해서 아키텍처 다이어그램 만들어"
182
- /tfx-autoroute "README.md 한국어로 번역"
183
- /시지프스 "테스트 커버리지 80%까지 올려"
184
- ```
1
+ ---
2
+ name: tfx-autoroute
3
+ description: "작업 유형에 따라 최적 모델을 자동 선택하여 실행해야 할 때 사용한다. 'sisyphus', '시지프스', 'auto-route', '알아서 라우팅', '최적 모델로' 같은 요청에 사용. 어떤 CLI를 쓸지 모르겠을 때, 또는 실패 시 자동 모델 승격이 필요할 때 적극 활용."
4
+ triggers:
5
+ - sisyphus
6
+ - 끝없이
7
+ - never stop
8
+ - 시지프스
9
+ - auto-route
10
+ argument-hint: "<작업 설명>"
11
+ ---
12
+
13
+ # tfx-autoroute — Auto-Routing Autonomous Executor
14
+
15
+ > oh-my-openagent Sisyphus agent 오마주. 바위는 멈추지 않는다 — 그리고 올바른 산을 고른다.
16
+ > "실패하면 더 강한 모델로. 성공할 때까지."
17
+
18
+ ## 용도
19
+
20
+ - 작업 유형을 모르겠을 때 자동으로 최적 CLI 선택
21
+ - 실패 허용 없이 끝까지 완수해야 할 때
22
+ - Haiku로 충분한 작업에 Opus를 낭비하지 않을 때
23
+ - 비용 최적화 + 완수율 극대화
24
+
25
+ ## 핵심 원리
26
+
27
+ ```
28
+ 1. IntentGate로 작업 유형 분류
29
+ 2. 유형에 맞는 최적 CLI/모델에 라우팅
30
+ 3. 실패 시 자동 승격 (Haiku → Sonnet → Opus, Codex normal → xhigh)
31
+ 4. 최종 실패 시에만 사용자에게 보고
32
+ ```
33
+
34
+ ## 워크플로우
35
+
36
+ ### Step 0: 라우팅 전략 선택
37
+
38
+ 실행 전에 AskUserQuestion으로 모델 라우팅 전략을 선택받는다:
39
+
40
+ ```
41
+ AskUserQuestion:
42
+ "기본 라우팅 전략을 선택하세요:"
43
+ 1. 자동 (IntentGate 판단) [기본]
44
+ 2. 성능 우선 (Codex 위주)
45
+ 3. 비용 절약 (Haiku 위주)
46
+ 4. 정확도 우선 (Opus 위주)
47
+ ```
48
+
49
+ - 1번 선택 → Step 1의 IntentGate 분류를 정상 수행
50
+ - 2번 선택 → primary_cli를 Codex(xhigh)로 고정, 실패 시에만 Opus fallback
51
+ - 3번 선택 → primary_cli를 Claude Haiku로 고정, 실패 시 Sonnet → Codex 순 승격
52
+ - 4번 선택 → primary_cli를 Claude Opus로 고정, fallback 없음
53
+
54
+ 사용자가 빈 응답을 보내면 기본값 1번(자동)을 적용한다.
55
+
56
+ ### Step 1: IntentGate 분류
57
+
58
+ 사용자 입력을 분석하여 작업 카테고리와 복잡도를 판단한다:
59
+
60
+ ```
61
+ 분류 결과:
62
+ {
63
+ "category": "visual | deep | quick | code | research | review",
64
+ "complexity": "trivial | simple | moderate | complex | extreme",
65
+ "estimated_tokens": N,
66
+ "routing": {
67
+ "primary_cli": "gemini | codex | claude",
68
+ "primary_model": "flash | normal | haiku",
69
+ "fallback_chain": ["sonnet", "opus"]
70
+ }
71
+ }
72
+ ```
73
+
74
+ ### Step 2: 카테고리 라우팅
75
+
76
+ | 카테고리 | Primary CLI | Primary 모델 | 이유 |
77
+ |----------|-------------|-------------|------|
78
+ | visual (UI/디자인/멀티모달) | Gemini | flash | 시각적 처리 최적 |
79
+ | deep (아키텍처/설계/분석) | Codex | xhigh | 깊은 추론 필요 |
80
+ | quick (간단한 수정/질문) | Claude | haiku | 최소 비용 |
81
+ | code (구현/디버깅/리팩터링) | Codex | normal | 코드 작성 최적 |
82
+ | research (검색/문서/조사) | Codex | normal | MCP 접근 |
83
+ | review (리뷰/검증/QA) | Codex | thorough | 꼼꼼한 검토 |
84
+
85
+ ### Step 3: 실행
86
+
87
+ 라우팅 결과에 따라 실행한다:
88
+
89
+ ```
90
+ if primary_cli == "codex":
91
+ Bash("bash ~/.claude/scripts/tfx-route.sh codex '{prompt}' implement")
92
+
93
+ elif primary_cli == "gemini":
94
+ Bash("bash ~/.claude/scripts/tfx-route.sh gemini '{prompt}' implement")
95
+
96
+ elif primary_cli == "claude":
97
+ if primary_model == "haiku":
98
+ Agent(model="haiku", prompt="{prompt}")
99
+ else:
100
+ Agent(model="sonnet", prompt="{prompt}")
101
+ ```
102
+
103
+ ### Step 4: 실패 감지 및 자동 승격
104
+
105
+ 실행 결과를 평가하고, 실패 시 fallback chain을 따라 승격한다:
106
+
107
+ ```
108
+ 실패 판단 기준:
109
+ - exit_code != 0
110
+ - 출력에 "error", "failed", "unable to" 포함
111
+ - 출력이 비어 있음
112
+ - 출력이 프롬프트를 반복하기만 함 (hallucination)
113
+
114
+ 승격 체인:
115
+ Level 0: primary (최소 비용)
116
+ ↓ 실패
117
+ Level 1: 동일 CLI, 모델 한 단계 승격
118
+ 예: haiku → sonnet, codex normal → codex xhigh
119
+ ↓ 실패
120
+ Level 2: CLI 전환 + 강한 모델
121
+ 예: gemini → codex xhigh, codex → claude opus
122
+ ↓ 실패
123
+ Level 3: Claude Opus 직접 실행 (최후 수단)
124
+ ↓ 실패
125
+ Level 4: 사용자에게 보고 + 도움 요청 (AskUserQuestion)
126
+ ```
127
+
128
+ ### Step 5: 결과 보고
129
+
130
+ ```markdown
131
+ ## Sisyphus 완료
132
+
133
+ **작업**: {task_description}
134
+ **분류**: {category} / {complexity}
135
+ **라우팅**: {primary_cli} ({primary_model})
136
+ **승격 횟수**: {escalation_count}
137
+ **최종 실행**: {final_cli} ({final_model})
138
+
139
+ ### 실행 경로
140
+ | 시도 | CLI | 모델 | 결과 | 토큰 |
141
+ |------|-----|------|------|------|
142
+ | 1 | Haiku | haiku | 실패 (불완전) | ~1K |
143
+ | 2 | Codex | normal | 성공 | ~3K |
144
+
145
+ ### 결과
146
+ {output}
147
+
148
+ ### 비용 절감
149
+ Primary Opus였다면: ~{opus_cost}K tokens
150
+ 실제 사용: ~{actual_cost}K tokens
151
+ 절감: {savings}%
152
+ ```
153
+
154
+ ## Anti-Stuck 메커니즘
155
+
156
+ ```
157
+ 같은 에러로 2회 연속 실패 시:
158
+ → 에러 메시지를 다음 프롬프트에 포함하여 우회 시도
159
+
160
+ 승격 체인 전체 소진 시 (Level 4):
161
+ → AskUserQuestion: "다음 작업이 모든 모델에서 실패했습니다.
162
+ 에러: {error}. 접근 방식을 변경하시겠습니까?"
163
+ ```
164
+
165
+ ## 토큰 예산
166
+
167
+ 가변. 최소 비용 라우팅이 핵심이므로 고정 예산 없음.
168
+
169
+ | 시나리오 | 예상 토큰 |
170
+ |----------|----------|
171
+ | 1회 성공 (haiku) | ~2K |
172
+ | 1회 성공 (codex) | ~5K |
173
+ | 1회 승격 후 성공 | ~8K |
174
+ | 2회 승격 후 성공 | ~15K |
175
+ | 전체 체인 소진 | ~25K |
176
+
177
+ ## 사용 예
178
+
179
+ ```
180
+ /tfx-autoroute "이 함수의 타입 에러 수정해"
181
+ /tfx-autoroute "프로젝트 구조 분석해서 아키텍처 다이어그램 만들어"
182
+ /tfx-autoroute "README.md 한국어로 번역"
183
+ /시지프스 "테스트 커버리지 80%까지 올려"
184
+ ```