triflux 10.20.0 → 10.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.ko.md +34 -42
  4. package/README.md +30 -36
  5. package/bin/triflux.mjs +13 -4
  6. package/hooks/hook-orchestrator.mjs +1 -1
  7. package/hooks/hook-registry.json +76 -2
  8. package/hooks/hooks.json +49 -1
  9. package/hooks/permission-safe-allow.mjs +233 -0
  10. package/hooks/pipeline-stop.mjs +355 -16
  11. package/hooks/post-tool-tips.mjs +306 -0
  12. package/hooks/pre-compact-snapshot.mjs +181 -0
  13. package/hooks/session-end-cleanup.mjs +201 -0
  14. package/hooks/subagent-tracker.mjs +267 -0
  15. package/hooks/subagent-verifier.mjs +4 -0
  16. package/hub/account-broker.mjs +297 -8
  17. package/hub/codex-adapter.mjs +62 -2
  18. package/hub/server.mjs +51 -4
  19. package/hub/team/cli/services/native-control.mjs +1 -0
  20. package/hub/team/conductor.mjs +94 -29
  21. package/hub/team/native-supervisor.mjs +20 -7
  22. package/hub/team/swarm-cli.mjs +98 -4
  23. package/hub/team/swarm-hypervisor.mjs +112 -10
  24. package/hub/team/swarm-locks.mjs +7 -2
  25. package/hub/team/swarm-preflight.mjs +317 -0
  26. package/hub/team/synapse-cli.mjs +243 -6
  27. package/hub/team/worker-sandbox.mjs +93 -0
  28. package/hub/team/worktree-lifecycle.mjs +49 -8
  29. package/hub/workers/delegator-mcp.mjs +14 -1
  30. package/package.json +1 -1
  31. package/scripts/__tests__/gen-skill-docs.test.mjs +4 -0
  32. package/scripts/__tests__/skill-surface.test.mjs +61 -0
  33. package/scripts/gen-skill-manifest.mjs +3 -0
  34. package/scripts/lib/skill-template.mjs +2 -0
  35. package/scripts/session-stale-cleanup.mjs +111 -2
  36. package/skills/star-prompt/skill.json +1 -1
  37. package/skills/tfx-analysis/skill.json +11 -3
  38. package/skills/tfx-auto/skill.json +2 -2
  39. package/skills/tfx-autopilot/skill.json +9 -4
  40. package/skills/tfx-consensus/skill.json +4 -3
  41. package/skills/tfx-debate/skill.json +11 -4
  42. package/skills/tfx-doctor/skill.json +3 -1
  43. package/skills/tfx-fullcycle/skill.json +10 -4
  44. package/skills/tfx-hooks/skill.json +3 -1
  45. package/skills/tfx-hub/skill.json +5 -3
  46. package/skills/tfx-index/skill.json +6 -1
  47. package/skills/tfx-interview/skill.json +6 -1
  48. package/skills/tfx-multi/skill.json +7 -3
  49. package/skills/tfx-panel/skill.json +11 -4
  50. package/skills/tfx-persist/skill.json +11 -4
  51. package/skills/tfx-plan/skill.json +13 -3
  52. package/skills/tfx-profile/skill.json +3 -1
  53. package/skills/tfx-prune/skill.json +7 -1
  54. package/skills/tfx-psmux-rules/SKILL.md +2 -0
  55. package/skills/tfx-psmux-rules/SKILL.md.tmpl +22 -307
  56. package/skills/tfx-psmux-rules/skill.json +7 -2
  57. package/skills/tfx-qa/skill.json +12 -3
  58. package/skills/tfx-ralph/skill.json +4 -1
  59. package/skills/tfx-remote/skill.json +8 -0
  60. package/skills/tfx-remote-setup/SKILL.md +2 -0
  61. package/skills/tfx-remote-setup/SKILL.md.tmpl +23 -570
  62. package/skills/tfx-remote-setup/skill.json +7 -3
  63. package/skills/tfx-remote-spawn/SKILL.md +2 -0
  64. package/skills/tfx-remote-spawn/SKILL.md.tmpl +31 -242
  65. package/skills/tfx-remote-spawn/skill.json +7 -3
  66. package/skills/tfx-research/skill.json +11 -4
  67. package/skills/tfx-review/skill.json +12 -3
  68. package/skills/tfx-setup/skill.json +3 -1
  69. package/skills/tfx-ship/skill.json +13 -0
  70. package/skills/tfx-swarm/skill.json +13 -0
  71. package/skills/tfx-wt/skill.json +12 -0
@@ -9,7 +9,7 @@
9
9
  {
10
10
  "name": "triflux",
11
11
  "description": "Tri-CLI orchestrator for Claude Code. Routes tasks across Claude + Codex + Gemini with consensus intelligence, natural language routing, 42 skills, and cross-model review.",
12
- "version": "10.20.0",
12
+ "version": "10.20.2",
13
13
  "author": {
14
14
  "name": "tellang"
15
15
  },
@@ -30,5 +30,5 @@
30
30
  ]
31
31
  }
32
32
  ],
33
- "version": "10.20.0"
33
+ "version": "10.20.2"
34
34
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "triflux",
3
- "version": "10.20.0",
3
+ "version": "10.20.2",
4
4
  "description": "CLI-first multi-model orchestrator for Claude Code — route tasks to Codex, Gemini, and Claude",
5
5
  "author": {
6
6
  "name": "tellang"
package/README.ko.md CHANGED
@@ -10,15 +10,15 @@
10
10
 
11
11
  <p align="center">
12
12
  <strong>Consensus Intelligence 기반 Tri-CLI 오케스트레이션</strong><br>
13
- <em>Claude + Codex + Gemini — 21개 코어 스킬, 23thin alias, 자연어 라우팅, 교차 모델 리뷰.</em>
13
+ <em>Claude + Codex + Gemini — 13공개 코어 스킬, 11호환 alias, 자연어 라우팅, 교차 모델 리뷰.</em>
14
14
  </p>
15
15
 
16
16
  <p align="center">
17
17
  <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>
18
18
  <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>
19
19
  <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>
20
- <img src="https://img.shields.io/badge/skills-21_core-F5C242?style=flat-square" alt="21개 코어 스킬">
21
- <sub>+ 23thin alias</sub>
20
+ <img src="https://img.shields.io/badge/skills-13_core-F5C242?style=flat-square" alt="13개 코어 스킬">
21
+ <sub>+ 11호환 alias</sub>
22
22
  <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-374151?style=flat-square" alt="License: MIT"></a>
23
23
  </p>
24
24
 
@@ -29,7 +29,7 @@
29
29
  <p align="center">
30
30
  <a href="#빠른-시작">빠른 시작</a> ·
31
31
  <a href="#tri-cli-합의-엔진">Tri-CLI 합의 엔진</a> ·
32
- <a href="#전체-21개-스킬-23개-thin-alias-포함">전체 21개 스킬</a> ·
32
+ <a href="#전체-13개-코어-스킬-호환-alias-포함">전체 13개 스킬</a> ·
33
33
  <a href="#아키텍처">아키텍처</a> ·
34
34
  <a href="#deep-vs-light">Deep vs Light</a> ·
35
35
  <a href="#보안">보안</a>
@@ -57,15 +57,14 @@ npm install -g triflux
57
57
  ### 사용법
58
58
 
59
59
  ```bash
60
- # Light단일 모델로 빠르게 실행
60
+ # Deep 기본값 3자 합의로 실행
61
61
  /tfx-research "React 19 Server Actions best practices"
62
62
  /tfx-review
63
63
  /tfx-plan "add JWT auth middleware"
64
64
 
65
- # Deep중요한 작업에 3자 합의 적용
66
- /tfx-deep-research "microservice architecture comparison 2026"
67
- /tfx-deep-review
68
- /tfx-deep-plan "migrate REST to GraphQL"
65
+ # Quick opt-out 단일 모델로 빠르게 실행
66
+ /tfx-review --quick
67
+ /tfx-plan "add JWT auth middleware" --quick
69
68
 
70
69
  # Debate — 3개의 독립적인 의견을 확보
71
70
  /tfx-debate "Redis vs PostgreSQL LISTEN/NOTIFY for real-time events"
@@ -77,7 +76,7 @@ npm install -g triflux
77
76
  /tfx-multi "refactor auth + update UI + add tests"
78
77
 
79
78
  # Remote — setup, spawn, attach, resume를 하나의 표면으로
80
- /tfx-remote-setup # 인터랙티브 호스트 설정 위저드 (Tailscale + SSH)
79
+ /tfx-remote setup # 인터랙티브 호스트 설정 위저드 (Tailscale + SSH)
81
80
  /tfx-remote spawn ultra4 "보안 리뷰 실행" # 원격 호스트에서 세션 실행
82
81
  ```
83
82
 
@@ -89,9 +88,9 @@ npm install -g triflux
89
88
 
90
89
  ### v10.11.0 주요 특징
91
90
 
92
- - **자연어 라우팅** — "리뷰해줘"라고 말하면 `/tfx-review`가 자동 호출. "제대로/꼼꼼히" 수정자로 Deep 변형 자동 에스컬레이션
91
+ - **자연어 라우팅** — "리뷰해줘"라고 말하면 `/tfx-review`가 자동 호출. 기본은 Deep이고 `--quick`으로 빠른 경로를 명시
93
92
  - **교차 모델 리뷰** — Claude가 작성하면 Codex가 리뷰, Codex가 작성하면 Claude가 리뷰. 동일 모델 self-approve 차단. 커밋 전 미검증 파일 nudge
94
- - **정확한 카탈로그** — 44개 스킬 파일 기준 `21 core + 23 thin alias`
93
+ - **정확한 카탈로그** — 33개 스킬 파일 기준 `13 public core + 11 compatibility alias + 9 internal helper`
95
94
  - **Phase 3** — `--retry ralph`, `--retry auto-escalate`, `--lead codex`, `--max-iterations N`, 4단계 `DEFAULT_ESCALATION_CHAIN`
96
95
  - **Phase 4** — `tfx-auto --shape debate|panel|consensus`, `tfx-remote` 단일 진입점, `tfx-psmux-rules`는 `.claude/rules/tfx-psmux.md`로 이동
97
96
  - **하위 호환성 유지** — `tfx-persist`, `tfx-debate`, `tfx-multi`, `tfx-remote-spawn` 같은 기존 이름은 thin alias로 계속 지원
@@ -142,44 +141,39 @@ Phase 4 이후에는 `tfx-auto`가 하나의 front door 역할을 맡습니다.
142
141
 
143
142
  ---
144
143
 
145
- ## 전체 21개 스킬 (23개 thin alias 포함)
144
+ ## 전체 13코어 스킬 (호환 alias 포함)
146
145
 
147
146
  ### 리서치
148
147
 
149
148
  | 스킬 | 상태 | 설명 |
150
149
  |------|------|------|
151
- | `tfx-research` | Active | Exa/Brave/Tavily 자동 선택을 통한 빠른 웹 검색 |
152
- | `tfx-find` | Active | 파일, 심볼, 패턴 중심의 빠른 코드베이스 탐색 |
150
+ | `tfx-index` | Core | 프로젝트 인덱싱과 컨텍스트 압축 |
153
151
 
154
- Aliases (fold into `tfx-auto` flags): `tfx-deep-research`, `tfx-autoresearch`
152
+ 내부 라우팅 helper: `tfx-research`, `tfx-find`
155
153
 
156
154
  ### 분석 및 계획
157
155
 
158
156
  | 스킬 | 상태 | 설명 |
159
157
  |------|------|------|
160
- | `tfx-analysis` | Active | 빠른 코드/아키텍처 분석 |
161
- | `tfx-plan` | Active | 빠른 구현 계획 수립 |
162
- | `tfx-interview` | Active | 소크라테스식 요구사항 탐색 |
158
+ | _독립 공개 표면 없음_ | | 분석, 계획, 인터뷰는 내부 helper로 라우팅 |
163
159
 
164
- Aliases (fold into `tfx-auto` flags): `tfx-deep-analysis`, `tfx-deep-plan`, `tfx-deep-interview`
160
+ 내부 라우팅 helper: `tfx-analysis`, `tfx-plan`, `tfx-interview`
165
161
 
166
162
  ### 실행
167
163
 
168
164
  | 스킬 | 상태 | 설명 |
169
165
  |------|------|------|
170
- | `tfx-auto` | Active | 플래그 기반 라우팅과 legacy surface folding을 담당하는 통합 CLI 오케스트레이터 |
166
+ | `tfx-auto` | Core | 플래그 기반 라우팅과 legacy surface folding을 담당하는 통합 CLI 오케스트레이터 |
171
167
 
172
- Aliases (fold into `tfx-auto` flags): `tfx-autopilot`, `tfx-fullcycle`, `tfx-codex`, `tfx-gemini`
168
+ 호환 alias: `tfx-autopilot`, `tfx-fullcycle`, `tfx-multi`, `tfx-persist`, `tfx-swarm`
173
169
 
174
170
  ### 리뷰 및 QA
175
171
 
176
172
  | 스킬 | 상태 | 설명 |
177
173
  |------|------|------|
178
- | `tfx-review` | Active | 빠른 코드 리뷰 |
179
- | `tfx-qa` | Active | Test → Fix → Retest 순환 (최대 3회) |
180
- | `tfx-prune` | Active | AI slop 제거, dead code 및 과한 추상화 정리 |
174
+ | _독립 공개 표면 없음_ | | 리뷰, QA, 정리는 내부 helper로 라우팅 |
181
175
 
182
- Aliases (fold into `tfx-auto` flags): `tfx-deep-review`, `tfx-deep-qa`
176
+ 내부 라우팅 helper: `tfx-review`, `tfx-qa`, `tfx-prune`
183
177
 
184
178
  ### 토론 및 의사결정
185
179
 
@@ -187,35 +181,33 @@ Aliases (fold into `tfx-auto` flags): `tfx-deep-review`, `tfx-deep-qa`
187
181
  |------|------|------|
188
182
  | _독립 active 표면 없음_ | — | debate, consensus, panel은 이제 `tfx-auto --mode consensus`의 출력 shape로 통합 |
189
183
 
190
- Aliases (fold into `tfx-auto` flags): `tfx-consensus`, `tfx-debate`, `tfx-panel`
184
+ 호환 alias: `tfx-consensus`, `tfx-debate`, `tfx-panel`
191
185
 
192
186
  ### 지속 실행 및 라우팅
193
187
 
194
188
  | 스킬 | 상태 | 설명 |
195
189
  |------|------|------|
196
- | `tfx-index` | Active | 프로젝트 인덱싱으로 94% 토큰 절감 (58K→3K) |
197
- | `tfx-hooks` | Active | Claude Code hook priority 관리 |
198
- | `tfx-profile` | Active | Codex/Gemini CLI 프로필 관리 |
190
+ | `tfx-hooks` | Core | Claude Code hook priority 관리 |
191
+ | `tfx-profile` | Core | Codex/Gemini CLI 프로필 관리 |
199
192
 
200
- Aliases (fold into `tfx-auto` flags): `tfx-persist`, `tfx-ralph`, `tfx-autoroute`, `tfx-auto-codex`
193
+ 내부 라우팅 helper: `tfx-ralph`
201
194
 
202
195
  ### 오케스트레이션
203
196
 
204
197
  | 스킬 | 상태 | 설명 |
205
198
  |------|------|------|
206
- | `tfx-hub` | Active | MCP 메시지 버스 관리 |
207
- | `tfx-codex-swarm` | Active | Codex swarm 실행 표면 |
208
- | `merge-worktree` | Active | swarm 결과용 worktree merge helper |
199
+ | `tfx-hub` | Core | MCP 메시지 버스 관리 |
200
+ | `merge-worktree` | Core | swarm 결과용 worktree merge helper |
209
201
 
210
- Aliases (fold into active surfaces): `tfx-multi`, `tfx-swarm`
202
+ Swarm 실행은 `tfx-auto --parallel swarm` `tfx swarm` CLI로 노출된다.
211
203
 
212
204
  ### 원격
213
205
 
214
206
  | 스킬 | 상태 | 설명 |
215
207
  |------|------|------|
216
- | `tfx-remote` | Active | setup, spawn, list, attach, send, resume, probe, rules를 묶는 원격 command family |
208
+ | `tfx-remote` | Core | setup, spawn, list, attach, send, resume, probe, rules를 묶는 원격 command family |
217
209
 
218
- Aliases (fold into active surfaces): `tfx-remote-spawn`, `tfx-remote-setup`, `tfx-psmux-rules` — Phase 4에서 `.claude/rules/tfx-psmux.md`로 이동
210
+ 호환 alias: `tfx-remote-spawn`, `tfx-remote-setup`, `tfx-psmux-rules` — Phase 4에서 `.claude/rules/tfx-psmux.md`로 이동
219
211
 
220
212
  ### 메타
221
213
 
@@ -225,6 +217,7 @@ Aliases (fold into active surfaces): `tfx-remote-spawn`, `tfx-remote-setup`, `tf
225
217
  | `tfx-setup` | Active | 초기 설정 마법사 |
226
218
  | `tfx-doctor` | Active | 진단 및 자동 복구 |
227
219
  | `tfx-ship` | Active | ship workflow orchestration |
220
+ | `tfx-wt` | Active | Windows Terminal 탭/패인 제어 |
228
221
  | `star-prompt` | Active | postinstall GitHub star prompt |
229
222
 
230
223
  ---
@@ -316,15 +309,14 @@ npm install -g triflux
316
309
  ### 사용법
317
310
 
318
311
  ```bash
319
- # Light단일 모델로 빠르게 실행
312
+ # Deep 기본값 3자 합의로 실행
320
313
  /tfx-research "React 19 Server Actions best practices"
321
314
  /tfx-review
322
315
  /tfx-plan "add JWT auth middleware"
323
316
 
324
- # Deep중요한 작업에 3자 합의 적용
325
- /tfx-deep-research "microservice architecture comparison 2026"
326
- /tfx-deep-review
327
- /tfx-deep-plan "migrate REST to GraphQL"
317
+ # Quick opt-out 단일 모델로 빠르게 실행
318
+ /tfx-review --quick
319
+ /tfx-plan "add JWT auth middleware" --quick
328
320
 
329
321
  # Debate — 3개의 독립적인 의견을 확보
330
322
  /tfx-debate "Redis vs PostgreSQL LISTEN/NOTIFY for real-time events"
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  <h3 align="center">Tri-CLI Orchestration with Consensus Intelligence</h3>
12
12
 
13
13
  <p align="center">
14
- Route tasks across <strong>Claude + Codex + Gemini</strong> — 21 core skills, natural language routing,<br>
14
+ Route tasks across <strong>Claude + Codex + Gemini</strong> — 13 public core skills, natural language routing,<br>
15
15
  cross-model review, and reflexion-based adaptive learning.
16
16
  </p>
17
17
 
@@ -19,8 +19,8 @@
19
19
  <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
20
  <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
21
  <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/skills-21_core-F5C242?style=flat-square" alt="21 core skills">
23
- <sub>+ 23 thin aliases</sub>
22
+ <img src="https://img.shields.io/badge/skills-13_core-F5C242?style=flat-square" alt="13 core skills">
23
+ <sub>+ 11 compatibility aliases</sub>
24
24
  <img src="https://img.shields.io/badge/node-%3E%3D18-374151?style=flat-square" alt="Node >= 18">
25
25
  <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
26
  </p>
@@ -33,7 +33,7 @@
33
33
  <a href="#quick-start">Quick Start</a> &middot;
34
34
  <a href="#core-engine">Core Engine</a> &middot;
35
35
  <a href="#killer-skills">Killer Skills</a> &middot;
36
- <a href="#all-21-skills-plus-23-thin-aliases">All 21 Skills</a> &middot;
36
+ <a href="#all-13-core-skills-plus-compatibility-aliases">All 13 Skills</a> &middot;
37
37
  <a href="#deep-vs-light">Deep vs Light</a> &middot;
38
38
  <a href="#architecture">Architecture</a> &middot;
39
39
  <a href="#security">Security</a>
@@ -45,7 +45,7 @@
45
45
 
46
46
  Most AI coding tools talk to **one model**. triflux talks to **three** — and makes them argue.
47
47
 
48
- triflux is not a collection of skills. It is a **multi-model parallel orchestration harness**. The 21 core skills and 23 thin aliases are what it does. The harness — consensus engine, message bus, router, and security guard — is what makes it different.
48
+ triflux is not a collection of skills. It is a **multi-model parallel orchestration harness**. The 13 public core skills, 11 compatibility aliases, and internal routed helpers are what it does. The harness — consensus engine, message bus, router, and security guard — is what makes it different.
49
49
 
50
50
  Every Deep skill runs Claude, Codex, and Gemini **independently** (no cross-visibility), then cross-validates their findings. Only consensus-verified results survive. The result: **87% fewer false positives** compared to single-model review.
51
51
 
@@ -54,10 +54,10 @@ Phase 4 folds the legacy surface into one front door: `tfx-auto` with flag-based
54
54
  You don't need to memorize commands. Say what you want in natural language — triflux routes to the right skill automatically:
55
55
 
56
56
  ```
57
- "review this" → /tfx-review (Lightsingle model, fast)
58
- "review this thoroughly" → /tfx-deep-review (Deep — 3-party consensus)
57
+ "review this" → /tfx-review (Deep by default 3-party consensus)
58
+ "review this --quick" → /tfx-review --quick (quick opt-out)
59
59
  "리뷰해줘" → /tfx-review (Korean works too)
60
- "제대로 리뷰해" → /tfx-deep-review (depth modifier detected)
60
+ "제대로 리뷰해" → /tfx-review (depth modifier detected)
61
61
  ```
62
62
 
63
63
  ---
@@ -83,8 +83,8 @@ Then run `tfx setup` to configure your environment.
83
83
 
84
84
  ```bash
85
85
  # 3-party consensus — three models argue, only consensus survives
86
- /tfx-deep-review
87
- /tfx-deep-plan "migrate REST to GraphQL"
86
+ /tfx-review
87
+ /tfx-plan "migrate REST to GraphQL"
88
88
 
89
89
  # Swarm — split PRD into shards, parallel worktree execution
90
90
  /tfx-swarm
@@ -266,13 +266,13 @@ Each shard gets its own git worktree, file-lease enforcement prevents conflicts,
266
266
  /tfx-auto "implement full auth flow with tests" --retry ralph --max-iterations 10
267
267
  ```
268
268
 
269
- ### 3-Party Consensus Reviews — `tfx-deep-review` / `tfx-deep-plan`
269
+ ### 3-Party Consensus Reviews — `tfx-review` / `tfx-plan`
270
270
 
271
271
  The bread-and-butter Deep skills. Three models independently review your code or plan your implementation, then cross-validate. Only consensus-verified findings survive.
272
272
 
273
273
  ```bash
274
- /tfx-deep-review # 3-party code review
275
- /tfx-deep-plan "migrate to GraphQL" # 3-party planning
274
+ /tfx-review # 3-party code review by default
275
+ /tfx-plan "migrate to GraphQL" # 3-party planning by default
276
276
  ```
277
277
 
278
278
  ### Structured Debate — `tfx-debate` (alias for `tfx-auto --mode consensus --shape debate`)
@@ -285,7 +285,7 @@ Three models take independent positions on a technical question, debate, and con
285
285
 
286
286
  ---
287
287
 
288
- ## All 21 Skills (plus 23 thin aliases)
288
+ ## All 13 Core Skills (plus compatibility aliases)
289
289
 
290
290
  <details>
291
291
  <summary>Expand full skill list</summary>
@@ -294,38 +294,33 @@ Three models take independent positions on a technical question, debate, and con
294
294
 
295
295
  | Skill | Type | Description |
296
296
  |-------|------|-------------|
297
- | `tfx-research` | Active | Quick web search via Exa/Brave/Tavily auto-selection |
298
- | `tfx-find` | Active | Fast codebase search — files, symbols, patterns |
297
+ | `tfx-index` | Core | Project indexing and context compression |
299
298
 
300
- Aliases (fold into `tfx-auto` flags): `tfx-deep-research`, `tfx-autoresearch`
299
+ Internal routed helpers: `tfx-research`, `tfx-find`
301
300
 
302
301
  ### Analysis & Planning
303
302
 
304
303
  | Skill | Type | Description |
305
304
  |-------|------|-------------|
306
- | `tfx-analysis` | Active | Quick code/architecture analysis |
307
- | `tfx-plan` | Active | Quick implementation plan |
308
- | `tfx-interview` | Active | Socratic requirements exploration |
305
+ | _No standalone public surface_ | | Analysis, planning, and interview route through internal helpers |
309
306
 
310
- Aliases (fold into `tfx-auto` flags): `tfx-deep-analysis`, `tfx-deep-plan`, `tfx-deep-interview`
307
+ Internal routed helpers: `tfx-analysis`, `tfx-plan`, `tfx-interview`
311
308
 
312
309
  ### Execution
313
310
 
314
311
  | Skill | Type | Description |
315
312
  |-------|------|-------------|
316
- | `tfx-auto` | Active | Unified CLI orchestrator — auto-triage, flag-based routing, and legacy surface folding |
313
+ | `tfx-auto` | Core | Unified CLI orchestrator — auto-triage, flag-based routing, and legacy surface folding |
317
314
 
318
- Aliases (fold into `tfx-auto` flags): `tfx-autopilot`, `tfx-fullcycle`, `tfx-codex`, `tfx-gemini`
315
+ Compatibility aliases: `tfx-autopilot`, `tfx-fullcycle`, `tfx-multi`, `tfx-persist`, `tfx-swarm`
319
316
 
320
317
  ### Review & QA
321
318
 
322
319
  | Skill | Type | Description |
323
320
  |-------|------|-------------|
324
- | `tfx-review` | Active | Quick code review |
325
- | `tfx-qa` | Active | Test → Fix → Retest cycle (max 3 rounds) |
326
- | `tfx-prune` | Active | AI slop removal — dead code, over-abstraction cleanup |
321
+ | _No standalone public surface_ | | Review, QA, and cleanup route through internal helpers |
327
322
 
328
- Aliases (fold into `tfx-auto` flags): `tfx-deep-review`, `tfx-deep-qa`
323
+ Internal routed helpers: `tfx-review`, `tfx-qa`, `tfx-prune`
329
324
 
330
325
  ### Debate & Decision
331
326
 
@@ -333,27 +328,25 @@ Aliases (fold into `tfx-auto` flags): `tfx-deep-review`, `tfx-deep-qa`
333
328
  |-------|------|-------------|
334
329
  | _No standalone active surface_ | — | Debate, consensus, and panel shapes now route through `tfx-auto --mode consensus` |
335
330
 
336
- Aliases (fold into `tfx-auto` flags): `tfx-consensus`, `tfx-debate`, `tfx-panel`
331
+ Compatibility aliases: `tfx-consensus`, `tfx-debate`, `tfx-panel`
337
332
 
338
333
  ### Persistence & Routing
339
334
 
340
335
  | Skill | Type | Description |
341
336
  |-------|------|-------------|
342
- | `tfx-index` | Active | Project indexing 94% token reduction (58K → 3K) |
343
- | `tfx-hooks` | Active | Claude Code hook priority manager |
344
- | `tfx-profile` | Active | Codex/Gemini CLI profile management |
337
+ | `tfx-hooks` | Core | Claude Code hook priority manager |
338
+ | `tfx-profile` | Core | Codex/Gemini CLI profile management |
345
339
 
346
- Aliases (fold into `tfx-auto` flags): `tfx-persist`, `tfx-ralph`, `tfx-autoroute`, `tfx-auto-codex`
340
+ Internal routed helper: `tfx-ralph`
347
341
 
348
342
  ### Orchestration & Infrastructure
349
343
 
350
344
  | Skill | Description |
351
345
  |-------|-------------|
352
346
  | `tfx-hub` | MCP message bus — Named Pipe & HTTP bridge |
353
- | `tfx-codex-swarm` | Codex swarm execution surface |
354
347
  | `merge-worktree` | Worktree merge helper for swarm results |
355
348
 
356
- Aliases (fold into active surfaces): `tfx-multi`, `tfx-swarm`
349
+ Swarm execution is exposed through `tfx-auto --parallel swarm` and the `tfx swarm` CLI.
357
350
 
358
351
  ### Remote
359
352
 
@@ -361,7 +354,7 @@ Aliases (fold into active surfaces): `tfx-multi`, `tfx-swarm`
361
354
  |-------|-------------|
362
355
  | `tfx-remote` | Unified remote command family — setup, spawn, list, attach, send, resume, probe, rules |
363
356
 
364
- Aliases (fold into active surfaces): `tfx-remote-spawn`, `tfx-remote-setup`, `tfx-psmux-rules` — moved to `.claude/rules/tfx-psmux.md` in Phase 4
357
+ Compatibility aliases: `tfx-remote-spawn`, `tfx-remote-setup`, `tfx-psmux-rules` — rules moved to `.claude/rules/tfx-psmux.md` in Phase 4
365
358
 
366
359
  ### Meta & Tooling
367
360
 
@@ -371,6 +364,7 @@ Aliases (fold into active surfaces): `tfx-remote-spawn`, `tfx-remote-setup`, `tf
371
364
  | `tfx-setup` | Initial setup wizard |
372
365
  | `tfx-doctor` | Diagnostics and auto-repair |
373
366
  | `tfx-ship` | Ship workflow orchestration |
367
+ | `tfx-wt` | Windows Terminal tab/pane control |
374
368
  | `star-prompt` | GitHub star prompt for postinstall |
375
369
 
376
370
  </details>
@@ -494,7 +488,7 @@ The monitor visualizes:
494
488
  - **Consensus shapes** — `--shape consensus|debate|panel` folds ensemble behaviors into the main router
495
489
  - **Remote consolidation** — `tfx-remote` becomes the single remote surface while `tfx-remote-spawn` remains a thin alias
496
490
  - **Rules relocation** — `tfx-psmux-rules` moved out of the skill surface to `.claude/rules/tfx-psmux.md`
497
- - **Legacy compatibility** — 23 thin aliases remain for transition safety and are slated for later removal
491
+ - **Legacy compatibility** — 11 compatibility aliases remain for transition safety and are slated for later removal
498
492
 
499
493
  </details>
500
494
 
package/bin/triflux.mjs CHANGED
@@ -77,6 +77,7 @@ import {
77
77
  getVersion,
78
78
  getWindowsHubAutostartStatus,
79
79
  hasProfileSection,
80
+ isSetupUserStateFile,
80
81
  LEGACY_CODEX_MODELS,
81
82
  REQUIRED_CODEX_PROFILES,
82
83
  replaceProfileSection,
@@ -332,10 +333,13 @@ const CLI_COMMAND_SCHEMAS = Object.freeze({
332
333
  ],
333
334
  },
334
335
  swarm: {
335
- usage: "tfx swarm [run] <prd-path> [--dry-run|--json|--filter <shard>]",
336
+ usage:
337
+ "tfx swarm [run|preflight] <prd-path> [--dry-run|--json|--filter <shard>]",
336
338
  description: "PRD 기반 멀티모델 x 멀티기기 스웜 실행 (#93)",
337
339
  subcommands: {
338
340
  run: "tfx swarm run <prd-path> — verb 명시 실행 (기본 경로와 동일)",
341
+ preflight:
342
+ "tfx swarm preflight <prd-path> [--json] — 실행 전 go/no-go 리포트 출력",
339
343
  plan: "tfx swarm plan <prd-path> [--json] — 실행 없이 계획만 출력",
340
344
  list: "tfx swarm list [--json] — 활성 스웜 세션 조회 (synapse status)",
341
345
  status: "tfx swarm status [--json] — list alias",
@@ -1206,6 +1210,7 @@ function cmdSetup(options = {}) {
1206
1210
  if (existsSync(refSrc)) {
1207
1211
  mkdirSync(refDst, { recursive: true });
1208
1212
  for (const refFile of readdirSync(refSrc)) {
1213
+ if (isSetupUserStateFile(refFile)) continue;
1209
1214
  const rSrc = join(refSrc, refFile);
1210
1215
  const rDst = join(refDst, refFile);
1211
1216
  if (statSync(rSrc).isFile()) {
@@ -6163,6 +6168,7 @@ async function main() {
6163
6168
 
6164
6169
  ${BOLD}Subcommands${RESET}
6165
6170
  ${WHITE_BRIGHT}tfx swarm run <prd>${RESET} ${GRAY}${s.subcommands.run}${RESET}
6171
+ ${WHITE_BRIGHT}tfx swarm preflight <prd>${RESET} ${GRAY}${s.subcommands.preflight}${RESET}
6166
6172
  ${WHITE_BRIGHT}tfx swarm plan <prd>${RESET} ${GRAY}${s.subcommands.plan}${RESET}
6167
6173
  ${WHITE_BRIGHT}tfx swarm list${RESET} ${GRAY}${s.subcommands.list}${RESET}
6168
6174
  ${WHITE_BRIGHT}tfx swarm status${RESET} ${GRAY}${s.subcommands.status}${RESET}
@@ -6173,9 +6179,8 @@ ${s.options.map((o) => ` ${DIM}${o.name.padEnd(16)}${RESET} ${GRAY}${o.descri
6173
6179
  return;
6174
6180
  }
6175
6181
  await checkHubRunning();
6176
- const { cmdSwarmRun, cmdSwarmPlan, cmdSwarmList } = await import(
6177
- "../hub/team/swarm-cli.mjs"
6178
- );
6182
+ const { cmdSwarmRun, cmdSwarmPlan, cmdSwarmList, cmdSwarmPreflight } =
6183
+ await import("../hub/team/swarm-cli.mjs");
6179
6184
  if (sub === "list" || sub === "status") {
6180
6185
  await cmdSwarmList(cmdArgs.slice(1), { json: JSON_OUTPUT });
6181
6186
  return;
@@ -6184,6 +6189,10 @@ ${s.options.map((o) => ` ${DIM}${o.name.padEnd(16)}${RESET} ${GRAY}${o.descri
6184
6189
  await cmdSwarmPlan(cmdArgs.slice(1), { json: JSON_OUTPUT });
6185
6190
  return;
6186
6191
  }
6192
+ if (sub === "preflight") {
6193
+ await cmdSwarmPreflight(cmdArgs.slice(1), { json: JSON_OUTPUT });
6194
+ return;
6195
+ }
6187
6196
  if (sub === "run") {
6188
6197
  await cmdSwarmRun(cmdArgs.slice(1), { json: JSON_OUTPUT });
6189
6198
  return;
@@ -504,7 +504,7 @@ async function main() {
504
504
  }
505
505
 
506
506
  // ── PostToolUse: 컨텍스트 압축 nudge (인라인, 프로세스 추가 없음) ──
507
- if (eventName === "PostToolUse" && !blocked) {
507
+ if (eventName === "PostToolUse" && toolName !== "Bash" && !blocked) {
508
508
  try {
509
509
  const home = process.env.HOME || process.env.USERPROFILE || "";
510
510
  const snapshotPath = join(
@@ -8,6 +8,19 @@
8
8
  "external_priority": 100
9
9
  },
10
10
  "events": {
11
+ "PermissionRequest": [
12
+ {
13
+ "id": "tfx-permission-safe-allow",
14
+ "source": "triflux",
15
+ "matcher": "Bash",
16
+ "command": "node \"${PLUGIN_ROOT}/hooks/permission-safe-allow.mjs\"",
17
+ "priority": 0,
18
+ "enabled": true,
19
+ "timeout": 2,
20
+ "blocking": false,
21
+ "description": "안전한 repo-local Bash PermissionRequest 자동 허용 (#245)"
22
+ }
23
+ ],
11
24
  "PreToolUse": [
12
25
  {
13
26
  "id": "tfx-safety-guard",
@@ -97,6 +110,17 @@
97
110
  "timeout": 3,
98
111
  "blocking": false,
99
112
  "description": "감시 대상 MCP 설정 변경 감지 → stdio MCP 자동 치환"
113
+ },
114
+ {
115
+ "id": "tfx-post-tool-tips",
116
+ "source": "triflux",
117
+ "matcher": "Bash|Edit|Write",
118
+ "command": "node \"${PLUGIN_ROOT}/hooks/post-tool-tips.mjs\"",
119
+ "priority": 2,
120
+ "enabled": true,
121
+ "timeout": 2,
122
+ "blocking": false,
123
+ "description": "중요 경로 변경 시 opt-in rules reminder 주입 (#245)"
100
124
  }
101
125
  ],
102
126
  "PostToolUseFailure": [
@@ -226,7 +250,7 @@
226
250
  "enabled": true,
227
251
  "timeout": 5,
228
252
  "blocking": true,
229
- "description": "활성 파이프라인 감지 → 종료 차단"
253
+ "description": "컨텍스트 guard/retry cap + 활성 파이프라인 감지 → Stop 차단"
230
254
  },
231
255
  {
232
256
  "id": "ext-session-vault-export",
@@ -252,18 +276,68 @@
252
276
  "description": "MCP 고아 프로세스 정리"
253
277
  }
254
278
  ],
279
+ "SessionEnd": [
280
+ {
281
+ "id": "tfx-session-end-cleanup",
282
+ "source": "triflux",
283
+ "matcher": "*",
284
+ "command": "node \"${PLUGIN_ROOT}/hooks/session-end-cleanup.mjs\"",
285
+ "priority": 0,
286
+ "enabled": true,
287
+ "timeout": 3,
288
+ "blocking": false,
289
+ "description": "세션 종료 시 lifecycle 상태 보고 및 opt-in 정리 (#245)"
290
+ }
291
+ ],
292
+ "SubagentStart": [
293
+ {
294
+ "id": "tfx-subagent-tracker",
295
+ "source": "triflux",
296
+ "matcher": "*",
297
+ "command": "node \"${PLUGIN_ROOT}/hooks/subagent-tracker.mjs\"",
298
+ "priority": 0,
299
+ "enabled": true,
300
+ "timeout": 2,
301
+ "blocking": false,
302
+ "description": "서브에이전트 lifecycle 시작/종료 상태 추적 (#245)"
303
+ }
304
+ ],
255
305
  "SubagentStop": [
306
+ {
307
+ "id": "tfx-subagent-tracker",
308
+ "source": "triflux",
309
+ "matcher": "*",
310
+ "command": "node \"${PLUGIN_ROOT}/hooks/subagent-tracker.mjs\"",
311
+ "priority": 0,
312
+ "enabled": true,
313
+ "timeout": 2,
314
+ "blocking": false,
315
+ "description": "서브에이전트 lifecycle 시작/종료 상태 추적 (#245)"
316
+ },
256
317
  {
257
318
  "id": "tfx-subagent-verifier",
258
319
  "source": "triflux",
259
320
  "matcher": "*",
260
321
  "command": "node \"${PLUGIN_ROOT}/hooks/subagent-verifier.mjs\"",
261
- "priority": 0,
322
+ "priority": 1,
262
323
  "enabled": true,
263
324
  "timeout": 3,
264
325
  "blocking": false,
265
326
  "description": "서브에이전트 결과 품질 체크"
266
327
  }
328
+ ],
329
+ "PreCompact": [
330
+ {
331
+ "id": "tfx-pre-compact-snapshot",
332
+ "source": "triflux",
333
+ "matcher": "*",
334
+ "command": "node \"${PLUGIN_ROOT}/hooks/pre-compact-snapshot.mjs\"",
335
+ "priority": 0,
336
+ "enabled": true,
337
+ "timeout": 3,
338
+ "blocking": false,
339
+ "description": "compact 직전 repo-local 진행 상태 스냅샷 주입 (#245)"
340
+ }
267
341
  ]
268
342
  }
269
343
  }