triflux 10.3.3 โ†’ 10.4.0

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 (130) hide show
  1. package/CLAUDE.md +193 -0
  2. package/LICENSE +21 -21
  3. package/hooks/hook-registry.json +256 -256
  4. package/hub/adaptive-inject.mjs +1 -1
  5. package/hub/assign-callbacks.mjs +120 -120
  6. package/hub/delegator/index.mjs +14 -14
  7. package/hub/delegator/tool-definitions.mjs +35 -35
  8. package/hub/hitl.mjs +143 -143
  9. package/hub/lib/path-utils.mjs +167 -0
  10. package/hub/router.mjs +791 -791
  11. package/hub/session-fingerprint.mjs +1 -1
  12. package/hub/team/cli/commands/attach.mjs +37 -37
  13. package/hub/team/cli/commands/debug.mjs +74 -74
  14. package/hub/team/cli/commands/focus.mjs +53 -53
  15. package/hub/team/cli/commands/list.mjs +24 -24
  16. package/hub/team/cli/commands/start/start-in-process.mjs +40 -40
  17. package/hub/team/cli/commands/start/start-mux.mjs +73 -73
  18. package/hub/team/cli/commands/start/start-wt.mjs +69 -69
  19. package/hub/team/cli/commands/tasks.mjs +13 -13
  20. package/hub/team/cli/render.mjs +30 -30
  21. package/hub/team/cli/services/attach-fallback.mjs +54 -54
  22. package/hub/team/cli/services/member-selector.mjs +30 -30
  23. package/hub/team/cli/services/native-control.mjs +116 -116
  24. package/hub/team/cli/services/task-model.mjs +30 -30
  25. package/hub/team/notify.mjs +1 -1
  26. package/hub/team/orchestrator.mjs +161 -161
  27. package/hub/team/runtime-strategy.mjs +74 -0
  28. package/hub/team/session.mjs +611 -611
  29. package/hub/team/shared.mjs +13 -13
  30. package/hub/team/worktree-lifecycle.mjs +61 -2
  31. package/hub/tray.mjs +368 -368
  32. package/hub/workers/codex-mcp.mjs +507 -507
  33. package/hub/workers/factory.mjs +21 -21
  34. package/hud/hud-qos-status.mjs +17 -3
  35. package/hud/mission-board.mjs +53 -0
  36. package/hud/providers/claude.mjs +95 -22
  37. package/hud/renderers.mjs +39 -5
  38. package/package.json +21 -55
  39. package/references/hosts.json +33 -0
  40. package/scripts/completions/tfx.bash +47 -47
  41. package/scripts/completions/tfx.fish +44 -44
  42. package/scripts/completions/tfx.zsh +83 -83
  43. package/scripts/demo.mjs +169 -0
  44. package/scripts/headless-guard.mjs +16 -4
  45. package/scripts/hub-ensure.mjs +120 -120
  46. package/scripts/keyword-detector.mjs +272 -272
  47. package/scripts/keyword-rules-expander.mjs +521 -521
  48. package/scripts/lib/mcp-server-catalog.mjs +118 -118
  49. package/scripts/lib/skill-state.mjs +220 -0
  50. package/scripts/notion-read.mjs +553 -553
  51. package/scripts/test-tfx-route-no-claude-native.mjs +57 -57
  52. package/scripts/tfx-batch-stats.mjs +96 -96
  53. package/skills/.omc/state/agent-replay-8f0e10a9-9693-4410-96f5-a6b07e8ed995.jsonl +1 -0
  54. package/skills/.omc/state/idle-notif-cooldown.json +3 -0
  55. package/skills/.omc/state/last-tool-error.json +7 -0
  56. package/skills/.omc/state/subagent-tracking.json +7 -0
  57. package/skills/tfx-remote-spawn/references/hosts.json +16 -0
  58. package/skills/tfx-workspace/async-tests/run-tests.sh +203 -0
  59. package/skills/tfx-workspace/evals/evals.json +79 -0
  60. package/skills/tfx-workspace/iteration-1/benchmark.json +162 -0
  61. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/eval_metadata.json +11 -0
  62. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/grading.json +9 -0
  63. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/outputs/analysis.md +154 -0
  64. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/timing.json +5 -0
  65. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/grading.json +9 -0
  66. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/outputs/analysis.md +126 -0
  67. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/timing.json +5 -0
  68. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/eval_metadata.json +11 -0
  69. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/grading.json +9 -0
  70. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/outputs/analysis.md +119 -0
  71. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/timing.json +5 -0
  72. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/grading.json +9 -0
  73. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/outputs/analysis.md +115 -0
  74. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/timing.json +5 -0
  75. package/skills/tfx-workspace/iteration-1/hub-start-sequence/eval_metadata.json +10 -0
  76. package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/grading.json +8 -0
  77. package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/outputs/analysis.md +86 -0
  78. package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/timing.json +5 -0
  79. package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/grading.json +8 -0
  80. package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/outputs/analysis.md +81 -0
  81. package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/timing.json +5 -0
  82. package/skills/tfx-workspace/iteration-1/multi-team-creation/eval_metadata.json +12 -0
  83. package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/grading.json +10 -0
  84. package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/outputs/analysis.md +316 -0
  85. package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/timing.json +5 -0
  86. package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/grading.json +10 -0
  87. package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/outputs/analysis.md +352 -0
  88. package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/timing.json +5 -0
  89. package/skills/tfx-workspace/iteration-1/review.html +1325 -0
  90. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/eval_metadata.json +12 -0
  91. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/grading.json +10 -0
  92. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/outputs/analysis.md +97 -0
  93. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/timing.json +5 -0
  94. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/grading.json +10 -0
  95. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/outputs/analysis.md +94 -0
  96. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/timing.json +5 -0
  97. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/eval_metadata.json +12 -0
  98. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/grading.json +10 -0
  99. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/outputs/analysis.md +209 -0
  100. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/timing.json +5 -0
  101. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/grading.json +10 -0
  102. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/outputs/analysis.md +193 -0
  103. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/timing.json +5 -0
  104. package/skills/tfx-workspace/iteration-2/benchmark.json +62 -0
  105. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/eval_metadata.json +13 -0
  106. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/grading.json +11 -0
  107. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/outputs/analysis.md +382 -0
  108. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/timing.json +5 -0
  109. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/grading.json +11 -0
  110. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/outputs/analysis.md +333 -0
  111. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/timing.json +5 -0
  112. package/skills/tfx-workspace/iteration-2/review.html +1325 -0
  113. package/skills/tfx-workspace/skill-snapshot/tfx-auto/SKILL.md +217 -0
  114. package/skills/tfx-workspace/skill-snapshot/tfx-auto-codex/SKILL.md +77 -0
  115. package/skills/tfx-workspace/skill-snapshot/tfx-codex/SKILL.md +65 -0
  116. package/skills/tfx-workspace/skill-snapshot/tfx-doctor/SKILL.md +94 -0
  117. package/skills/tfx-workspace/skill-snapshot/tfx-gemini/SKILL.md +82 -0
  118. package/skills/tfx-workspace/skill-snapshot/tfx-hub/SKILL.md +133 -0
  119. package/skills/tfx-workspace/skill-snapshot/tfx-multi/SKILL.md +426 -0
  120. package/skills/tfx-workspace/skill-snapshot/tfx-setup/SKILL.md +101 -0
  121. package/.claude-plugin/marketplace.json +0 -34
  122. package/.claude-plugin/plugin.json +0 -22
  123. package/config/mcp-registry.json +0 -29
  124. package/tui/codex-profile.mjs +0 -402
  125. package/tui/core.mjs +0 -236
  126. package/tui/doctor.mjs +0 -328
  127. package/tui/gemini-profile.mjs +0 -254
  128. package/tui/monitor-data.mjs +0 -148
  129. package/tui/monitor.mjs +0 -295
  130. package/tui/setup.mjs +0 -442
@@ -0,0 +1,426 @@
1
+ ---
2
+ name: tfx-multi
3
+ description: ๋ฉ€ํ‹ฐ-CLI ํŒ€ ๋ชจ๋“œ. Claude Native Agent Teams + Codex/Gemini ๋ฉ€ํ‹ฐ๋ชจ๋ธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜.
4
+ triggers:
5
+ - tfx-multi
6
+ argument-hint: '"์ž‘์—… ์„ค๋ช…" | --agents codex,gemini "์ž‘์—…" | --tmux "์ž‘์—…" | status | stop'
7
+ ---
8
+
9
+ # tfx-multi v3 โ€” ํŒŒ์ดํ”„๋ผ์ธ ๊ธฐ๋ฐ˜ ๋ฉ€ํ‹ฐ-CLI ํŒ€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ
10
+
11
+ > Claude Code Native Teams์˜ Shift+Down ๋„ค๋น„๊ฒŒ์ด์…˜์„ ๋ณต์›ํ•œ๋‹ค.
12
+ > Codex/Gemini ์›Œ์ปค๋งˆ๋‹ค ์ตœ์†Œ ํ”„๋กฌํ”„ํŠธ(~100 ํ† ํฐ)์˜ ์Šฌ๋ฆผ Agent ๋ž˜ํผ๋ฅผ spawnํ•˜์—ฌ ๋„ค๋น„๊ฒŒ์ด์…˜์— ๋“ฑ๋กํ•˜๊ณ ,
13
+ > ์‹ค์ œ ์ž‘์—…์€ `tfx-route.sh`๊ฐ€ ์ˆ˜ํ–‰ํ•œ๋‹ค. task ์ƒํƒœ๋Š” `team_task_list`๋ฅผ truth source๋กœ ๊ฒ€์ฆํ•œ๋‹ค.
14
+ > v3 โ€” `--quick`(๊ธฐ๋ณธ, v2.2 ํ˜ธํ™˜) + `--thorough`(์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ: planโ†’prdโ†’execโ†’verifyโ†’fix loop).
15
+
16
+ > **[ํ•„์ˆ˜] Lead ๊ณ ํ† ํฐ MCP ์ง์ ‘ ์‚ฌ์šฉ ๊ธˆ์ง€**
17
+ > Lead(Claude Opus)๋Š” ๋‹ค์Œ MCP ๋„๊ตฌ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ๋งˆ๋ผ:
18
+ > - **์›น ์„œ์น˜**: brave-search, exa, tavily
19
+ > - **์™ธ๋ถ€ ์„œ๋น„์Šค**: Notion (notion-*), Jira/Confluence (Atlassian mcp__claude_ai_Atlassian__*), Google Calendar, Gmail
20
+ > - **๋Œ€๋Ÿ‰ ์กฐํšŒ**: ๋‹ค์ค‘ ํŽ˜์ด์ง€ ์ฝ๊ธฐ, ๋ฐฐ์น˜ ๊ฒ€์ƒ‰, ์ด์Šˆ ๋ชฉ๋ก ์กฐํšŒ ๋“ฑ ๋ฐ˜๋ณต์  MCP ํ˜ธ์ถœ
21
+ >
22
+ > ์œ„์ž„ ๋ฐฉ๋ฒ•:
23
+ > - ์›น ์„œ์น˜/๋ฆฌ์„œ์น˜ โ†’ `scientist` ๋˜๋Š” `document-specialist` ์—ญํ• ์˜ Codex ์›Œ์ปค
24
+ > - Notion ๋Œ€ํ˜• ํŽ˜์ด์ง€ โ†’ `bash ~/.claude/scripts/notion-read.mjs --delegate` (๋‹ค์šด๋กœ๋“œ ํ›„ ๋กœ์ปฌ ์ฒ˜๋ฆฌ)
25
+ > - Jira/Confluence ๋ฐฐ์น˜ ์กฐํšŒ โ†’ Codex `scientist` ์›Œ์ปค์— ์œ„์ž„ (์›Œ์ปค๊ฐ€ MCP ์ง์ ‘ ํ˜ธ์ถœ)
26
+ > - ๋‹จ๊ฑด ์กฐํšŒ(์ด์Šˆ 1๊ฐœ ํ™•์ธ ๋“ฑ) โ†’ Lead ์ง์ ‘ ํ—ˆ์šฉํ•˜๋˜, 3ํšŒ ์ด์ƒ ๋ฐ˜๋ณต ํ˜ธ์ถœ ์‹œ ์œ„์ž„ ์ „ํ™˜
27
+ >
28
+ > Lead๊ฐ€ MCP ๋„๊ตฌ์— ์ง์ ‘ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋”๋ผ๋„, ์œ„์ž„ํ•ด์•ผ Claude ํ† ํฐ์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.
29
+ > ํŠนํžˆ Notion/Jira๋Š” ์‘๋‹ต์ด ํฌ๊ณ  ๋ฐ˜๋ณต ํ˜ธ์ถœ์ด ์žฆ์•„ ํ† ํฐ ์†Œ๋ชจ๊ฐ€ ๋งค์šฐ ๋†’๋‹ค.
30
+
31
+ ## ์‚ฌ์šฉ๋ฒ•
32
+
33
+ ```
34
+ /tfx-multi "์ธ์ฆ ๋ฆฌํŒฉํ„ฐ๋ง + UI ๊ฐœ์„  + ๋ณด์•ˆ ๋ฆฌ๋ทฐ" # --quick (๊ธฐ๋ณธ)
35
+ /tfx-multi --thorough "์ธ์ฆ ๋ฆฌํŒฉํ„ฐ๋ง + UI ๊ฐœ์„  + ๋ณด์•ˆ ๋ฆฌ๋ทฐ" # ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ
36
+ /tfx-multi --agents codex,gemini "ํ”„๋ก ํŠธ+๋ฐฑ์—”๋“œ"
37
+ /tfx-multi --tmux "์ž‘์—…" # ๋ ˆ๊ฑฐ์‹œ tmux ๋ชจ๋“œ
38
+ /tfx-multi status
39
+ /tfx-multi stop
40
+ ```
41
+
42
+ ## ์‹คํ–‰ ์›Œํฌํ”Œ๋กœ์šฐ
43
+
44
+ ### Phase 0: ์‚ฌ์ „ ์ ๊ฒ€ ์ •์ฑ… (์ถœ๋ ฅ ์ตœ์†Œํ™” + ์ฆ‰์‹œ spawn)
45
+
46
+ > **[ํ•„์ˆ˜] Agent spawn ์ง€์—ฐ ๊ธˆ์ง€ โ€” preflight์™€ Agent ์ƒ์„ฑ์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•œ๋‹ค.**
47
+ > Lead๊ฐ€ preflight๋ฅผ ์ˆœ์ฐจ ์™„๋ฃŒํ•œ ๋’ค Agent๋ฅผ spawnํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ฒด๊ฐ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•œ๋‹ค.
48
+ > ์ˆ˜๋™ ๋ชจ๋“œ(`N:agent`)์—์„œ๋Š” ์ž…๋ ฅ ํŒŒ์‹ฑ ์งํ›„ TeamCreate + Agent spawn์„ ๋จผ์ € ์‹œ์ž‘ํ•˜๊ณ ,
49
+ > preflight๋Š” **๋™์‹œ์— ๋ณ‘๋ ฌ**๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค. preflight ์‹คํŒจ ์‹œ์—๋งŒ Agent๋ฅผ ์ค‘๋‹จํ•œ๋‹ค.
50
+
51
+ - ์›์น™:
52
+ - **์ˆ˜๋™ ๋ชจ๋“œ:** Phase 1 ํŒŒ์‹ฑ โ†’ Phase 3a~3c(TeamCreate + Agent spawn) + Phase 0(preflight) **๋™์‹œ ๋ณ‘๋ ฌ**
53
+ - **์ž๋™ ๋ชจ๋“œ:** Phase 0(preflight) + Phase 2(triage) **๋™์‹œ ๋ณ‘๋ ฌ** โ†’ Phase 3
54
+ - ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•˜์ง€ ์•Š์œผ๋ฉด `Searched for ...`, ๊ฐœ๋ณ„ `Bash(...)` ๋กœ๊ทธ๋ฅผ ์ „๋ฉด ๋ณด๊ณ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
55
+ - ๋ฆฌ๋“œ์—๋Š” ์š”์•ฝ ํ•œ ์ค„๋งŒ ๋…ธ์ถœํ•œ๋‹ค. ์˜ˆ: `preflight: ok (route/hub)`
56
+ - Hub ์ ๊ฒ€์€ `/status`๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค (`/health` ๋‹จ๋… ํŒ์ • ๊ธˆ์ง€).
57
+ - ๊ถŒ์žฅ ์ฒดํฌ ์˜ˆ์‹œ (๋‹จ์ผ Bash๋กœ ํ†ตํ•ฉ):
58
+ - `curl -sf http://127.0.0.1:27888/status >/dev/null && test -f ~/.claude/scripts/tfx-route.sh && echo "preflight: ok" || echo "preflight: FAIL"`
59
+ - ์‹คํŒจ ์‹œ์—๋งŒ ์ƒ์„ธ๋ฅผ ๋…ธ์ถœํ•œ๋‹ค:
60
+ - `tfx-route.sh` ์—†์Œ
61
+ - Hub ๋น„์ •์ƒ/๋ฏธ๊ธฐ๋™
62
+ - ํ•„์ˆ˜ CLI ๋ฏธ์„ค์น˜
63
+
64
+ ### Phase 1: ์ž…๋ ฅ ํŒŒ์‹ฑ
65
+
66
+ > **[ํ•„์ˆ˜] ์ธ์ž ์—†์Œ โ†’ ์ฆ‰์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž‘์—… ์ž…๋ ฅ ์š”์ฒญ**
67
+ > `/tfx-multi`๊ฐ€ ์ธ์ž ์—†์ด ํ˜ธ์ถœ๋˜๋ฉด(ARGUMENTS๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด ๋˜๋Š” ๊ณต๋ฐฑ๋งŒ) Phase 2๋กœ ์ง„ํ–‰ํ•˜์ง€ ๋งˆ๋ผ.
68
+ > "์–ด๋–ค ์ž‘์—…์„ ์‹คํ–‰ํ• ๊นŒ์š”?" ๋“ฑ ์งง์€ ํ”„๋กฌํ”„ํŠธ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž‘์—… ๋‚ด์šฉ์„ ์š”์ฒญํ•˜๊ณ ,
69
+ > ์‚ฌ์šฉ์ž ์‘๋‹ต์„ ๋ฐ›์€ ํ›„์—์•ผ Phase 2๋กœ ์ง„ํ–‰ํ•œ๋‹ค.
70
+ > **์ ˆ๋Œ€๋กœ** ์ธ์ž ์—†์ด TeamCreate/Agent spawn/Claude ๋„ค์ดํ‹ฐ๋ธŒ ํŒ€ ๊ตฌ์„ฑ์„ ์‹œ์ž‘ํ•˜์ง€ ๋งˆ๋ผ.
71
+
72
+ ```
73
+ ์ž…๋ ฅ: ""(๋นˆ ๋ฌธ์ž์—ด) โ†’ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž‘์—… ์ž…๋ ฅ ์š”์ฒญ (Phase 2 ์ง„ํ–‰ ๊ธˆ์ง€)
74
+ ์ž…๋ ฅ: "3:codex ๋ฆฌ๋ทฐ" โ†’ ์ˆ˜๋™ ๋ชจ๋“œ: N=3, agent=codex
75
+ ์ž…๋ ฅ: "์ธ์ฆ + UI + ํ…Œ์ŠคํŠธ" โ†’ ์ž๋™ ๋ชจ๋“œ: Codex ๋ถ„๋ฅ˜ โ†’ Opus ๋ถ„ํ•ด
76
+ ์ž…๋ ฅ: "--tmux ์ธ์ฆ + UI" โ†’ tmux ๋ ˆ๊ฑฐ์‹œ ๋ชจ๋“œ โ†’ Phase 3-tmux๋กœ ๋ถ„๊ธฐ
77
+ ์ž…๋ ฅ: "status" โ†’ ์ œ์–ด ์ปค๋งจ๋“œ
78
+ ์ž…๋ ฅ: "stop" โ†’ ์ œ์–ด ์ปค๋งจ๋“œ
79
+ ```
80
+
81
+ **์ œ์–ด ์ปค๋งจ๋“œ ๊ฐ์ง€:**
82
+ - `status`, `stop`, `kill`, `attach`, `list`, `send` โ†’ `Bash("node bin/triflux.mjs multi {cmd}")` ์งํ–‰
83
+ (`bin/triflux.mjs` ์ ˆ๋Œ€๊ฒฝ๋กœ๋Š” triflux ํŒจํ‚ค์ง€ ๋ฃจํŠธ ๊ธฐ์ค€)
84
+ - ๊ทธ ์™ธ โ†’ Phase 2 ํŠธ๋ฆฌ์•„์ง€
85
+
86
+ **--tmux/--psmux ๊ฐ์ง€:** ์ž…๋ ฅ์— `--tmux` ๋˜๋Š” `--psmux`๊ฐ€ ํฌํ•จ๋˜๋ฉด Phase 3-mux๋กœ ๋ถ„๊ธฐ. psmux๊ฐ€ primary (Windows).
87
+
88
+ ### Phase 2: ํŠธ๋ฆฌ์•„์ง€ (tfx-auto์™€ ๋™์ผ)
89
+
90
+ #### ์ž๋™ ๋ชจ๋“œ โ€” Codex ๋ถ„๋ฅ˜ โ†’ Opus ๋ถ„ํ•ด
91
+
92
+ ```bash
93
+ # Step 2a: Codex ๋ถ„๋ฅ˜ (๋ฌด๋ฃŒ)
94
+ Bash("codex exec --full-auto --skip-git-repo-check '๋‹ค์Œ ์ž‘์—…์„ ๋ถ„์„ํ•˜๊ณ  ๊ฐ ๋ถ€๋ถ„์— ์ ํ•ฉํ•œ agent๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋ผ.
95
+
96
+ agent ์„ ํƒ:
97
+ - codex: ์ฝ”๋“œ ๊ตฌํ˜„/์ˆ˜์ •/๋ถ„์„/๋ฆฌ๋ทฐ/๋””๋ฒ„๊น…/์„ค๊ณ„ (๊ธฐ๋ณธ๊ฐ’)
98
+ - gemini: ๋ฌธ์„œ/UI/๋””์ž์ธ/๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ
99
+ - claude: ์ฝ”๋“œ๋ฒ ์ด์Šค ํƒ์ƒ‰/ํ…Œ์ŠคํŠธ ์‹คํ–‰/๊ฒ€์ฆ (์ตœํ›„ ์ˆ˜๋‹จ)
100
+
101
+ ๋ชจ๋“  ์—ญํ• ์€ Codex/Gemini ์šฐ์„  ๋ฐฐ์ •:
102
+ - explore, verifier, test-engineer, qa-tester ํฌํ•จ ์ „ ์—ญํ• ์ด Codex/Gemini๋กœ ๋ผ์šฐํŒ…
103
+ - Codex/Gemini ๋ฏธ์„ค์น˜ ์‹œ์—๋งŒ claude-native(sonnet/haiku) fallback
104
+ - claude ํƒ€์ž…์€ ์ตœํ›„ ์ˆ˜๋‹จ์œผ๋กœ๋งŒ ์‚ฌ์šฉ
105
+
106
+ ์ž‘์—…: {task}
107
+
108
+ JSON๋งŒ ์ถœ๋ ฅ:
109
+ { \"parts\": [{ \"description\": \"...\", \"agent\": \"codex|gemini|claude\" }] }
110
+ '")
111
+ ```
112
+
113
+ > Codex ๋ถ„๋ฅ˜ ์‹คํŒจ ์‹œ โ†’ Opus(์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ)๊ฐ€ ์ง์ ‘ ๋ถ„๋ฅ˜+๋ถ„ํ•ด
114
+
115
+ ```
116
+ # Step 2b: ์ธ๋ผ์ธ ๋ถ„ํ•ด
117
+ ๋ถ„๋ฅ˜ ๊ฒฐ๊ณผ โ†’ ์„œ๋ธŒํƒœ์Šคํฌ ๋ฐฐ์—ด ๊ตฌ์„ฑ:
118
+ [{ cli: "codex", subtask: "์ธ์ฆ ๋ฆฌํŒฉํ„ฐ๋ง", role: "executor" },
119
+ { cli: "gemini", subtask: "UI ๊ฐœ์„ ", role: "designer" },
120
+ { cli: "codex", subtask: "๋ณด์•ˆ ๋ฆฌ๋ทฐ", role: "reviewer" }]
121
+ ```
122
+
123
+ #### ์ˆ˜๋™ ๋ชจ๋“œ (`N:agent_type` ๋˜๋Š” `--agents`)
124
+
125
+ Codex ๋ถ„๋ฅ˜ ๊ฑด๋„ˆ๋œ€ โ†’ Opus๊ฐ€ ์ง์ ‘ N๊ฐœ ์„œ๋ธŒํƒœ์Šคํฌ ๋ถ„ํ•ด.
126
+
127
+ ### Phase 2.5โ€“2.6: ํŒŒ์ดํ”„๋ผ์ธ Plan/PRD (`--thorough` ์ „์šฉ)
128
+
129
+ > `--quick`(๊ธฐ๋ณธ) ๋ชจ๋“œ์—์„œ๋Š” ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  Phase 3์œผ๋กœ ์งํ–‰ํ•œ๋‹ค.
130
+ > `--thorough` ๋ชจ๋“œ์—์„œ๋งŒ ์‹คํ–‰๋œ๋‹ค.
131
+
132
+ ```
133
+ [--thorough ๋ชจ๋“œ ๊ฐ์ง€]
134
+
135
+ Phase 2.5: Plan (Codex architect)
136
+ 1. Hub pipeline ์ดˆ๊ธฐํ™”:
137
+ Bash("node hub/bridge.mjs pipeline-advance --team ${teamName} --status plan")
138
+ โ€” ๋˜๋Š” createPipeline(db, teamName) ์ง์ ‘ ํ˜ธ์ถœ
139
+ 2. Codex architect๋กœ ์ž‘์—… ๋ถ„์„ + ์ ‘๊ทผ๋ฒ• ์„ค๊ณ„:
140
+ bash ~/.claude/scripts/tfx-route.sh architect "${task}" analyze
141
+ 3. ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ artifact์— ์ €์žฅ:
142
+ pipeline.setArtifact('plan_path', planOutputPath)
143
+ 4. pipeline advance: plan โ†’ prd
144
+
145
+ Phase 2.6: PRD (Codex analyst)
146
+ 1. Codex analyst๋กœ ์ˆ˜์šฉ ๊ธฐ์ค€ ํ™•์ •:
147
+ bash ~/.claude/scripts/tfx-route.sh analyst "${task}" analyze
148
+ 2. ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ artifact์— ์ €์žฅ:
149
+ pipeline.setArtifact('prd_path', prdOutputPath)
150
+ 3. pipeline advance: prd โ†’ exec
151
+ ```
152
+
153
+ ### Phase 3: Native Teams ์‹คํ–‰ (v2.1 ๊ฐœํŽธ)
154
+
155
+ ํŠธ๋ฆฌ์•„์ง€ ๊ฒฐ๊ณผ๋ฅผ Claude Code ๋„ค์ดํ‹ฐ๋ธŒ Agent Teams๋กœ ์‹คํ–‰ํ•œ๋‹ค.
156
+
157
+ #### Step 3a: ํŒ€ ์ƒ์„ฑ
158
+
159
+ ```
160
+ teamName = "tfx-" + Date.now().toString(36).slice(-6)
161
+
162
+ TeamCreate({
163
+ team_name: teamName,
164
+ description: "tfx-multi: {์›๋ณธ ์ž‘์—… ์š”์•ฝ}"
165
+ })
166
+ ```
167
+
168
+ #### Step 3b: ๊ณต์œ  ์ž‘์—… ๋“ฑ๋ก
169
+
170
+ ๊ฐ ์„œ๋ธŒํƒœ์Šคํฌ์— ๋Œ€ํ•ด `TaskCreate`๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  `taskId`๋ฅผ ๋ณด์กดํ•œ๋‹ค.
171
+ ๋ฆฌ๋“œ๊ฐ€ ์‹คํ–‰ ์‹œ ์‚ฌ์šฉํ•  `agentName`๋„ ํ•จ๊ป˜ ํ™•์ •ํ•œ๋‹ค.
172
+
173
+ ```
174
+ for each assignment in assignments (index i):
175
+ TaskCreate({
176
+ subject: assignment.subtask,
177
+ description: "CLI: {assignment.cli}, ์—ญํ• : {assignment.role}\n\n{์ƒ์„ธ ์ž‘์—… ๋‚ด์šฉ}",
178
+ metadata: { cli: assignment.cli, role: assignment.role }
179
+ })
180
+ taskId = created_task.id
181
+ agentName = "{assignment.cli}-worker-{i+1}"
182
+ runQueue.push({ taskId, agentName, ...assignment })
183
+ ```
184
+
185
+ #### Step 3c: ์Šฌ๋ฆผ ๋ž˜ํผ Agent ์‹คํ–‰ (v2.2 ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ณต์›)
186
+
187
+ > **[๋ฐฐ๊ฒฝ] Native Teams์˜ teammate๋Š” Claude ๋ชจ๋ธ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.**
188
+ > Codex/Gemini๋Š” teammate๋กœ ์ง์ ‘ ๋“ฑ๋กํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, Claude slim wrapper๋ฅผ spawnํ•˜๊ณ 
189
+ > ๋ž˜ํผ ๋‚ด๋ถ€์—์„œ `tfx-route.sh`๋กœ Codex/Gemini CLI๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.
190
+
191
+ > **[ํ•„์ˆ˜] Codex/Gemini ์„œ๋ธŒํƒœ์Šคํฌ๋Š” ์›Œ์ปค ์ˆ˜์— ๊ด€๊ณ„์—†์ด ๋ฐ˜๋“œ์‹œ Agent ๋ž˜ํผ๋ฅผ spawnํ•ด์•ผ ํ•œ๋‹ค.**
192
+ > ๋‹จ์ผ ์›Œ์ปค(1:gemini ๋“ฑ)์—ฌ๋„ Lead๊ฐ€ ์ง์ ‘ Bash๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.
193
+ > Agent ๋ž˜ํผ๋ฅผ ์ƒ๋žตํ•˜๋ฉด Shift+Down ๋„ค๋น„๊ฒŒ์ด์…˜์— ์›Œ์ปค๊ฐ€ ๋“ฑ๋ก๋˜์ง€ ์•Š์•„ v2.2์˜ ํ•ต์‹ฌ ๊ฐ€์น˜๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.
194
+ > Lead๊ฐ€ "ํšจ์œจ์ "์ด๋ผ๊ณ  ํŒ๋‹จํ•ด์„œ Agent๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋Š” ๊ฒƒ์€ ๊ธˆ์ง€ํ•œ๋‹ค.
195
+
196
+ Codex/Gemini ์„œ๋ธŒํƒœ์Šคํฌ๋งˆ๋‹ค ์ตœ์†Œ ํ”„๋กฌํ”„ํŠธ์˜ Agent๋ฅผ spawnํ•˜์—ฌ ๋„ค๋น„๊ฒŒ์ด์…˜์— ๋“ฑ๋กํ•œ๋‹ค.
197
+ Agent ๋‚ด๋ถ€์—์„œ `Bash(tfx-route.sh)`๋ฅผ NํšŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฆฌ๋“œ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„ ์žฌ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.
198
+
199
+ ```
200
+ for each item in runQueue where item.cli in ["codex", "gemini"]:
201
+ Agent({
202
+ name: item.agentName,
203
+ team_name: teamName,
204
+ mode: "bypassPermissions",
205
+ run_in_background: true,
206
+ prompt: buildSlimWrapperPrompt(item.cli, {
207
+ subtask: item.subtask,
208
+ role: item.role,
209
+ teamName: teamName,
210
+ taskId: item.taskId,
211
+ agentName: item.agentName,
212
+ leadName: "team-lead",
213
+ mcp_profile: mcp_profile
214
+ })
215
+ })
216
+ ```
217
+
218
+ ์Šฌ๋ฆผ ๋ž˜ํผ ํ”„๋กฌํ”„ํŠธ๋Š” `hub/team/native.mjs`์˜ `buildSlimWrapperPrompt()`๊ฐ€ **๋‹จ์ผ truth source**.
219
+ ํ•ต์‹ฌ ๋™์ž‘: Bash(tfx-route.sh) ์‹คํ–‰ โ†’ SendMessage(๊ฒฐ๊ณผ ๋ณด๊ณ ) โ†’ ๋ฆฌ๋“œ ํ”ผ๋“œ๋ฐฑ ๋Œ€๊ธฐ โ†’ ํ•„์š” ์‹œ ์žฌ์‹คํ–‰(NํšŒ).
220
+ ์ตœ์ข… ์™„๋ฃŒ ์‹œ TaskUpdate(completed) + SendMessage โ†’ ์ข…๋ฃŒ.
221
+ status๋Š” "completed"๋งŒ ์‚ฌ์šฉ. ์‹คํŒจ ์—ฌ๋ถ€๋Š” `metadata.result`๋กœ ๊ตฌ๋ถ„.
222
+
223
+ > **[ํ•ต์‹ฌ] ์Šฌ๋ฆผ ๋ž˜ํผ๋Š” 1ํšŒ์„ฑ์ด ์•„๋‹ˆ๋‹ค โ€” ๋ฆฌ๋“œโ†”์›Œ์ปค ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๊ฐ€ ์„ค๊ณ„ ์˜๋„์ด๋‹ค.**
224
+ > ์›Œ์ปค๊ฐ€ tfx-route.sh ์‹คํ–‰ ํ›„ ๊ฒฐ๊ณผ๋ฅผ SendMessage๋กœ ๋ณด๊ณ ํ•˜๋ฉด ํ„ด ๊ฒฝ๊ณ„๊ฐ€ ์ƒ๊ธด๋‹ค.
225
+ > ๋ฆฌ๋“œ๋Š” ์ด ํ„ด ๊ฒฝ๊ณ„์—์„œ ๋ฐฉํ–ฅ ์ˆ˜์ •/์ถ”๊ฐ€ ์ง€์‹œ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ณ ,
226
+ > ์›Œ์ปค๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ˜์˜ํ•˜์—ฌ tfx-route.sh๋ฅผ ์žฌ์‹คํ–‰ํ•œ๋‹ค.
227
+ > ๋ž˜ํผ ์กด์žฌ ์ด์œ : (1) Shift+Down ๋„ค๋น„๊ฒŒ์ด์…˜ ๋“ฑ๋ก (2) ๋ฆฌ๋“œโ†”์›Œ์ปค ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„ (3) ์‹คํŒจ ์‹œ ์žฌ์‹คํ–‰
228
+
229
+ > **[ํ•„์ˆ˜] `mode: "bypassPermissions"` โ€” ๋ชจ๋“  Agent spawn์— ๋ฐ˜๋“œ์‹œ ํฌํ•จํ•œ๋‹ค.**
230
+ > ์ด ์„ค์ •์ด ์—†์œผ๋ฉด ์›Œ์ปค๊ฐ€ Bash ์‹คํ–‰ ์‹œ ์‚ฌ์šฉ์ž ์Šน์ธ์„ ์š”์ฒญํ•˜์—ฌ ์ž๋™ ์‹คํ–‰์ด ์ค‘๋‹จ๋œ๋‹ค.
231
+ > Codex/Gemini ๋ž˜ํผ, Claude ์›Œ์ปค ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ์ ์šฉํ•œ๋‹ค.
232
+
233
+ > **[๊ธˆ์ง€] Lead ๋˜๋Š” Agent ๋ž˜ํผ๊ฐ€ `gemini -y -p "..."` ๋˜๋Š” `codex exec "..."`๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.**
234
+ > ์ง์ ‘ ํ˜ธ์ถœํ•˜๋ฉด tfx-route.sh์˜ ๋ชจ๋ธ ์ง€์ •(`-m gemini-3.1-pro-preview`), MCP ํ•„ํ„ฐ, ํŒ€ bridge ์—ฐ๋™,
235
+ > Windows ํ˜ธํ™˜ ๊ฒฝ๋กœ, ํƒ€์ž„์•„์›ƒ, ํ›„์ฒ˜๋ฆฌ(ํ† ํฐ ์ถ”์ /์ด์Šˆ ๋กœ๊น…)๊ฐ€ ๋ชจ๋‘ ๋ˆ„๋ฝ๋œ๋‹ค.
236
+ > ๋ฐ˜๋“œ์‹œ `bash ~/.claude/scripts/tfx-route.sh {role} '{subtask}' {mcp_profile}`์„ ํ†ตํ•ด ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
237
+
238
+ > **[๊ธˆ์ง€] ์Šฌ๋ฆผ ๋ž˜ํผ ์›Œ์ปค๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ฝ๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.**
239
+ > codex-worker๋Š” ๋ฐ˜๋“œ์‹œ tfx-route.sh๋ฅผ ํ†ตํ•ด Codex์— ์œ„์ž„ํ•˜๊ณ , gemini-worker๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.
240
+ > ์›Œ์ปค๊ฐ€ Read, Edit, Write, Grep, Glob ๋“ฑ ๋„๊ตฌ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์œ„์ž„ ๊ตฌ์กฐ ์œ„๋ฐ˜์ด๋‹ค.
241
+ > ์ด๋Š” tfx-route.sh์˜ MCP ํ•„ํ„ฐ, ๋ชจ๋ธ ์ง€์ •, bridge ์—ฐ๋™, ํ† ํฐ ์ถ”์ ์„ ๋ชจ๋‘ ์šฐํšŒํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ
242
+ > ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์›Œ์ปค๊ฐ€ ์ด ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•˜๋ฉด ์ž‘์—… ์‹คํŒจ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.
243
+
244
+ **Bash timeout ๋™์  ์ƒ์†:** Bash timeout์€ tfx-route.sh์˜ role/profile๋ณ„ timeout + 60์ดˆ ์—ฌ์œ ๋ฅผ ms๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋™์  ์ƒ์†ํ•œ๋‹ค. `getRouteTimeout(role, mcpProfile)` ๊ธฐ์ค€: analyze/review ํ”„๋กœํ•„ ๋˜๋Š” architect/analyst ์—ญํ• ์€ 3600์ดˆ, ๊ทธ ์™ธ ๊ธฐ๋ณธ 1080์ดˆ(18๋ถ„).
245
+
246
+ **ํ•ต์‹ฌ ์ฐจ์ด vs v2:** ํ”„๋กฌํ”„ํŠธ ~100 ํ† ํฐ (v2์˜ ~500), task claim/complete/report๋Š” tfx-route.sh๊ฐ€ Named Pipe(์šฐ์„ )/HTTP(fallback) ๊ฒฝ์œ ๋กœ ์ˆ˜ํ–‰. ๋ž˜ํผ๊ฐ€ NํšŒ ์‹คํ–‰์„ ์ง€์›ํ•˜๋ฏ€๋กœ ๋ฆฌ๋“œ๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ๋ฐฉํ–ฅ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
247
+
248
+ #### ์ธํ„ฐ๋ŸฝํŠธ ํ”„๋กœํ† ์ฝœ
249
+
250
+ ์›Œ์ปค๊ฐ€ Bash ์‹คํ–‰ ์ „์— SendMessage๋กœ ์‹œ์ž‘์„ ๋ณด๊ณ ํ•˜๋ฉด ํ„ด ๊ฒฝ๊ณ„๊ฐ€ ์ƒ๊ฒจ ๋ฆฌ๋“œ๊ฐ€ ๋ฐฉํ–ฅ ์ „ํ™˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
251
+
252
+ ```
253
+ 1. TaskUpdate(taskId, status: in_progress) โ€” task claim
254
+ 2. SendMessage(to: team-lead, "์ž‘์—… ์‹œ์ž‘: {agentName}") โ€” ์‹œ์ž‘ ๋ณด๊ณ  (ํ„ด ๊ฒฝ๊ณ„ ์ƒ์„ฑ)
255
+ 3. Bash(command: tfx-route.sh ..., timeout: {bashTimeoutMs}) โ€” ์‹คํ–‰
256
+ 4. SendMessage(to: team-lead, "๊ฒฐ๊ณผ: {์š”์•ฝ}") โ€” ๊ฒฐ๊ณผ ๋ณด๊ณ  (ํ„ด ๊ฒฝ๊ณ„ ์ƒ์„ฑ)
257
+ 5. ๋ฆฌ๋“œ ํ”ผ๋“œ๋ฐฑ ๋Œ€๊ธฐ โ€” ํ”ผ๋“œ๋ฐฑ ์ˆ˜์‹  ์‹œ Step 3์œผ๋กœ ๋Œ์•„๊ฐ€ ์žฌ์‹คํ–‰
258
+ 6. ์ตœ์ข… ์™„๋ฃŒ ์‹œ TaskUpdate(status: completed, metadata: {result}) + SendMessage โ†’ ์ข…๋ฃŒ
259
+ ```
260
+
261
+ ๋ฆฌ๋“œ๋Š” ์›Œ์ปค์˜ Step 2, Step 4 ์‹œ์ ์— ํ„ด ๊ฒฝ๊ณ„๋ฅผ ์ธ์‹ํ•˜๊ณ , ๋ฐฉํ–ฅ ์ „ํ™˜/์ถ”๊ฐ€ ์ง€์‹œ/์žฌ์‹คํ–‰ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
262
+
263
+ `tfx-route.sh` ํŒ€ ํ†ตํ•ฉ ๋™์ž‘(์ด๋ฏธ ๊ตฌํ˜„๋จ, `TFX_TEAM_*` ๊ธฐ๋ฐ˜):
264
+ - `TFX_TEAM_NAME`: ํŒ€ ์‹๋ณ„์ž
265
+ - `TFX_TEAM_TASK_ID`: ์ž‘์—… ์‹๋ณ„์ž
266
+ - `TFX_TEAM_AGENT_NAME`: ์›Œ์ปค ํ‘œ๊ธฐ ์ด๋ฆ„
267
+ - `TFX_TEAM_LEAD_NAME`: ๋ฆฌ๋“œ ์ˆ˜์‹ ์ž ์ด๋ฆ„ (๊ธฐ๋ณธ `team-lead`)
268
+
269
+ Hub ํ†ต์‹  (Named Pipe ์šฐ์„ , HTTP fallback):
270
+ - `bridge.mjs`๊ฐ€ Named Pipe(`\\.\pipe\triflux-{pid}`) ์šฐ์„  ์—ฐ๊ฒฐ, ์‹คํŒจ ์‹œ HTTP `/bridge/*` fallback
271
+ - ์‹คํ–‰ ์‹œ์ž‘: `node hub/bridge.mjs team-task-update --team {name} --task-id {id} --claim --status in_progress`
272
+ - ์‹คํ–‰ ์ข…๋ฃŒ: `node hub/bridge.mjs team-task-update --team {name} --task-id {id} --status completed|failed`
273
+ - ๋ฆฌ๋“œ ๋ณด๊ณ : `node hub/bridge.mjs team-send-message --team {name} --from {agent} --to team-lead --text "..."`
274
+ - ๊ฒฐ๊ณผ ๋ฐœํ–‰: `node hub/bridge.mjs result --agent {id} --topic task.result --file {output}`
275
+
276
+ #### Step 3d: claude ํƒ€์ž…๋งŒ Agent ์ง์ ‘ ์‹คํ–‰
277
+
278
+ `cli == claude`์ธ ์„œ๋ธŒํƒœ์Šคํฌ์—๋งŒ `Agent(subagent_type)`๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
279
+
280
+ ```
281
+ Agent({
282
+ name: "claude-worker-{n}",
283
+ team_name: teamName,
284
+ description: "claude-worker-{n}",
285
+ mode: "bypassPermissions",
286
+ run_in_background: true,
287
+ subagent_type: "{role}",
288
+ prompt: "๋„ˆ๋Š” {teamName}์˜ Claude ์›Œ์ปค์ด๋‹ค.
289
+
290
+ 1. TaskGet ํ›„ TaskUpdate(status: in_progress, owner: ๋„ˆ์˜ ์ด๋ฆ„)๋กœ claim
291
+ 2. ๋„๊ตฌ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด ์ž‘์—… ์ˆ˜ํ–‰
292
+ 3. ์„ฑ๊ณต ์‹œ TaskUpdate(status: completed, metadata: {result: 'success'}) + SendMessage(to: team-lead)
293
+ 4. ์‹คํŒจ ์‹œ TaskUpdate(status: completed, metadata: {result: 'failed', error: '์—๋Ÿฌ ์š”์•ฝ'}) + SendMessage(to: team-lead)
294
+
295
+ ์ค‘์š”: status๋Š” 'completed'๋งŒ ์‚ฌ์šฉ. 'failed'๋Š” API ๋ฏธ์ง€์›. ์‹คํŒจ ์—ฌ๋ถ€๋Š” metadata.result๋กœ ๊ตฌ๋ถ„.
296
+ ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ TaskUpdate + SendMessage ํ›„ ๋ฐ˜๋“œ์‹œ ์ข…๋ฃŒํ•˜๋ผ."
297
+ })
298
+ ```
299
+
300
+ #### Step 3e: ์‚ฌ์šฉ์ž ์•ˆ๋‚ด
301
+
302
+ ```
303
+ "ํŒ€ '{teamName}' ์ƒ์„ฑ ์™„๋ฃŒ.
304
+ Codex/Gemini ์›Œ์ปค๊ฐ€ ์Šฌ๋ฆผ ๋ž˜ํผ Agent๋กœ ๋„ค๋น„๊ฒŒ์ด์…˜์— ๋“ฑ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
305
+ Shift+Down์œผ๋กœ ๋‹ค์Œ ์›Œ์ปค๋กœ ์ „ํ™˜ (๋งˆ์ง€๋ง‰โ†’๋ฆฌ๋“œ wrap). Shift+Tab์œผ๋กœ ์ด์ „ ์›Œ์ปค ์ „ํ™˜."
306
+ ```
307
+
308
+ ### Phase 3.5โ€“3.7: Verify/Fix Loop (`--thorough` ์ „์šฉ)
309
+
310
+ > `--quick`(๊ธฐ๋ณธ) ๋ชจ๋“œ์—์„œ๋Š” ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  Phase 4๋กœ ์งํ–‰ํ•œ๋‹ค.
311
+ > `--thorough` ๋ชจ๋“œ์—์„œ๋งŒ ์‹คํ–‰๋œ๋‹ค.
312
+
313
+ ```
314
+ Phase 3.5: Verify (Codex review)
315
+ 1. pipeline advance: exec โ†’ verify
316
+ 2. Codex verifier๋กœ ๊ฒฐ๊ณผ ๊ฒ€์ฆ:
317
+ bash ~/.claude/scripts/tfx-route.sh verifier "๊ฒฐ๊ณผ ๊ฒ€์ฆ: ${task}" review
318
+ โ€” verifier๋Š” Codex --profile thorough review๋กœ ์‹คํ–‰๋จ
319
+ 3. ๊ฒ€์ฆ ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ artifact์— ์ €์žฅ:
320
+ pipeline.setArtifact('verify_report', verifyOutputPath)
321
+ 4. ํ†ต๊ณผ โ†’ pipeline advance: verify โ†’ complete โ†’ Phase 5 (cleanup)
322
+ 5. ์‹คํŒจ โ†’ Phase 3.6
323
+
324
+ Phase 3.6: Fix (Codex executor, max 3ํšŒ)
325
+ 1. pipeline advance: verify โ†’ fix
326
+ โ€” fix_attempt ์ž๋™ ์ฆ๊ฐ€, fix_max(3) ์ดˆ๊ณผ ์‹œ ์ „์ด ๊ฑฐ๋ถ€
327
+ 2. fix_attempt > fix_max โ†’ Phase 3.7 (ralph loop) ๋˜๋Š” failed ๋ณด๊ณ  โ†’ Phase 5
328
+ 3. Codex executor๋กœ ์‹คํŒจ ํ•ญ๋ชฉ ์ˆ˜์ •:
329
+ bash ~/.claude/scripts/tfx-route.sh executor "์‹คํŒจ ํ•ญ๋ชฉ ์ˆ˜์ •: ${failedItems}" implement
330
+ 4. pipeline advance: fix โ†’ exec (์žฌ์‹คํ–‰)
331
+ 5. โ†’ Phase 3 (exec) โ†’ Phase 3.5 (verify) ์žฌ์‹คํ–‰
332
+
333
+ Phase 3.7: Ralph Loop (fix 3ํšŒ ์ดˆ๊ณผ ์‹œ)
334
+ 1. ralph_iteration ์ฆ๊ฐ€ (pipeline.restart())
335
+ 2. ralph_iteration > ralph_max(10) โ†’ ์ตœ์ข… failed โ†’ Phase 5
336
+ 3. fix_attempt ๋ฆฌ์…‹, ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ์žฌ์‹œ์ž‘ (Phase 2.5 plan๋ถ€ํ„ฐ)
337
+ ```
338
+
339
+ ### Phase 4: ๊ฒฐ๊ณผ ์ˆ˜์ง‘ (truth source = team_task_list)
340
+
341
+ 1. ๋ฆฌ๋“œ๊ฐ€ Step 3c์—์„œ ์‹คํ–‰ํ•œ ๋ชจ๋“  ๋ฐฑ๊ทธ๋ผ์šด๋“œ Bash ํ”„๋กœ์„ธ์Šค ์™„๋ฃŒ๋ฅผ ๋Œ€๊ธฐํ•œ๋‹ค.
342
+ 2. `team_task_list`๋ฅผ ์ตœ์ข… truth source๋กœ ์กฐํšŒํ•œ๋‹ค.
343
+
344
+ ```bash
345
+ Bash("node hub/bridge.mjs team-task-list --team ${teamName}")
346
+ ```
347
+
348
+ 3. `completed` ์ƒํƒœ์ด์ง€๋งŒ `metadata.result == "failed"`์ธ task๊ฐ€ ์žˆ์œผ๋ฉด Claude fallback์œผ๋กœ ์žฌ์‹œ๋„ํ•œ๋‹ค.
349
+ 4. ์žฌ์‹œ๋„ ํ›„ ๋‹ค์‹œ `team_task_list`๋ฅผ ์กฐํšŒํ•ด ์ตœ์ข… ์ƒํƒœ๋ฅผ ํ™•์ •ํ•œ๋‹ค.
350
+ 5. `send-message`์™€ `result(task.result)` ์ด๋ฒคํŠธ๋Š” ์ง„ํ–‰ ๊ด€์ฐฐ ์ฑ„๋„๋กœ ์‚ฌ์šฉํ•˜๊ณ , ์ตœ์ข… ํŒ์ •์€ ๋ฐ˜๋“œ์‹œ `team_task_list` ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.
351
+ 6. Hub `task-update`์—์„œ๋Š” `status: "failed"`๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค (Hub API๋Š” ์ž์ฒด ์ƒํƒœ ๊ด€๋ฆฌ). Claude Code `TaskUpdate`๋งŒ `"completed"` + `metadata.result`๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.
352
+
353
+ ์ข…ํ•ฉ ๋ณด๊ณ ์„œ ์˜ˆ์‹œ:
354
+ ```markdown
355
+ ## tfx-multi ์‹คํ–‰ ๊ฒฐ๊ณผ
356
+
357
+ | # | Worker | CLI | ์ž‘์—… | ์ƒํƒœ |
358
+ |---|--------|-----|------|------|
359
+ | 1 | codex-worker-1 | codex | ์ธ์ฆ ๋ฆฌํŒฉํ„ฐ๋ง | completed |
360
+ | 2 | gemini-worker-1 | gemini | UI ๊ฐœ์„  | completed |
361
+ | 3 | claude-worker-1 | claude | ์‹คํŒจ fallback ์žฌ์‹œ๋„ | completed |
362
+ ```
363
+
364
+ ### Phase 5: ์ •๋ฆฌ (๋ฐ˜๋“œ์‹œ ์‹คํ–‰)
365
+
366
+ > **[ํ•„์ˆ˜] Phase 5๋Š” ์„ฑ๊ณต/์‹คํŒจ์— ๊ด€๊ณ„์—†์ด ๋ฐ˜๋“œ์‹œ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.**
367
+ > ์›Œ์ปค ์‹คํŒจ, Bash ์—๋Ÿฌ, fallback ์‹คํŒจ ๋“ฑ ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋„ TeamDelete๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ฉด ์•ˆ ๋œ๋‹ค.
368
+ > TeamDelete๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด `~/.claude/teams/{teamName}/`์ด ์ž”์กดํ•˜์—ฌ OMC hook์ด "team executing"์„
369
+ > ๋ฐ˜๋ณต ๊ฐ์ง€ํ•˜๋Š” ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์ง„๋‹ค.
370
+
371
+ ์ •๋ฆฌ ์ˆœ์„œ:
372
+ 1. ๋ชจ๋“  ๋ฐฑ๊ทธ๋ผ์šด๋“œ Agent ์™„๋ฃŒ๋ฅผ **์ตœ๋Œ€ 30์ดˆ** ๋Œ€๊ธฐํ•œ๋‹ค.
373
+ 2. 30์ดˆ ํ›„์—๋„ ๋ฏธ์™„๋ฃŒ Agent๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ€๊ธฐ๋ฅผ ์ค‘๋‹จํ•˜๊ณ  ์ •๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
374
+ 3. `TeamDelete()`๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
375
+ 4. TeamDelete๊ฐ€ ์‹คํŒจํ•˜๋ฉด (ํ™œ์„ฑ ๋ฉค๋ฒ„ ์ž”์กด) `forceCleanupTeam(teamName)`์œผ๋กœ ๊ฐ•์ œ ์ •๋ฆฌํ•œ๋‹ค.
376
+ ์ด๊ฒƒ๋„ ์‹คํŒจํ•˜๋ฉด ์ˆ˜๋™ ์ •๋ฆฌ๋ฅผ ์•ˆ๋‚ดํ•œ๋‹ค:
377
+ ```
378
+ rm -rf ~/.claude/teams/{teamName}/ ~/.claude/tasks/{teamName}/
379
+ ```
380
+ 5. ์ข…ํ•ฉ ๋ณด๊ณ ์„œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
381
+
382
+ ### Phase 3-mux: ๋ ˆ๊ฑฐ์‹œ psmux/tmux ๋ชจ๋“œ
383
+ `--tmux` ๋˜๋Š” `--psmux` ํ”Œ๋ž˜๊ทธ ์‹œ pane ๊ธฐ๋ฐ˜ ์‹คํ–‰. `detectMultiplexer()`๊ฐ€ psmux โ†’ tmux โ†’ wsl-tmux โ†’ git-bash-tmux ์ˆœ์œผ๋กœ ์ž๋™ ๊ฐ์ง€.
384
+ Windows์—์„œ๋Š” **psmux๊ฐ€ 1์ˆœ์œ„** (ADR-001).
385
+
386
+ Bash("node {PKG_ROOT}/bin/triflux.mjs multi --no-attach --agents {agents} \\\"{task}\\\"")
387
+ ์ดํ›„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์„ธ์…˜ ์—ฐ๊ฒฐ ์•ˆ๋‚ด.
388
+
389
+ ## ์—์ด์ „ํŠธ ๋งคํ•‘
390
+ > ์—์ด์ „ํŠธ ๋งคํ•‘: codex/gemini โ†’ tfx-route.sh, claude โ†’ Agent(subagent_type) ์ง์ ‘ ์‹คํ–‰. ์ƒ์„ธ๋Š” Phase 3c/3d ์ฐธ์กฐ.
391
+
392
+ ## ์ „์ œ ์กฐ๊ฑด
393
+
394
+ - **CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1** โ€” settings.json env์— ์„ค์ • (`tfx setup`์ด ์ž๋™ ์„ค์ •)
395
+ - **codex/gemini CLI** โ€” ํ•ด๋‹น ์—์ด์ „ํŠธ ์‚ฌ์šฉ ์‹œ
396
+ - **tfx setup** โ€” tfx-route.sh ๋™๊ธฐํ™” + AGENT_TEAMS ์ž๋™ ์„ค์ • (์‚ฌ์ „ ์‹คํ–‰ ๊ถŒ์žฅ)
397
+ - **Hub ํ™œ์„ฑ ์ƒํƒœ** โ€” Named Pipe(`\\.\pipe\triflux-{pid}`) ์šฐ์„ , HTTP `127.0.0.1:27888` fallback. `bridge.mjs`๊ฐ€ ์ž๋™ ์„ ํƒ. Hub ๋ฏธ์‹คํ–‰ ์‹œ nativeProxy fallback.
398
+ - **๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ** โ€” psmux(Windows 1์ˆœ์œ„) / tmux / wsl-tmux / git-bash-tmux ์ž๋™ ๊ฐ์ง€ (`--tmux`/`--psmux` ๋ชจ๋“œ)
399
+ - **์ถœ๋ ฅ ์ •์ฑ…** โ€” preflight๋Š” ๋น„๋™๊ธฐ/์š”์•ฝ ์ถœ๋ ฅ์ด ๊ธฐ๋ณธ์ด๋ฉฐ, ์‹คํŒจ ์‹œ์—๋งŒ ์ƒ์„ธ ์ถœ๋ ฅ
400
+
401
+ ## ์—๋Ÿฌ ์ฒ˜๋ฆฌ
402
+
403
+ | ์—๋Ÿฌ | ์ฒ˜๋ฆฌ |
404
+ |------|------|
405
+ | TeamCreate ์‹คํŒจ / Agent Teams ๋น„ํ™œ์„ฑ | `--psmux/--tmux` ํด๋ฐฑ (Phase 3-mux๋กœ ์ „ํ™˜) |
406
+ | tfx-route.sh ์—†์Œ | `tfx setup` ์‹คํ–‰ ์•ˆ๋‚ด |
407
+ | CLI ๋ฏธ์„ค์น˜ (codex/gemini) | ํ•ด๋‹น ์„œ๋ธŒํƒœ์Šคํฌ๋ฅผ claude ์›Œ์ปค๋กœ ๋Œ€์ฒด |
408
+ | Codex ๋ถ„๋ฅ˜ ์‹คํŒจ | Opus ์ง์ ‘ ๋ถ„๋ฅ˜+๋ถ„ํ•ด |
409
+ | Bash ์‹คํ–‰ ์‹คํŒจ (Lead) | task๋ฅผ `completed` + `metadata.result: "failed"`๋กœ ๋งˆํ‚น ํ›„ Claude fallback ์žฌ์‹œ๋„ |
410
+ | `team_task_list` ์กฐํšŒ ์‹คํŒจ | Named Pipe/stdout๋กœ ์ž„์‹œ ๊ด€์ฐฐ ํ›„ Hub ๋ณต๊ตฌ ๋’ค ์ƒํƒœ ์žฌ๊ฒ€์ฆ |
411
+ | claude fallback ์‹คํŒจ | ์‹คํŒจ task ๋ชฉ๋ก/์›์ธ ์š”์•ฝ ํ›„ ์‚ฌ์šฉ์ž ์Šน์ธ ๋Œ€๊ธฐ |
412
+
413
+ > **[์ค‘์š”] TaskUpdate ์ƒํƒœ๊ฐ’ ์ œ์•ฝ:** Claude Code API๋Š” `pending`, `in_progress`, `completed`, `deleted`๋งŒ ์ง€์›ํ•œ๋‹ค.
414
+ > `failed` ์ƒํƒœ๋Š” ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ ˆ๋Œ€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ๋ผ. ์‹คํŒจ๋Š” `status: "completed"` + `metadata: {result: "failed"}`๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
415
+ > Hub API(`bridge.mjs team-task-update`)๋Š” ์ž์ฒด ์ƒํƒœ ๊ด€๋ฆฌ์ด๋ฏ€๋กœ `"failed"` ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
416
+
417
+ ## ๊ด€๋ จ
418
+
419
+ | ํ•ญ๋ชฉ | ์„ค๋ช… |
420
+ |------|------|
421
+ | `scripts/tfx-route.sh` | ํŒ€ ํ†ตํ•ฉ ๋ผ์šฐํ„ฐ (`TFX_TEAM_*`, task claim/complete, send-message, Named Pipe/HTTP bridge) |
422
+ | `hub/team/native.mjs` | Native Teams ๋ž˜ํผ (ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ, ํŒ€ ์„ค์ • ๋นŒ๋”) |
423
+ | `hub/team/cli/index.mjs` | tmux ํŒ€ CLI ๋ผ์šฐํ„ฐ (`hub/team/cli/` ์„œ๋ธŒ์ปค๋งจ๋“œ ๊ตฌ์กฐ) |
424
+ | `hub/pipeline/` | ํŒŒ์ดํ”„๋ผ์ธ ์ƒํƒœ ๊ธฐ๊ณ„ (transitions, state, index) โ€” `--thorough` ๋ชจ๋“œ |
425
+ | `tfx-auto` | one-shot ์‹คํ–‰ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ (๋ณ‘ํ–‰ ์œ ์ง€) |
426
+ | `tfx-hub` | MCP ๋ฉ”์‹œ์ง€ ๋ฒ„์Šค ๊ด€๋ฆฌ (tmux ๋ชจ๋“œ์šฉ) |
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: tfx-setup
3
+ description: triflux ์ดˆ๊ธฐ ์„ค์ • ๋ฐ ์ง„๋‹จ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
4
+ triggers:
5
+ - tfx-setup
6
+ argument-hint: "[doctor]"
7
+ ---
8
+
9
+ # tfx-setup โ€” triflux ์ดˆ๊ธฐ ์„ค์ • ๋ฐ ์ง„๋‹จ
10
+
11
+ > ์„ค์น˜ ํ›„ ์ตœ์ดˆ 1ํšŒ ์‹คํ–‰ ๊ถŒ์žฅ. HUD ์„ค์ •, CLI ํ™•์ธ, ์ „์ฒด ์ง„๋‹จ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
12
+
13
+ ## ์‚ฌ์šฉ๋ฒ•
14
+
15
+ ```
16
+ /tfx-setup
17
+ /tfx-setup doctor โ† ์ง„๋‹จ๋งŒ ์‹คํ–‰
18
+ ```
19
+
20
+ ## ๋™์ž‘
21
+
22
+ ### ๊ธฐ๋ณธ ๋ชจ๋“œ (`/tfx-setup`)
23
+
24
+ 1. **ํŒŒ์ผ ๋™๊ธฐํ™”** โ€” `triflux setup` ์‹คํ–‰
25
+ 2. **HUD ์„ค์ •** โ€” `settings.json`์— statusLine ์ž๋™ ๋“ฑ๋ก
26
+ 3. **CLI ์ง„๋‹จ** โ€” `triflux doctor` ์‹คํ–‰
27
+ 4. **๊ฒฐ๊ณผ ๋ณด๊ณ ** โ€” ์„ค์ • ์ƒํƒœ ์š”์•ฝ
28
+
29
+ ### ์ง„๋‹จ ๋ชจ๋“œ (`/tfx-setup doctor`)
30
+
31
+ `triflux doctor`๋งŒ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.
32
+
33
+ ## ์‹คํ–‰ ๋ฐฉ๋ฒ•
34
+
35
+ ### Step 1: ํŒŒ์ผ ๋™๊ธฐํ™”
36
+
37
+ ```bash
38
+ Bash("triflux setup")
39
+ ```
40
+
41
+ ### Step 2: HUD ์„ค์ • ํ™•์ธ ๋ฐ ์ ์šฉ
42
+
43
+ `~/.claude/settings.json`์„ ์ฝ์–ด `statusLine` ์„ค์ •์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
44
+
45
+ **statusLine์ด ์—†๊ฑฐ๋‚˜ hud-qos-status.mjs๋ฅผ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๋Š” ๊ฒฝ์šฐ:**
46
+
47
+ ```javascript
48
+ // settings.json์— ์ถ”๊ฐ€ํ•  statusLine ์„ค์ •
49
+ {
50
+ "statusLine": {
51
+ "type": "command",
52
+ "command": "\"<NODE_PATH>\" \"<HOME>/.claude/hud/hud-qos-status.mjs\""
53
+ }
54
+ }
55
+ ```
56
+
57
+ - `<NODE_PATH>`: `node -e "console.log(process.execPath)"` ๊ฒฐ๊ณผ
58
+ - `<HOME>`: `~` ๋˜๋Š” ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ ์ ˆ๋Œ€ ๊ฒฝ๋กœ
59
+ - Windows: ๊ฒฝ๋กœ์— ๊ณต๋ฐฑ์ด ์žˆ์œผ๋ฉด ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๊ธฐ
60
+ - **๊ธฐ์กด statusLine์ด ์žˆ์œผ๋ฉด ๋ฎ์–ด์“ฐ๊ธฐ ์ „ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™•์ธ**
61
+
62
+ Read ๋„๊ตฌ๋กœ `~/.claude/settings.json`์„ ์ฝ๊ณ , Edit ๋„๊ตฌ๋กœ statusLine์„ ์ถ”๊ฐ€/์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
63
+
64
+ ### Step 3: CLI ์ง„๋‹จ
65
+
66
+ ```bash
67
+ Bash("triflux doctor")
68
+ ```
69
+
70
+ ### Step 4: ๊ฒฐ๊ณผ ๋ณด๊ณ 
71
+
72
+ ```markdown
73
+ ## tfx-setup ์™„๋ฃŒ
74
+
75
+ | ํ•ญ๋ชฉ | ์ƒํƒœ |
76
+ |------|------|
77
+ | tfx-route.sh | โœ… v2.0 |
78
+ | HUD (hud-qos-status.mjs) | โœ… v1.7 |
79
+ | HUD ์„ค์ • (settings.json) | โœ… statusLine ๋“ฑ๋ก๋จ |
80
+ | Codex CLI | โœ… / โš ๏ธ ๋ฏธ์„ค์น˜ (์„ ํƒ) |
81
+ | Gemini CLI | โœ… / โš ๏ธ ๋ฏธ์„ค์น˜ (์„ ํƒ) |
82
+ | ์Šคํ‚ฌ | โœ… N๊ฐœ ์„ค์น˜๋จ |
83
+
84
+ ### ๋‹ค์Œ ๋‹จ๊ณ„
85
+ - Codex ๋ฏธ์„ค์น˜ ์‹œ: `npm install -g @openai/codex`
86
+ - Gemini ๋ฏธ์„ค์น˜ ์‹œ: `npm install -g @google/gemini-cli`
87
+ - ์„ธ์…˜ ์žฌ์‹œ์ž‘ํ•˜๋ฉด HUD๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค
88
+ ```
89
+
90
+ ## ์—๋Ÿฌ ์ฒ˜๋ฆฌ
91
+
92
+ | ์ƒํ™ฉ | ์ฒ˜๋ฆฌ |
93
+ |------|------|
94
+ | `triflux: command not found` | `npm install -g triflux` ์•ˆ๋‚ด |
95
+ | `settings.json` ํŒŒ์‹ฑ ์‹คํŒจ | ๋ฐฑ์—… ์ƒ์„ฑ ํ›„ ์ƒˆ๋กœ ์ž‘์„ฑ |
96
+ | ๊ธฐ์กด statusLine์ด ๋‹ค๋ฅธ HUD | ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฎ์–ด์“ธ์ง€ ํ™•์ธ |
97
+ | node.exe ๊ฒฝ๋กœ์— ๊ณต๋ฐฑ | ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๊ธฐ |
98
+
99
+ ## Troubleshooting
100
+
101
+ ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ `/tfx-doctor` ์‹คํ–‰. (`--fix` ์ž๋™ ์ˆ˜์ •, `--reset` ์บ์‹œ ์ดˆ๊ธฐํ™”)
@@ -1,34 +0,0 @@
1
- {
2
- "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
3
- "name": "triflux",
4
- "description": "CLI-first multi-model orchestrator โ€” Codex/Gemini/Claude routing with DAG execution, auto-triage, and cost optimization",
5
- "owner": {
6
- "name": "tellang"
7
- },
8
- "plugins": [
9
- {
10
- "name": "triflux",
11
- "description": "CLI-first multi-model orchestrator for Claude Code. Routes tasks to Codex, Gemini, and Claude CLIs with automatic triage, DAG-based parallel execution, headless psmux sessions, and cost-optimized routing. Includes 41 skills, HUD status bar, hook orchestrator, and shell-based CLI routing.",
12
- "version": "10.3.2",
13
- "author": {
14
- "name": "tellang"
15
- },
16
- "source": {
17
- "source": "npm",
18
- "package": "triflux"
19
- },
20
- "category": "productivity",
21
- "homepage": "https://github.com/tellang/triflux",
22
- "tags": [
23
- "multi-model",
24
- "codex",
25
- "gemini",
26
- "cli-routing",
27
- "orchestration",
28
- "cost-optimization",
29
- "dag-execution"
30
- ]
31
- }
32
- ],
33
- "version": "10.3.2"
34
- }
@@ -1,22 +0,0 @@
1
- {
2
- "name": "triflux",
3
- "version": "10.3.2",
4
- "description": "CLI-first multi-model orchestrator for Claude Code โ€” route tasks to Codex, Gemini, and Claude",
5
- "author": {
6
- "name": "tellang"
7
- },
8
- "repository": "https://github.com/tellang/triflux",
9
- "homepage": "https://github.com/tellang/triflux",
10
- "license": "MIT",
11
- "keywords": [
12
- "claude-code",
13
- "plugin",
14
- "codex",
15
- "gemini",
16
- "cli-routing",
17
- "orchestration",
18
- "multi-model"
19
- ],
20
- "skills": "./skills/",
21
- "hooks": "./hooks/hooks.json"
22
- }
@@ -1,29 +0,0 @@
1
- {
2
- "$schema": "mcp-registry-schema",
3
- "version": 1,
4
- "description": "MCP ์„œ๋ฒ„ ์ค‘์•™ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ โ€” ์ง„์‹ค์˜ ์›์ฒœ",
5
- "defaults": {
6
- "transport": "hub-url",
7
- "hub_base": "http://127.0.0.1:27888"
8
- },
9
- "servers": {
10
- "tfx-hub": {
11
- "transport": "hub-url",
12
- "url": "http://127.0.0.1:27888/mcp",
13
- "safe": true,
14
- "targets": ["claude", "gemini", "codex"],
15
- "description": "triflux Hub MCP ์„œ๋ฒ„"
16
- }
17
- },
18
- "policies": {
19
- "stdio_action": "replace-with-hub",
20
- "unknown_server_action": "warn",
21
- "watched_paths": [
22
- "~/.gemini/settings.json",
23
- "~/.codex/config.toml",
24
- "~/.claude/settings.json",
25
- "~/.claude/settings.local.json",
26
- ".mcp.json"
27
- ]
28
- }
29
- }