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,222 @@
1
+ ---
2
+ name: star-prompt
3
+ description: >-
4
+ CLI 프로젝트의 setup/postinstall 흐름에 GitHub 스타 요청을 추가한다.
5
+ 기본: 모달 차단형 (AskUserQuestion). --soft: 부드러운 confirm 모드.
6
+ gh CLI 인증 확인 → 이미 스타 여부 감지 → 선택 강제 → gh API로 자동 스타.
7
+ 'star prompt', '스타 요청', '리포 스타', 'star request', '깃헙 스타 넣어줘',
8
+ 'star 눌러달라고', '응원 요청' 같은 요청에 사용한다.
9
+ ---
10
+
11
+ # tfx-star-prompt — GitHub Star Request Prompt
12
+
13
+ CLI 도구의 setup/postinstall 완료 시점에 GitHub 리포 스타 요청을 추가한다.
14
+ 기본 모드는 aggressive(모달 차단형)이며, `--soft`를 전달하면 기존 부드러운 confirm 모드로 폴백한다.
15
+ CI/비인터랙티브 환경에서는 자동으로 soft 모드로 강등한다.
16
+
17
+ ## 동작 흐름
18
+
19
+ ```
20
+ detectInteractive() ─── false → soft 모드 강제
21
+
22
+ ✓ true
23
+
24
+ gh --version ─── 실패 → URL만 표시
25
+
26
+ ✓ 설치됨
27
+
28
+ gh auth status ─── 실패 → URL만 표시
29
+
30
+ ✓ 인증됨
31
+
32
+ gh api user/starred/{owner}/{repo}
33
+ ├─ 성공 → "이미 함께하고 계시군요. ⭐" + markPrompted()
34
+ ├─ 404 → 미스타로 진행
35
+ └─ 그 외 에러 → 프롬프트 없이 URL만 표시 (마커 남기지 않음)
36
+
37
+ ✗ 미스타
38
+
39
+ 이미 프롬프트 본 유저(마커 존재)면 즉시 스킵
40
+
41
+ aggressive 기본: AskUserQuestion([예, 누를게요] / [아니오]) 블로킹 선택
42
+ soft(--soft): confirm("⭐ 하나가 큰 차이를 만듭니다.")
43
+
44
+ ├─ 아니오 → aggressive: 안내 + URL / soft: URL만 + markPrompted()
45
+ └─ 예
46
+
47
+ Y
48
+
49
+ gh api -X PUT /user/starred/{owner}/{repo}
50
+ ├─ 성공 → aggressive: "감사합니다! 여러분의 ⭐가 프로젝트를 성장시킵니다."
51
+ │ soft: "함께해 주셔서 감사합니다. ⭐"
52
+ └─ 실패 → URL 폴백
53
+
54
+ 모든 프롬프트 완료 경로는 markPrompted() 호출
55
+ ```
56
+
57
+ ## 구현 패턴
58
+
59
+ ### 유틸리티 계약
60
+
61
+ - `ok(message)`: 성공 메시지 출력(초록/강조 톤)
62
+ - `info(message)`: 일반 안내 메시지 출력
63
+ - `warn(message)`: 경고/실패 폴백 메시지 출력
64
+ - `confirm(message, defaultValue)`: soft 모드용 Y/n 확인
65
+ - `askUserQuestion({ question, options })`: aggressive 모달 선택 UI
66
+ - 옵션은 정확히 `[예, 누를게요]`, `[아니오]`
67
+ - 선택 전까지 흐름을 블로킹한다
68
+
69
+ ### 전체 `starRequest` 교체 패턴
70
+
71
+ 아래 패턴으로 기존 `starRequest` 함수를 전면 교체한다.
72
+
73
+ ```javascript
74
+ import fs from "node:fs";
75
+ import os from "node:os";
76
+ import path from "node:path";
77
+ import { execFileSync } from "node:child_process";
78
+
79
+ function detectInteractive() {
80
+ if (!process.stdout.isTTY) return false;
81
+ if (process.env.CI) return false;
82
+ if (process.env.TERM === "dumb") return false;
83
+ return true;
84
+ }
85
+
86
+ function runGh(args) {
87
+ return execFileSync("gh", args, {
88
+ timeout: 10000,
89
+ encoding: "utf8",
90
+ stdio: ["pipe", "pipe", "pipe"],
91
+ });
92
+ }
93
+
94
+ function getHttpStatus(error) {
95
+ const out = [error?.stdout, error?.stderr].filter(Boolean).join("\n");
96
+ const match = out.match(/HTTP\s+(\d{3})/i) || out.match(/\b(\d{3})\b/);
97
+ return match ? Number(match[1]) : null;
98
+ }
99
+
100
+ export async function starRequest({
101
+ owner,
102
+ repo,
103
+ soft = false,
104
+ askUserQuestion,
105
+ confirm,
106
+ ok,
107
+ info,
108
+ warn,
109
+ }) {
110
+ const repoUrl = `https://github.com/${owner}/${repo}`;
111
+ const interactive = detectInteractive();
112
+ const useSoft = soft || !interactive;
113
+
114
+ const MARKER_DIR = path.join(os.homedir(), ".config", "star-prompt");
115
+ const MARKER = path.join(MARKER_DIR, `${owner}-${repo}.prompted`);
116
+
117
+ const markPrompted = () => {
118
+ fs.mkdirSync(MARKER_DIR, { recursive: true });
119
+ fs.writeFileSync(MARKER, new Date().toISOString(), "utf8");
120
+ };
121
+
122
+ if (fs.existsSync(MARKER)) return;
123
+
124
+ try {
125
+ runGh(["--version"]);
126
+ } catch {
127
+ info(repoUrl);
128
+ return;
129
+ }
130
+
131
+ try {
132
+ runGh(["auth", "status"]);
133
+ } catch {
134
+ info(repoUrl);
135
+ return;
136
+ }
137
+
138
+ let alreadyStarred = false;
139
+ try {
140
+ runGh(["api", `user/starred/${owner}/${repo}`]);
141
+ alreadyStarred = true;
142
+ } catch (error) {
143
+ const status = getHttpStatus(error);
144
+ if (status === 404) {
145
+ alreadyStarred = false;
146
+ } else {
147
+ // API 에러(404 외): 프롬프트 없이 URL만 출력, 마커 미기록
148
+ warn(repoUrl);
149
+ return;
150
+ }
151
+ }
152
+
153
+ if (alreadyStarred) {
154
+ ok("이미 함께하고 계시군요. ⭐");
155
+ markPrompted();
156
+ return;
157
+ }
158
+
159
+ let accepted = false;
160
+ if (useSoft) {
161
+ accepted = await confirm("⭐ 하나가 큰 차이를 만듭니다.", true);
162
+ } else {
163
+ const answer = await askUserQuestion({
164
+ question: "⭐ 이 프로젝트가 마음에 드셨나요? 스타를 누르시겠습니까?",
165
+ options: ["예, 누를게요", "아니오"],
166
+ });
167
+ accepted = answer === "예, 누를게요";
168
+ }
169
+
170
+ if (!accepted) {
171
+ if (useSoft) {
172
+ info(repoUrl);
173
+ } else {
174
+ info(`괜찮습니다. 나중에 마음이 바뀌시면: ${repoUrl}`);
175
+ }
176
+ markPrompted();
177
+ return;
178
+ }
179
+
180
+ try {
181
+ runGh(["api", "-X", "PUT", `/user/starred/${owner}/${repo}`]);
182
+ if (useSoft) {
183
+ ok("함께해 주셔서 감사합니다. ⭐");
184
+ } else {
185
+ ok("감사합니다! 여러분의 ⭐가 프로젝트를 성장시킵니다.");
186
+ }
187
+ } catch {
188
+ warn(repoUrl);
189
+ } finally {
190
+ markPrompted();
191
+ }
192
+ }
193
+ ```
194
+
195
+ ## 적용 시 규칙
196
+
197
+ 1. 기본 모드는 aggressive이며 `--soft` 전달 시에만 soft 모드로 전환한다.
198
+ 2. CI/비인터랙티브 감지는 아래 조건으로 강제 soft 폴백한다.
199
+ - `!process.stdout.isTTY || process.env.CI || process.env.TERM === "dumb"`
200
+ 3. gh 설치 확인은 `which` 대신 `gh --version`으로 수행한다 (크로스플랫폼).
201
+ 4. gh 인증 확인은 `gh auth status`로 수행한다.
202
+ 5. 스타 여부 체크는 `gh api user/starred/{owner}/{repo}`를 사용하고, `404`만 미스타로 판단한다.
203
+ 6. 스타 체크 API 에러가 `404` 외 상태면 프롬프트를 띄우지 않고 URL만 출력하며 마커를 남기지 않는다.
204
+ 7. 중복 요청 방지를 위해 아래 마커를 사용한다.
205
+ - `~/.config/star-prompt/{owner}-{repo}.prompted`
206
+ - 이미 스타한 유저도 `markPrompted()`를 호출한다.
207
+ 8. 모든 gh 호출은 `timeout: 10000`, `stdio: ["pipe","pipe","pipe"]`를 사용한다.
208
+ 9. setup/postinstall의 핵심 성공/실패 처리 흐름을 막지 않도록, 스타 로직 실패는 모두 조용히 폴백한다.
209
+
210
+ ## UX 카피 테이블
211
+
212
+ | 상황 | Aggressive (기본) | Soft (`--soft`) |
213
+ |------|-------------------|-----------------|
214
+ | 이미 스타 | `이미 함께하고 계시군요. ⭐` | (동일) |
215
+ | 요청 | `AskUserQuestion: ⭐ 이 프로젝트가 마음에 드셨나요? 스타를 누르시겠습니까?` | `⭐ 하나가 큰 차이를 만듭니다.` |
216
+ | 수락 후 | `감사합니다! 여러분의 ⭐가 프로젝트를 성장시킵니다.` | `함께해 주셔서 감사합니다. ⭐` |
217
+ | 거절 | `괜찮습니다. 나중에 마음이 바뀌시면:` + URL | URL만 |
218
+ | gh 미설치 | URL만 표시 | (동일) |
219
+ | gh 미인증 | URL만 표시 | (동일) |
220
+ | CI/비인터랙티브 | soft 자동 폴백 | (동일) |
221
+ | API 에러 (404 외) | 프롬프트 없이 URL만 표시, 마커 안 남김 | (동일) |
222
+ | 이미 프롬프트 본 유저 | 스킵 | (동일) |
@@ -0,0 +1,107 @@
1
+ ---
2
+ internal: true
3
+ name: tfx-analysis
4
+ description: "코드나 아키텍처를 분석해야 할 때 사용한다. '코드 분석', 'code analysis', '아키텍처 분석', '이 코드 어떻게 돌아가?', '구조 파악' 같은 요청에 반드시 사용. 코드 품질, 보안, 성능, 복잡도 분석이 필요한 모든 상황에 적극 활용."
5
+ triggers:
6
+ - 코드 분석
7
+ - code analysis
8
+ - 아키텍처 분석
9
+ - analysis
10
+ argument-hint: "<분석 대상 — 파일, 디렉토리, 또는 주제>"
11
+ ---
12
+
13
+ # {{SKILL_NAME}} — Light Code Analysis
14
+
15
+ > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
16
+ > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
17
+
18
+
19
+ > **Deep 버전**: tfx-deep-analysis. "제대로/꼼꼼히" 수정자로 자동 에스컬레이션.
20
+ > Codex 단일 분석으로 빠른 인사이트. SuperClaude sc:analyze 영감.
21
+
22
+ ## 용도
23
+
24
+ - 코드 품질 빠른 점검
25
+ - 모듈/파일 구조 분석
26
+ - 의존성 관계 파악
27
+ - 성능 병목 후보 식별
28
+ - 기술 부채 탐지
29
+ - "이 코드 어떤 상태야?" 류의 질문
30
+
31
+ ## 워크플로우
32
+
33
+ ### Step 1: 분석 대상 식별
34
+
35
+ ```
36
+ 우선순위:
37
+ 1. 사용자가 파일/디렉토리 지정 → 해당 범위
38
+ 2. 사용자가 주제 지정 (예: "인증 모듈") → 관련 파일 탐색
39
+ 3. 지정 없음 → 프로젝트 전체 고수준 분석
40
+
41
+ 분석 유형 자동 감지:
42
+ 파일 1개 → 코드 품질 + 로직 분석
43
+ 디렉토리 → 구조 + 의존성 + 모듈 분석
44
+ 프로젝트 전체 → 아키텍처 + 기술 부채 분석
45
+ ```
46
+
47
+ ### Step 2: Codex 분석 실행
48
+
49
+ ```bash
50
+ bash ~/.claude/scripts/tfx-route.sh codex \
51
+ "시니어 소프트웨어 엔지니어로서 다음을 분석하라:
52
+ 대상: {target}
53
+ 유형: {analysis_type}
54
+
55
+ 분석 항목:
56
+ 1. 구조 — 파일/모듈 구성, 계층, 의존성 방향
57
+ 2. 복잡도 — 순환 복잡도 높은 함수, 깊은 중첩
58
+ 3. 품질 — SOLID 위반, 코드 냄새, 중복
59
+ 4. 성능 — O(n²) 패턴, 불필요한 연산, 캐싱 부재
60
+ 5. 기술 부채 — TODO/FIXME, deprecated API, 하드코딩
61
+ 6. 테스트 — 커버리지 추정, 테스트 부재 영역
62
+
63
+ 구조화된 보고서로 출력하라." analyze
64
+ ```
65
+
66
+ ### Step 3: 결과 포맷
67
+
68
+ ```markdown
69
+ ## 분석 결과: {target}
70
+
71
+ ### 구조 개요
72
+ {파일/모듈 구조 요약 또는 의존성 다이어그램}
73
+
74
+ ### 주요 발견
75
+ | # | 카테고리 | 심각도 | 설명 | 위치 |
76
+ |---|---------|--------|------|------|
77
+ | 1 | 복잡도 | high | {설명} | `{file}:{line}` |
78
+ | 2 | 성능 | medium | {설명} | `{file}:{line}` |
79
+
80
+ ### 메트릭
81
+ - 파일 수: {n} | 총 라인: {n}
82
+ - 평균 복잡도: {n} | 최대 복잡도: {n} (`{file}:{function}`)
83
+ - TODO/FIXME: {n}개
84
+ - 테스트 커버리지 추정: {n}%
85
+
86
+ ### 개선 권장사항
87
+ 1. **{우선순위 1}** — {구체적 제안}
88
+ 2. **{우선순위 2}** — {구체적 제안}
89
+ 3. **{우선순위 3}** — {구체적 제안}
90
+ ```
91
+
92
+ ## 토큰 예산
93
+
94
+ | 단계 | 토큰 |
95
+ |------|------|
96
+ | Step 1 (식별) | ~500 |
97
+ | Step 2 (Codex 분석) | ~5K |
98
+ | Step 3 (포맷) | ~2K |
99
+ | **총합** | **~8K** |
100
+
101
+ ## 사용 예
102
+
103
+ ```
104
+ /tfx-analysis "src/auth/"
105
+ /tfx-analysis "이 프로젝트 전체 아키텍처 분석"
106
+ /tfx-analysis "src/utils/parser.ts 코드 품질"
107
+ ```
@@ -1,12 +1,7 @@
1
1
  {
2
2
  "name": "tfx-analysis",
3
3
  "description": "코드나 아키텍처를 분석해야 할 때 사용한다. '코드 분석', 'code analysis', '아키텍처 분석', '이 코드 어떻게 돌아가?', '구조 파악' 같은 요청에 반드시 사용. 코드 품질, 보안, 성능, 복잡도 분석이 필요한 모든 상황에 적극 활용.",
4
- "triggers": [
5
- "코드 분석",
6
- "code analysis",
7
- "아키텍처 분석",
8
- "analysis"
9
- ],
4
+ "triggers": ["코드 분석", "code analysis", "아키텍처 분석", "analysis"],
10
5
  "argument_hint": "<분석 대상 — 파일, 디렉토리, 또는 주제>",
11
6
  "internal": true
12
7
  }
@@ -40,6 +40,7 @@ argument-hint: "<command|task> [args...]"
40
40
  > - Errors: 실패 시 원인/복구/재시도 여부를 구조화해 기록한다.
41
41
 
42
42
 
43
+
43
44
  ### Step 0: 스마트 라우팅 (tfx-auto 진입 시 자동 실행)
44
45
 
45
46
  preamble에서 routing-weights.json을 읽고, 사용자 입력을 분석하여 dispatch 결정.
@@ -0,0 +1,106 @@
1
+ ---
2
+ internal: true
3
+ name: tfx-auto-codex
4
+ description: >
5
+ Codex 리드형 tfx-auto. Claude 네이티브 역할을 Codex로 치환하고 Gemini 사용은 유지합니다.
6
+ '코덱스 리드', '코덱스가 주도', 'codex lead' 같은 요청에 사용.
7
+ triggers:
8
+ - tfx-auto-codex
9
+ argument-hint: "\"작업 설명\" | N:agent_type \"작업 설명\""
10
+ ---
11
+
12
+ # {{SKILL_NAME}} — Codex 리드형 tfx-auto
13
+
14
+ > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
15
+ > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
16
+
17
+
18
+ > **래퍼**: tfx-auto의 Codex 전용 바로가기. TFX_NO_CLAUDE_NATIVE=1.
19
+ > 목적: 기존 `tfx-auto`의 오케스트레이션 패턴을 유지하면서
20
+ > Claude 네이티브 역할(`explore`, `verifier`, `test-engineer`, `qa-tester`)을
21
+ > Codex로 치환해 Codex/Gemini만으로 실행한다.
22
+
23
+ ## 핵심 원칙
24
+
25
+ 1. **Codex 라우팅 유지**
26
+ - 구현/분석/리뷰/디버깅/검증은 Codex 우선.
27
+ 2. **Gemini 유지**
28
+ - `designer`, `writer`는 Gemini 경로를 그대로 사용.
29
+ 3. **Claude 네이티브 제거**
30
+ - 실행 시 `TFX_NO_CLAUDE_NATIVE=1`로 강제.
31
+ 4. **고난도 설계는 xhigh**
32
+ - 설계/분해/비판 검토 성격의 작업은 `codex --profile gpt54_xhigh` 기준으로 운용.
33
+
34
+ ## 사용법
35
+
36
+ ```bash
37
+ /tfx-auto-codex "인증 리팩터링 + UI 개선 + 테스트 보강"
38
+ /tfx-auto-codex 3:codex "src/api, src/auth, src/payment 병렬 리뷰"
39
+ /tfx-auto-codex 2:gemini "온보딩 UI 카피 + 접근성 개선"
40
+ ```
41
+
42
+ ## 실행 규칙
43
+
44
+ `tfx-auto` 워크플로우(입력 파싱 → 트리아지 → 분해 → DAG 실행 → 수집/보고)를 그대로 사용한다.
45
+
46
+ 단, **실행 명령은 아래 환경변수를 반드시 포함**한다:
47
+
48
+ ```bash
49
+ TFX_NO_CLAUDE_NATIVE=1 bash ~/.claude/scripts/tfx-route.sh {agent} '{prompt}' {mcp_profile}
50
+ ```
51
+
52
+ ### 역할 치환 (자동)
53
+
54
+ `TFX_NO_CLAUDE_NATIVE=1`일 때:
55
+
56
+ - `explore` -> Codex `fast`
57
+ - `verifier` -> Codex `thorough review` (**기본값: 이미 Codex로 설정됨**)
58
+ - `test-engineer` -> Codex `high`
59
+ - `qa-tester` -> Codex `thorough review`
60
+
61
+ > **참고:** `verifier`는 tfx-auto-codex의 기본 라우팅에서 이미 Codex로 실행된다.
62
+ > 별도 오버라이드가 필요한 경우 `TFX_VERIFIER_OVERRIDE` 환경변수를 사용한다.
63
+
64
+ ### TFX_VERIFIER_OVERRIDE
65
+
66
+ `verifier` 역할의 기본 Codex 라우팅을 재정의한다.
67
+
68
+ ```bash
69
+ # Claude 네이티브 verifier로 실행 (예: 도구 접근이 필요한 경우)
70
+ TFX_VERIFIER_OVERRIDE=claude-native /tfx-auto-codex "..."
71
+
72
+ # 특정 Codex 프로필로 강제 지정
73
+ TFX_VERIFIER_OVERRIDE=codex:xhigh /tfx-auto-codex "..."
74
+ ```
75
+
76
+ | 값 | 동작 |
77
+ |----|------|
78
+ | 미설정 (기본) | Codex `thorough review` |
79
+ | `codex:<profile>` | 지정 프로필로 Codex 실행 |
80
+ | `claude-native` | Claude 네이티브 verifier로 폴백 |
81
+
82
+ ## 트리아지 기준
83
+
84
+ - `codex`: 코드 구현/수정/분석/리뷰/디버깅/테스트/검증/리서치
85
+ - `gemini`: 문서/UI/디자인/멀티모달
86
+
87
+ Claude 타입 반환은 기본적으로 허용하지 않는다.
88
+ 분류 결과에 `claude`가 포함되면 `codex`로 치환 후 분해를 진행한다.
89
+ 단, Codex CLI 미설치 환경에서는 실행 안전성을 위해 `claude-native` fallback이 유지될 수 있다.
90
+
91
+ ## 권장 프로필
92
+
93
+ - 설계/계획/비판적 검토: `xhigh`
94
+ - 일반 구현/수정: `high`
95
+ - 리뷰: `thorough`
96
+ - 빠른 탐색: `fast`
97
+
98
+ ## 의존성
99
+
100
+ - `~/.claude/scripts/tfx-route.sh` 최신 동기화 상태
101
+ - Codex CLI 설치
102
+ - Gemini CLI 설치 (UI/문서 경로 사용 시)
103
+
104
+ ## Troubleshooting
105
+
106
+ 문제 발생 시 `/tfx-doctor` 실행. (`--fix` 자동 수정, `--reset` 캐시 초기화)
@@ -1,9 +1,7 @@
1
1
  {
2
2
  "name": "tfx-auto-codex",
3
3
  "description": "Codex 리드형 tfx-auto. Claude 네이티브 역할을 Codex로 치환하고 Gemini 사용은 유지합니다. '코덱스 리드', '코덱스가 주도', 'codex lead' 같은 요청에 사용.",
4
- "triggers": [
5
- "tfx-auto-codex"
6
- ],
4
+ "triggers": ["tfx-auto-codex"],
7
5
  "argument_hint": "\\\"작업 설명\\\" | N:agent_type \\\"작업 설명\\\"",
8
6
  "internal": true
9
7
  }
@@ -0,0 +1,116 @@
1
+ ---
2
+ internal: true
3
+ name: tfx-autopilot
4
+ description: "단일 파일/모듈 수준의 간단한 작업을 자율 구현할 때 사용한다. 구현+검증까지 5분 이내 완료 가능한 작업, '간단히', '빠르게', '하나만', '자동으로', '알아서 해', '그냥 해줘' 같은 수식어가 있을 때 사용. 복잡한 멀티파일 작업은 tfx-fullcycle을 사용하세요."
5
+ triggers:
6
+ - autopilot
7
+ - 자동
8
+ - 알아서 해
9
+ argument-hint: "<구현할 작업 설명>"
10
+ ---
11
+
12
+ # {{SKILL_NAME}} — Light Autonomous Execution
13
+
14
+ > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
15
+ > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
16
+
17
+
18
+ > Codex 직접 구현 → Claude 검증. 최소 토큰으로 빠른 자율 실행.
19
+
20
+ ## 용도
21
+
22
+ - 명확한 단일 작업을 빠르게 자동 구현
23
+ - 보일러플레이트 생성 + 검증
24
+ - 간단한 버그 수정 자동화
25
+ - 린트/포맷/리팩터 자동 적용
26
+ - "알아서 해줘" 류의 명확한 요청
27
+
28
+ ## 워크플로우
29
+
30
+ ### Step 1: 작업 파싱
31
+
32
+ 사용자 입력에서 구현 범위와 완료 기준을 추출한다:
33
+
34
+ ```
35
+ 입력: "로그인 API에 rate limiting 추가"
36
+ 파싱: {
37
+ task: "로그인 API에 rate limiting 추가",
38
+ scope: ["src/routes/auth.ts", "src/middleware/"],
39
+ criteria: [
40
+ "rate limiter 미들웨어 생성",
41
+ "로그인 엔드포인트에 적용",
42
+ "기존 테스트 통과"
43
+ ]
44
+ }
45
+ ```
46
+
47
+ 모호하면 AskUserQuestion으로 명확화.
48
+
49
+ ### Step 2: Codex 직접 구현
50
+
51
+ ```bash
52
+ bash ~/.claude/scripts/tfx-route.sh codex \
53
+ "다음 작업을 구현하라:
54
+ 작업: {task}
55
+ 프로젝트 컨텍스트: {context}
56
+ 완료 기준: {criteria}
57
+
58
+ 1. 관련 파일을 읽고 구조를 파악하라
59
+ 2. 필요한 코드를 작성/수정하라
60
+ 3. 기존 테스트를 실행하여 회귀가 없는지 확인하라
61
+ 4. 변경 사항을 요약하라" implement
62
+ ```
63
+
64
+ ### Step 3: Claude 검증
65
+
66
+ Codex 실행 완료 후, Claude가 변경 사항을 검증한다:
67
+
68
+ ```
69
+ 검증 항목:
70
+ 1. 파일 변경 확인 — git diff로 실제 변경 내용 확인
71
+ 2. 완료 기준 충족 — 각 criterion 대조
72
+ 3. 회귀 여부 — 테스트 결과 확인
73
+ 4. 코드 품질 — 명백한 결함 여부 (깊은 리뷰는 아님)
74
+
75
+ 판정:
76
+ PASS → 완료 보고
77
+ FAIL → Codex에 수정 지시 (1회 재시도)
78
+ 재시도 FAIL → 사용자에게 문제 보고
79
+ ```
80
+
81
+ ### Step 4: 완료 보고
82
+
83
+ ```markdown
84
+ ## Autopilot 완료: {task}
85
+
86
+ ### 변경 사항
87
+ - `{file1}` — {변경 요약}
88
+ - `{file2}` — {변경 요약}
89
+
90
+ ### 검증
91
+ - 완료 기준: {pass}/{total} 충족
92
+ - 테스트: {pass}/{total} 통과
93
+ - 검증: Claude ✓
94
+
95
+ ### 다음 단계 (선택)
96
+ - {추가 권장 사항이 있으면}
97
+ ```
98
+
99
+ ## 토큰 예산
100
+
101
+ | 단계 | 토큰 |
102
+ |------|------|
103
+ | Step 1 (파싱) | ~500 |
104
+ | Step 2 (Codex 구현) | ~5K |
105
+ | Step 3 (Claude 검증) | ~3K |
106
+ | Step 4 (보고) | ~500 |
107
+ | 재시도 (필요 시) | +4K |
108
+ | **총합** | **~10K** |
109
+
110
+ ## 사용 예
111
+
112
+ ```
113
+ /tfx-autopilot "이 함수에 입력 검증 추가해줘"
114
+ /tfx-autopilot "ESLint 경고 전부 수정"
115
+ /tfx-autopilot "알아서 해 — 이 TODO 코멘트 3개 구현"
116
+ ```
@@ -1,11 +1,7 @@
1
1
  {
2
2
  "name": "tfx-autopilot",
3
3
  "description": "단일 파일/모듈 수준의 간단한 작업을 자율 구현할 때 사용한다. 구현+검증까지 5분 이내 완료 가능한 작업, '간단히', '빠르게', '하나만', '자동으로', '알아서 해', '그냥 해줘' 같은 수식어가 있을 때 사용. 복잡한 멀티파일 작업은 tfx-fullcycle을 사용하세요.",
4
- "triggers": [
5
- "autopilot",
6
- "자동",
7
- "알아서 해"
8
- ],
4
+ "triggers": ["autopilot", "자동", "알아서 해"],
9
5
  "argument_hint": "<구현할 작업 설명>",
10
6
  "internal": true
11
7
  }