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.
- package/CLAUDE.md +193 -0
- package/LICENSE +21 -21
- package/hooks/hook-registry.json +256 -256
- package/hub/adaptive-inject.mjs +1 -1
- package/hub/assign-callbacks.mjs +120 -120
- package/hub/delegator/index.mjs +14 -14
- package/hub/delegator/tool-definitions.mjs +35 -35
- package/hub/hitl.mjs +143 -143
- package/hub/lib/path-utils.mjs +167 -0
- package/hub/router.mjs +791 -791
- package/hub/session-fingerprint.mjs +1 -1
- package/hub/team/cli/commands/attach.mjs +37 -37
- package/hub/team/cli/commands/debug.mjs +74 -74
- package/hub/team/cli/commands/focus.mjs +53 -53
- package/hub/team/cli/commands/list.mjs +24 -24
- package/hub/team/cli/commands/start/start-in-process.mjs +40 -40
- package/hub/team/cli/commands/start/start-mux.mjs +73 -73
- package/hub/team/cli/commands/start/start-wt.mjs +69 -69
- package/hub/team/cli/commands/tasks.mjs +13 -13
- package/hub/team/cli/render.mjs +30 -30
- package/hub/team/cli/services/attach-fallback.mjs +54 -54
- package/hub/team/cli/services/member-selector.mjs +30 -30
- package/hub/team/cli/services/native-control.mjs +116 -116
- package/hub/team/cli/services/task-model.mjs +30 -30
- package/hub/team/notify.mjs +1 -1
- package/hub/team/orchestrator.mjs +161 -161
- package/hub/team/runtime-strategy.mjs +74 -0
- package/hub/team/session.mjs +611 -611
- package/hub/team/shared.mjs +13 -13
- package/hub/team/worktree-lifecycle.mjs +61 -2
- package/hub/tray.mjs +368 -368
- package/hub/workers/codex-mcp.mjs +507 -507
- package/hub/workers/factory.mjs +21 -21
- package/hud/hud-qos-status.mjs +17 -3
- package/hud/mission-board.mjs +53 -0
- package/hud/providers/claude.mjs +95 -22
- package/hud/renderers.mjs +39 -5
- package/package.json +21 -55
- package/references/hosts.json +33 -0
- package/scripts/completions/tfx.bash +47 -47
- package/scripts/completions/tfx.fish +44 -44
- package/scripts/completions/tfx.zsh +83 -83
- package/scripts/demo.mjs +169 -0
- package/scripts/headless-guard.mjs +16 -4
- package/scripts/hub-ensure.mjs +120 -120
- package/scripts/keyword-detector.mjs +272 -272
- package/scripts/keyword-rules-expander.mjs +521 -521
- package/scripts/lib/mcp-server-catalog.mjs +118 -118
- package/scripts/lib/skill-state.mjs +220 -0
- package/scripts/notion-read.mjs +553 -553
- package/scripts/test-tfx-route-no-claude-native.mjs +57 -57
- package/scripts/tfx-batch-stats.mjs +96 -96
- package/skills/.omc/state/agent-replay-8f0e10a9-9693-4410-96f5-a6b07e8ed995.jsonl +1 -0
- package/skills/.omc/state/idle-notif-cooldown.json +3 -0
- package/skills/.omc/state/last-tool-error.json +7 -0
- package/skills/.omc/state/subagent-tracking.json +7 -0
- package/skills/tfx-remote-spawn/references/hosts.json +16 -0
- package/skills/tfx-workspace/async-tests/run-tests.sh +203 -0
- package/skills/tfx-workspace/evals/evals.json +79 -0
- package/skills/tfx-workspace/iteration-1/benchmark.json +162 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/eval_metadata.json +11 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/grading.json +9 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/outputs/analysis.md +154 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/grading.json +9 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/outputs/analysis.md +126 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/eval_metadata.json +11 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/grading.json +9 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/outputs/analysis.md +119 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/grading.json +9 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/outputs/analysis.md +115 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/eval_metadata.json +10 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/grading.json +8 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/outputs/analysis.md +86 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/grading.json +8 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/outputs/analysis.md +81 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/eval_metadata.json +12 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/outputs/analysis.md +316 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/outputs/analysis.md +352 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/review.html +1325 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/eval_metadata.json +12 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/outputs/analysis.md +97 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/outputs/analysis.md +94 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/eval_metadata.json +12 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/outputs/analysis.md +209 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/outputs/analysis.md +193 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-2/benchmark.json +62 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/eval_metadata.json +13 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/grading.json +11 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/outputs/analysis.md +382 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/grading.json +11 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/outputs/analysis.md +333 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-2/review.html +1325 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-auto/SKILL.md +217 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-auto-codex/SKILL.md +77 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-codex/SKILL.md +65 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-doctor/SKILL.md +94 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-gemini/SKILL.md +82 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-hub/SKILL.md +133 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-multi/SKILL.md +426 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-setup/SKILL.md +101 -0
- package/.claude-plugin/marketplace.json +0 -34
- package/.claude-plugin/plugin.json +0 -22
- package/config/mcp-registry.json +0 -29
- package/tui/codex-profile.mjs +0 -402
- package/tui/core.mjs +0 -236
- package/tui/doctor.mjs +0 -328
- package/tui/gemini-profile.mjs +0 -254
- package/tui/monitor-data.mjs +0 -148
- package/tui/monitor.mjs +0 -295
- 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
|
-
}
|
package/config/mcp-registry.json
DELETED
|
@@ -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
|
-
}
|