triflux 9.8.7 → 10.0.0-alpha.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 (309) hide show
  1. package/bin/triflux.mjs +22 -20
  2. package/package.json +13 -62
  3. package/skills/tfx-auto/SKILL.md +8 -0
  4. package/skills/tfx-auto/SKILL.md.tmpl +286 -0
  5. package/skills/tfx-codex/SKILL.md +8 -0
  6. package/skills/tfx-codex/SKILL.md.tmpl +72 -0
  7. package/skills/tfx-find/SKILL.md +12 -1
  8. package/skills/tfx-find/SKILL.md.tmpl +129 -0
  9. package/skills/tfx-index/SKILL.md +12 -1
  10. package/skills/tfx-index/SKILL.md.tmpl +148 -0
  11. package/skills/tfx-plan/SKILL.md +8 -0
  12. package/skills/tfx-plan/SKILL.md.tmpl +67 -0
  13. package/skills/tfx-qa/SKILL.md +8 -0
  14. package/skills/tfx-qa/SKILL.md.tmpl +121 -0
  15. package/skills/tfx-research/SKILL.md +8 -0
  16. package/skills/tfx-research/SKILL.md.tmpl +148 -0
  17. package/skills/tfx-review/SKILL.md +8 -0
  18. package/skills/tfx-review/SKILL.md.tmpl +56 -0
  19. package/skills/tfx-swarm/SKILL.md +122 -0
  20. package/skills/tfx-workspace/async-tests/run-tests.sh +203 -0
  21. package/skills/tfx-workspace/evals/evals.json +79 -0
  22. package/skills/tfx-workspace/iteration-1/benchmark.json +162 -0
  23. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/eval_metadata.json +11 -0
  24. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/grading.json +9 -0
  25. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/outputs/analysis.md +154 -0
  26. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/timing.json +5 -0
  27. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/grading.json +9 -0
  28. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/outputs/analysis.md +126 -0
  29. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/timing.json +5 -0
  30. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/eval_metadata.json +11 -0
  31. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/grading.json +9 -0
  32. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/outputs/analysis.md +119 -0
  33. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/timing.json +5 -0
  34. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/grading.json +9 -0
  35. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/outputs/analysis.md +115 -0
  36. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/timing.json +5 -0
  37. package/skills/tfx-workspace/iteration-1/hub-start-sequence/eval_metadata.json +10 -0
  38. package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/grading.json +8 -0
  39. package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/outputs/analysis.md +86 -0
  40. package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/timing.json +5 -0
  41. package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/grading.json +8 -0
  42. package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/outputs/analysis.md +81 -0
  43. package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/timing.json +5 -0
  44. package/skills/tfx-workspace/iteration-1/multi-team-creation/eval_metadata.json +12 -0
  45. package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/grading.json +10 -0
  46. package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/outputs/analysis.md +316 -0
  47. package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/timing.json +5 -0
  48. package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/grading.json +10 -0
  49. package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/outputs/analysis.md +352 -0
  50. package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/timing.json +5 -0
  51. package/skills/tfx-workspace/iteration-1/review.html +1325 -0
  52. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/eval_metadata.json +12 -0
  53. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/grading.json +10 -0
  54. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/outputs/analysis.md +97 -0
  55. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/timing.json +5 -0
  56. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/grading.json +10 -0
  57. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/outputs/analysis.md +94 -0
  58. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/timing.json +5 -0
  59. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/eval_metadata.json +12 -0
  60. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/grading.json +10 -0
  61. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/outputs/analysis.md +209 -0
  62. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/timing.json +5 -0
  63. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/grading.json +10 -0
  64. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/outputs/analysis.md +193 -0
  65. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/timing.json +5 -0
  66. package/skills/tfx-workspace/iteration-2/benchmark.json +62 -0
  67. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/eval_metadata.json +13 -0
  68. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/grading.json +11 -0
  69. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/outputs/analysis.md +382 -0
  70. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/timing.json +5 -0
  71. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/grading.json +11 -0
  72. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/outputs/analysis.md +333 -0
  73. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/timing.json +5 -0
  74. package/skills/tfx-workspace/iteration-2/review.html +1325 -0
  75. package/skills/tfx-workspace/skill-snapshot/tfx-auto/SKILL.md +217 -0
  76. package/skills/tfx-workspace/skill-snapshot/tfx-auto-codex/SKILL.md +77 -0
  77. package/skills/tfx-workspace/skill-snapshot/tfx-codex/SKILL.md +65 -0
  78. package/skills/tfx-workspace/skill-snapshot/tfx-doctor/SKILL.md +94 -0
  79. package/skills/tfx-workspace/skill-snapshot/tfx-gemini/SKILL.md +82 -0
  80. package/skills/tfx-workspace/skill-snapshot/tfx-hub/SKILL.md +133 -0
  81. package/skills/tfx-workspace/skill-snapshot/tfx-multi/SKILL.md +426 -0
  82. package/skills/tfx-workspace/skill-snapshot/tfx-setup/SKILL.md +101 -0
  83. package/.claude-plugin/marketplace.json +0 -34
  84. package/.claude-plugin/plugin.json +0 -22
  85. package/hooks/agent-route-guard.mjs +0 -109
  86. package/hooks/cross-review-tracker.mjs +0 -122
  87. package/hooks/error-context.mjs +0 -148
  88. package/hooks/hook-adaptive-collector.mjs +0 -86
  89. package/hooks/hook-manager.mjs +0 -352
  90. package/hooks/hook-orchestrator.mjs +0 -312
  91. package/hooks/hook-registry.json +0 -213
  92. package/hooks/hooks.json +0 -89
  93. package/hooks/keyword-rules.json +0 -581
  94. package/hooks/lib/resolve-root.mjs +0 -59
  95. package/hooks/mcp-config-watcher.mjs +0 -85
  96. package/hooks/pipeline-stop.mjs +0 -76
  97. package/hooks/safety-guard.mjs +0 -129
  98. package/hooks/subagent-verifier.mjs +0 -80
  99. package/hub/account-broker.mjs +0 -242
  100. package/hub/adaptive-diagnostic.mjs +0 -319
  101. package/hub/adaptive-inject.mjs +0 -186
  102. package/hub/adaptive-memory.mjs +0 -322
  103. package/hub/adaptive.mjs +0 -143
  104. package/hub/assign-callbacks.mjs +0 -133
  105. package/hub/bridge.mjs +0 -799
  106. package/hub/cli-adapter-base.mjs +0 -192
  107. package/hub/codex-adapter.mjs +0 -191
  108. package/hub/codex-compat.mjs +0 -78
  109. package/hub/codex-preflight.mjs +0 -147
  110. package/hub/delegator/contracts.mjs +0 -37
  111. package/hub/delegator/index.mjs +0 -14
  112. package/hub/delegator/schema/delegator-tools.schema.json +0 -250
  113. package/hub/delegator/service.mjs +0 -307
  114. package/hub/delegator/tool-definitions.mjs +0 -35
  115. package/hub/fullcycle.mjs +0 -96
  116. package/hub/gemini-adapter.mjs +0 -180
  117. package/hub/hitl.mjs +0 -143
  118. package/hub/intent.mjs +0 -193
  119. package/hub/lib/cache-guard.mjs +0 -114
  120. package/hub/lib/known-errors.json +0 -72
  121. package/hub/lib/memory-store.mjs +0 -748
  122. package/hub/lib/process-utils.mjs +0 -361
  123. package/hub/lib/ssh-command.mjs +0 -150
  124. package/hub/lib/uuidv7.mjs +0 -44
  125. package/hub/middleware/request-logger.mjs +0 -161
  126. package/hub/paths.mjs +0 -30
  127. package/hub/pipe.mjs +0 -579
  128. package/hub/pipeline/gates/confidence.mjs +0 -56
  129. package/hub/pipeline/gates/consensus.mjs +0 -94
  130. package/hub/pipeline/gates/index.mjs +0 -5
  131. package/hub/pipeline/gates/selfcheck.mjs +0 -82
  132. package/hub/pipeline/index.mjs +0 -318
  133. package/hub/pipeline/state.mjs +0 -191
  134. package/hub/pipeline/transitions.mjs +0 -124
  135. package/hub/platform.mjs +0 -225
  136. package/hub/public/dashboard.html +0 -355
  137. package/hub/public/tray-icon.ico +0 -0
  138. package/hub/public/tray-icon.png +0 -0
  139. package/hub/quality/deslop.mjs +0 -253
  140. package/hub/reflexion.mjs +0 -372
  141. package/hub/research.mjs +0 -146
  142. package/hub/router.mjs +0 -791
  143. package/hub/routing/complexity.mjs +0 -166
  144. package/hub/routing/index.mjs +0 -117
  145. package/hub/routing/q-learning.mjs +0 -336
  146. package/hub/schema.sql +0 -148
  147. package/hub/server.mjs +0 -1218
  148. package/hub/session-fingerprint.mjs +0 -352
  149. package/hub/state.mjs +0 -245
  150. package/hub/store-adapter.mjs +0 -118
  151. package/hub/store.mjs +0 -857
  152. package/hub/team/agent-map.json +0 -11
  153. package/hub/team/ansi.mjs +0 -379
  154. package/hub/team/backend.mjs +0 -90
  155. package/hub/team/cli/commands/attach.mjs +0 -37
  156. package/hub/team/cli/commands/control.mjs +0 -43
  157. package/hub/team/cli/commands/debug.mjs +0 -74
  158. package/hub/team/cli/commands/focus.mjs +0 -53
  159. package/hub/team/cli/commands/interrupt.mjs +0 -36
  160. package/hub/team/cli/commands/kill.mjs +0 -37
  161. package/hub/team/cli/commands/list.mjs +0 -24
  162. package/hub/team/cli/commands/send.mjs +0 -37
  163. package/hub/team/cli/commands/start/index.mjs +0 -106
  164. package/hub/team/cli/commands/start/parse-args.mjs +0 -130
  165. package/hub/team/cli/commands/start/start-headless.mjs +0 -109
  166. package/hub/team/cli/commands/start/start-in-process.mjs +0 -40
  167. package/hub/team/cli/commands/start/start-mux.mjs +0 -73
  168. package/hub/team/cli/commands/start/start-wt.mjs +0 -69
  169. package/hub/team/cli/commands/status.mjs +0 -87
  170. package/hub/team/cli/commands/stop.mjs +0 -31
  171. package/hub/team/cli/commands/task.mjs +0 -30
  172. package/hub/team/cli/commands/tasks.mjs +0 -13
  173. package/hub/team/cli/help.mjs +0 -42
  174. package/hub/team/cli/index.mjs +0 -41
  175. package/hub/team/cli/manifest.mjs +0 -29
  176. package/hub/team/cli/render.mjs +0 -30
  177. package/hub/team/cli/services/attach-fallback.mjs +0 -54
  178. package/hub/team/cli/services/hub-client.mjs +0 -227
  179. package/hub/team/cli/services/member-selector.mjs +0 -30
  180. package/hub/team/cli/services/native-control.mjs +0 -117
  181. package/hub/team/cli/services/runtime-mode.mjs +0 -62
  182. package/hub/team/cli/services/state-store.mjs +0 -48
  183. package/hub/team/cli/services/task-model.mjs +0 -30
  184. package/hub/team/conductor.mjs +0 -662
  185. package/hub/team/dashboard-anchor.mjs +0 -14
  186. package/hub/team/dashboard-layout.mjs +0 -33
  187. package/hub/team/dashboard-open.mjs +0 -153
  188. package/hub/team/dashboard.mjs +0 -274
  189. package/hub/team/event-log.mjs +0 -76
  190. package/hub/team/handoff.mjs +0 -303
  191. package/hub/team/headless.mjs +0 -1149
  192. package/hub/team/health-probe.mjs +0 -272
  193. package/hub/team/launcher-template.mjs +0 -94
  194. package/hub/team/lead-control.mjs +0 -104
  195. package/hub/team/native-supervisor.mjs +0 -392
  196. package/hub/team/native.mjs +0 -649
  197. package/hub/team/nativeProxy.mjs +0 -681
  198. package/hub/team/notify.mjs +0 -293
  199. package/hub/team/orchestrator.mjs +0 -161
  200. package/hub/team/pane.mjs +0 -153
  201. package/hub/team/process-cleanup.mjs +0 -342
  202. package/hub/team/psmux.mjs +0 -1354
  203. package/hub/team/remote-probe.mjs +0 -276
  204. package/hub/team/remote-watcher.mjs +0 -478
  205. package/hub/team/routing.mjs +0 -223
  206. package/hub/team/session-sync.mjs +0 -169
  207. package/hub/team/session.mjs +0 -611
  208. package/hub/team/shared.mjs +0 -13
  209. package/hub/team/staleState.mjs +0 -361
  210. package/hub/team/tui-lite.mjs +0 -380
  211. package/hub/team/tui-remote-adapter.mjs +0 -393
  212. package/hub/team/tui-viewer.mjs +0 -463
  213. package/hub/team/tui.mjs +0 -1449
  214. package/hub/team-bridge.mjs +0 -25
  215. package/hub/token-mode.mjs +0 -224
  216. package/hub/tools.mjs +0 -554
  217. package/hub/tray.mjs +0 -376
  218. package/hub/workers/claude-worker.mjs +0 -475
  219. package/hub/workers/codex-mcp.mjs +0 -504
  220. package/hub/workers/delegator-mcp.mjs +0 -1076
  221. package/hub/workers/factory.mjs +0 -21
  222. package/hub/workers/gemini-worker.mjs +0 -373
  223. package/hub/workers/interface.mjs +0 -52
  224. package/hub/workers/worker-utils.mjs +0 -104
  225. package/hud/colors.mjs +0 -88
  226. package/hud/constants.mjs +0 -88
  227. package/hud/context-monitor.mjs +0 -397
  228. package/hud/hud-qos-status.mjs +0 -210
  229. package/hud/providers/claude.mjs +0 -314
  230. package/hud/providers/codex.mjs +0 -151
  231. package/hud/providers/gemini.mjs +0 -320
  232. package/hud/renderers.mjs +0 -428
  233. package/hud/terminal.mjs +0 -140
  234. package/hud/utils.mjs +0 -287
  235. package/scripts/__tests__/gen-skill-docs.test.mjs +0 -87
  236. package/scripts/__tests__/keyword-detector.test.mjs +0 -234
  237. package/scripts/__tests__/mcp-guard-engine.test.mjs +0 -118
  238. package/scripts/__tests__/remote-spawn-transfer.test.mjs +0 -117
  239. package/scripts/__tests__/remote-spawn.test.mjs +0 -92
  240. package/scripts/__tests__/skill-template.test.mjs +0 -104
  241. package/scripts/__tests__/smoke.test.mjs +0 -34
  242. package/scripts/cache-buildup.mjs +0 -30
  243. package/scripts/cache-doctor.mjs +0 -149
  244. package/scripts/cache-warmup.mjs +0 -557
  245. package/scripts/claude-logged.ps1 +0 -54
  246. package/scripts/claudemd-sync.mjs +0 -103
  247. package/scripts/cli-route.sh +0 -3
  248. package/scripts/completions/tfx.bash +0 -47
  249. package/scripts/completions/tfx.fish +0 -44
  250. package/scripts/completions/tfx.zsh +0 -83
  251. package/scripts/cross-review-gate.mjs +0 -126
  252. package/scripts/cross-review-tracker.mjs +0 -238
  253. package/scripts/demo-tui.mjs +0 -59
  254. package/scripts/gen-skill-docs.mjs +0 -110
  255. package/scripts/headless-guard-fast.sh +0 -21
  256. package/scripts/headless-guard.mjs +0 -360
  257. package/scripts/hub-ensure.mjs +0 -120
  258. package/scripts/keyword-detector.mjs +0 -272
  259. package/scripts/keyword-rules-expander.mjs +0 -521
  260. package/scripts/lib/claudemd-manager.mjs +0 -325
  261. package/scripts/lib/claudemd-scanner.mjs +0 -218
  262. package/scripts/lib/context.mjs +0 -67
  263. package/scripts/lib/cross-review-utils.mjs +0 -51
  264. package/scripts/lib/env-probe.mjs +0 -241
  265. package/scripts/lib/gemini-profiles.mjs +0 -85
  266. package/scripts/lib/handoff.mjs +0 -171
  267. package/scripts/lib/hook-utils.mjs +0 -14
  268. package/scripts/lib/keyword-rules.mjs +0 -166
  269. package/scripts/lib/logger.mjs +0 -105
  270. package/scripts/lib/mcp-filter.mjs +0 -739
  271. package/scripts/lib/mcp-guard-engine.mjs +0 -940
  272. package/scripts/lib/mcp-manifest.mjs +0 -79
  273. package/scripts/lib/mcp-server-catalog.mjs +0 -118
  274. package/scripts/lib/psmux-info.mjs +0 -119
  275. package/scripts/lib/remote-spawn-transfer.mjs +0 -196
  276. package/scripts/lib/skill-template.mjs +0 -222
  277. package/scripts/mcp-check.mjs +0 -237
  278. package/scripts/mcp-cleanup.ps1 +0 -17
  279. package/scripts/mcp-gateway-config.mjs +0 -207
  280. package/scripts/mcp-gateway-ensure.mjs +0 -85
  281. package/scripts/mcp-gateway-integration-test.mjs +0 -228
  282. package/scripts/mcp-gateway-start.mjs +0 -226
  283. package/scripts/mcp-gateway-start.ps1 +0 -141
  284. package/scripts/mcp-gateway-verify.mjs +0 -77
  285. package/scripts/mcp-safety-guard.mjs +0 -44
  286. package/scripts/notion-read.mjs +0 -556
  287. package/scripts/pack.mjs +0 -205
  288. package/scripts/preflight-cache.mjs +0 -69
  289. package/scripts/preinstall.mjs +0 -96
  290. package/scripts/psmux-safety-guard.mjs +0 -64
  291. package/scripts/remote-spawn.mjs +0 -1289
  292. package/scripts/run.cjs +0 -79
  293. package/scripts/session-spawn-helper.mjs +0 -185
  294. package/scripts/setup.mjs +0 -1101
  295. package/scripts/templates/claudemd-tfx-section.md +0 -54
  296. package/scripts/test-lock.mjs +0 -71
  297. package/scripts/test-tfx-route-no-claude-native.mjs +0 -57
  298. package/scripts/tfx-batch-stats.mjs +0 -96
  299. package/scripts/tfx-gate-activate.mjs +0 -89
  300. package/scripts/tfx-route-post.mjs +0 -505
  301. package/scripts/tfx-route-worker.mjs +0 -223
  302. package/scripts/tfx-route.sh +0 -1956
  303. package/scripts/tmp-cleanup.mjs +0 -103
  304. package/scripts/token-snapshot.mjs +0 -575
  305. package/tui/codex-profile.mjs +0 -402
  306. package/tui/core.mjs +0 -236
  307. package/tui/doctor.mjs +0 -328
  308. package/tui/gemini-profile.mjs +0 -254
  309. package/tui/setup.mjs +0 -442
package/bin/triflux.mjs CHANGED
@@ -16,10 +16,12 @@ import { ensureGeminiProfiles } from "../scripts/lib/gemini-profiles.mjs";
16
16
  import { probePsmuxSupport, formatPsmuxInstallGuidance, formatPsmuxUpdateGuidance } from "../scripts/lib/psmux-info.mjs";
17
17
  import {
18
18
  addRegistryServer,
19
+ createDefaultRegistry,
19
20
  inspectRegistry,
20
21
  inspectRegistryStatus,
21
22
  removeRegistryServer,
22
23
  removeServerFromTargets,
24
+ saveRegistry,
23
25
  syncRegistryTargets,
24
26
  } from "../scripts/lib/mcp-guard-engine.mjs";
25
27
  import {
@@ -1181,13 +1183,10 @@ function buildMcpStatusRows(statusInfo) {
1181
1183
  }
1182
1184
 
1183
1185
  function ensureValidRegistryState() {
1184
- const registryState = inspectRegistry();
1186
+ let registryState = inspectRegistry();
1185
1187
  if (!registryState.exists) {
1186
- throw createCliError(`MCP registry missing: ${registryState.path}`, {
1187
- exitCode: EXIT_CONFIG_ERROR,
1188
- reason: "configError",
1189
- fix: "config/mcp-registry.json을 복원하거나 `tfx mcp add <name> --url <url>`로 다시 생성하세요.",
1190
- });
1188
+ saveRegistry(createDefaultRegistry());
1189
+ registryState = inspectRegistry();
1191
1190
  }
1192
1191
  if (!registryState.valid) {
1193
1192
  throw createCliError(`MCP registry invalid: ${registryState.errors.join("; ")}`, {
@@ -1388,9 +1387,13 @@ async function cmdDoctor(options = {}) {
1388
1387
  warn(`MCP registry 자동 동기화 실패: ${error.message}`);
1389
1388
  }
1390
1389
  } else if (registryStateForFix.exists) {
1391
- warn("MCP registry invalid — auto sync 건너뜀");
1390
+ saveRegistry(createDefaultRegistry());
1391
+ report.actions.push({ type: "mcp-registry-reset", status: "ok" });
1392
+ ok("MCP registry 손상 → 기본값으로 재생성됨");
1392
1393
  } else {
1393
- info("MCP registry 없음 — auto sync 건너뜀");
1394
+ saveRegistry(createDefaultRegistry());
1395
+ report.actions.push({ type: "mcp-registry-create", status: "ok" });
1396
+ ok("MCP registry 없음 → 기본값으로 자동 생성됨");
1394
1397
  }
1395
1398
  console.log(`\n ${LINE}`);
1396
1399
  info("수정 완료 — 아래 진단 결과를 확인하세요");
@@ -2210,28 +2213,27 @@ async function cmdDoctor(options = {}) {
2210
2213
  // ── MCP 중앙 레지스트리 ──
2211
2214
  section("MCP Registry");
2212
2215
  {
2213
- const registryState = inspectRegistry();
2216
+ let registryState = inspectRegistry();
2214
2217
  if (!registryState.exists) {
2218
+ saveRegistry(createDefaultRegistry());
2219
+ registryState = inspectRegistry();
2215
2220
  addDoctorCheck(report, {
2216
2221
  name: "mcp-registry",
2217
- status: "missing",
2222
+ status: "fixed",
2218
2223
  path: registryState.path,
2219
- fix: "config/mcp-registry.json을 복원하거나 `tfx mcp add <name> --url <url>`를 실행하세요.",
2224
+ action: "기본값으로 자동 생성됨",
2220
2225
  });
2221
- warn("mcp-registry.json 없음");
2222
- info(`path: ${registryState.path}`);
2223
- issues++;
2226
+ ok("mcp-registry.json 없음 → 기본값으로 자동 생성됨");
2224
2227
  } else if (!registryState.valid) {
2228
+ saveRegistry(createDefaultRegistry());
2229
+ registryState = inspectRegistry();
2225
2230
  addDoctorCheck(report, {
2226
2231
  name: "mcp-registry",
2227
- status: "invalid",
2232
+ status: "fixed",
2228
2233
  path: registryState.path,
2229
- errors: registryState.errors,
2230
- fix: "config/mcp-registry.json 구조를 수정하세요.",
2234
+ action: "손상 감지 → 기본값으로 재생성됨",
2231
2235
  });
2232
- fail("mcp-registry.json invalid");
2233
- for (const entry of registryState.errors) info(entry);
2234
- issues++;
2236
+ warn("mcp-registry.json 손상 → 기본값으로 재생성됨");
2235
2237
  } else {
2236
2238
  const statusInfo = inspectRegistryStatus(registryState.registry);
2237
2239
  const invalidConfigs = statusInfo.configs.filter((config) => config.parseError);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "triflux",
3
- "version": "9.8.7",
3
+ "version": "10.0.0-alpha.2",
4
4
  "description": "CLI-first multi-model orchestrator for Claude Code — route tasks to Codex, Gemini, and Claude",
5
5
  "type": "module",
6
6
  "bin": {
@@ -13,73 +13,24 @@
13
13
  "tfx-doctor-tui": "bin/tfx-doctor-tui.mjs",
14
14
  "tfx-setup-tui": "bin/tfx-setup-tui.mjs"
15
15
  },
16
+ "engines": { "node": ">=18.0.0" },
17
+ "dependencies": {
18
+ "@triflux/core": "^10.0.0-alpha.1",
19
+ "@triflux/remote": "^10.0.0-alpha.1"
20
+ },
16
21
  "files": [
17
22
  "bin",
18
- "tui",
19
- "hub",
20
23
  "skills",
21
- "!skills/tfx-workspace",
22
- "!**/failure-reports",
23
- "scripts",
24
- "hooks",
25
- "hud",
26
- ".claude-plugin",
27
24
  "README.md",
28
- "README.ko.md",
29
25
  "LICENSE"
30
26
  ],
31
- "workspaces": [
32
- "packages/core",
33
- "packages/remote",
34
- "packages/triflux"
35
- ],
36
- "scripts": {
37
- "pack": "node scripts/pack.mjs all",
38
- "pack:core": "node scripts/pack.mjs core",
39
- "pack:remote": "node scripts/pack.mjs remote",
40
- "setup": "node scripts/setup.mjs",
41
- "preinstall": "node scripts/preinstall.mjs",
42
- "postinstall": "node scripts/setup.mjs",
43
- "lint": "biome check .",
44
- "lint:fix": "biome check --fix .",
45
- "health": "npm test && npm run lint",
46
- "test": "node scripts/test-lock.mjs --test --test-force-exit --test-concurrency=1 \"tests/**/*.test.mjs\" \"scripts/__tests__/**/*.test.mjs\"",
47
- "test:unit": "node scripts/test-lock.mjs --test --test-force-exit --test-concurrency=1 tests/unit/**/*.test.mjs",
48
- "test:integration": "node scripts/test-lock.mjs --test --test-force-exit --test-concurrency=1 tests/integration/**/*.test.mjs",
49
- "test:route-smoke": "node scripts/test-lock.mjs --test scripts/test-tfx-route-no-claude-native.mjs",
50
- "test:contract": "node scripts/test-lock.mjs --test --test-force-exit --test-concurrency=1 tests/contract/**/*.test.mjs",
51
- "gen:skill-docs": "node scripts/gen-skill-docs.mjs"
52
- },
53
- "engines": {
54
- "node": ">=18.0.0"
55
- },
56
- "repository": {
57
- "type": "git",
58
- "url": "git+https://github.com/tellang/triflux.git"
59
- },
60
- "homepage": "https://github.com/tellang/triflux#readme",
27
+ "keywords": ["claude-code", "plugin", "codex", "gemini", "cli-routing", "orchestration", "multi-model", "triflux", "tfx"],
61
28
  "author": "tellang",
62
29
  "license": "MIT",
63
- "dependencies": {
64
- "@modelcontextprotocol/sdk": "^1.27.1",
65
- "better-sqlite3": "^12.6.2",
66
- "pino": "^10.3.1",
67
- "pino-pretty": "^13.1.3",
68
- "systray2": "^2.1.4",
69
- "zod": "^4.0.0"
70
- },
71
- "devDependencies": {
72
- "@biomejs/biome": "^2.0.0"
73
- },
74
- "keywords": [
75
- "claude-code",
76
- "plugin",
77
- "codex",
78
- "gemini",
79
- "cli-routing",
80
- "orchestration",
81
- "multi-model",
82
- "triflux",
83
- "tfx"
84
- ]
30
+ "homepage": "https://github.com/tellang/triflux#readme",
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "git+https://github.com/tellang/triflux.git",
34
+ "directory": "packages/triflux"
35
+ }
85
36
  }
@@ -32,6 +32,14 @@ argument-hint: "<command|task> [args...]"
32
32
  > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
33
33
  > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
34
34
 
35
+ > **Telemetry**
36
+ >
37
+ > - Skill: `tfx-auto`
38
+ > - Description: `통합 CLI 오케스트레이터. 커맨드 숏컷(단일) + 자동 분류/분해(병렬) + 수동 병렬. tfx-route.sh 기반. '코드 짜줘', '구현해줘', '만들어줘', '수정해줘', '고쳐줘', 'implement', 'build', 'fix' 같은 구현/수정 요청에 사용. CLI 라우팅이 필요한 모든 작업에 적극 활용.`
39
+ > - Session: 요청별 식별자를 유지해 단계별 실행 로그를 추적한다.
40
+ > - Errors: 실패 시 원인/복구/재시도 여부를 구조화해 기록한다.
41
+
42
+
35
43
 
36
44
  > **MANDATORY RULES**
37
45
  >
@@ -0,0 +1,286 @@
1
+ ---
2
+ name: tfx-auto
3
+ description: >
4
+ 통합 CLI 오케스트레이터. 커맨드 숏컷(단일) + 자동 분류/분해(병렬) + 수동 병렬. tfx-route.sh 기반.
5
+ '코드 짜줘', '구현해줘', '만들어줘', '수정해줘', '고쳐줘', 'implement', 'build', 'fix' 같은
6
+ 구현/수정 요청에 사용. CLI 라우팅이 필요한 모든 작업에 적극 활용.
7
+ triggers:
8
+ - tfx-auto
9
+ - implement
10
+ - build
11
+ - research
12
+ - brainstorm
13
+ - design
14
+ - test
15
+ - analyze
16
+ - troubleshoot
17
+ - improve
18
+ - cleanup
19
+ - explain
20
+ - document
21
+ - pm
22
+ - reflect
23
+ - estimate
24
+ - spec-panel
25
+ - business-panel
26
+ - index-repo
27
+ argument-hint: "<command|task> [args...]"
28
+ ---
29
+
30
+ # {{SKILL_NAME}} — 통합 CLI 오케스트레이터
31
+
32
+ {{> base}}
33
+
34
+
35
+ > **MANDATORY RULES**
36
+ >
37
+ > 1. **실행**: CLI 에이전트는 반드시 `Bash("bash ~/.claude/scripts/tfx-route.sh ...")`. Claude 네이티브(explore/verifier/test-engineer/qa-tester)만 `Agent()`.
38
+ > 2. **비용**: Codex 우선 → Gemini → Claude 최후 수단. `claude` 선택 전 "Codex로 가능한가?" 재확인.
39
+ > 3. **DAG**: SEQUENTIAL/DAG이면 레벨 기반 순차 실행. `.omc/context/{sid}/` 생성, context_output 저장, 실패 시 후속 SKIP.
40
+ > 4. **트리아지**: Codex `exec --full-auto` 분류 + Opus 인라인 분해. Agent 스폰 금지.
41
+ > 5. **thorough**: `-t`/`--thorough` 시 파이프라인 init 필수. 커맨드 숏컷은 항상 quick.
42
+ > 6. **직접 수정 금지**: implement/review/analyze 등 커맨드 숏컷 실행 시 절대로 Edit/Write 도구로 직접 코드를 수정하지 마라. 반드시 Bash(tfx-route.sh)를 통해 Codex/Gemini에 위임하라. 작업이 아무리 사소해도 예외 없음.
43
+
44
+ ## 모드
45
+
46
+ | 입력 형식 | 모드 | 트리아지 |
47
+ |-----------|------|----------|
48
+ | `/implement JWT 추가` | 커맨드 숏컷 (quick) | 없음 (즉시 실행) |
49
+ | `/tfx-auto "리팩터링 + UI"` | 자동 (quick) | Codex 분류 → Opus 분해 |
50
+ | `/tfx-auto -t "리팩터링 + UI"` | 자동 (thorough) | Codex 분류 → Opus 분해 → Pipeline |
51
+ | `/tfx-auto --thorough "리팩터링"` | 자동 (thorough) | `-t` 동일 |
52
+ | `/tfx-auto 3:codex "리뷰"` | 수동 (quick) | Opus 분해만 |
53
+
54
+ > **tfx-auto는 `--quick`이 기본.** 커맨드 숏컷·단일 실행에서 plan/verify 오버헤드가 불필요하기 때문.
55
+ > 멀티 태스크 시 tfx-multi로 전환되면 tfx-multi의 기본값(`--thorough`)이 적용된다.
56
+
57
+ ## 커맨드 숏컷
58
+
59
+ 커맨드명 매칭 시 트리아지 없이 즉시 실행. 패턴: `Bash("bash ~/.claude/scripts/tfx-route.sh {에이전트} '{PROMPT}' {MCP}")`.
60
+
61
+ ### Codex 직행
62
+
63
+ | 커맨드 | 에이전트 | MCP |
64
+ |--------|---------|-----|
65
+ | `implement` | executor | implement |
66
+ | `build` | build-fixer | implement |
67
+ | `research` | document-specialist | analyze |
68
+ | `brainstorm` | analyst | analyze |
69
+ | `design` | architect | analyze |
70
+ | `troubleshoot` | debugger | implement |
71
+ | `cleanup` | executor | implement |
72
+ | `pm` | planner | analyze |
73
+
74
+ ### 2단계: `improve`
75
+
76
+ 1단계 `code-reviewer '{PROMPT}' review` → 사용자 승인 → 2단계 `executor '리뷰 반영: {요약}' implement`
77
+
78
+ ### 병렬
79
+
80
+ | 커맨드 | 에이전트들 (병렬, run_in_background=true) | MCP |
81
+ |--------|------------------------------------------|-----|
82
+ | `analyze` | quality-reviewer + security-reviewer | review |
83
+ | `spec-panel` | architect + analyst + critic | analyze |
84
+ | `business-panel` | analyst + architect | analyze |
85
+
86
+ ### Gemini 직행
87
+
88
+ | 커맨드 | 에이전트 | MCP |
89
+ |--------|---------|-----|
90
+ | `explain` | writer | docs |
91
+ | `document` | writer | docs |
92
+
93
+ ### Claude 네이티브
94
+
95
+ | 커맨드 | 실행 |
96
+ |--------|------|
97
+ | `test` | `Agent(subagent_type="oh-my-claudecode:test-engineer", model="sonnet")` |
98
+ | `reflect` | `Bash(tfx-route.sh verifier '{PROMPT}' review)` (기본) / `Agent(subagent_type="oh-my-claudecode:verifier", model="sonnet")` (TFX_VERIFIER_OVERRIDE=claude 시) |
99
+
100
+ ### 복합
101
+
102
+ | 커맨드 | 흐름 |
103
+ |--------|------|
104
+ | `estimate` | explore(haiku) → analyst(codex): 영향범위, 복잡도(S/M/L/XL), 리스크 |
105
+ | `index-repo` | explore(haiku) × 2 → Write(PROJECT_INDEX.md). mode=quick/update/full |
106
+
107
+ ## 트리아지
108
+
109
+ **자동 모드:**
110
+ 1. Codex 분류: `codex exec --full-auto --skip-git-repo-check` → JSON `{parts: [{description, agent: "codex|gemini|claude"}]}`
111
+ 2. Opus 인라인 분해: `{graph_type: "INDEPENDENT|SEQUENTIAL|DAG", subtasks: [{id, description, scope, agent, mcp_profile, depends_on, context_output, context_input}]}`
112
+ 3. 실패 시 Opus가 직접 분류+분해
113
+
114
+ **수동 모드 (`N:agent_type`):** Codex 분류 건너뜀 → Opus가 N개 서브태스크 분해. N > 10 거부.
115
+
116
+ ## --thorough 모드
117
+
118
+ `-t` 또는 `--thorough` 플래그 시 파이프라인 기반 실행. 커맨드 숏컷에서는 무시된다.
119
+
120
+ ```
121
+ 분기점은 "실행 전략"이지 "계획"이 아님:
122
+
123
+ TRIAGE
124
+
125
+ ├─ [thorough] → PIPELINE INIT(plan) → PLAN → PRD → [APPROVAL]
126
+ │ │
127
+ │ ┌───────────────┤
128
+ │ │ │
129
+ │ [1 task] [2+ tasks]
130
+ │ │ │
131
+ │ AUTO 직접 실행 TEAM EXEC (multi Phase 3)
132
+ │ │ │
133
+ │ └───────┬───────┘
134
+ │ │
135
+ │ VERIFY → FIX loop → COMPLETE
136
+
137
+ └─ [quick] → [1 task] → fire-and-forget
138
+ [2+ tasks] → TEAM EXEC → COLLECT → CLEANUP
139
+ ```
140
+
141
+ ### 단일 태스크 thorough
142
+
143
+ 1. `Bash("node hub/bridge.mjs pipeline-init --team ${sid}")` — 파이프라인 초기화 (phase: plan)
144
+ 2. Plan: Codex architect → 결과를 `pipeline.writePlanFile()` 저장
145
+ 3. PRD: Codex analyst → acceptance criteria 확정
146
+ 4. `pipeline_advance_gated` → [Approval Gate] → 사용자 승인 대기
147
+ 5. Exec: tfx-auto 직접 실행 (아래 "실행" 섹션)
148
+ 6. Verify: Codex verifier → 검증
149
+ 7. 실패 시 Fix loop (최대 3회) → Exec 재실행
150
+ 8. Complete
151
+
152
+ ### 멀티 태스크 thorough
153
+
154
+ Plan/PRD/Approval은 tfx-auto에서 실행, 그 후 tfx-multi Phase 3로 전환.
155
+ 서브태스크 배열 + `thorough: true` 신호를 함께 전달하여 multi 측에서 verify/fix를 수행.
156
+
157
+ ## 멀티 태스크 라우팅 (트리아지 후)
158
+
159
+ > **트리아지 결과에 따라 실행 경로 결정.**
160
+ > v6.0.0부터 CLI 워커는 **Lead-Direct Headless** (psmux)가 기본. Agent 래퍼 불필요.
161
+
162
+ | 조건 | 실행 경로 | 엔진 |
163
+ |------|----------|------|
164
+ | 1개 + quick | tfx-auto 직접 실행 (fire-and-forget) | tfx-route.sh |
165
+ | 1개 + thorough | tfx-auto 직접 실행 + verify/fix loop | tfx-route.sh |
166
+ | 2개+ + quick | **headless 직접 실행** (WT 자동 팝업) | headless.mjs |
167
+ | 2개+ + thorough | Plan/PRD/Approval 후 → headless + verify/fix | headless.mjs |
168
+ | psmux 미설치 fallback | Native Teams (Agent slim wrapper) | native.mjs |
169
+
170
+ > **MANDATORY: 2개+ 서브태스크 시 headless 엔진 필수**
171
+ > `Agent()` 백그라운드나 `Bash(tfx-route.sh)` 개별 호출로 대체 금지.
172
+ > 반드시 아래 `Bash("tfx multi ...")` 명령으로 headless 엔진에 위임한다.
173
+
174
+ **전환 방법:**
175
+
176
+ ```
177
+ thorough = args에 -t 또는 --thorough 포함
178
+
179
+ if subtasks.length >= 2:
180
+ if psmux 설치됨:
181
+ → Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'cli:prompt:role' ...")
182
+ → if thorough: verify → fix loop
183
+ else:
184
+ → fallback: tfx-multi Phase 3 Native Teams (Agent slim wrapper)
185
+ else:
186
+ if thorough:
187
+ → Pipeline init → Plan → PRD → Approval → 직접 실행 → Verify → Fix loop
188
+ else:
189
+ → tfx-auto 직접 실행 (아래)
190
+ ```
191
+
192
+ ## 실행
193
+
194
+ ### CLI 에이전트 (Codex/Gemini)
195
+
196
+ ```bash
197
+ # Level 0 / INDEPENDENT
198
+ Bash("bash ~/.claude/scripts/tfx-route.sh {agent} '{prompt}' {mcp_profile}", run_in_background=true)
199
+
200
+ # Level 1+ (컨텍스트 의존) — 4번째=timeout(빈값), 5번째=context_file
201
+ Bash("bash ~/.claude/scripts/tfx-route.sh {agent} '{prompt}' {mcp_profile} '' .omc/context/{sid}/combined-{tid}.md", run_in_background=true)
202
+ ```
203
+
204
+ ### Claude 네이티브
205
+
206
+ ```
207
+ Agent(subagent_type="oh-my-claudecode:{agent}", model="{model}", prompt="{prompt}", run_in_background=true)
208
+ # 컨텍스트 있으면 prompt에 <prior_context>...</prior_context> 추가
209
+ ```
210
+
211
+ ### 에이전트 매핑
212
+
213
+ | 입력 | CLI | MCP |
214
+ |------|-----|-----|
215
+ | codex / executor / build-fixer / spark / debugger / deep-executor | Codex | implement |
216
+ | architect / planner / critic / analyst | Codex (xhigh) | analyze |
217
+ | scientist / document-specialist | Codex | analyze |
218
+ | code-reviewer / security-reviewer / quality-reviewer | Codex (review) | review |
219
+ | gemini / designer / writer | Gemini | docs |
220
+ | explore / test-engineer / qa-tester | Claude native | — |
221
+ | verifier | Codex review (기본) / Claude native (TFX_VERIFIER_OVERRIDE=claude 시) | review / — |
222
+
223
+ ### MCP 프로필 자동 결정
224
+
225
+ | 에이전트 | MCP |
226
+ |----------|-----|
227
+ | executor, build-fixer, spark, debugger, deep-executor | implement |
228
+ | architect, planner, critic, analyst, scientist, document-specialist | analyze |
229
+ | code-reviewer, security-reviewer, quality-reviewer | review |
230
+ | designer, writer | docs |
231
+
232
+ ### 결과 파싱
233
+
234
+ 여기서 `failed`는 `tfx-route.sh`/CLI 종료 결과를 뜻한다. Claude Code `TaskUpdate` 상태값이 아니다.
235
+
236
+ | exit_code + status | 사용할 출력 |
237
+ |--------------------|-----------|
238
+ | 0 + success | `=== OUTPUT ===` 섹션 |
239
+ | 124 + timeout | `=== PARTIAL OUTPUT ===` |
240
+ | ≠0 + failed | STDERR → Claude fallback |
241
+
242
+ OUTPUT 추출: `echo "$result" | sed -n '/^=== OUTPUT ===/,/^=== /{/^=== OUTPUT ===/d;/^=== /d;p}'`
243
+
244
+ ### 실패 처리
245
+
246
+ 1차 → `Agent(subagent_type="oh-my-claudecode:executor", model="sonnet")` fallback.
247
+ 2차 연속 실패 → 실패 보고 + 성공 결과만 종합.
248
+
249
+ ### 보고 형식
250
+
251
+ ```markdown
252
+ ## tfx-auto 완료
253
+ **모드**: {auto|manual} | **그래프**: {type} | **레벨**: {N}
254
+ | # | 서브태스크 | Agent | CLI | MCP | 레벨 | 상태 | 시간 |
255
+ ### 워커 {n}: {제목}
256
+ (출력 요약)
257
+ ### Token Savings Report
258
+ (node ~/.claude/scripts/token-snapshot.mjs report {session-id})
259
+ ```
260
+
261
+ ## 필수 조건
262
+
263
+ - `~/.claude/scripts/tfx-route.sh` (필수)
264
+ - codex: `npm install -g @openai/codex` | gemini: `npm install -g @google/gemini-cli`
265
+
266
+ ## 에러 레퍼런스
267
+
268
+ | 에러 | 처리 |
269
+ |------|------|
270
+ | `tfx-route.sh: not found` | tfx-route.sh 생성 |
271
+ | `codex/gemini: not found` | npm install -g |
272
+ | timeout / failed (`tfx-route.sh` 결과) | stderr → Claude fallback |
273
+ | N > 10 | 10 이하로 조정 |
274
+ | 순환 의존 | 분해 재시도 |
275
+ | 컨텍스트 > 32KB | 비례 절삭 |
276
+
277
+ > Claude Code `TaskUpdate`를 사용할 때는 `status: "failed"`를 쓰지 않는다.
278
+ > 실패 보고는 `status: "completed"` + `metadata.result: "failed"`로 표현한다.
279
+
280
+ ## Troubleshooting
281
+
282
+ `/tfx-doctor` 진단 | `/tfx-doctor --fix` 자동 수정 | `/tfx-doctor --reset` 캐시 초기화
283
+
284
+ ## 상세 레퍼런스
285
+
286
+ DAG 알고리즘, 컨텍스트 머지 규칙, 토큰 스냅샷, 보고서 상세는 `scripts/tfx-route.sh` 내부 주석 및 `hub/` 모듈 참조.
@@ -13,6 +13,14 @@ argument-hint: "\"작업 설명\" | N:codex \"작업 설명\""
13
13
  > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
14
14
  > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
15
15
 
16
+ > **Telemetry**
17
+ >
18
+ > - Skill: `tfx-codex`
19
+ > - Description: `Codex-Only 오케스트레이터. tfx-auto 워크플로우를 Codex 전용으로 고정합니다. '코덱스로 해줘', '코덱스한테 시켜', 'codex로', 'Codex 전용' 같은 요청에 반드시 사용.`
20
+ > - Session: 요청별 식별자를 유지해 단계별 실행 로그를 추적한다.
21
+ > - Errors: 실패 시 원인/복구/재시도 여부를 구조화해 기록한다.
22
+
23
+
16
24
 
17
25
  > **래퍼**: tfx-auto의 Codex 전용 바로가기. TFX_CLI_MODE=codex.
18
26
  > **HARD RULE**: Claude는 이 스킬에서 Edit/Write를 사용하면 안 된다. 모든 코드 수정은 Codex CLI를 통해 수행한다.
@@ -0,0 +1,72 @@
1
+ ---
2
+ name: tfx-codex
3
+ description: >
4
+ Codex-Only 오케스트레이터. tfx-auto 워크플로우를 Codex 전용으로 고정합니다.
5
+ '코덱스로 해줘', '코덱스한테 시켜', 'codex로', 'Codex 전용' 같은 요청에 반드시 사용.
6
+ triggers:
7
+ - tfx-codex
8
+ argument-hint: "\"작업 설명\" | N:codex \"작업 설명\""
9
+ ---
10
+
11
+ # {{SKILL_NAME}} — Codex-Only 오케스트레이터
12
+
13
+ {{> base}}
14
+
15
+
16
+ > **래퍼**: tfx-auto의 Codex 전용 바로가기. TFX_CLI_MODE=codex.
17
+ > **HARD RULE**: Claude는 이 스킬에서 Edit/Write를 사용하면 안 된다. 모든 코드 수정은 Codex CLI를 통해 수행한다.
18
+ > Codex CLI만 사용하여 모든 외부 CLI 작업을 라우팅합니다.
19
+ > Gemini CLI가 없는 환경에서 사용합니다.
20
+
21
+ ## 사용법
22
+
23
+ ```
24
+ /tfx-codex "작업 설명"
25
+ /tfx-codex N:codex "작업 설명"
26
+ ```
27
+
28
+ ## 동작 원리
29
+
30
+ `tfx-auto`와 동일한 워크플로우를 사용하되, `TFX_CLI_MODE=codex` 환경변수를 설정하여
31
+ 모든 Gemini 에이전트(designer, writer)를 Codex로 리매핑합니다.
32
+
33
+ ### 에이전트 라우팅
34
+
35
+ | 에이전트 | 원래 CLI | tfx-codex에서 |
36
+ |----------|---------|-------------|
37
+ | executor, build-fixer, debugger | Codex | Codex (변경 없음) |
38
+ | architect, planner, critic, analyst | Codex | Codex (변경 없음) |
39
+ | code-reviewer, security-reviewer | Codex | Codex (변경 없음) |
40
+ | scientist, document-specialist | Codex | Codex (변경 없음) |
41
+ | **designer** | ~~Gemini~~ | **Codex** (effort: codex53_high) — UI 코드 생성 |
42
+ | **writer** | ~~Gemini~~ | **Codex Spark** (effort: spark53_low) — 경량 문서 |
43
+ | explore | Claude Haiku | Claude Haiku (변경 없음) |
44
+ | verifier, test-engineer | Claude Sonnet | Codex (변경 없음) |
45
+
46
+ ## 실행 규칙
47
+
48
+ **tfx-auto SKILL.md의 커맨드 숏컷 → 트리아지 → 멀티 태스크 라우팅 → 실행 → 결과 파싱 → 보고 섹션을 그대로 따릅니다.**
49
+
50
+ 유일한 차이점:
51
+
52
+ 1. **실행 섹션(CLI 에이전트) 수행 시** `TFX_CLI_MODE=codex`를 환경변수로 전달:
53
+ ```bash
54
+ TFX_CLI_MODE=codex bash ~/.claude/scripts/tfx-route.sh {agent} '{prompt}' {mcp_profile}
55
+ ```
56
+
57
+ 2. **트리아지 섹션에서** gemini 분류 결과를 codex로 강제 변환:
58
+ - Codex 분류가 `gemini`를 반환하면 → `codex`로 교체
59
+ - Opus 분해에서 designer/writer → Codex 에이전트 + implement/analyze MCP 프로필
60
+
61
+ 3. **MCP 프로필 조정**:
62
+ - designer: `implement` (코드 기반 UI 작업)
63
+ - writer: `analyze` (문서 기반 리서치+작성)
64
+
65
+ ## 필수 조건
66
+
67
+ - [Codex CLI](https://github.com/openai/codex): `npm install -g @openai/codex`
68
+ - Gemini CLI 불필요
69
+
70
+ ## Troubleshooting
71
+
72
+ 문제 발생 시 `/tfx-doctor` 실행. (`--fix` 자동 수정, `--reset` 캐시 초기화)
@@ -1,6 +1,10 @@
1
1
  ---
2
2
  name: tfx-find
3
- description: "코드베이스에서 파일, 함수, 클래스, 문자열을 빠르게 찾을 때 사용한다. '코드 검색', 'find in code', '어디에 있어?', '이 함수 어디서 쓰여?', '파일 찾아줘', '코드베이스 탐색' 같은 요청에 반드시 사용. 파일 위치, 심볼 사용처, 패턴 검색이 필요한 모든 상황에 적극 활용."
3
+ description: >
4
+ 코드베이스에서 파일, 함수, 클래스, 문자열을 빠르게 찾을 때 사용한다.
5
+ '코드 검색', 'find in code', '어디에 있어?', '이 함수 어디서 쓰여?',
6
+ '파일 찾아줘', '코드베이스 탐색' 같은 요청에 반드시 사용.
7
+ 파일 위치, 심볼 사용처, 패턴 검색이 필요한 모든 상황에 적극 활용.
4
8
  triggers:
5
9
  - 코드 검색
6
10
  - codebase search
@@ -15,6 +19,13 @@ argument-hint: "<검색 패턴 또는 질문>"
15
19
  > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
16
20
  > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
17
21
 
22
+ > **Telemetry**
23
+ >
24
+ > - Skill: `tfx-find`
25
+ > - Description: `코드베이스에서 파일, 함수, 클래스, 문자열을 빠르게 찾을 때 사용한다. '코드 검색', 'find in code', '어디에 있어?', '이 함수 어디서 쓰여?', '파일 찾아줘', '코드베이스 탐색' 같은 요청에 반드시 사용. 파일 위치, 심볼 사용처, 패턴 검색이 필요한 모든 상황에 적극 활용.`
26
+ > - Session: 요청별 식별자를 유지해 단계별 실행 로그를 추적한다.
27
+ > - Errors: 실패 시 원인/복구/재시도 여부를 구조화해 기록한다.
28
+
18
29
 
19
30
  > OMC explore agent 오마주. Haiku의 속도 + Glob/Grep/Read의 정밀도.
20
31
  > "찾는 건 빠르게, 읽는 건 정확하게."