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,136 @@
1
+ ---
2
+ internal: true
3
+ name: tfx-autoresearch
4
+ description: >
5
+ 자율 웹 리서치 → 실행 가능 계획 도출.
6
+ 주제를 받아 웹 검색 → 정보 수집 → 분석 → 구조화된 리서치 보고서 생성.
7
+ '알아봐', '조사해', '리서치해줘', '검색하고 정리해', 'research and plan' 같은 요청에 반드시 사용.
8
+ 웹 검색 후 실행 가능한 계획까지 도출이 필요할 때 적극 활용.
9
+ triggers:
10
+ - autoresearch
11
+ - 자율 리서치
12
+ - 자동 리서치
13
+ - 웹 리서치
14
+ - 조사해
15
+ - 알아봐
16
+ - research this
17
+ argument-hint: "<topic>"
18
+ source: GAP 분석 P2 #8
19
+ ---
20
+
21
+ # {{SKILL_NAME}} — 자율 웹 리서치
22
+
23
+ > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
24
+ > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
25
+
26
+
27
+ > 주제를 받아 자동으로 웹을 검색하고, 결과를 분석하여 구조화된 리서치 보고서를 생성합니다.
28
+ > "조사는 AI가, 판단은 사람이."
29
+
30
+ ## 사용법
31
+
32
+ ```
33
+ /autoresearch Next.js 15 App Router 변경점
34
+ /리서치 Rust vs Go 백엔드 성능 비교
35
+ /웹 리서치 2026 프론트엔드 프레임워크 트렌드
36
+ /research this MCP protocol specification
37
+ ```
38
+
39
+ ## 리서치 프로세스
40
+
41
+ 리서치는 아래 6단계를 순서대로 실행합니다.
42
+
43
+ ### Step 1: 주제 수집
44
+
45
+ 사용자로부터 리서치 주제를 수집합니다. 인자로 주어지지 않았으면 대화로 요청합니다.
46
+
47
+ - 주제가 모호하면 범위를 좁히는 후속 질문을 합니다.
48
+ - 리서치 목적(비교, 기술 선택, 트렌드 파악 등)을 확인합니다.
49
+
50
+ ### Step 2: 검색 쿼리 자동 생성
51
+
52
+ 주제에서 3-5개의 검색 쿼리를 자동 생성합니다.
53
+
54
+ **규칙:**
55
+ 1. 한국어 주제 → 한국어 쿼리 2-3개 + 영어 쿼리 1-2개 생성
56
+ 2. 영어 주제 → 영어 쿼리 3-5개 생성
57
+ 3. 일반 쿼리 + 비교 쿼리 + 최신 동향 쿼리를 조합
58
+ 4. 각 쿼리는 검색 엔진 최적화를 위해 핵심 키워드 중심으로 구성
59
+
60
+ **예시 (주제: "Next.js 15 변경점"):**
61
+ ```
62
+ - "Next.js 15 주요 변경점 정리"
63
+ - "Next.js 15 App Router 변경사항 2025"
64
+ - "Next.js 15 breaking changes migration"
65
+ - "Next.js 15 vs 14 comparison"
66
+ ```
67
+
68
+ ### Step 3: 웹 검색 실행
69
+
70
+ brave-search MCP 또는 WebSearch 도구로 각 쿼리를 실행합니다.
71
+
72
+ **규칙:**
73
+ 1. 사용 가능한 검색 도구를 자동 감지합니다 (brave-search MCP 우선, 없으면 WebSearch).
74
+ 2. 각 쿼리당 상위 5-10개 결과를 수집합니다.
75
+ 3. 중복 URL은 자동 제거합니다.
76
+ 4. 검색 실패 시 쿼리를 변형하여 재시도합니다.
77
+
78
+ ### Step 4: 핵심 정보 추출
79
+
80
+ 수집된 결과에서 핵심 정보를 추출합니다.
81
+
82
+ **규칙:**
83
+ 1. 각 결과의 제목, URL, 스니펫을 정규화합니다.
84
+ 2. 주제와 관련성이 높은 정보를 우선 선별합니다.
85
+ 3. 사실(fact)과 의견(opinion)을 구분합니다.
86
+ 4. 날짜가 포함된 정보는 최신성을 기준으로 정렬합니다.
87
+
88
+ ### Step 5: 구조화된 리서치 보고서 생성
89
+
90
+ 수집-분석된 정보를 구조화된 마크다운 보고서로 작성합니다.
91
+
92
+ ### Step 6: 보고서 저장
93
+
94
+ `.tfx/reports/research-{timestamp}.md`에 저장하고 경로를 사용자에게 알립니다.
95
+
96
+ ## 보고서 형식
97
+
98
+ ```markdown
99
+ # Research: {topic}
100
+ Date: {date}
101
+
102
+ ## Executive Summary
103
+ {1-3문장 핵심 요약}
104
+
105
+ ## Key Findings
106
+ 1. {발견 1}
107
+ 2. {발견 2}
108
+ 3. {발견 3}
109
+ ...
110
+
111
+ ## Comparative Analysis
112
+ | 항목 | A | B |
113
+ |------|---|---|
114
+ | ... | ... | ... |
115
+
116
+ (비교 대상이 있을 때만 포함)
117
+
118
+ ## Actionable Recommendations
119
+ 1. {추천 1: 구체적이고 실행 가능한 다음 단계}
120
+ 2. {추천 2}
121
+ 3. {추천 3}
122
+
123
+ ## Sources
124
+ - [{제목}]({URL}) — {한줄 요약}
125
+ - ...
126
+ ```
127
+
128
+ ## 동작 규칙
129
+
130
+ 1. 검색 도구가 없으면 사용자에게 알리고 수동 리서치 모드로 전환합니다.
131
+ 2. 검색 결과가 부족하면 쿼리를 변형하여 추가 검색합니다.
132
+ 3. 모든 정보에 출처 URL을 반드시 표기합니다.
133
+ 4. 추천 사항은 "실행 가능"해야 합니다 (모호한 조언 금지).
134
+ 5. 보고서는 항상 `.tfx/reports/research-{timestamp}.md`에 저장합니다.
135
+ 6. 리서치 완료 후 보고서 경로와 핵심 요약을 사용자에게 보고합니다.
136
+ 7. 한국어 주제는 한국어 보고서, 영어 주제는 영어 보고서로 작성합니다.
@@ -0,0 +1,189 @@
1
+ ---
2
+ internal: true
3
+ name: tfx-autoroute
4
+ description: "작업 유형에 따라 최적 모델을 자동 선택하여 실행해야 할 때 사용한다. 'sisyphus', '시지프스', 'auto-route', '알아서 라우팅', '최적 모델로' 같은 요청에 사용. 어떤 CLI를 쓸지 모르겠을 때, 또는 실패 시 자동 모델 승격이 필요할 때 적극 활용."
5
+ triggers:
6
+ - sisyphus
7
+ - 끝없이
8
+ - never stop
9
+ - 시지프스
10
+ - auto-route
11
+ argument-hint: "<작업 설명>"
12
+ ---
13
+
14
+ # {{SKILL_NAME}} — Auto-Routing Autonomous Executor
15
+
16
+ > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
17
+ > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
18
+
19
+
20
+ > oh-my-openagent Sisyphus agent 오마주. 바위는 멈추지 않는다 — 그리고 올바른 산을 고른다.
21
+ > "실패하면 더 강한 모델로. 성공할 때까지."
22
+
23
+ ## 용도
24
+
25
+ - 작업 유형을 모르겠을 때 자동으로 최적 CLI 선택
26
+ - 실패 허용 없이 끝까지 완수해야 할 때
27
+ - Haiku로 충분한 작업에 Opus를 낭비하지 않을 때
28
+ - 비용 최적화 + 완수율 극대화
29
+
30
+ ## 핵심 원리
31
+
32
+ ```
33
+ 1. IntentGate로 작업 유형 분류
34
+ 2. 유형에 맞는 최적 CLI/모델에 라우팅
35
+ 3. 실패 시 자동 승격 (Haiku → Sonnet → Opus, Codex normal → xhigh)
36
+ 4. 최종 실패 시에만 사용자에게 보고
37
+ ```
38
+
39
+ ## 워크플로우
40
+
41
+ ### Step 0: 라우팅 전략 선택
42
+
43
+ 실행 전에 AskUserQuestion으로 모델 라우팅 전략을 선택받는다:
44
+
45
+ ```
46
+ AskUserQuestion:
47
+ "기본 라우팅 전략을 선택하세요:"
48
+ 1. 자동 (IntentGate 판단) [기본]
49
+ 2. 성능 우선 (Codex 위주)
50
+ 3. 비용 절약 (Haiku 위주)
51
+ 4. 정확도 우선 (Opus 위주)
52
+ ```
53
+
54
+ - 1번 선택 → Step 1의 IntentGate 분류를 정상 수행
55
+ - 2번 선택 → primary_cli를 Codex(xhigh)로 고정, 실패 시에만 Opus fallback
56
+ - 3번 선택 → primary_cli를 Claude Haiku로 고정, 실패 시 Sonnet → Codex 순 승격
57
+ - 4번 선택 → primary_cli를 Claude Opus로 고정, fallback 없음
58
+
59
+ 사용자가 빈 응답을 보내면 기본값 1번(자동)을 적용한다.
60
+
61
+ ### Step 1: IntentGate 분류
62
+
63
+ 사용자 입력을 분석하여 작업 카테고리와 복잡도를 판단한다:
64
+
65
+ ```
66
+ 분류 결과:
67
+ {
68
+ "category": "visual | deep | quick | code | research | review",
69
+ "complexity": "trivial | simple | moderate | complex | extreme",
70
+ "estimated_tokens": N,
71
+ "routing": {
72
+ "primary_cli": "gemini | codex | claude",
73
+ "primary_model": "flash | normal | haiku",
74
+ "fallback_chain": ["sonnet", "opus"]
75
+ }
76
+ }
77
+ ```
78
+
79
+ ### Step 2: 카테고리 라우팅
80
+
81
+ | 카테고리 | Primary CLI | Primary 모델 | 이유 |
82
+ |----------|-------------|-------------|------|
83
+ | visual (UI/디자인/멀티모달) | Gemini | flash | 시각적 처리 최적 |
84
+ | deep (아키텍처/설계/분석) | Codex | xhigh | 깊은 추론 필요 |
85
+ | quick (간단한 수정/질문) | Claude | haiku | 최소 비용 |
86
+ | code (구현/디버깅/리팩터링) | Codex | normal | 코드 작성 최적 |
87
+ | research (검색/문서/조사) | Codex | normal | MCP 접근 |
88
+ | review (리뷰/검증/QA) | Codex | thorough | 꼼꼼한 검토 |
89
+
90
+ ### Step 3: 실행
91
+
92
+ 라우팅 결과에 따라 실행한다:
93
+
94
+ ```
95
+ if primary_cli == "codex":
96
+ Bash("bash ~/.claude/scripts/tfx-route.sh codex '{prompt}' implement")
97
+
98
+ elif primary_cli == "gemini":
99
+ Bash("bash ~/.claude/scripts/tfx-route.sh gemini '{prompt}' implement")
100
+
101
+ elif primary_cli == "claude":
102
+ if primary_model == "haiku":
103
+ Agent(model="haiku", prompt="{prompt}")
104
+ else:
105
+ Agent(model="sonnet", prompt="{prompt}")
106
+ ```
107
+
108
+ ### Step 4: 실패 감지 및 자동 승격
109
+
110
+ 실행 결과를 평가하고, 실패 시 fallback chain을 따라 승격한다:
111
+
112
+ ```
113
+ 실패 판단 기준:
114
+ - exit_code != 0
115
+ - 출력에 "error", "failed", "unable to" 포함
116
+ - 출력이 비어 있음
117
+ - 출력이 프롬프트를 반복하기만 함 (hallucination)
118
+
119
+ 승격 체인:
120
+ Level 0: primary (최소 비용)
121
+ ↓ 실패
122
+ Level 1: 동일 CLI, 모델 한 단계 승격
123
+ 예: haiku → sonnet, codex normal → codex xhigh
124
+ ↓ 실패
125
+ Level 2: CLI 전환 + 강한 모델
126
+ 예: gemini → codex xhigh, codex → claude opus
127
+ ↓ 실패
128
+ Level 3: Claude Opus 직접 실행 (최후 수단)
129
+ ↓ 실패
130
+ Level 4: 사용자에게 보고 + 도움 요청 (AskUserQuestion)
131
+ ```
132
+
133
+ ### Step 5: 결과 보고
134
+
135
+ ```markdown
136
+ ## Sisyphus 완료
137
+
138
+ **작업**: {task_description}
139
+ **분류**: {category} / {complexity}
140
+ **라우팅**: {primary_cli} ({primary_model})
141
+ **승격 횟수**: {escalation_count}
142
+ **최종 실행**: {final_cli} ({final_model})
143
+
144
+ ### 실행 경로
145
+ | 시도 | CLI | 모델 | 결과 | 토큰 |
146
+ |------|-----|------|------|------|
147
+ | 1 | Haiku | haiku | 실패 (불완전) | ~1K |
148
+ | 2 | Codex | normal | 성공 | ~3K |
149
+
150
+ ### 결과
151
+ {output}
152
+
153
+ ### 비용 절감
154
+ Primary Opus였다면: ~{opus_cost}K tokens
155
+ 실제 사용: ~{actual_cost}K tokens
156
+ 절감: {savings}%
157
+ ```
158
+
159
+ ## Anti-Stuck 메커니즘
160
+
161
+ ```
162
+ 같은 에러로 2회 연속 실패 시:
163
+ → 에러 메시지를 다음 프롬프트에 포함하여 우회 시도
164
+
165
+ 승격 체인 전체 소진 시 (Level 4):
166
+ → AskUserQuestion: "다음 작업이 모든 모델에서 실패했습니다.
167
+ 에러: {error}. 접근 방식을 변경하시겠습니까?"
168
+ ```
169
+
170
+ ## 토큰 예산
171
+
172
+ 가변. 최소 비용 라우팅이 핵심이므로 고정 예산 없음.
173
+
174
+ | 시나리오 | 예상 토큰 |
175
+ |----------|----------|
176
+ | 1회 성공 (haiku) | ~2K |
177
+ | 1회 성공 (codex) | ~5K |
178
+ | 1회 승격 후 성공 | ~8K |
179
+ | 2회 승격 후 성공 | ~15K |
180
+ | 전체 체인 소진 | ~25K |
181
+
182
+ ## 사용 예
183
+
184
+ ```
185
+ /tfx-autoroute "이 함수의 타입 에러 수정해"
186
+ /tfx-autoroute "프로젝트 구조 분석해서 아키텍처 다이어그램 만들어"
187
+ /tfx-autoroute "README.md 한국어로 번역"
188
+ /시지프스 "테스트 커버리지 80%까지 올려"
189
+ ```
@@ -1,13 +1,7 @@
1
1
  {
2
2
  "name": "tfx-autoroute",
3
3
  "description": "작업 유형에 따라 최적 모델을 자동 선택하여 실행해야 할 때 사용한다. 'sisyphus', '시지프스', 'auto-route', '알아서 라우팅', '최적 모델로' 같은 요청에 사용. 어떤 CLI를 쓸지 모르겠을 때, 또는 실패 시 자동 모델 승격이 필요할 때 적극 활용.",
4
- "triggers": [
5
- "sisyphus",
6
- "끝없이",
7
- "never stop",
8
- "시지프스",
9
- "auto-route"
10
- ],
4
+ "triggers": ["sisyphus", "끝없이", "never stop", "시지프스", "auto-route"],
11
5
  "argument_hint": "<작업 설명>",
12
6
  "internal": true
13
7
  }
@@ -23,6 +23,7 @@ argument-hint: "\"작업 설명\" | N:codex \"작업 설명\""
23
23
 
24
24
 
25
25
 
26
+
26
27
  > **래퍼**: tfx-auto의 Codex 전용 바로가기. TFX_CLI_MODE=codex.
27
28
  > **HARD RULE**: Claude는 이 스킬에서 Edit/Write를 사용하면 안 된다. 모든 코드 수정은 Codex CLI를 통해 수행한다.
28
29
  > Codex CLI만 사용하여 모든 외부 CLI 작업을 라우팅합니다.
@@ -1,9 +1,7 @@
1
1
  {
2
2
  "name": "tfx-codex",
3
3
  "description": "Codex-Only 오케스트레이터. tfx-auto 워크플로우를 Codex 전용으로 고정합니다. '코덱스로 해줘', '코덱스한테 시켜', 'codex로', 'Codex 전용' 같은 요청에 반드시 사용.",
4
- "triggers": [
5
- "tfx-codex"
6
- ],
4
+ "triggers": ["tfx-codex"],
7
5
  "argument_hint": "\\\"작업 설명\\\" | N:codex \\\"작업 설명\\\"",
8
6
  "internal": true
9
7
  }
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: tfx-codex-swarm
3
+ deprecated: true
4
+ superseded-by: tfx-swarm
5
+ description: "DEPRECATED — tfx-swarm으로 통합됨. 'codex swarm', '코덱스 스웜' 요청은 tfx-swarm이 처리."
6
+ triggers:
7
+ - codex-swarm
8
+ - 코덱스 스웜
9
+ ---
10
+
11
+ # {{SKILL_NAME}} — DEPRECATED
12
+
13
+ > **DEPRECATED:** 이 스킬은 `tfx-swarm`으로 통합되었습니다. `/tfx-swarm`을 사용하세요.
14
+ > swarm-planner + swarm-hypervisor 파이프라인이 worktree/psmux/codex/원격 실행을 통합 관리합니다.
15
+
16
+ 이 스킬이 호출되면 자동으로 `/tfx-swarm`을 호출합니다.
@@ -23,4 +23,4 @@
23
23
  "files": []
24
24
  }
25
25
  ]
26
- }
26
+ }
@@ -1,8 +1,5 @@
1
1
  {
2
2
  "name": "tfx-codex-swarm",
3
3
  "description": "DEPRECATED — tfx-swarm으로 통합됨. 'codex swarm', '코덱스 스웜' 요청은 tfx-swarm이 처리.",
4
- "triggers": [
5
- "codex-swarm",
6
- "코덱스 스웜"
7
- ]
4
+ "triggers": ["codex-swarm", "코덱스 스웜"]
8
5
  }
@@ -4,24 +4,66 @@
4
4
  "configurations": [
5
5
  {
6
6
  "name": "with_skill",
7
- "pass_rate": {"mean": 1.0, "stddev": 0.0},
8
- "total_tokens": {"mean": 30953, "stddev": 6089},
9
- "duration_seconds": {"mean": 166.8, "stddev": 10.2},
7
+ "pass_rate": { "mean": 1.0, "stddev": 0.0 },
8
+ "total_tokens": { "mean": 30953, "stddev": 6089 },
9
+ "duration_seconds": { "mean": 166.8, "stddev": 10.2 },
10
10
  "per_eval": [
11
- {"eval_name": "full-swarm-all-prds", "pass_rate": 1.0, "assertions_passed": 7, "assertions_total": 7, "tokens": 37789, "duration_s": 178.4},
12
- {"eval_name": "selective-spawn-with-override", "pass_rate": 1.0, "assertions_passed": 4, "assertions_total": 4, "tokens": 29085, "duration_s": 163.1},
13
- {"eval_name": "implicit-swarm-no-keywords", "pass_rate": 1.0, "assertions_passed": 5, "assertions_total": 5, "tokens": 25984, "duration_s": 158.8}
11
+ {
12
+ "eval_name": "full-swarm-all-prds",
13
+ "pass_rate": 1.0,
14
+ "assertions_passed": 7,
15
+ "assertions_total": 7,
16
+ "tokens": 37789,
17
+ "duration_s": 178.4
18
+ },
19
+ {
20
+ "eval_name": "selective-spawn-with-override",
21
+ "pass_rate": 1.0,
22
+ "assertions_passed": 4,
23
+ "assertions_total": 4,
24
+ "tokens": 29085,
25
+ "duration_s": 163.1
26
+ },
27
+ {
28
+ "eval_name": "implicit-swarm-no-keywords",
29
+ "pass_rate": 1.0,
30
+ "assertions_passed": 5,
31
+ "assertions_total": 5,
32
+ "tokens": 25984,
33
+ "duration_s": 158.8
34
+ }
14
35
  ]
15
36
  },
16
37
  {
17
38
  "name": "without_skill",
18
- "pass_rate": {"mean": 0.875, "stddev": 0.144},
19
- "total_tokens": {"mean": 53786, "stddev": 10873},
20
- "duration_seconds": {"mean": 264.4, "stddev": 49.3},
39
+ "pass_rate": { "mean": 0.875, "stddev": 0.144 },
40
+ "total_tokens": { "mean": 53786, "stddev": 10873 },
41
+ "duration_seconds": { "mean": 264.4, "stddev": 49.3 },
21
42
  "per_eval": [
22
- {"eval_name": "full-swarm-all-prds", "pass_rate": 1.0, "assertions_passed": 7, "assertions_total": 7, "tokens": 50555, "duration_s": 218.2},
23
- {"eval_name": "selective-spawn-with-override", "pass_rate": 1.0, "assertions_passed": 4, "assertions_total": 4, "tokens": 65928, "duration_s": 259.5},
24
- {"eval_name": "implicit-swarm-no-keywords", "pass_rate": 0.6, "assertions_passed": 3, "assertions_total": 5, "tokens": 44875, "duration_s": 315.5}
43
+ {
44
+ "eval_name": "full-swarm-all-prds",
45
+ "pass_rate": 1.0,
46
+ "assertions_passed": 7,
47
+ "assertions_total": 7,
48
+ "tokens": 50555,
49
+ "duration_s": 218.2
50
+ },
51
+ {
52
+ "eval_name": "selective-spawn-with-override",
53
+ "pass_rate": 1.0,
54
+ "assertions_passed": 4,
55
+ "assertions_total": 4,
56
+ "tokens": 65928,
57
+ "duration_s": 259.5
58
+ },
59
+ {
60
+ "eval_name": "implicit-swarm-no-keywords",
61
+ "pass_rate": 0.6,
62
+ "assertions_passed": 3,
63
+ "assertions_total": 5,
64
+ "tokens": 44875,
65
+ "duration_s": 315.5
66
+ }
25
67
  ]
26
68
  }
27
69
  ],
@@ -1,11 +1,39 @@
1
1
  {
2
2
  "expectations": [
3
- {"text": "all-7-prds-found", "passed": true, "evidence": "classification.md에 issue 24~30 모두 나열됨"},
4
- {"text": "correct-type-classification", "passed": true, "evidence": "25,30=investigate, 24,26,27,28,29=implement 정확"},
5
- {"text": "profile-routing-varies", "passed": true, "evidence": "implement→codex53_high, investigate→gpt54_high"},
6
- {"text": "worktree-per-task", "passed": true, "evidence": "commands.shgit worktree add 7개 확인"},
7
- {"text": "psmux-sessions", "passed": true, "evidence": "7개 psmux new-session + send-keys with codex"},
8
- {"text": "single-wt-window", "passed": true, "evidence": "wt-new-window 1회 + wt-tab 6회"},
9
- {"text": "omx-skill-mapping", "passed": true, "evidence": "implement=$plan→$autopilot, investigate=$plan"}
3
+ {
4
+ "text": "all-7-prds-found",
5
+ "passed": true,
6
+ "evidence": "classification.mdissue 24~30 모두 나열됨"
7
+ },
8
+ {
9
+ "text": "correct-type-classification",
10
+ "passed": true,
11
+ "evidence": "25,30=investigate, 24,26,27,28,29=implement 정확"
12
+ },
13
+ {
14
+ "text": "profile-routing-varies",
15
+ "passed": true,
16
+ "evidence": "implement→codex53_high, investigate→gpt54_high"
17
+ },
18
+ {
19
+ "text": "worktree-per-task",
20
+ "passed": true,
21
+ "evidence": "commands.sh에 git worktree add 7개 확인"
22
+ },
23
+ {
24
+ "text": "psmux-sessions",
25
+ "passed": true,
26
+ "evidence": "7개 psmux new-session + send-keys with codex"
27
+ },
28
+ {
29
+ "text": "single-wt-window",
30
+ "passed": true,
31
+ "evidence": "wt-new-window 1회 + wt-tab 6회"
32
+ },
33
+ {
34
+ "text": "omx-skill-mapping",
35
+ "passed": true,
36
+ "evidence": "implement=$plan→$autopilot, investigate=$plan"
37
+ }
10
38
  ]
11
39
  }
@@ -1,11 +1,39 @@
1
1
  {
2
2
  "expectations": [
3
- {"text": "all-7-prds-found", "passed": true, "evidence": "7개 PRD 모두 발견 및 나열"},
4
- {"text": "correct-type-classification", "passed": true, "evidence": "5 implement + 2 investigate 정확"},
5
- {"text": "profile-routing-varies", "passed": true, "evidence": "codex53_high/gpt54_high 분리 적용"},
6
- {"text": "worktree-per-task", "passed": true, "evidence": "7개 worktree 생성 명령 존재"},
7
- {"text": "psmux-sessions", "passed": true, "evidence": "7개 psmux 세션 생성됨"},
8
- {"text": "single-wt-window", "passed": true, "evidence": "WT 탭 attach 포함"},
9
- {"text": "omx-skill-mapping", "passed": true, "evidence": "autopilot/plan 매핑 존재"}
3
+ {
4
+ "text": "all-7-prds-found",
5
+ "passed": true,
6
+ "evidence": "7개 PRD 모두 발견 및 나열"
7
+ },
8
+ {
9
+ "text": "correct-type-classification",
10
+ "passed": true,
11
+ "evidence": "5 implement + 2 investigate 정확"
12
+ },
13
+ {
14
+ "text": "profile-routing-varies",
15
+ "passed": true,
16
+ "evidence": "codex53_high/gpt54_high 분리 적용"
17
+ },
18
+ {
19
+ "text": "worktree-per-task",
20
+ "passed": true,
21
+ "evidence": "7개 worktree 생성 명령 존재"
22
+ },
23
+ {
24
+ "text": "psmux-sessions",
25
+ "passed": true,
26
+ "evidence": "7개 psmux 세션 생성됨"
27
+ },
28
+ {
29
+ "text": "single-wt-window",
30
+ "passed": true,
31
+ "evidence": "WT 탭 attach 포함"
32
+ },
33
+ {
34
+ "text": "omx-skill-mapping",
35
+ "passed": true,
36
+ "evidence": "autopilot/plan 매핑 존재"
37
+ }
10
38
  ]
11
39
  }
@@ -1,9 +1,29 @@
1
1
  {
2
2
  "expectations": [
3
- {"text": "3-paths-recognized", "passed": true, "evidence": "auth-refactor, api-v2, cache-layer 모두 classification.md에 등장"},
4
- {"text": "filename-classification", "passed": true, "evidence": "auth-refactor=리팩터링, api-v2=구현, cache-layer=구현"},
5
- {"text": "profile-routing-applied", "passed": true, "evidence": "모두 codex53_high 라우팅"},
6
- {"text": "worktree-isolation", "passed": true, "evidence": "3개 git worktree add 명령"},
7
- {"text": "psmux-and-wt", "passed": true, "evidence": "psmux 세션 + WT 탭 명령 존재"}
3
+ {
4
+ "text": "3-paths-recognized",
5
+ "passed": true,
6
+ "evidence": "auth-refactor, api-v2, cache-layer 모두 classification.md에 등장"
7
+ },
8
+ {
9
+ "text": "filename-classification",
10
+ "passed": true,
11
+ "evidence": "auth-refactor=리팩터링, api-v2=구현, cache-layer=구현"
12
+ },
13
+ {
14
+ "text": "profile-routing-applied",
15
+ "passed": true,
16
+ "evidence": "모두 codex53_high 라우팅"
17
+ },
18
+ {
19
+ "text": "worktree-isolation",
20
+ "passed": true,
21
+ "evidence": "3개 git worktree add 명령"
22
+ },
23
+ {
24
+ "text": "psmux-and-wt",
25
+ "passed": true,
26
+ "evidence": "psmux 세션 + WT 탭 명령 존재"
27
+ }
8
28
  ]
9
29
  }
@@ -1,9 +1,29 @@
1
1
  {
2
2
  "expectations": [
3
- {"text": "3-paths-recognized", "passed": true, "evidence": "3개 파일 경로 인식"},
4
- {"text": "filename-classification", "passed": false, "evidence": "모두 implement로 평탄화, auth-refactor를 리팩터링으로 분류 실패"},
5
- {"text": "profile-routing-applied", "passed": false, "evidence": "프로파일 라우팅 없음, 동일 설정 적용 또는 bare codex"},
6
- {"text": "worktree-isolation", "passed": true, "evidence": "3개 worktree 생성 (시나리오 C)"},
7
- {"text": "psmux-and-wt", "passed": true, "evidence": "psmux + WT 명령 존재 (시나리오 C)"}
3
+ {
4
+ "text": "3-paths-recognized",
5
+ "passed": true,
6
+ "evidence": "3개 파일 경로 인식"
7
+ },
8
+ {
9
+ "text": "filename-classification",
10
+ "passed": false,
11
+ "evidence": "모두 implement로 평탄화, auth-refactor를 리팩터링으로 분류 실패"
12
+ },
13
+ {
14
+ "text": "profile-routing-applied",
15
+ "passed": false,
16
+ "evidence": "프로파일 라우팅 없음, 동일 설정 적용 또는 bare codex"
17
+ },
18
+ {
19
+ "text": "worktree-isolation",
20
+ "passed": true,
21
+ "evidence": "3개 worktree 생성 (시나리오 C)"
22
+ },
23
+ {
24
+ "text": "psmux-and-wt",
25
+ "passed": true,
26
+ "evidence": "psmux + WT 명령 존재 (시나리오 C)"
27
+ }
8
28
  ]
9
29
  }