triflux 10.48.0 → 10.49.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 (60) hide show
  1. package/README.ko.md +173 -348
  2. package/README.md +168 -364
  3. package/bin/triflux.mjs +9 -39
  4. package/hooks/hook-orchestrator.mjs +1 -1
  5. package/hooks/keyword-rules.json +147 -349
  6. package/hub/server.mjs +0 -122
  7. package/package.json +2 -2
  8. package/scripts/__tests__/keyword-detector.test.mjs +47 -50
  9. package/scripts/__tests__/setup-cleanup-stale-skills.test.mjs +110 -3
  10. package/scripts/__tests__/skill-surface.test.mjs +81 -0
  11. package/scripts/__tests__/tfx-route-node-entry.test.mjs +6 -4
  12. package/scripts/completions/tfx.bash +2 -2
  13. package/scripts/completions/tfx.fish +2 -3
  14. package/scripts/completions/tfx.zsh +0 -1
  15. package/scripts/keyword-detector.mjs +175 -63
  16. package/scripts/lib/keyword-rules.mjs +83 -6
  17. package/scripts/pack.mjs +0 -6
  18. package/scripts/setup.mjs +240 -4
  19. package/scripts/tfx-route.mjs +1 -1
  20. package/scripts/tfx-route.sh +55 -10
  21. package/skills/tfx-auto/SKILL.md +9 -2
  22. package/skills/tfx-doctor/SKILL.md +46 -3
  23. package/skills/tfx-doctor/skill.json +2 -2
  24. package/skills/tfx-interview/SKILL.md +64 -2
  25. package/skills/tfx-interview/skill.json +2 -2
  26. package/skills/tfx-review/SKILL.md +11 -1
  27. package/skills/tfx-review/skill.json +1 -1
  28. package/skills/tfx-setup/SKILL.md +34 -8
  29. package/skills/tfx-setup/skill.json +2 -2
  30. package/skills/tfx-wt/SKILL.md +4 -0
  31. package/docs/assets/architecture.svg +0 -211
  32. package/hub/mac-focus.mjs +0 -94
  33. package/hub/mac-tray.swift +0 -144
  34. package/hub/public/tray-icon.ico +0 -0
  35. package/hub/public/tray-icon.png +0 -0
  36. package/hub/public/tray.html +0 -756
  37. package/hub/tray-lifecycle.mjs +0 -138
  38. package/hub/tray-runtime.mjs +0 -265
  39. package/hub/tray-state.mjs +0 -524
  40. package/hub/tray.mjs +0 -527
  41. package/skills/tfx-analysis/SKILL.md +0 -193
  42. package/skills/tfx-analysis/skill.json +0 -6
  43. package/skills/tfx-find/SKILL.md +0 -125
  44. package/skills/tfx-find/skill.json +0 -6
  45. package/skills/tfx-forge/SKILL.md +0 -177
  46. package/skills/tfx-forge/skill.json +0 -5
  47. package/skills/tfx-goal-clarify/SKILL.md +0 -373
  48. package/skills/tfx-goal-clarify/skill.json +0 -5
  49. package/skills/tfx-hooks/SKILL.md +0 -212
  50. package/skills/tfx-hooks/skill.json +0 -5
  51. package/skills/tfx-hub/SKILL.md +0 -205
  52. package/skills/tfx-hub/skill.json +0 -5
  53. package/skills/tfx-index/SKILL.md +0 -146
  54. package/skills/tfx-index/skill.json +0 -5
  55. package/skills/tfx-prune/SKILL.md +0 -196
  56. package/skills/tfx-prune/skill.json +0 -6
  57. package/skills/tfx-qa/SKILL.md +0 -162
  58. package/skills/tfx-qa/skill.json +0 -6
  59. package/skills/tfx-ralph/SKILL.md +0 -25
  60. package/skills/tfx-ralph/skill.json +0 -9
package/README.ko.md CHANGED
@@ -8,20 +8,13 @@
8
8
  </picture>
9
9
  </p>
10
10
 
11
- <h3 align="center">Claude Code, Codex, Antigravity를 위한 CLI-first 멀티 모델 오케스트레이션</h3>
12
-
13
- <p align="center">
14
- 작업 라우팅, 에이전트 조율, 로컬/원격 팀 실행, Codex/Antigravity/Claude 실행 경로를<br>
15
- 감사 가능한 경로로 묶는 단일 진입점입니다.
16
- </p>
11
+ <h3 align="center">Claude Code · Codex · Antigravity를 잇는 CLI 중심 멀티모델 오케스트레이터</h3>
17
12
 
18
13
  <p align="center">
19
14
  <a href="https://www.npmjs.com/package/triflux"><img src="https://img.shields.io/npm/v/triflux?style=flat-square&color=FFAF00&label=npm" alt="npm version"></a>
20
15
  <a href="https://www.npmjs.com/package/triflux"><img src="https://img.shields.io/npm/dm/triflux?style=flat-square&color=F5C242" alt="npm downloads"></a>
21
16
  <a href="https://github.com/tellang/triflux/stargazers"><img src="https://img.shields.io/github/stars/tellang/triflux?style=flat-square&color=FFAF00" alt="GitHub stars"></a>
22
- <img src="https://img.shields.io/badge/skill_files-34-F5C242?style=flat-square" alt="34 skill files">
23
- <sub>deprecated 호환 alias 11개는 전면 API가 아닙니다</sub>
24
- <img src="https://img.shields.io/badge/node-%3E%3D18-374151?style=flat-square" alt="Node >= 18">
17
+ <img src="https://img.shields.io/badge/node-%3E%3D20-374151?style=flat-square" alt="Node >= 20">
25
18
  <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-374151?style=flat-square" alt="License: MIT"></a>
26
19
  </p>
27
20
 
@@ -29,387 +22,219 @@
29
22
  <img alt="triflux demo" src="docs/assets/demo-multi.gif" width="680">
30
23
  </p>
31
24
 
32
- <p align="center">
33
- <a href="#빠른-시작">빠른 시작</a> &middot;
34
- <a href="#현재-표면">현재 표면</a> &middot;
35
- <a href="#권장-워크플로우">권장 워크플로우</a> &middot;
36
- <a href="#아키텍처">아키텍처</a> &middot;
37
- <a href="#운영">운영</a> &middot;
38
- <a href="#보안과-guard">보안</a>
39
- </p>
40
-
41
- ---
42
-
43
- ## triflux란?
44
-
45
- triflux는 **Claude Code plugin + npm CLI**입니다. Claude, Codex, Antigravity를
46
- 오가며 AI 코딩 작업을 라우팅합니다. 임의 셸 명령이나 오래된 skill alias가
47
- 제어 표면이 되지 않도록 현재 진입점을 좁혔습니다.
25
+ triflux는 코딩 작업을 Claude, Codex, Antigravity 사이에서 나눠 맡기는 Claude Code 플러그인이자
26
+ npm CLI다. `/tfx-auto`에 할 일을 한 번 적으면 triflux가 CLI 레인(기본은 Codex)을 고르고, 임의
27
+ 셸 명령 대신 관리된 경로로 실행한다. 필요하면 로컬 병렬 워커, worktree로 격리한 스웜,
28
+ Claude↔Codex 라이브 세션, 원격 호스트로 작업을 나눈다. 설치, 진단, 로컬 Hub, 팀 실행은 `tfx`
29
+ 셸 CLI가 맡는다.
48
30
 
49
- 현재 설계는 예전 README보다 단순합니다.
50
-
51
- - **`/tfx-auto`가 Claude Code skill의 표준 front door입니다.** quick/deep/consensus/parallel/retry 동작은 플래그로 표현합니다.
52
- - **`tfx`는 셸 CLI입니다.** setup, doctor, Hub, MCP, team/swarm, handoff 같은 운영 작업을 담당합니다.
53
- - **호환 alias는 남아 있지만 전면 API가 아닙니다.** 마이그레이션 표는 [`docs/legacy-skill-aliases.md`](https://github.com/tellang/triflux/blob/main/docs/legacy-skill-aliases.md)로 분리했습니다.
54
- - **호스트 로컬 Codex harness는 패키지 범위 밖입니다.** 예를 들어 `~/.codex/skills/tfx-harness`는 특정 머신에서 워크플로우를 추천할 수 있지만, 이 저장소/npm/Claude plugin에 포함되지 않습니다.
55
-
56
- ---
57
-
58
- ## 빠른 시작
59
-
60
- ### 1. 설치
61
-
62
- Claude Code plugin:
63
-
64
- ```text
65
- /plugin marketplace add tellang/triflux
66
- /plugin install triflux@tellang
67
- ```
68
-
69
- npm:
31
+ ## 설치
70
32
 
71
33
  ```bash
72
- npm install -g triflux
34
+ npm install -g triflux # postinstall이 setup 스크립트를 실행한다
35
+ tfx doctor # CLI, tmux, Hub, MCP, 프로필, 스킬 점검
73
36
  ```
74
37
 
75
- 터미널에서 setup/doctor를 실행합니다.
38
+ 이 저장소의 마켓플레이스에서 Claude Code 플러그인으로 설치할 수도 있다.
76
39
 
77
40
  ```bash
78
- tfx setup
79
- tfx doctor
41
+ claude plugin marketplace add tellang/triflux
42
+ claude plugin install triflux@triflux
80
43
  ```
81
44
 
82
- 자동화에서는 `tfx doctor --json`을 사용하세요.
45
+ 흔한 설정 어긋남은 `tfx doctor --fix`로 고친다. 자동화에서는 `tfx doctor --json`을 쓴다.
83
46
 
84
- ### 2. 현재 권장 front door 사용
85
-
86
- Claude Code slash skill:
47
+ ## 처음 써 보기
87
48
 
88
49
  ```text
89
- /tfx-auto "이 변경 리뷰해줘" --mode consensus
90
- /tfx-auto "인증 플로우 구현하고 테스트까지" --mode deep --retry ralph
91
- /tfx-auto "이 PRD를 격리 shard로 나눠 실행" --parallel swarm --mode consensus --isolation worktree
92
- /tfx-remote spawn ryzen5-7600 "보안 리뷰 실행"
93
- /tfx-doctor
94
- ```
95
-
96
- 셸 CLI:
97
-
98
- ```bash
99
- tfx list
100
- tfx hub ensure
101
- tfx mcp list
102
- tfx handoff --target remote --output .omx/handoff.md
103
- tfx swarm preflight docs/prd/example.md --json
104
- tfx codex-team "auth 리팩터링 + 테스트 추가"
50
+ /tfx-auto "깨지는 인증 테스트 고쳐줘"
51
+ /tfx-auto "이 변경에서 신뢰 경계 문제 리뷰해줘" --mode consensus
52
+ /tfx-auto "마이그레이션 끝내고 검증까지" --mode deep --retry ralph --max-iterations 10
105
53
  ```
106
54
 
107
- > deep, consensus, team, swarm 경로는 관련 CLI와 터미널 multiplexer가 필요합니다.
108
- > 먼저 `tfx doctor`를 실행하면 Codex/Antigravity/Claude, psmux/tmux, Hub, MCP,
109
- > profile, stale skill 문제를 한 번에 확인할 수 있습니다.
110
-
111
- ---
55
+ 실행하지 않고 라우팅 판정만 보려면 셸에서 `tfx auto "<작업>" --json`을 실행한다.
112
56
 
113
- ## 현재 표면
57
+ ## 스킬
114
58
 
115
- ### 셸 명령
59
+ 직접 쓰는 스킬:
116
60
 
117
- `tfx` CLI의 주요 명령은 다음과 같습니다.
118
-
119
- | 명령 | 용도 |
61
+ | 스킬 | 용도 |
120
62
  | --- | --- |
121
- | `tfx setup` | scripts, HUD, hooks, MCP, profile 동기화. `--dry-run` 지원. |
122
- | `tfx doctor` | 설치 상태 진단/복구. `--fix`, `--reset`, `--diagnose`, `--json` 지원. |
123
- | `tfx auto` | `tfx-auto` 라우팅 결정을 미리 확인. `--cli`, `--mode`, `--parallel`, `--json` 지원. |
124
- | `tfx mcp` | MCP registry 대상을 `list`, `sync`, `add`, `remove`. |
125
- | `tfx hub` | 로컬 MCP 메시지 버스 시작/중지/보장/상태 확인. |
126
- | `tfx list` | 설치된 package skill과 user skill 목록. |
127
- | `tfx handoff` | 현재 컨텍스트를 로컬/원격 이어받기 프롬프트로 직렬화. |
128
- | `tfx schema` | CLI와 Hub delegator schema 출력. |
129
- | `tfx hooks` | hook orchestrator를 scan/diff/apply/restore/status로 관리. |
130
- | `tfx tray` | tray/HUD 상태 프로세스 실행. `--attach`는 foreground 디버깅용. |
131
- | `tfx multi` | tmux/psmux + Hub 기반 로컬 multi-agent team 실행. |
132
- | `tfx swarm` | PRD 기반 worktree 격리 swarm의 plan/preflight/run/list. |
133
- | `tfx synapse` | swarm registry와 lease 상태 확인. |
134
- | `tfx review` | Codex 기반 git diff review 실행. |
135
- | `tfx codex-team` | Codex lead team mode용 편의 wrapper. |
136
- | `tfx notion-read` | MCP client로 Notion 페이지를 Markdown으로 변환. |
137
- | `tfx why` | 특정 경로의 마지막 커밋 intent trailer 조회. |
138
- | `tfx update` | 최신 stable/dev 패키지로 업데이트. |
139
- | `tfx monitor` | 터미널 TUI monitor 실행. |
140
- | `tfx version` | 버전 정보 출력. |
141
- | `tfx-profile` | Codex profile 관리용 편의 binary. |
142
-
143
- 정확한 인자 계약은 `tfx schema <command>`로 확인합니다.
144
-
145
- ### Claude Code skill
146
-
147
- 패키지에는 **34개 skill 파일**이 들어 있습니다. 크게 나누면 다음과 같습니다.
148
-
149
- - **표준 진입점**: `tfx-auto`, `tfx-remote`, `tfx-doctor`, `tfx-setup`,
150
- `tfx-profile`, `tfx-hub`, `tfx-hooks`, `tfx-ship`, `tfx-wt`.
151
- - **작업 helper**: `tfx-plan`, `tfx-review`, `tfx-qa`, `tfx-research`,
152
- `tfx-analysis`, `tfx-find`, `tfx-index`, `tfx-interview`, `tfx-prune`,
153
- `tfx-forge`, `merge-worktree`, `star-prompt`.
154
- - **deprecated 호환 alias**: 11개 legacy 이름은 전환용 shim입니다. 새 문서와 새 프롬프트에서는 위 표준 진입점을 우선 사용하세요.
155
-
156
- ### 표준 플래그 맵
157
-
158
- 대부분의 옛 skill 이름은 `tfx-auto` 플래그로 표현할 수 있습니다.
159
-
160
- | 의도 | 표준 형태 |
63
+ | `/tfx-auto` | 구현, 수정, 리뷰, 병렬 작업의 진입점. 동작은 아래 플래그로 정한다. |
64
+ | `/tfx-live` | Claude↔Codex 라이브 세션. `start`/`ask`/`stop`, `peer` 중계, `orchestrate`, `list-sessions`. |
65
+ | `/tfx-remote` | SSH 너머 원격 Claude Code 세션. `setup`, `spawn`, `list`, `attach`, `send`, `resume`, `probe`, `kill`. |
66
+ | `/tfx-setup` | 대화형 설정. 파일 동기화, HUD, Codex 프로필, MCP, 훅 우선순위. |
67
+ | `/tfx-doctor` | 진단과 복구. Hub 시작·중지·상태 확인도 여기서 한다. |
68
+ | `/tfx-profile` | Codex 프로필 관리. |
69
+ | `/tfx-ship` | triflux 릴리즈 절차(메인테이너용). |
70
+ | `/tfx-wt` | Windows Terminal 탭·패인 조작. `tfx setup`은 Windows에만 설치한다. |
71
+
72
+ 내부 레인(`internal: true`. 다른 스킬과 라우터가 부르지만 이름을 직접 불러도 된다):
73
+
74
+ | 스킬 | 용도 |
161
75
  | --- | --- |
162
- | 빠른 단일 lane 작업 | `/tfx-auto "작업" --mode quick` |
163
- | 더 깊은 계획/실행/검증 루프 | `/tfx-auto "작업" --mode deep` |
164
- | 지속 retry 루프 | `/tfx-auto "작업" --retry ralph` |
165
- | consensus 리뷰 | `/tfx-auto "작업" --mode consensus` |
166
- | debate 또는 panel 보고 | `/tfx-auto "작업" --mode consensus --shape debate|panel` |
167
- | 로컬 병렬 작업 | `/tfx-auto "작업" --parallel N --mode deep` 또는 shell `tfx multi ...` |
168
- | PRD/worktree swarm | `/tfx-auto "작업" --parallel swarm --mode consensus --isolation worktree` 또는 shell `tfx swarm ...` |
169
- | CLI lane 강제 | `/tfx-auto "작업" --cli codex|antigravity|claude` |
76
+ | `tfx-harness` | 메타 라우팅. 요청에 맞는 스킬이나 경로를 실행 없이 하나 골라 준다. |
77
+ | `tfx-plan` | 여러 모델이 합의한 구현 계획(`--quick`은 가벼운 버전). |
78
+ | `tfx-review` | 코드 리뷰 판정(`--quick`은 가벼운 버전). |
79
+ | `tfx-research` | 출처를 교차 확인하는 웹 리서치(`--quick`, `--auto`, `--depth`). |
80
+ | `tfx-interview` | 요구사항 인터뷰. `--format goal`은 아이디어를 Claude Code `/goal` 블록으로 바꾼다. |
170
81
 
171
- ### 제어 표면의 경계
82
+ 범용 보조 스킬 `merge-worktree`, `star-prompt`도 함께 들어 있다.
83
+ 키워드 훅이 프롬프트를 보고 스킬을 제안할 수 있다. 경로를 확실히 정하려면 `/tfx-*`를 직접 부른다.
172
84
 
173
- triflux를 디버그하거나 확장할 때는 아래 경계를 분리해서 봐야 합니다.
85
+ ## `/tfx-auto` 플래그
174
86
 
175
- | 표면 | 기준 위치 | npm/plugin 포함 여부 |
87
+ | 플래그 | 값 | 효과 |
176
88
  | --- | --- | --- |
177
- | 공개 CLI/runtime | `bin/`, `scripts/`, `hub/`, `hooks/`, `skills/` | 포함 |
178
- | publish mirror | `packages/triflux/` | 포함. root runtime 파일과 일치해야 함 |
179
- | Claude plugin metadata | `.claude-plugin/` | 포함. npm package 내용을 가리킴 |
180
- | Codex-local harness 실험 | `~/.codex/skills/*` | 미포함 |
181
- | legacy alias | `skills/<alias>/` + `docs/legacy-skill-aliases.md` | 포함되지만 deprecated 상태 |
182
-
183
- 로컬 Codex harness가 workflow를 추천해도 이는 해당 머신의 routing 조언일 뿐입니다.
184
- 패키지의 계약은 위의 CLI, Claude skill, hook, Hub 표면입니다.
185
-
186
- ---
187
-
188
- ## 권장 워크플로우
189
-
190
- ### 직접 구현/리뷰
191
-
192
- ```text
193
- /tfx-auto "실패하는 auth 테스트 고쳐줘" --risk-tier medium
194
- /tfx-auto "SQL과 trust-boundary 중심으로 PR 리뷰" --mode consensus
195
- ```
196
-
197
- 검증 강도를 명시하려면 `--risk-tier low|medium|high`, 모드를 이미 알고 있으면
198
- `--mode quick|deep|consensus`를 사용합니다.
199
-
200
- ### 끝까지 완료 루프
201
-
202
- ```text
203
- /tfx-auto "마이그레이션 끝내고 검증까지" --mode deep --retry ralph --max-iterations 10
204
- ```
205
-
206
- `--retry ralph`는 retry state machine과 stuck detector를 사용합니다. 루프 상한이
207
- 필요하면 `--max-iterations`를 지정하세요.
208
-
209
- ### consensus/debate/panel 출력
210
-
211
- ```text
212
- /tfx-auto "Postgres LISTEN/NOTIFY vs Redis Streams" --mode consensus --shape debate
213
- /tfx-auto "마이그레이션 전략 리뷰" --mode consensus --shape panel
214
- ```
215
-
216
- 참여 lane은 설정된 Claude/Codex/Antigravity입니다. 어떤 lane이 없으면 결과에 partial/degraded 상태가 드러나야 합니다.
217
-
218
- ### 로컬 팀 또는 PRD swarm
219
-
220
- ```text
221
- # 로컬 team mode
222
- tfx multi "auth 리팩터링 + UI 수정 + 테스트 추가"
223
-
224
- # worktree 격리 PRD swarm
225
- tfx swarm preflight docs/prd/my-feature.md --json
226
- tfx swarm run docs/prd/my-feature.md
227
- ```
228
-
229
- swarm은 격리 worktree와 file lease를 사용합니다. 큰 PRD는 실행 전에 preflight로 host,
230
- CLI profile, lease 충돌을 먼저 확인하세요.
231
-
232
- ### 원격 세션
233
-
234
- ```text
235
- /tfx-remote setup
236
- /tfx-remote spawn ryzen5-7600 "보안 리뷰 실행"
237
- /tfx-remote list
238
- /tfx-remote attach <session>
239
- /tfx-remote send <session> "수정 계속 진행"
240
- ```
241
-
242
- `tfx-remote`는 setup/spawn/list/attach/send/resume/probe/kill 흐름을 하나로 묶은 Claude skill 표면입니다.
243
-
244
- ### 컨텍스트 저장/이어받기
245
-
246
- ```bash
247
- tfx handoff --target remote --decision "README는 canonical 중심, alias는 docs로 분리" --output .omx/handoff.md
248
- ```
249
-
250
- 세션을 끝내거나 다른 host/agent가 이어받아야 할 때 사용합니다.
89
+ | `--mode` | `quick`(기본), `deep`, `consensus`, `live` | `deep` = 계획 → 실행 → 검증 루프, `consensus` = 여러 CLI 합의, `live` = `tfx-live peer`로 넘김 |
90
+ | `--shape` | `consensus`, `debate`, `panel` | `--mode consensus`의 결과 형태 |
91
+ | `--cli` | `auto`, `codex`, `antigravity`, `claude` | CLI 레인 고정 |
92
+ | `--cli-set` | `triad`, `no-antigravity`, `custom` | 합의 참여자 구성 |
93
+ | `--parallel` | `1`, `N`, `swarm` | `N` = 로컬 워커(`tfx multi`), `swarm` = worktree별 PRD 샤드(`tfx swarm`) |
94
+ | `--isolation` | `none`, `worktree` | 샤드별 worktree 격리(`swarm`이면 강제) |
95
+ | `--remote` | `<host>` | 스웜 샤드를 `hosts.json`의 호스트로 보냄 |
96
+ | `--retry` | `0`, `1`(기본), `ralph`, `auto-escalate` | `ralph` = 막힘 감지가 있는 재시도 상태 기계, `auto-escalate` = 모델 체인을 한 단계씩 올림 |
97
+ | `--max-iterations` | `N` | `ralph`/`auto-escalate` 상한(`0`은 무제한) |
98
+ | `--rounds` | `N`(기본 4) | `--mode live` 왕복 횟수 |
99
+ | `--risk-tier` | `auto`, `low`, `medium`, `high` | 변경 범위로 검증 강도를 정함. `--mode`가 있으면 무시 |
100
+ | `--skill` | `<name>` | `skills/<name>/SKILL.md`를 Codex/Antigravity 프롬프트 앞에 붙임 |
101
+ | `--no-native-bridge-ui` | | headless 워커를 `claude agents` 패널에 띄우지 않음 |
102
+
103
+ `--lead`, `--options`, `--experts`와 플래그 충돌 규칙까지 포함한 전체 계약은
104
+ [`skills/tfx-auto/SKILL.md`](skills/tfx-auto/SKILL.md)에 있다.
105
+
106
+ ## 모델과 프로필
107
+
108
+ Codex는 이름 붙은 프로필로 실행한다. 모델 ID는 `~/.codex/<프로필>.config.toml`이, 역할별 프로필
109
+ 배정은 [`scripts/lib/agent-route-policy.mjs`](scripts/lib/agent-route-policy.mjs)가 정한다. Claude는
110
+ 별칭으로 부르므로 등급마다 가장 새 모델이 자동으로 잡힌다.
111
+
112
+ | 프로필 / 별칭 | 레인 |
113
+ | --- | --- |
114
+ | `gpt6_astra_xhigh` | 아키텍처, 계획, 비평, 디버깅, 보안 리뷰, 깊은 실행 |
115
+ | `gpt6_astra_max`, `gpt6_astra_ultra` | 가장 어려운 단일 작업(`TFX_CODEX_PROFILE=max\|ultra`). `max`는 `auto-escalate` 첫 단계 |
116
+ | `gpt61_sol_high` / `gpt61_sol_med` | 기본 구현, 리뷰, 검증, 테스트, 문서 / 정리 작업 |
117
+ | `gpt6_luna_high` / `gpt6_luna_low` | 빌드 수정, 글쓰기 / 지연 우선 조회 |
118
+ | Claude `fable` | `--retry auto-escalate` 마지막 단계 |
119
+ | Claude `opus` / `sonnet` / `haiku` | 메타 라우팅과 계획 게이트 / Claude 네이티브 QA·검증 / 빠른 탐색 |
251
120
 
252
- ---
121
+ 라우팅 정책: [`.claude/rules/tfx-routing.md`](.claude/rules/tfx-routing.md) ·
122
+ 승격 체인: [`.claude/rules/tfx-escalation-chain.md`](.claude/rules/tfx-escalation-chain.md).
253
123
 
254
- ## 아키텍처
124
+ ## 셸 CLI
255
125
 
256
- <p align="center">
257
- <img src="docs/assets/architecture.svg" alt="triflux architecture" width="680">
258
- </p>
126
+ | 명령 | 용도 |
127
+ | --- | --- |
128
+ | `tfx setup` / `tfx doctor` | 파일·훅·HUD·MCP·프로필 동기화 / 진단과 복구(`--fix`, `--json`) |
129
+ | `tfx auto` | `tfx-auto` 라우팅 판정 미리 보기 |
130
+ | `tfx multi` | tmux + Hub 기반 로컬 멀티 CLI 팀 |
131
+ | `tfx swarm` | PRD 기반 worktree 격리 실행: `plan`, `preflight`, `run`, `list` |
132
+ | `tfx synapse` | 스웜 세션 레지스트리와 lease |
133
+ | `tfx hub` | 로컬 Hub: `start`, `stop`, `status`, `ensure` |
134
+ | `tfx mcp` | 관리형 MCP 레지스트리: `list`, `sync`, `add`, `remove` |
135
+ | `tfx hooks` | 훅 오케스트레이터: scan, diff, apply, status |
136
+ | `tfx handoff` | 현재 맥락을 다른 세션이나 호스트로 넘길 프롬프트로 묶음 |
137
+ | `tfx cto` | 저장소 단위 권위 콘솔: `collect`, `status`, `dashboard`, `hygiene`, `steward`, `event` |
138
+ | `tfx review` / `tfx codex-team` | Codex git diff 리뷰 / Codex 주도 팀 모드 |
139
+ | `tfx stealth-fetch <url>` | cloakbrowser로 URL 하나를 가져옴(JSON을 stdout으로) |
140
+ | `tfx notion-read`, `tfx why`, `tfx schema`, `tfx list`, `tfx monitor`, `tfx update`, `tfx version` | Notion → Markdown, 커밋 intent 트레일러, CLI 스키마, 설치된 스킬, TUI 모니터, 업데이트, 버전 |
141
+ | `tfx-live` | 라이브 세션 브리지(`/tfx-live` 스킬과 같은 명령) |
142
+ | `tfx-profile` | 대화형 Codex 프로필 관리자 |
143
+
144
+ 정확한 인자는 `tfx <명령> --help`나 `tfx schema <명령>`으로 확인한다.
145
+
146
+ ## 런타임 기능
147
+
148
+ **라이브 세션.** `tfx-live`는 Claude Code와 Codex TUI 세션을 조종한다. Claude 데몬 대상
149
+ (`--short`/`--session-id`)은 UDS를 먼저 시도하고, `--session`도 주면 실패 시 tmux로 넘어간다.
150
+ Codex는 tmux를 쓰거나 `--transport uds --thread <id|auto>`로 UDS를 쓴다. `peer`는 두 세션 사이를
151
+ `--rounds`만큼 중계하고, `orchestrate`는 한 작업에 Claude와 Codex를 함께 붙인다. triflux의 Codex
152
+ 훅이 실행 중인 Codex 세션을 `~/.local/state/triflux/codex-sessions/`에 기록하므로
153
+ `tfx-live list-sessions --cli codex|claude`로 직접 띄운 tmux 세션도 찾을 수 있다.
154
+
155
+ **오래 걸리는 작업.** `scripts/tfx-route.sh --async <agent> "<프롬프트>"`는 job id를 바로 돌려줘서
156
+ Claude Code Bash 도구의 600초 제한에 걸리지 않는다. 이후 `--job-status`, `--job-wait`,
157
+ `--job-result`로 확인한다.
158
+
159
+ **Hub.** 팀, 원격 세션, MCP 도구, 상태 표시를 잇는 로컬 메시지 버스다. 기본으로
160
+ `127.0.0.1:27888`에 붙고(`TFX_HUB_PORT`로 변경), `TFX_HUB_TOKEN`이 있으면 bearer 토큰을 요구한다.
161
+ `tfx-auto`, `tfx multi`, 로컬 스웜 샤드의 headless 워커는 `claude agents` 패널에 행으로 보인다.
162
+ 끄려면 `--no-native-bridge-ui`를 준다.
163
+
164
+ **재시도와 승격.** `--retry ralph`는 끝나거나 막힐 때(같은 실패 3회 연속)까지 반복한다.
165
+ `--retry auto-escalate`는 Codex `gpt6_astra_max`에서 Claude `fable`로 올라간다. 체인은
166
+ `.triflux/config/escalation-chain.json`으로 바꿀 수 있다.
167
+
168
+ **머신 프로파일.** setup은 이 머신에서 쓸 CLI와 timeout 정책을
169
+ `~/.config/triflux/machine-profile.env`에 기록한다. `TFX_DISABLE_CODEX=1`이나
170
+ `TFX_DISABLE_ANTIGRAVITY=1`을 주면 그 CLI가 라우팅에서 빠진다. 허용된 CLI가 하나도 없으면 조용히
171
+ 다른 경로로 넘어가지 않고 실패한다. 자세한 내용은
172
+ [`.claude/rules/tfx-machine-profile.md`](.claude/rules/tfx-machine-profile.md).
173
+
174
+ **CTO lake.** `tfx cto`는 저장소에서 일어난 일을 `.triflux/lake/`에 덧붙이기 전용으로 남긴다. 자동
175
+ 동작은 기본으로 꺼져 있고 `TFX_CTO_AUTO_COLLECT=1`이나 `TFX_CTO_NORTH_STAR=1`로
176
+ 켠다([ADR-0018](docs/adr/0018-cto-auto-behaviors-opt-in.md)). 예전 트레이 UI는 제거됐다
177
+ ([ADR-0022](docs/adr/0022-remove-cto-tray.md)).
178
+
179
+ **원격 호스트.** `/tfx-remote`와 `--remote <host>`는 `~/.config/triflux/hosts.json`
180
+ (Windows는 `%APPDATA%\triflux\hosts.json`)에서 호스트를 읽는다. `/tfx-remote setup`으로 호스트를
181
+ 추가한 뒤 `/tfx-remote spawn <host> "보안 리뷰 실행"`처럼 쓴다.
182
+
183
+ ## 구조
259
184
 
260
185
  ```mermaid
261
186
  graph TD
262
- User([User / Claude Code / shell]) --> Skills[Claude skills]
187
+ User([Claude Code 프롬프트 / 셸]) --> Skills["/tfx-auto · /tfx-live · /tfx-remote"]
263
188
  User --> CLI[tfx CLI]
264
- Skills --> Auto["/tfx-auto"]
265
- Skills --> Remote["/tfx-remote"]
266
- CLI --> Hub[triflux Hub]
267
- CLI --> Team[tfx multi / swarm]
268
- Auto --> Route[tfx-route.sh + guards]
269
- Team --> Hub
270
- Remote --> Hub
189
+ Skills --> Route[tfx-route.sh]
190
+ Skills --> Live[tfx-live]
191
+ CLI --> Team["tfx multi · tfx swarm"]
271
192
  Route --> Codex[Codex CLI]
272
- Route --> Antigravity[Antigravity agy CLI]
193
+ Route --> Agy[Antigravity agy]
273
194
  Route --> Claude[Claude Code]
274
- Hub --> MCP[MCP registry + bridge]
275
- Hub --> Store[(SQLite or memory store)]
276
- Hub --> Dashboard[HUD / monitor]
277
- ```
278
-
279
- 일반적인 라우팅 경로는 다음과 같습니다.
280
-
281
- 1. Claude Code prompt 또는 명시적 skill 호출.
282
- 2. keyword/routing hook이 context를 추가하거나 skill을 고릅니다.
283
- 3. `tfx-auto`가 intent를 mode, retry, parallelism, risk tier, 대상 CLI lane으로 정규화합니다.
284
- 4. `tfx-route.sh`, Hub worker, 또는 `tfx` CLI가 실제 Codex/Antigravity/Claude 기반 작업을 실행합니다.
285
- 5. Hub가 team message, lease, retry, handoff, status surface를 기록합니다.
286
-
287
- ### Hub
288
-
289
- Hub는 team, remote session, MCP tool, status surface를 위한 로컬 메시지 버스입니다.
290
- localhost에 bind하며 pipe/HTTP transport를 사용합니다.
291
-
292
- ```bash
293
- tfx hub ensure
294
- tfx hub status --json
295
- tfx hub stop
296
- ```
297
-
298
- macOS에서 test나 Hub 시작이 `node` localhost port를 열면 방화벽 팝업이 뜰 수 있습니다.
299
- 문서 작업에는 필요 없고, 실제 Hub/team/MCP workflow가 필요할 때만 환경 정책에 맞게 허용하세요.
300
-
301
- ### Guard
302
-
303
- triflux는 위험한 실행을 관리된 경로 뒤에 둡니다.
304
-
305
- - CLI 호출은 `tfx-route.sh`, Hub worker, `tfx` CLI를 통과해야 합니다.
306
- - 직접 `codex exec` / `gemini -y` 경로는 설치된 workflow에서 guard됩니다.
307
- - psmux/Windows Terminal 흐름은 임의 `wt.exe`/`psmux send-keys`가 아니라 관리 API와 규칙을 사용합니다.
308
-
309
- ### Profile과 모델 라우팅
310
-
311
- Codex profile은 `tfx-profile`로 관리하고, Antigravity 및 legacy Gemini 호환 상태는 `tfx setup`/`tfx doctor`로 점검합니다. 이미 profile이
312
- 소유한 model/effort 값을 launcher script에 중복 하드코딩하지 마세요.
313
-
314
- ---
315
-
316
- ## 운영
317
-
318
- ### 진단
319
-
320
- ```bash
321
- tfx doctor
322
- tfx doctor --json
323
- tfx doctor --fix
324
- tfx doctor --diagnose
325
- ```
326
-
327
- `doctor`는 CLI, profile, hook, skill, Hub, MCP registry, route script sync,
328
- stale team, 로컬 설정 drift를 확인합니다.
329
-
330
- ### MCP registry
331
-
332
- ```bash
333
- tfx mcp list
334
- tfx mcp sync
335
- tfx mcp add context7 --url https://mcp.context7.com/mcp
336
- tfx mcp remove context7
337
- ```
338
-
339
- registry가 관리 대상 MCP 설정의 source of truth입니다. Drift 디버깅이 아니라면
340
- Codex/Antigravity/Claude MCP 파일을 직접 수정하지 마세요.
341
-
342
- ### State snapshot
343
-
344
- Hub 시작 시 `~/.codex/`, `~/.gemini/` 일부 상태를 ignored `references/*-snapshots/`
345
- 폴더에 best-effort daily snapshot으로 저장할 수 있습니다. 수동 helper:
346
-
347
- ```bash
348
- npm run snapshot:codex
349
- npm run snapshot:gemini
350
- npm run snapshot:all
351
- ```
352
-
353
- ### Release/mirror check
354
-
355
- 패키지 내용에 영향이 있는 저장소 변경은 ship 전에 release gate를 통과시킵니다.
356
-
357
- ```bash
358
- npm run lint:skills
359
- npm run gen:skill-manifest
360
- npm run release:check-sync
361
- npm run release:check-mirror
362
- npm run lint
195
+ Team --> Route
196
+ Team --> WT[(git worktrees)]
197
+ Live -->|UDS 또는 tmux| Sessions[Claude / Codex TUI 세션]
198
+ Route --> Hub["Hub 127.0.0.1:27888"]
199
+ Team --> Hub
200
+ Hub --> Store[(SQLite 또는 메모리 저장소)]
201
+ Hub --> MCP[MCP 도구]
202
+ Hub --> UI["HUD · claude agents 패널"]
203
+ CLI --> Lake[(".triflux/lake (tfx cto)")]
363
204
  ```
364
205
 
365
- `packages/triflux`는 일부 runtime folder의 npm publish mirror입니다. mirror 대상 파일을
366
- 수정했다면 동기화 상태를 확인하세요.
206
+ 패키지 구성과 실행 경로는 [ARCHITECTURE.md](ARCHITECTURE.md), 문서 지도는
207
+ [docs/README.md](docs/README.md)에 있다.
367
208
 
368
- ---
209
+ ## 플랫폼
369
210
 
370
- ## 플랫폼 지원
371
-
372
- | 플랫폼 | Multiplexer | 참고 |
211
+ | 플랫폼 | 멀티플렉서 | 참고 |
373
212
  | --- | --- | --- |
374
- | macOS | tmux | 지원. 일부 흐름은 `gtimeout` 같은 timeout provider 필요. |
213
+ | macOS | tmux | 기본 경로. hard ceiling을 양수로 두면 `coreutils`(`gtimeout`)가 필요하다. |
375
214
  | Linux | tmux | 지원. |
376
- | Windows | psmux + Windows Terminal | 관리된 psmux/WT 경로로 지원. psmux 기본 shell은 PowerShell. |
377
-
378
- agent/launcher가 따라야 하는 더 엄격한 Windows/psmux 규칙은 `AGENTS.md`와
379
- `.claude/rules/tfx-psmux.md`를 보세요.
215
+ | Windows | psmux + Windows Terminal | 아래 참고. |
380
216
 
381
- ---
217
+ **Windows.** psmux(tmux 포크)의 기본 셸은 PowerShell이다. safety-guard가 `wt.exe`와 psmux `kill-session`
218
+ 직접 호출을 막으므로 탭과 패인은 `tfx-wt` 스킬(Windows에만 설치)과
219
+ `hub/team/wt-manager.mjs`를 거친다. 에이전트 규칙은
220
+ [`.claude/rules/tfx-psmux.md`](.claude/rules/tfx-psmux.md).
382
221
 
383
- ## 보안과 Guard
222
+ ## 보안과 가드
384
223
 
385
- | 계층 | 보호 |
224
+ | 층 | 보호 |
386
225
  | --- | --- |
387
- | Hub token auth | 설정된 경우 Hub API에 로컬 bearer token 적용. |
388
- | Localhost binding | Hub 기본 bind는 `127.0.0.1`. |
389
- | MCP registry guard | 지원하지 않거나 stale한 MCP record를 관리형 HTTP entry로 교체. |
390
- | Headless guard | 비관리 Codex/Antigravity headless 실행 경로와 deprecated Gemini route 차단. |
391
- | Safety guard | psmux/SSH/WT 셸 민감 흐름 sanitizing. |
392
- | Consensus reporting | deep/consensus workflow는 degraded/disputed 결과를 명시해야 함. |
393
-
394
- ---
395
-
396
- ## 개발
397
-
398
- ```bash
399
- npm ci
400
- npm test
401
- npm run lint
402
- npm run release:check-sync
403
- npm run release:check-mirror
404
- ```
405
-
406
- 기여자 메모:
407
-
408
- - deprecated alias 세부사항은 main README에 다시 늘어놓지 말고 [`docs/legacy-skill-aliases.md`](https://github.com/tellang/triflux/blob/main/docs/legacy-skill-aliases.md)를 갱신하세요.
409
- - Codex-local 실험은 패키지 경계를 의도적으로 바꾸는 경우가 아니라면 `~/.codex/skills` 아래에 둡니다.
410
- - docs-only 변경은 보통 `npm run lint`, release sync check 같은 targeted check로 충분합니다. full integration test는 Hub 서버와 localhost listener를 띄울 수 있습니다.
411
-
412
- ---
226
+ | 관리된 경로 | Codex와 Antigravity는 `tfx-route.sh`, Hub 워커, `tfx`로만 부르고 맨 `codex exec`나 `agy`로 부르지 않는다. 호출자가 지키는 규칙이며 이를 막는 훅은 없다. |
227
+ | safety-guard 훅 | 위험한 셸 명령(루트 `rm -rf`, main 강제 push, `git clean -fd`, SQL `DROP`), `wt.exe`·psmux 종료 직접 호출, Windows 호스트로 SSH 보내는 bash 문법을 막고 관리된 대안을 알려 준다. |
228
+ | Hub | localhost에만 붙는다. bearer 토큰(`TFX_HUB_TOKEN`)은 선택. |
229
+ | MCP 레지스트리 | 낡았거나 지원하지 않는 MCP 항목을 관리형 항목으로 바꾼다. |
230
+ | 합의 결과 | deep·consensus 실행은 일부 레인이 빠졌거나 의견이 갈린 결과를 숨기지 않고 표시한다. |
231
+
232
+ ## 기여
233
+
234
+ Node 20 이상이 필요하다. 테스트, 린트, 패키지 경계, 미러·릴리즈 점검, 상태 스냅샷은
235
+ [CONTRIBUTING.md](CONTRIBUTING.md)에 있다. 릴리즈는 자동이다. 버전을 올린 커밋이 `main`에
236
+ 머지되면 CI 통과 뒤 `release.yml`이 태그, GitHub 릴리즈, OIDC Trusted Publishing을 통한 npm 게시까지 진행한다.
237
+ 결정 기록은 [docs/adr/](docs/adr/README.md)에 있다.
413
238
 
414
239
  <p align="center">
415
240
  <sub>MIT License &middot; Made by <a href="https://github.com/tellang">tellang</a></sub>