triflux 10.3.4 → 10.7.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 (329) hide show
  1. package/LICENSE +21 -21
  2. package/bin/tfx-doctor-tui.mjs +1 -1
  3. package/bin/tfx-doctor.mjs +6 -1
  4. package/bin/tfx-profile.mjs +1 -1
  5. package/bin/tfx-setup-tui.mjs +1 -1
  6. package/bin/tfx-setup.mjs +6 -1
  7. package/bin/triflux.mjs +2396 -1140
  8. package/hooks/agent-route-guard.mjs +12 -8
  9. package/hooks/cross-review-tracker.mjs +21 -8
  10. package/hooks/error-context.mjs +19 -7
  11. package/hooks/hook-adaptive-collector.mjs +18 -16
  12. package/hooks/hook-manager.mjs +93 -32
  13. package/hooks/hook-orchestrator.mjs +108 -24
  14. package/hooks/hook-registry.json +11 -0
  15. package/hooks/keyword-rules.json +6 -10
  16. package/hooks/lib/resolve-root.mjs +1 -1
  17. package/hooks/mcp-config-watcher.mjs +6 -2
  18. package/hooks/pipeline-stop.mjs +3 -6
  19. package/hooks/safety-guard.mjs +99 -28
  20. package/hooks/session-start-fast.mjs +143 -0
  21. package/hooks/subagent-verifier.mjs +5 -4
  22. package/hub/account-broker.mjs +256 -60
  23. package/hub/adaptive-diagnostic.mjs +75 -48
  24. package/hub/adaptive-inject.mjs +95 -57
  25. package/hub/adaptive-memory.mjs +156 -42
  26. package/hub/adaptive.mjs +60 -31
  27. package/hub/assign-callbacks.mjs +67 -30
  28. package/hub/bridge.mjs +0 -1
  29. package/hub/cli-adapter-base.mjs +200 -48
  30. package/hub/codex-adapter.mjs +76 -96
  31. package/hub/codex-compat.mjs +3 -3
  32. package/hub/codex-preflight.mjs +63 -37
  33. package/hub/delegator/contracts.mjs +19 -23
  34. package/hub/delegator/index.mjs +3 -3
  35. package/hub/delegator/service.mjs +88 -64
  36. package/hub/delegator/tool-definitions.mjs +5 -5
  37. package/hub/fullcycle.mjs +33 -17
  38. package/hub/gemini-adapter.mjs +69 -94
  39. package/hub/hitl.mjs +89 -30
  40. package/hub/intent.mjs +161 -38
  41. package/hub/lib/cache-guard.mjs +43 -17
  42. package/hub/lib/mcp-response-cache.mjs +66 -32
  43. package/hub/lib/memory-store.mjs +285 -111
  44. package/hub/lib/path-utils.mjs +35 -37
  45. package/hub/lib/process-utils.mjs +106 -37
  46. package/hub/lib/spawn-trace.mjs +527 -0
  47. package/hub/lib/ssh-command.mjs +34 -4
  48. package/hub/lib/ssh-retry.mjs +5 -1
  49. package/hub/lib/uuidv7.mjs +4 -3
  50. package/hub/memory-doctor.mjs +266 -106
  51. package/hub/middleware/request-logger.mjs +61 -34
  52. package/hub/paths.mjs +9 -9
  53. package/hub/pipeline/gates/confidence.mjs +34 -15
  54. package/hub/pipeline/gates/consensus.mjs +27 -15
  55. package/hub/pipeline/gates/index.mjs +7 -3
  56. package/hub/pipeline/gates/selfcheck.mjs +57 -19
  57. package/hub/pipeline/index.mjs +77 -42
  58. package/hub/pipeline/state.mjs +10 -10
  59. package/hub/pipeline/transitions.mjs +40 -23
  60. package/hub/platform.mjs +57 -48
  61. package/hub/promote-penalties.mjs +25 -7
  62. package/hub/quality/deslop.mjs +70 -49
  63. package/hub/research.mjs +32 -25
  64. package/hub/router.mjs +240 -107
  65. package/hub/routing/complexity.mjs +132 -29
  66. package/hub/routing/index.mjs +17 -12
  67. package/hub/routing/q-learning.mjs +76 -28
  68. package/hub/server.mjs +4 -4
  69. package/hub/session-fingerprint.mjs +126 -60
  70. package/hub/state.mjs +84 -43
  71. package/hub/store-adapter.mjs +59 -26
  72. package/hub/store.mjs +356 -153
  73. package/hub/team/agent-map.json +22 -7
  74. package/hub/team/ansi.mjs +186 -122
  75. package/hub/team/backend.mjs +28 -10
  76. package/hub/team/cli/commands/attach.mjs +29 -9
  77. package/hub/team/cli/commands/control.mjs +29 -8
  78. package/hub/team/cli/commands/debug.mjs +32 -11
  79. package/hub/team/cli/commands/focus.mjs +38 -11
  80. package/hub/team/cli/commands/interrupt.mjs +18 -6
  81. package/hub/team/cli/commands/kill.mjs +16 -5
  82. package/hub/team/cli/commands/list.mjs +11 -4
  83. package/hub/team/cli/commands/send.mjs +19 -6
  84. package/hub/team/cli/commands/start/index.mjs +154 -31
  85. package/hub/team/cli/commands/start/parse-args.mjs +38 -11
  86. package/hub/team/cli/commands/start/start-headless.mjs +112 -36
  87. package/hub/team/cli/commands/start/start-in-process.mjs +12 -2
  88. package/hub/team/cli/commands/start/start-mux.mjs +70 -21
  89. package/hub/team/cli/commands/start/start-wt.mjs +29 -12
  90. package/hub/team/cli/commands/status.mjs +43 -14
  91. package/hub/team/cli/commands/stop.mjs +11 -4
  92. package/hub/team/cli/commands/task.mjs +8 -3
  93. package/hub/team/cli/commands/tasks.mjs +1 -1
  94. package/hub/team/cli/index.mjs +2 -2
  95. package/hub/team/cli/manifest.mjs +38 -8
  96. package/hub/team/cli/render.mjs +30 -8
  97. package/hub/team/cli/services/attach-fallback.mjs +31 -11
  98. package/hub/team/cli/services/hub-client.mjs +42 -14
  99. package/hub/team/cli/services/member-selector.mjs +11 -4
  100. package/hub/team/cli/services/native-control.mjs +48 -21
  101. package/hub/team/cli/services/runtime-mode.mjs +2 -1
  102. package/hub/team/cli/services/state-store.mjs +25 -8
  103. package/hub/team/cli/services/task-model.mjs +16 -6
  104. package/hub/team/conductor-mesh-bridge.mjs +24 -23
  105. package/hub/team/conductor.mjs +8 -4
  106. package/hub/team/dashboard-anchor.mjs +4 -5
  107. package/hub/team/dashboard-layout.mjs +3 -1
  108. package/hub/team/dashboard-open.mjs +41 -21
  109. package/hub/team/dashboard.mjs +76 -28
  110. package/hub/team/event-log.mjs +18 -10
  111. package/hub/team/handoff.mjs +31 -15
  112. package/hub/team/headless.mjs +2 -1
  113. package/hub/team/health-probe.mjs +69 -54
  114. package/hub/team/launcher-template.mjs +16 -13
  115. package/hub/team/native-supervisor.mjs +65 -21
  116. package/hub/team/native.mjs +74 -35
  117. package/hub/team/nativeProxy.mjs +184 -113
  118. package/hub/team/notify.mjs +119 -76
  119. package/hub/team/orchestrator.mjs +9 -4
  120. package/hub/team/pane.mjs +12 -7
  121. package/hub/team/process-cleanup.mjs +25 -16
  122. package/hub/team/psmux.mjs +491 -201
  123. package/hub/team/remote-probe.mjs +68 -52
  124. package/hub/team/remote-session.mjs +117 -59
  125. package/hub/team/remote-watcher.mjs +61 -33
  126. package/hub/team/routing.mjs +51 -25
  127. package/hub/team/runtime-strategy.mjs +3 -1
  128. package/hub/team/session.mjs +98 -34
  129. package/hub/team/staleState.mjs +72 -30
  130. package/hub/team/swarm-locks.mjs +15 -13
  131. package/hub/team/swarm-planner.mjs +32 -21
  132. package/hub/team/swarm-reconciler.mjs +48 -23
  133. package/hub/team/tui-lite.mjs +266 -68
  134. package/hub/team/tui-remote-adapter.mjs +14 -10
  135. package/hub/team/tui-viewer.mjs +99 -43
  136. package/hub/team/tui.mjs +708 -271
  137. package/hub/team/worktree-lifecycle.mjs +152 -58
  138. package/hub/team/wt-manager.mjs +24 -14
  139. package/hub/token-mode.mjs +71 -71
  140. package/hub/tray.mjs +66 -23
  141. package/hub/workers/claude-worker.mjs +162 -118
  142. package/hub/workers/codex-mcp.mjs +192 -141
  143. package/hub/workers/delegator-mcp.mjs +507 -333
  144. package/hub/workers/factory.mjs +8 -8
  145. package/hub/workers/gemini-worker.mjs +115 -84
  146. package/hub/workers/interface.mjs +6 -1
  147. package/hub/workers/worker-utils.mjs +21 -14
  148. package/hud/colors.mjs +27 -9
  149. package/hud/constants.mjs +162 -26
  150. package/hud/context-monitor.mjs +82 -41
  151. package/hud/hud-qos-status.mjs +129 -49
  152. package/hud/mission-board.mjs +6 -3
  153. package/hud/providers/claude.mjs +226 -115
  154. package/hud/providers/codex.mjs +62 -22
  155. package/hud/providers/gemini.mjs +168 -56
  156. package/hud/renderers.mjs +384 -119
  157. package/hud/terminal.mjs +101 -31
  158. package/hud/utils.mjs +78 -38
  159. package/mesh/index.mjs +11 -5
  160. package/mesh/mesh-budget.mjs +18 -9
  161. package/mesh/mesh-heartbeat.mjs +1 -1
  162. package/mesh/mesh-queue.mjs +3 -5
  163. package/mesh/mesh-router.mjs +5 -4
  164. package/package.json +2 -1
  165. package/scripts/__tests__/gen-skill-docs.test.mjs +36 -7
  166. package/scripts/__tests__/keyword-detector.test.mjs +77 -28
  167. package/scripts/__tests__/mcp-guard-engine.test.mjs +58 -20
  168. package/scripts/__tests__/remote-spawn-transfer.test.mjs +30 -19
  169. package/scripts/__tests__/remote-spawn.test.mjs +10 -4
  170. package/scripts/__tests__/session-start-fast.test.mjs +36 -0
  171. package/scripts/__tests__/skill-template.test.mjs +98 -50
  172. package/scripts/__tests__/smoke.test.mjs +1 -1
  173. package/scripts/__tests__/spawn-trace.test.mjs +102 -0
  174. package/scripts/__tests__/tfx-doctor-diagnose.test.mjs +48 -0
  175. package/scripts/cache-doctor.mjs +11 -4
  176. package/scripts/cache-warmup.mjs +96 -37
  177. package/scripts/claudemd-sync.mjs +27 -17
  178. package/scripts/codex-gateway-preflight.mjs +52 -37
  179. package/scripts/codex-mcp-gateway-sync.mjs +59 -39
  180. package/scripts/completions/tfx.bash +47 -47
  181. package/scripts/completions/tfx.fish +44 -44
  182. package/scripts/completions/tfx.zsh +83 -83
  183. package/scripts/config-audit.mjs +232 -0
  184. package/scripts/convert-to-tmpl.mjs +54 -0
  185. package/scripts/cross-review-gate.mjs +35 -12
  186. package/scripts/cross-review-tracker.mjs +21 -8
  187. package/scripts/demo.mjs +35 -17
  188. package/scripts/doctor-diagnose.mjs +284 -0
  189. package/scripts/gen-skill-docs.mjs +7 -2
  190. package/scripts/gen-skill-manifest.mjs +2 -1
  191. package/scripts/headless-guard.mjs +86 -48
  192. package/scripts/hub-ensure.mjs +45 -26
  193. package/scripts/keyword-detector.mjs +41 -20
  194. package/scripts/keyword-rules-expander.mjs +47 -30
  195. package/scripts/lib/claudemd-scanner.mjs +6 -1
  196. package/scripts/lib/context.mjs +3 -3
  197. package/scripts/lib/cross-review-utils.mjs +6 -3
  198. package/scripts/lib/env-probe.mjs +47 -28
  199. package/scripts/lib/gemini-profiles.mjs +44 -10
  200. package/scripts/lib/handoff.mjs +33 -17
  201. package/scripts/lib/hook-utils.mjs +8 -6
  202. package/scripts/lib/keyword-rules.mjs +43 -19
  203. package/scripts/lib/logger.mjs +24 -24
  204. package/scripts/lib/mcp-filter.mjs +377 -239
  205. package/scripts/lib/mcp-guard-engine.mjs +194 -79
  206. package/scripts/lib/mcp-manifest.mjs +23 -13
  207. package/scripts/lib/mcp-server-catalog.mjs +300 -63
  208. package/scripts/lib/psmux-info.mjs +11 -6
  209. package/scripts/lib/remote-spawn-transfer.mjs +44 -14
  210. package/scripts/lib/skill-template.mjs +30 -7
  211. package/scripts/mcp-check.mjs +58 -39
  212. package/scripts/mcp-gateway-config.mjs +83 -39
  213. package/scripts/mcp-gateway-ensure.mjs +43 -35
  214. package/scripts/mcp-gateway-integration-test.mjs +70 -58
  215. package/scripts/mcp-gateway-start.mjs +126 -60
  216. package/scripts/mcp-gateway-verify.mjs +24 -22
  217. package/scripts/mcp-safety-guard.mjs +44 -11
  218. package/scripts/notion-read.mjs +199 -84
  219. package/scripts/pack.mjs +94 -89
  220. package/scripts/preflight-cache.mjs +27 -10
  221. package/scripts/preinstall.mjs +42 -13
  222. package/scripts/remote-spawn.mjs +309 -94
  223. package/scripts/run.cjs +8 -5
  224. package/scripts/session-spawn-helper.mjs +130 -39
  225. package/scripts/session-stale-cleanup.mjs +123 -0
  226. package/scripts/setup.mjs +941 -492
  227. package/scripts/test-lock.mjs +20 -7
  228. package/scripts/test-tfx-route-no-claude-native.mjs +16 -12
  229. package/scripts/tfx-batch-stats.mjs +32 -11
  230. package/scripts/tfx-gate-activate.mjs +11 -4
  231. package/scripts/tfx-route-post.mjs +87 -20
  232. package/scripts/tfx-route-worker.mjs +57 -51
  233. package/scripts/tfx-route.sh +41 -124
  234. package/scripts/tmp-cleanup.mjs +21 -7
  235. package/scripts/token-snapshot.mjs +204 -85
  236. package/skills/.omc/state/agent-replay-8f0e10a9-9693-4410-96f5-a6b07e8ed995.jsonl +1 -0
  237. package/skills/.omc/state/idle-notif-cooldown.json +3 -0
  238. package/skills/.omc/state/last-tool-error.json +7 -0
  239. package/skills/.omc/state/subagent-tracking.json +7 -0
  240. package/skills/_templates/base.md +1 -6
  241. package/skills/merge-worktree/SKILL.md.tmpl +144 -0
  242. package/skills/shared/telemetry-segment.md +6 -0
  243. package/skills/star-prompt/SKILL.md.tmpl +222 -0
  244. package/skills/tfx-analysis/SKILL.md.tmpl +107 -0
  245. package/skills/tfx-analysis/skill.json +1 -6
  246. package/skills/tfx-auto/SKILL.md +1 -0
  247. package/skills/tfx-auto-codex/SKILL.md.tmpl +106 -0
  248. package/skills/tfx-auto-codex/skill.json +1 -3
  249. package/skills/tfx-autopilot/SKILL.md.tmpl +116 -0
  250. package/skills/tfx-autopilot/skill.json +1 -5
  251. package/skills/tfx-autoresearch/SKILL.md.tmpl +136 -0
  252. package/skills/tfx-autoroute/SKILL.md.tmpl +189 -0
  253. package/skills/tfx-autoroute/skill.json +1 -7
  254. package/skills/tfx-codex/SKILL.md +1 -0
  255. package/skills/tfx-codex/skill.json +1 -3
  256. package/skills/tfx-codex-swarm/SKILL.md.tmpl +16 -0
  257. package/skills/tfx-codex-swarm/evals/evals.json +1 -1
  258. package/skills/tfx-codex-swarm/skill.json +1 -4
  259. package/skills/tfx-codex-swarm-workspace/iteration-1/benchmark.json +54 -12
  260. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/grading.json +35 -7
  261. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/grading.json +35 -7
  262. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/grading.json +25 -5
  263. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/grading.json +25 -5
  264. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/grading.json +20 -4
  265. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/grading.json +16 -4
  266. package/skills/tfx-consensus/SKILL.md.tmpl +146 -0
  267. package/skills/tfx-debate/SKILL.md.tmpl +192 -0
  268. package/skills/tfx-debate/skill.json +1 -7
  269. package/skills/tfx-deep-analysis/SKILL.md.tmpl +228 -0
  270. package/skills/tfx-deep-analysis/skill.json +1 -5
  271. package/skills/tfx-deep-interview/SKILL.md.tmpl +203 -0
  272. package/skills/tfx-deep-plan/SKILL.md.tmpl +282 -0
  273. package/skills/tfx-deep-qa/SKILL.md.tmpl +165 -0
  274. package/skills/tfx-deep-qa/skill.json +1 -6
  275. package/skills/tfx-deep-research/SKILL.md.tmpl +217 -0
  276. package/skills/tfx-deep-review/SKILL.md.tmpl +179 -0
  277. package/skills/tfx-doctor/SKILL.md +21 -0
  278. package/skills/tfx-doctor/SKILL.md.tmpl +172 -0
  279. package/skills/tfx-doctor/skill.json +1 -3
  280. package/skills/tfx-find/SKILL.md +1 -0
  281. package/skills/tfx-forge/SKILL.md.tmpl +187 -0
  282. package/skills/tfx-fullcycle/SKILL.md.tmpl +286 -0
  283. package/skills/tfx-fullcycle/skill.json +1 -6
  284. package/skills/tfx-gemini/SKILL.md.tmpl +91 -0
  285. package/skills/tfx-gemini/skill.json +1 -3
  286. package/skills/tfx-hooks/SKILL.md.tmpl +216 -0
  287. package/skills/tfx-hooks/skill.json +1 -3
  288. package/skills/tfx-hub/SKILL.md.tmpl +212 -0
  289. package/skills/tfx-hub/skill.json +1 -3
  290. package/skills/tfx-index/SKILL.md +1 -0
  291. package/skills/tfx-index/skill.json +1 -6
  292. package/skills/tfx-interview/SKILL.md.tmpl +285 -0
  293. package/skills/tfx-multi/SKILL.md.tmpl +183 -0
  294. package/skills/tfx-multi/skill.json +1 -3
  295. package/skills/tfx-panel/SKILL.md.tmpl +189 -0
  296. package/skills/tfx-panel/skill.json +1 -7
  297. package/skills/tfx-persist/SKILL.md.tmpl +270 -0
  298. package/skills/tfx-persist/skill.json +1 -7
  299. package/skills/tfx-plan/SKILL.md +1 -0
  300. package/skills/tfx-plan/skill.json +1 -6
  301. package/skills/tfx-profile/SKILL.md.tmpl +239 -0
  302. package/skills/tfx-profile/skill.json +1 -3
  303. package/skills/tfx-prune/SKILL.md.tmpl +200 -0
  304. package/skills/tfx-prune/skill.json +1 -7
  305. package/skills/tfx-psmux-rules/SKILL.md.tmpl +326 -0
  306. package/skills/tfx-psmux-rules/skill.json +1 -4
  307. package/skills/tfx-qa/SKILL.md +1 -0
  308. package/skills/tfx-qa/skill.json +1 -6
  309. package/skills/tfx-ralph/SKILL.md.tmpl +28 -0
  310. package/skills/tfx-ralph/skill.json +1 -4
  311. package/skills/tfx-remote-setup/SKILL.md.tmpl +576 -0
  312. package/skills/tfx-remote-setup/skill.json +1 -3
  313. package/skills/tfx-remote-spawn/SKILL.md.tmpl +263 -0
  314. package/skills/tfx-remote-spawn/references/hosts.json +16 -0
  315. package/skills/tfx-remote-spawn/skill.json +1 -4
  316. package/skills/tfx-research/SKILL.md +1 -0
  317. package/skills/tfx-review/SKILL.md +1 -0
  318. package/skills/tfx-review/skill.json +1 -6
  319. package/skills/tfx-setup/SKILL.md.tmpl +504 -0
  320. package/skills/tfx-setup/skill.json +1 -3
  321. package/skills/tfx-swarm/SKILL.md +22 -0
  322. package/skills/tfx-swarm/SKILL.md.tmpl +218 -0
  323. package/tui/codex-profile.mjs +88 -33
  324. package/tui/core.mjs +45 -15
  325. package/tui/doctor.mjs +75 -28
  326. package/tui/gemini-profile.mjs +74 -29
  327. package/tui/monitor-data.mjs +8 -4
  328. package/tui/monitor.mjs +71 -27
  329. package/tui/setup.mjs +133 -42
@@ -0,0 +1,200 @@
1
+ ---
2
+ internal: true
3
+ name: tfx-prune
4
+ description: "AI가 생성한 불필요한 코드(슬롭)를 제거할 때 사용한다. 'deslop', '슬롭 제거', 'anti-slop', '코드 정리', '불필요한 코드 제거', '과잉 추상화 정리' 같은 요청에 반드시 사용. AI 생성 코드의 중복, 불필요 추상화, 과잉 에러 핸들링을 정리할 때 적극 활용."
5
+ triggers:
6
+ - deslop
7
+ - 슬롭 제거
8
+ - anti-slop
9
+ - 정리
10
+ - slop
11
+ argument-hint: "[파일 경로 또는 git diff 범위]"
12
+ ---
13
+
14
+ # {{SKILL_NAME}} — Tri-Verified AI Slop Remover
15
+
16
+ > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
17
+ > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
18
+
19
+
20
+ > OMC ai-slop-cleaner 오마주. 핵심 차별점: 단일 판단이 아닌 **3자 독립 감지 + 합의** 기반 제거.
21
+ > "AI가 만든 슬롭은 AI 3명이 합의해야 슬롭이다."
22
+
23
+ ## HARD RULES
24
+
25
+ > headless-guard가 이 규칙 위반을 **자동 차단**한다. 우회 불가.
26
+
27
+ 1. **`codex exec` / `gemini -p` 직접 호출 절대 금지**
28
+ 2. Codex·Gemini → `Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'cli:프롬프트:역할' --timeout 600")` **만** 사용
29
+ 3. Claude → `Agent(run_in_background=true)`
30
+ 4. Bash + Agent를 같은 메시지에서 동시 호출하여 병렬 실행
31
+
32
+ ## MODEL ROLES
33
+
34
+ | CLI | 역할 | 감지 관점 |
35
+ |-----|------|----------|
36
+ | Claude (Opus) | 코드 품질 분석 + 합의 중재 | 설계 원칙, 코드 구조, 불필요 추상화 |
37
+ | Codex | AI 슬롭 탐지 | 구현 효율, 중복 패턴, 과잉 에러 핸들링 |
38
+ | Gemini | 가독성 평가 | 가독성/DX, 과잉 주석, 과잉 타입 |
39
+
40
+ ## 슬롭 카테고리
41
+
42
+ | 카테고리 | 설명 | 예시 |
43
+ |----------|------|------|
44
+ | 불필요 추상화 | 단일 용도인데 인터페이스/팩토리/전략 패턴 적용 | `UserFactory` for 1 user type |
45
+ | 중복 코드 | 같은 로직의 반복 | 동일 validation을 3곳에 복붙 |
46
+ | 과잉 에러 핸들링 | 발생 불가능한 에러를 처리 | `catch (e) { /* impossible */ }` |
47
+ | 과잉 주석 | 코드가 이미 명확한데 주석 | `// increment i by 1` `i++` |
48
+ | 과잉 타입 | 불필요하게 복잡한 타입 정의 | 5단계 중첩 제네릭 |
49
+ | 사용되지 않는 코드 | import 했지만 사용 안 함 | dead imports, unused variables |
50
+ | 과잉 로깅 | 불필요한 console.log/debug | `console.log("here")` |
51
+
52
+ ## EXECUTION STEPS
53
+
54
+ ### Step 0: 슬롭 제거 범위 선택
55
+
56
+ 인자 없이 호출된 경우 사용자에게 범위를 선택받는다:
57
+
58
+ ```
59
+ 1. 최근 변경 파일만 (git diff)
60
+ 2. 전체 프로젝트
61
+ 3. 특정 디렉토리 지정
62
+ ```
63
+
64
+ - 1번 → `git diff HEAD`로 최근 변경 파일 대상
65
+ - 2번 → 프로젝트 전체 소스 파일 대상 (대규모 주의 경고 표시)
66
+ - 3번 → 추가 AskUserQuestion으로 대상 디렉토리 경로 입력받음
67
+
68
+ 파일 경로나 git diff 범위가 인자로 이미 제공된 경우 이 단계를 건너뛴다.
69
+
70
+ ### Step 1: 대상 파일 수집
71
+
72
+ 대상 결정 우선순위:
73
+ 1. 파일 경로 지정 → 해당 파일만
74
+ 2. git diff 범위 지정 → diff에 포함된 파일
75
+ 3. 입력 없음 → `git diff --name-only HEAD~1`로 최근 변경 파일
76
+ 4. "all" → 프로젝트 전체 소스 파일 (주의: 대규모)
77
+
78
+ 소스 파일만 필터: `.ts`, `.js`, `.mjs`, `.tsx`, `.py` 등. `node_modules`, `dist`, `build` 제외.
79
+
80
+ ### Step 2: 3자 독립 슬롭 감지 (Anti-Herding)
81
+
82
+ **아래 2개 도구를 반드시 같은 응답에서 동시에 호출하라.**
83
+
84
+ Claude (Agent, background):
85
+ ```
86
+ Agent(
87
+ subagent_type="claude-sonnet-4-5",
88
+ model="opus",
89
+ run_in_background=true,
90
+ prompt="다음 파일에서 AI 슬롭을 감지하세요. 코드 품질 관점으로 분석합니다.
91
+ 슬롭 정의: 불필요 추상화, 중복, 과잉 에러핸들링, 과잉 주석, 과잉 타입, 미사용 코드, 과잉 로깅.
92
+ 파일: {file_content}
93
+ 각 발견에 대해 JSON: [{ id, category, line_start, line_end, description, severity, suggested_fix }]
94
+ severity: critical(기능에 영향) | high(가독성 심각) | medium(개선) | low(취향)
95
+ 슬롭이 아닌 것은 보고하지 마세요. 과탐(false positive)보다 미탐이 낫습니다."
96
+ )
97
+ ```
98
+
99
+ Codex + Gemini (Bash, background):
100
+ ```
101
+ Bash("tfx multi --teammate-mode headless --auto-attach --dashboard \
102
+ --assign 'codex:다음 파일에서 AI 슬롭을 감지하세요. 구현 효율 관점(중복 패턴, 과잉 에러핸들링, 미사용 코드)으로 분석. 파일: {file_content}. JSON: [{id,category,line_start,line_end,description,severity,suggested_fix}]. severity: critical|high|medium|low. 과탐보다 미탐이 낫습니다.:slop-detector' \
103
+ --assign 'gemini:다음 파일에서 AI 슬롭을 감지하세요. 가독성/DX 관점(과잉 주석, 과잉 타입, 불필요 추상화)으로 분석. 파일: {file_content}. JSON: [{id,category,line_start,line_end,description,severity,suggested_fix}]. severity: critical|high|medium|low. 과탐보다 미탐이 낫습니다.:readability-reviewer' \
104
+ --timeout 600")
105
+ ```
106
+
107
+ ### Step 3: 합의 필터링
108
+
109
+ 3개 CLI 결과를 교차검증한다:
110
+
111
+ ```
112
+ for each finding in ALL results:
113
+ agreement = count(CLIs that found same or similar slop at same location)
114
+
115
+ if agreement >= 2:
116
+ → "CONFIRMED SLOP" — 제거 대상
117
+ elif agreement == 1:
118
+ → "UNCONFIRMED" — 제거하지 않음 (과탐 방지)
119
+ ```
120
+
121
+ 원칙: 2+ 합의된 항목만 제거한다. 1개 CLI만 지적한 항목은 무시한다.
122
+
123
+ ### Step 4: 슬롭 제거
124
+
125
+ 확정된 슬롭을 안전 순서대로 제거한다:
126
+
127
+ 1. 과잉 주석 제거 (가장 안전)
128
+ 2. 미사용 코드/import 제거
129
+ 3. 과잉 로깅 제거
130
+ 4. 과잉 에러핸들링 간소화
131
+ 5. 중복 코드 통합
132
+ 6. 불필요 추상화 제거 (가장 위험 — 인터페이스 변경 가능)
133
+
134
+ 각 제거 후 변경 내용을 기록한다. 제거 이유를 주석으로 남기지 않는다 (그것 자체가 슬롭).
135
+
136
+ ### Step 5: 회귀 테스트
137
+
138
+ 제거 후 안전성을 검증한다:
139
+
140
+ 1. 기존 테스트 실행: `Bash("npm test")` (또는 프로젝트 테스트 명령)
141
+ 2. 테스트 실패 시 → 해당 제거를 롤백 → 롤백된 항목을 "위험 — 수동 검토 필요"로 표시
142
+ 3. 테스트 통과 시 → 제거 확정
143
+
144
+ ### Step 6: 보고서 출력
145
+
146
+ ```markdown
147
+ ## Deslop 보고서
148
+
149
+ ### 요약
150
+ | 항목 | 수 |
151
+ |------|-----|
152
+ | 대상 파일 | {count} |
153
+ | 감지 (전체) | {total_findings} |
154
+ | 합의 확정 | {confirmed} |
155
+ | 미확정 (무시) | {unconfirmed} |
156
+ | 제거 완료 | {removed} |
157
+ | 롤백 (테스트 실패) | {rolled_back} |
158
+
159
+ ### 제거된 슬롭
160
+ | # | 파일 | 라인 | 카테고리 | 합의 | 설명 |
161
+ |---|------|------|----------|------|------|
162
+ | 1 | auth.ts | 42-48 | 과잉 주석 | 3/3 | 자명한 코드에 장문 주석 |
163
+ | 2 | utils.ts | 15-20 | 미사용 import | 2/3 | lodash 미사용 |
164
+
165
+ ### 미확정 (수동 검토 권장)
166
+ | # | 파일 | 라인 | 카테고리 | 지적 CLI | 설명 |
167
+ |---|------|------|----------|---------|------|
168
+ | 1 | api.ts | 80-95 | 불필요 추상화 | Codex만 | Factory 패턴 필요성 논쟁 |
169
+
170
+ ### 테스트 결과
171
+ 통과: {pass}/{total} | 실패: {fail} | 롤백: {rollback}
172
+ ```
173
+
174
+ ## ERROR RECOVERY
175
+
176
+ - Codex/Gemini 타임아웃(600s 초과) → Claude Agent 단독으로 2자 합의 기준(단독 감지도 제거 대상) 적용
177
+ - 테스트 명령 없음 → Step 5 건너뜀, 보고서에 "테스트 미실행 — 수동 검증 필요" 표시
178
+ - 파일 파싱 오류 → 해당 파일 스킵 후 보고서에 "파싱 실패" 기록
179
+
180
+ ## TOKEN BUDGET
181
+
182
+ | 단계 | 토큰 |
183
+ |------|------|
184
+ | Step 1 (파일 수집) | ~0.5K |
185
+ | Step 2 (3x 독립 감지) | ~6K |
186
+ | Step 3 (합의 필터링) | ~1K |
187
+ | Step 4 (제거) | ~1.5K |
188
+ | Step 5 (회귀 테스트) | ~0.5K |
189
+ | Step 6 (보고서) | ~0.5K |
190
+ | **총합** | **~10K** |
191
+
192
+ ## 사용 예
193
+
194
+ ```
195
+ /tfx-prune
196
+ /tfx-prune src/auth/middleware.ts
197
+ /tfx-prune HEAD~5..HEAD
198
+ /정리 src/
199
+ /anti-slop "과잉 에러 핸들링 제거"
200
+ ```
@@ -1,13 +1,7 @@
1
1
  {
2
2
  "name": "tfx-prune",
3
3
  "description": "AI가 생성한 불필요한 코드(슬롭)를 제거할 때 사용한다. 'deslop', '슬롭 제거', 'anti-slop', '코드 정리', '불필요한 코드 제거', '과잉 추상화 정리' 같은 요청에 반드시 사용. AI 생성 코드의 중복, 불필요 추상화, 과잉 에러 핸들링을 정리할 때 적극 활용.",
4
- "triggers": [
5
- "deslop",
6
- "슬롭 제거",
7
- "anti-slop",
8
- "정리",
9
- "slop"
10
- ],
4
+ "triggers": ["deslop", "슬롭 제거", "anti-slop", "정리", "slop"],
11
5
  "argument_hint": "[파일 경로 또는 git diff 범위]",
12
6
  "internal": true
13
7
  }
@@ -0,0 +1,326 @@
1
+ ---
2
+ name: tfx-psmux-rules
3
+ description: >
4
+ psmux + Codex CLI 명령 생성 시 반드시 적용되는 강제 규칙. PowerShell/bash 구분,
5
+ 경로 형식, 인자 이스케이프, WT 정리, 프로파일 지정 방식 등을 검증한다.
6
+ 이 스킬은 psmux, send-keys, codex exec, codex spawn, 세션 생성, worktree 실행,
7
+ launch 스크립트 생성, WT attach, 패널 스플릿, 스웜 정리 시 자동 트리거된다.
8
+ 다른 스킬(tfx-codex-swarm, tfx-multi, tfx-remote-spawn 등)이 psmux 명령을
9
+ 생성할 때 이 스킬의 규칙을 위반하면 생성을 중단하고 수정해야 한다.
10
+ triggers:
11
+ - tfx-psmux-rules
12
+ - psmux-rules
13
+ ---
14
+
15
+ # {{SKILL_NAME}} — psmux + Codex CLI 강제 규칙
16
+
17
+ > **이 스킬은 참고 문서가 아니다. 강제 규칙이다.**
18
+ > psmux 명령, launch 스크립트, Codex CLI 호출을 생성하는 모든 스킬은
19
+ > 아래 규칙을 **반드시** 준수해야 한다. 위반 시 생성을 중단하고 수정한다.
20
+
21
+ ## 적용 시점
22
+
23
+ 다음 행위 중 하나라도 수행할 때 이 규칙이 자동 적용된다:
24
+ - `psmux send-keys` 명령 생성
25
+ - `launch-*.sh` 또는 `launch-*.ps1` 스크립트 생성
26
+ - `codex` CLI 호출 인자 조합
27
+ - `wt.exe` 탭/패인 명령 생성
28
+ - 스웜 세션 정리
29
+
30
+ ---
31
+
32
+ ## RULE 1: psmux 기본 셸 = PowerShell
33
+
34
+ psmux 세션의 기본 셸은 **PowerShell**이다.
35
+
36
+ ### MUST NOT (금지)
37
+
38
+ ```bash
39
+ # WRONG — bash 문법을 PowerShell 세션에 직접 전달
40
+ psmux send-keys -t session "cd '/c/Users/...' && codex ..." Enter
41
+ psmux send-keys -t session "prompt=\$(cat file.md)" Enter
42
+ psmux send-keys -t session "export FOO=bar" Enter
43
+ ```
44
+
45
+ ### MUST (필수)
46
+
47
+ ```bash
48
+ # CORRECT — PowerShell 구문으로 bash.exe 전체 경로 호출
49
+ BASH_WIN='C:\\Program Files\\Git\\bin\\bash.exe'
50
+ psmux send-keys -t session "& '$BASH_WIN' './launch.sh'" Enter
51
+
52
+ # CORRECT — PowerShell 네이티브 명령 사용
53
+ psmux send-keys -t session "Set-Location 'C:\\path'" Enter
54
+ psmux send-keys -t session "\$p = Get-Content 'file.md' -Raw" Enter
55
+ ```
56
+
57
+ ### 금지 패턴 체크리스트
58
+
59
+ | 패턴 | 문제 | 대체 |
60
+ |------|------|------|
61
+ | `cd '/c/...'` | PS가 `/c/`를 상대경로로 해석 → `C:\c\...` | `Set-Location 'C:\...'` |
62
+ | `$(cat file)` | bash 명령 치환, PS에서 `Get-Content` 호출됨 | `$p = Get-Content file -Raw` |
63
+ | `&&` | PS7에서 작동하지만 앞 명령 실패 시 의미 다름 | `;` 또는 별도 send-keys |
64
+ | `export VAR=val` | bash 전용 | `$env:VAR = 'val'` |
65
+ | `grep`, `awk`, `sed` | bash 유틸리티 | PS cmdlet 또는 bash.exe 경유 |
66
+
67
+ ---
68
+
69
+ ## RULE 2: 경로는 Windows 형식
70
+
71
+ psmux send-keys로 전달하는 경로는 반드시 **Windows 형식**이다.
72
+
73
+ ```
74
+ WRONG: /c/Users/SSAFY/Desktop/Projects/...
75
+ RIGHT: C:\Users\SSAFY\Desktop\Projects\...
76
+ ```
77
+
78
+ `.sh` 런처 내부에서만 Unix 경로(`/c/...`) 사용 가능.
79
+
80
+ ---
81
+
82
+ ## RULE 3: 프롬프트 인자 인용 필수
83
+
84
+ PRD/프롬프트 내용을 CLI 인자로 전달할 때 **반드시 인용**한다.
85
+
86
+ ### PowerShell (.ps1)
87
+
88
+ ```powershell
89
+ $p = (Get-Content 'prompt.md' -Raw) -replace "`r`n"," " -replace "`n"," "
90
+
91
+ # MUST — 인용 필수
92
+ codex -c 'model="gpt-5.3-codex"' "$p"
93
+
94
+ # MUST NOT — 미인용 시 & ; | 등이 PS 연산자로 해석됨
95
+ codex -c 'model="gpt-5.3-codex"' $p
96
+ ```
97
+
98
+ ### Bash (.sh)
99
+
100
+ ```bash
101
+ prompt=$(cat prompt.md)
102
+
103
+ # MUST — 더블쿼트 필수
104
+ exec codex "$prompt"
105
+
106
+ # MUST NOT — 워드 스플리팅 + 글로빙 발생
107
+ exec codex $prompt
108
+ ```
109
+
110
+ ---
111
+
112
+ ## RULE 4: 프로파일 사용, 인자 하드코딩 금지
113
+
114
+ Codex든 Gemini든 **모델·effort·실행모드는 프로파일(config)로 관리**한다.
115
+ CLI 인자로 하드코딩하지 않는다.
116
+
117
+ ### 4-1. 프로파일 우선
118
+
119
+ ```bash
120
+ # CORRECT — 프로파일에 model/effort/approval_mode 모두 정의해두고 호출
121
+ codex < prompt.md
122
+ codex --full-auto < prompt.md # config.toml에 approval_mode 미설정 시만
123
+
124
+ # WRONG — 인자로 모델·effort 하드코딩
125
+ codex -c 'model="gpt-5.3-codex"' -c 'model_reasoning_effort="high"' "prompt"
126
+ ```
127
+
128
+ 프로파일 관리는 `tfx-profile` 스킬 또는 `~/.codex/config.toml` 직접 편집.
129
+
130
+ ### 4-2. config.toml 중복 플래그 금지
131
+
132
+ config.toml에 이미 설정된 값을 CLI 플래그로 다시 지정하면 **에러**:
133
+ ```
134
+ error: the argument '--dangerously-bypass-approvals-and-sandbox' cannot be used multiple times
135
+ ```
136
+
137
+ **규칙**: 런처 생성 전 config.toml을 확인하고, 이미 있는 항목은 CLI에서 생략.
138
+
139
+ ### 4-3. 프롬프트는 stdin으로 전달
140
+
141
+ 프롬프트를 CLI 인자로 넘기면 `--` 접두사 텍스트가 플래그로 파싱되는 문제 발생.
142
+ **항상 stdin(파이프 또는 리다이렉션)으로 전달한다.**
143
+
144
+ ```bash
145
+ # bash 런처
146
+ exec codex < /c/path/prompts/prompt.md
147
+ ```
148
+
149
+ ```powershell
150
+ # PS1 런처
151
+ Get-Content 'C:\path\prompts\prompt.md' -Raw | codex
152
+ ```
153
+
154
+ ---
155
+
156
+ ## RULE 5: WT 패인 정리 — CRITICAL (크래시/프리징 방지)
157
+
158
+ > **이 규칙을 위반하면 Windows Terminal이 크래시/프리징된다.**
159
+ > 원인: WT 1.24의 ConPTY close 레이스 버그 ([microsoft/terminal#17871](https://github.com/microsoft/terminal/issues/17871)).
160
+ > `kill-session`은 물론 `send-keys "exit"`도 ConPTY 파이프 끊김 → 동일 레이스 가능.
161
+ > **유일한 안전 경로: detach-client로 WT와 ConPTY 연결을 먼저 분리.**
162
+
163
+ ### MUST — 3단계 정리 (detach-first, 순서 반드시 준수)
164
+
165
+ ```bash
166
+ # 1) WT 클라이언트를 세션에서 detach (ConPTY 연결 안전 분리)
167
+ for s in $(psmux list-sessions -F '#{session_name}' 2>/dev/null | grep "$PREFIX"); do
168
+ psmux detach-client -t "$s" 2>/dev/null || true
169
+ done
170
+
171
+ # 2) WT가 detach된 pane을 정리할 시간 확보
172
+ sleep 2
173
+
174
+ # 3) detach된 세션을 안전하게 kill (WT와 무관)
175
+ for s in $(psmux list-sessions -F '#{session_name}' 2>/dev/null | grep "$PREFIX"); do
176
+ psmux kill-session -t "$s" 2>/dev/null || true
177
+ done
178
+ ```
179
+
180
+ ### MUST NOT — 아래 패턴은 전부 크래시/프리징 유발
181
+
182
+ ```bash
183
+ # WRONG 1 — detach 없이 바로 kill
184
+ psmux kill-session -t "$s"
185
+
186
+ # WRONG 2 — exit도 ConPTY 파이프 끊김 → 같은 레이스
187
+ psmux send-keys -t "$s" "exit" Enter
188
+
189
+ # WRONG 3 — WT split pane 직접 닫기 (Ctrl+Shift+W 금지)
190
+ # 대신: pane 안에서 psmux detach (또는 Ctrl+B, D) → pane이 자동으로 닫힘
191
+ ```
192
+
193
+ ---
194
+
195
+ ## RULE 5-1: psmux 경로 탐색
196
+
197
+ psmux는 환경마다 설치 위치가 다르다. `hub/team/psmux.mjs`의 `PSMUX_BIN`이
198
+ 자동 탐색하지만, 스크립트에서 직접 psmux를 호출할 때도 경로를 고려해야 한다.
199
+
200
+ 탐색 우선순위:
201
+ 1. `$PSMUX_BIN` 환경변수 (설정 시 최우선)
202
+ 2. PATH의 `psmux`
203
+ 3. `%LOCALAPPDATA%\psmux\psmux.exe` (Windows 기본)
204
+ 4. `%APPDATA%\npm\psmux.cmd` (npm global)
205
+ 5. `~\scoop\shims\psmux.exe` (Scoop)
206
+
207
+ ---
208
+
209
+ ## RULE 5-2: 설치 / 업데이트 preflight
210
+
211
+ `psmux`는 단순히 PATH에 있다고 끝이 아니다. Triflux는 아래 capability를 전제로 한다.
212
+
213
+ - `new-session`
214
+ - `attach-session`
215
+ - `kill-session`
216
+ - `capture-pane`
217
+ - `detach-client` (있으면 attach/detach cleanup hardening에 활용)
218
+
219
+ 설치/업데이트가 의심될 때는 먼저:
220
+
221
+ ```bash
222
+ tfx doctor --json
223
+ ```
224
+
225
+ 공식 설치/업데이트 기준:
226
+
227
+ ```bash
228
+ # install
229
+ winget install marlocarlo.psmux
230
+ scoop install psmux
231
+ choco install psmux
232
+ cargo install psmux
233
+
234
+ # update
235
+ winget upgrade marlocarlo.psmux
236
+ scoop update psmux
237
+ choco upgrade psmux
238
+ cargo install psmux --force
239
+ ```
240
+
241
+ **금지:** 문서/스크립트에서 `npm install -g psmux`를 표준 설치 경로처럼 안내하지 않는다.
242
+
243
+ ---
244
+
245
+ ## RULE 5-3: WT 명령 치트시트
246
+
247
+ ### 패인 분할
248
+
249
+ ```bash
250
+ # 현재 창에서 수평 분할 (상/하)
251
+ wt.exe -w 0 sp -H -p triflux --title "worker" psmux attach-session -t SESSION
252
+
253
+ # 현재 창에서 수직 분할 (좌/우)
254
+ wt.exe -w 0 sp -V -p triflux --title "worker" psmux attach-session -t SESSION
255
+
256
+ # 2x2 그리드 (4 패인)
257
+ wt.exe -w 0 \
258
+ sp -H -p triflux --title "w1" psmux attach-session -t S1 \; \
259
+ sp -V -p triflux --title "w2" psmux attach-session -t S2 \; \
260
+ move-focus up \; \
261
+ sp -V -p triflux --title "w3" psmux attach-session -t S3
262
+ ```
263
+
264
+ ### 포커스 이동
265
+
266
+ ```bash
267
+ wt.exe -w 0 move-focus up|down|left|right
268
+ ```
269
+
270
+ ### 패인 닫기 (세션 kill보다 안전)
271
+
272
+ ```bash
273
+ wt.exe -w 0 close-pane
274
+ ```
275
+
276
+ ### 필수 옵션
277
+
278
+ | 옵션 | 의미 | 필수 여부 |
279
+ |------|------|----------|
280
+ | `-w 0` | 현재 WT 윈도우 | 필수 (없으면 새 창) |
281
+ | `-p triflux` | triflux WT 프로파일 | 필수 (테마/셸 일관성) |
282
+ | `--title "name"` | 패인 제목 | 권장 (식별용) |
283
+ | `sp -H` / `sp -V` | 분할 방향 | 필수 |
284
+
285
+ ### 새 탭 금지
286
+
287
+ ```bash
288
+ # WRONG — 새 탭 생성 (nt)
289
+ wt.exe -w 0 nt -p triflux ...
290
+
291
+ # RIGHT — split-pane (sp)
292
+ wt.exe -w 0 sp -V -p triflux ...
293
+ ```
294
+
295
+ ---
296
+
297
+ ## RULE 6: WT 탭/창은 wt-manager 경유 필수
298
+
299
+ - `wt.exe new-tab ...` 직접 호출 금지
300
+ - `wt.exe split-pane ...` 직접 호출 금지
301
+ - `Start-Process wt.exe ...` PowerShell 호출 금지
302
+ - 반드시 wt-manager.mjs의 createTab() / applyLayout() 사용
303
+
304
+ ---
305
+
306
+ ## RULE 7: spark53 프로파일은 Pro 전용
307
+
308
+ `spark53_med`, `spark53_low` 등 spark 모델 프로파일은 **Codex Pro 구독 전용**이다.
309
+ 비-Pro 환경에서는 `codex53_low`로 폴백한다.
310
+
311
+ ---
312
+
313
+ ## RULE 8: WT 레이아웃 선택 필수
314
+
315
+ WT에 패인을 배치하기 전에 **반드시** 사용자에게 레이아웃을 확인한다.
316
+ 새 탭(`nt`)은 금지 — split + dashboard가 기본.
317
+
318
+ 선택지: 새 창에서 스플릿 / 현재 창에서 스플릿 / dashboard / attach 안 함
319
+
320
+ ---
321
+
322
+ ## 위반 감지 시 행동
323
+
324
+ 1. 생성한 명령/스크립트가 위 규칙을 위반하면 **즉시 수정**한다
325
+ 2. 수정 불가능하면 **생성을 중단**하고 사용자에게 알린다
326
+ 3. 다른 스킬이 이 규칙을 무시하고 명령을 생성하면 **경고를 출력**한다
@@ -1,8 +1,5 @@
1
1
  {
2
2
  "name": "tfx-psmux-rules",
3
3
  "description": "psmux + Codex CLI 명령 생성 시 반드시 적용되는 강제 규칙. PowerShell/bash 구분, 경로 형식, 인자 이스케이프, WT 정리, 프로파일 지정 방식 등을 검증한다. 이 스킬은 psmux, send-keys, codex exec, codex spawn, 세션 생성, worktree 실행, launch 스크립트 생성, WT attach, 패널 스플릿, 스웜 정리 시 자동 트리거된다. 다른 스킬(tfx-codex-swarm, tfx-multi, tfx-remote-spawn 등)이 psmux 명령을 생성할 때 이 스킬의 규칙을 위반하면 생성을 중단하고 수정해야 한다.",
4
- "triggers": [
5
- "tfx-psmux-rules",
6
- "psmux-rules"
7
- ]
4
+ "triggers": ["tfx-psmux-rules", "psmux-rules"]
8
5
  }
@@ -24,6 +24,7 @@ argument-hint: "[테스트 명령 또는 파일 경로]"
24
24
 
25
25
 
26
26
 
27
+
27
28
  > **Deep 버전**: tfx-deep-qa. "제대로/꼼꼼히" 수정자로 자동 에스컬레이션.
28
29
  > 테스트 실행 → 실패 분석 → 자동 수정 → 재실행. 최대 3회. OMC ultraqa 영감.
29
30
 
@@ -1,12 +1,7 @@
1
1
  {
2
2
  "name": "tfx-qa",
3
3
  "description": "테스트 실행하고 실패하면 수정해서 통과시켜야 할 때 사용한다. 'qa', '검증해', '테스트 돌려', 'test-fix', '테스트 통과시켜' 같은 요청에 반드시 사용. 테스트 실패를 반복 수정하여 전부 통과시켜야 할 때 적극 활용.",
4
- "triggers": [
5
- "qa",
6
- "검증",
7
- "테스트 검증",
8
- "test-fix"
9
- ],
4
+ "triggers": ["qa", "검증", "테스트 검증", "test-fix"],
10
5
  "argument_hint": "[테스트 명령 또는 파일 경로]",
11
6
  "internal": true
12
7
  }
@@ -0,0 +1,28 @@
1
+ ---
2
+ internal: true
3
+ name: tfx-ralph
4
+ description: >
5
+ tfx-persist의 별칭(alias). 'ralph', '끝까지 해', '멈추지 마' 같은 요청에 사용.
6
+ 실제 동작은 tfx-persist 스킬이 수행합니다.
7
+ Use when: ralph, 끝까지, don't stop, 멈추지 마
8
+ triggers:
9
+ - tfx-ralph
10
+ - ralph
11
+ ---
12
+
13
+ # {{SKILL_NAME}} — tfx-persist 별칭
14
+
15
+ > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
16
+ > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
17
+
18
+
19
+ 이 스킬은 `tfx-persist`와 동일합니다. `/tfx-persist` 스킬을 호출하세요.
20
+
21
+ ## 동작
22
+
23
+ Skill 도구로 tfx-persist를 호출한다:
24
+ ```
25
+ Skill: tfx-persist
26
+ ```
27
+
28
+ 사용자의 원래 요청을 그대로 전달한다.
@@ -1,9 +1,6 @@
1
1
  {
2
2
  "name": "tfx-ralph",
3
3
  "description": "tfx-persist의 별칭(alias). 'ralph', '끝까지 해', '멈추지 마' 같은 요청에 사용. 실제 동작은 tfx-persist 스킬이 수행합니다. Use when: ralph, 끝까지, don't stop, 멈추지 마",
4
- "triggers": [
5
- "tfx-ralph",
6
- "ralph"
7
- ],
4
+ "triggers": ["tfx-ralph", "ralph"],
8
5
  "internal": true
9
6
  }