triflux 10.0.0 → 10.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (426) hide show
  1. package/CLAUDE.md +171 -0
  2. package/README.md +32 -15
  3. package/bin/triflux.mjs +62 -5
  4. package/hooks/agent-route-guard.mjs +109 -0
  5. package/hooks/cross-review-tracker.mjs +122 -0
  6. package/hooks/error-context.mjs +148 -0
  7. package/hooks/hook-adaptive-collector.mjs +86 -0
  8. package/hooks/hook-manager.mjs +365 -0
  9. package/hooks/hook-orchestrator.mjs +312 -0
  10. package/hooks/hook-registry.json +246 -0
  11. package/hooks/hooks.json +89 -0
  12. package/hooks/keyword-rules.json +574 -0
  13. package/hooks/lib/resolve-root.mjs +59 -0
  14. package/hooks/mcp-config-watcher.mjs +80 -0
  15. package/hooks/pipeline-stop.mjs +76 -0
  16. package/hooks/safety-guard.mjs +169 -0
  17. package/hooks/subagent-verifier.mjs +80 -0
  18. package/hub/account-broker.mjs +251 -0
  19. package/hub/adaptive-diagnostic.mjs +323 -0
  20. package/hub/adaptive-inject.mjs +186 -0
  21. package/hub/adaptive-memory.mjs +163 -0
  22. package/hub/adaptive.mjs +143 -0
  23. package/hub/assign-callbacks.mjs +133 -0
  24. package/hub/bridge.mjs +799 -0
  25. package/hub/cli-adapter-base.mjs +280 -0
  26. package/hub/codex-adapter.mjs +199 -0
  27. package/hub/codex-compat.mjs +11 -0
  28. package/hub/codex-preflight.mjs +166 -0
  29. package/hub/delegator/contracts.mjs +37 -0
  30. package/hub/delegator/index.mjs +14 -0
  31. package/hub/delegator/schema/delegator-tools.schema.json +250 -0
  32. package/hub/delegator/service.mjs +307 -0
  33. package/hub/delegator/tool-definitions.mjs +35 -0
  34. package/hub/fullcycle.mjs +96 -0
  35. package/hub/gemini-adapter.mjs +180 -0
  36. package/hub/hitl.mjs +143 -0
  37. package/hub/intent.mjs +193 -0
  38. package/hub/lib/cache-guard.mjs +114 -0
  39. package/hub/lib/known-errors.json +72 -0
  40. package/hub/lib/memory-store.mjs +748 -0
  41. package/hub/lib/process-utils.mjs +361 -0
  42. package/hub/lib/ssh-command.mjs +211 -0
  43. package/hub/lib/ssh-retry.mjs +59 -0
  44. package/hub/lib/uuidv7.mjs +44 -0
  45. package/hub/memory-doctor.mjs +480 -0
  46. package/hub/middleware/request-logger.mjs +161 -0
  47. package/hub/paths.mjs +30 -0
  48. package/hub/pipe.mjs +664 -0
  49. package/hub/pipeline/gates/confidence.mjs +56 -0
  50. package/hub/pipeline/gates/consensus.mjs +94 -0
  51. package/hub/pipeline/gates/index.mjs +5 -0
  52. package/hub/pipeline/gates/selfcheck.mjs +82 -0
  53. package/hub/pipeline/index.mjs +318 -0
  54. package/hub/pipeline/state.mjs +191 -0
  55. package/hub/pipeline/transitions.mjs +124 -0
  56. package/hub/platform.mjs +225 -0
  57. package/hub/public/dashboard.html +355 -0
  58. package/hub/public/tray-icon.ico +0 -0
  59. package/hub/public/tray-icon.png +0 -0
  60. package/hub/quality/deslop.mjs +253 -0
  61. package/hub/reflexion.mjs +372 -0
  62. package/hub/research.mjs +146 -0
  63. package/hub/router.mjs +791 -0
  64. package/hub/routing/complexity.mjs +166 -0
  65. package/hub/routing/index.mjs +117 -0
  66. package/hub/routing/q-learning.mjs +336 -0
  67. package/hub/schema.sql +148 -0
  68. package/hub/server.mjs +1264 -0
  69. package/hub/session-fingerprint.mjs +352 -0
  70. package/hub/state.mjs +258 -0
  71. package/hub/store-adapter.mjs +118 -0
  72. package/hub/store.mjs +857 -0
  73. package/hub/team/agent-map.json +11 -0
  74. package/hub/team/ansi.mjs +379 -0
  75. package/hub/team/backend.mjs +90 -0
  76. package/hub/team/cli/commands/attach.mjs +37 -0
  77. package/hub/team/cli/commands/control.mjs +43 -0
  78. package/hub/team/cli/commands/debug.mjs +74 -0
  79. package/hub/team/cli/commands/focus.mjs +53 -0
  80. package/hub/team/cli/commands/interrupt.mjs +36 -0
  81. package/hub/team/cli/commands/kill.mjs +37 -0
  82. package/hub/team/cli/commands/list.mjs +24 -0
  83. package/hub/team/cli/commands/send.mjs +37 -0
  84. package/hub/team/cli/commands/start/index.mjs +106 -0
  85. package/hub/team/cli/commands/start/parse-args.mjs +130 -0
  86. package/hub/team/cli/commands/start/start-headless.mjs +109 -0
  87. package/hub/team/cli/commands/start/start-in-process.mjs +40 -0
  88. package/hub/team/cli/commands/start/start-mux.mjs +73 -0
  89. package/hub/team/cli/commands/start/start-wt.mjs +69 -0
  90. package/hub/team/cli/commands/status.mjs +87 -0
  91. package/hub/team/cli/commands/stop.mjs +31 -0
  92. package/hub/team/cli/commands/task.mjs +30 -0
  93. package/hub/team/cli/commands/tasks.mjs +13 -0
  94. package/hub/team/cli/help.mjs +42 -0
  95. package/hub/team/cli/index.mjs +41 -0
  96. package/hub/team/cli/manifest.mjs +29 -0
  97. package/hub/team/cli/render.mjs +30 -0
  98. package/hub/team/cli/services/attach-fallback.mjs +54 -0
  99. package/hub/team/cli/services/hub-client.mjs +227 -0
  100. package/hub/team/cli/services/member-selector.mjs +30 -0
  101. package/hub/team/cli/services/native-control.mjs +117 -0
  102. package/hub/team/cli/services/runtime-mode.mjs +62 -0
  103. package/hub/team/cli/services/state-store.mjs +48 -0
  104. package/hub/team/cli/services/task-model.mjs +30 -0
  105. package/hub/team/conductor-mesh-bridge.mjs +121 -0
  106. package/hub/team/conductor.mjs +671 -0
  107. package/hub/team/dashboard-anchor.mjs +14 -0
  108. package/hub/team/dashboard-layout.mjs +33 -0
  109. package/hub/team/dashboard-open.mjs +153 -0
  110. package/hub/team/dashboard.mjs +274 -0
  111. package/hub/team/event-log.mjs +76 -0
  112. package/hub/team/handoff.mjs +303 -0
  113. package/hub/team/headless.mjs +1156 -0
  114. package/hub/team/health-probe.mjs +272 -0
  115. package/hub/team/launcher-template.mjs +95 -0
  116. package/hub/team/lead-control.mjs +104 -0
  117. package/hub/team/native-supervisor.mjs +392 -0
  118. package/hub/team/native.mjs +649 -0
  119. package/hub/team/nativeProxy.mjs +688 -0
  120. package/hub/team/notify.mjs +293 -0
  121. package/hub/team/orchestrator.mjs +161 -0
  122. package/hub/team/pane.mjs +153 -0
  123. package/hub/team/process-cleanup.mjs +342 -0
  124. package/hub/team/psmux.mjs +1354 -0
  125. package/hub/team/remote-probe.mjs +276 -0
  126. package/hub/team/remote-session.mjs +299 -0
  127. package/hub/team/remote-watcher.mjs +478 -0
  128. package/hub/team/routing.mjs +223 -0
  129. package/hub/team/session-sync.mjs +169 -0
  130. package/hub/team/session.mjs +611 -0
  131. package/hub/team/shared.mjs +13 -0
  132. package/hub/team/staleState.mjs +361 -0
  133. package/hub/team/swarm-hypervisor.mjs +589 -0
  134. package/hub/team/swarm-locks.mjs +204 -0
  135. package/hub/team/swarm-planner.mjs +260 -0
  136. package/hub/team/swarm-reconciler.mjs +137 -0
  137. package/hub/team/tui-lite.mjs +380 -0
  138. package/hub/team/tui-remote-adapter.mjs +393 -0
  139. package/hub/team/tui-viewer.mjs +463 -0
  140. package/hub/team/tui.mjs +1449 -0
  141. package/hub/team/worktree-lifecycle.mjs +193 -0
  142. package/hub/team/wt-manager.mjs +407 -0
  143. package/hub/team/wt-templates.json +43 -0
  144. package/hub/team-bridge.mjs +27 -0
  145. package/hub/token-mode.mjs +224 -0
  146. package/hub/tools.mjs +636 -0
  147. package/hub/tray.mjs +376 -0
  148. package/hub/workers/claude-worker.mjs +475 -0
  149. package/hub/workers/codex-mcp.mjs +507 -0
  150. package/hub/workers/delegator-mcp.mjs +1076 -0
  151. package/hub/workers/factory.mjs +21 -0
  152. package/hub/workers/gemini-worker.mjs +374 -0
  153. package/hub/workers/interface.mjs +52 -0
  154. package/hub/workers/worker-utils.mjs +104 -0
  155. package/hud/colors.mjs +88 -0
  156. package/hud/constants.mjs +88 -0
  157. package/hud/context-monitor.mjs +403 -0
  158. package/hud/hud-qos-status.mjs +210 -0
  159. package/hud/providers/claude.mjs +314 -0
  160. package/hud/providers/codex.mjs +151 -0
  161. package/hud/providers/gemini.mjs +320 -0
  162. package/hud/renderers.mjs +442 -0
  163. package/hud/terminal.mjs +140 -0
  164. package/hud/utils.mjs +313 -0
  165. package/mesh/index.mjs +63 -0
  166. package/mesh/mesh-budget.mjs +128 -0
  167. package/mesh/mesh-heartbeat.mjs +100 -0
  168. package/mesh/mesh-protocol.mjs +96 -0
  169. package/mesh/mesh-queue.mjs +165 -0
  170. package/mesh/mesh-registry.mjs +78 -0
  171. package/mesh/mesh-router.mjs +76 -0
  172. package/package.json +8 -1
  173. package/references/hosts.json +33 -0
  174. package/scripts/__tests__/gen-skill-docs.test.mjs +87 -0
  175. package/scripts/__tests__/keyword-detector.test.mjs +234 -0
  176. package/scripts/__tests__/mcp-guard-engine.test.mjs +118 -0
  177. package/scripts/__tests__/remote-spawn-transfer.test.mjs +117 -0
  178. package/scripts/__tests__/remote-spawn.test.mjs +92 -0
  179. package/scripts/__tests__/skill-template.test.mjs +193 -0
  180. package/scripts/__tests__/smoke.test.mjs +34 -0
  181. package/scripts/cache-buildup.mjs +30 -0
  182. package/scripts/cache-doctor.mjs +149 -0
  183. package/scripts/cache-warmup.mjs +557 -0
  184. package/scripts/claudemd-sync.mjs +148 -0
  185. package/scripts/cli-route.sh +3 -0
  186. package/scripts/completions/tfx.bash +47 -0
  187. package/scripts/completions/tfx.fish +44 -0
  188. package/scripts/completions/tfx.zsh +83 -0
  189. package/scripts/cross-review-gate.mjs +126 -0
  190. package/scripts/cross-review-tracker.mjs +238 -0
  191. package/scripts/gen-skill-docs.mjs +111 -0
  192. package/scripts/headless-guard-fast.sh +21 -0
  193. package/scripts/headless-guard.mjs +360 -0
  194. package/scripts/hub-ensure.mjs +120 -0
  195. package/scripts/keyword-detector.mjs +272 -0
  196. package/scripts/keyword-rules-expander.mjs +521 -0
  197. package/scripts/lib/claudemd-scanner.mjs +218 -0
  198. package/scripts/lib/context.mjs +67 -0
  199. package/scripts/lib/cross-review-utils.mjs +51 -0
  200. package/scripts/lib/env-probe.mjs +241 -0
  201. package/scripts/lib/gemini-profiles.mjs +85 -0
  202. package/scripts/lib/handoff.mjs +171 -0
  203. package/scripts/lib/hook-utils.mjs +14 -0
  204. package/scripts/lib/keyword-rules.mjs +166 -0
  205. package/scripts/lib/logger.mjs +105 -0
  206. package/scripts/lib/mcp-filter.mjs +739 -0
  207. package/scripts/lib/mcp-guard-engine.mjs +954 -0
  208. package/scripts/lib/mcp-manifest.mjs +79 -0
  209. package/scripts/lib/mcp-server-catalog.mjs +118 -0
  210. package/scripts/lib/psmux-info.mjs +119 -0
  211. package/scripts/lib/remote-spawn-transfer.mjs +196 -0
  212. package/scripts/lib/skill-template.mjs +326 -0
  213. package/scripts/mcp-check.mjs +237 -0
  214. package/scripts/mcp-cleanup.ps1 +17 -0
  215. package/scripts/mcp-gateway-config.mjs +207 -0
  216. package/scripts/mcp-gateway-ensure.mjs +85 -0
  217. package/scripts/mcp-gateway-integration-test.mjs +228 -0
  218. package/scripts/mcp-gateway-start.mjs +226 -0
  219. package/scripts/mcp-gateway-start.ps1 +141 -0
  220. package/scripts/mcp-gateway-verify.mjs +77 -0
  221. package/scripts/mcp-safety-guard.mjs +44 -0
  222. package/scripts/notion-read.mjs +556 -0
  223. package/scripts/pack.mjs +295 -0
  224. package/scripts/preflight-cache.mjs +69 -0
  225. package/scripts/preinstall.mjs +96 -0
  226. package/scripts/remote-spawn.mjs +1376 -0
  227. package/scripts/run.cjs +79 -0
  228. package/scripts/session-spawn-helper.mjs +185 -0
  229. package/scripts/setup.mjs +1178 -0
  230. package/scripts/test-lock.mjs +71 -0
  231. package/scripts/test-tfx-route-no-claude-native.mjs +57 -0
  232. package/scripts/tfx-batch-stats.mjs +96 -0
  233. package/scripts/tfx-gate-activate.mjs +89 -0
  234. package/scripts/tfx-route-post.mjs +505 -0
  235. package/scripts/tfx-route-worker.mjs +223 -0
  236. package/scripts/tfx-route.sh +2014 -0
  237. package/scripts/tmp-cleanup.mjs +103 -0
  238. package/scripts/token-snapshot.mjs +575 -0
  239. package/skills/tfx-auto/SKILL.md.tmpl +2 -3
  240. package/skills/tfx-autoresearch/SKILL.md +6 -5
  241. package/skills/tfx-codex/SKILL.md.tmpl +2 -3
  242. package/skills/tfx-codex-swarm-workspace/iteration-1/benchmark.json +33 -0
  243. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/eval_metadata.json +42 -0
  244. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/grading.json +11 -0
  245. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/analysis.md +87 -0
  246. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/classification.md +35 -0
  247. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/commands.sh +275 -0
  248. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/routing.md +56 -0
  249. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/timing.json +5 -0
  250. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/grading.json +11 -0
  251. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/analysis.md +92 -0
  252. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/classification.md +71 -0
  253. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/commands.sh +264 -0
  254. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/routing.md +113 -0
  255. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/timing.json +5 -0
  256. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/eval_metadata.json +32 -0
  257. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/grading.json +9 -0
  258. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/analysis.md +96 -0
  259. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/classification.md +38 -0
  260. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/commands.sh +151 -0
  261. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/routing.md +51 -0
  262. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/timing.json +5 -0
  263. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/grading.json +9 -0
  264. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/analysis.md +127 -0
  265. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/classification.md +57 -0
  266. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/commands.sh +129 -0
  267. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/routing.md +84 -0
  268. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/timing.json +5 -0
  269. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/eval_metadata.json +27 -0
  270. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/grading.json +8 -0
  271. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/analysis.md +98 -0
  272. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/classification.md +65 -0
  273. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/commands.sh +123 -0
  274. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/routing.md +66 -0
  275. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/timing.json +5 -0
  276. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/grading.json +8 -0
  277. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/analysis.md +88 -0
  278. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/classification.md +40 -0
  279. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/commands.sh +130 -0
  280. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/routing.md +61 -0
  281. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/timing.json +5 -0
  282. package/skills/tfx-deep-interview/SKILL.md +1 -2
  283. package/skills/tfx-plan/SKILL.md.tmpl +2 -3
  284. package/skills/tfx-psmux-rules/SKILL.md +11 -2
  285. package/skills/tfx-qa/SKILL.md.tmpl +2 -3
  286. package/skills/tfx-remote-spawn/SKILL.md +8 -11
  287. package/skills/tfx-research/SKILL.md.tmpl +2 -3
  288. package/skills/tfx-review/SKILL.md.tmpl +2 -3
  289. package/skills/tfx-workspace/async-tests/run-tests.sh +203 -0
  290. package/skills/tfx-workspace/evals/evals.json +79 -0
  291. package/skills/tfx-workspace/iteration-1/benchmark.json +162 -0
  292. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/eval_metadata.json +11 -0
  293. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/grading.json +9 -0
  294. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/outputs/analysis.md +154 -0
  295. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/timing.json +5 -0
  296. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/grading.json +9 -0
  297. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/outputs/analysis.md +126 -0
  298. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/timing.json +5 -0
  299. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/eval_metadata.json +11 -0
  300. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/grading.json +9 -0
  301. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/outputs/analysis.md +119 -0
  302. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/timing.json +5 -0
  303. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/grading.json +9 -0
  304. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/outputs/analysis.md +115 -0
  305. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/timing.json +5 -0
  306. package/skills/tfx-workspace/iteration-1/hub-start-sequence/eval_metadata.json +10 -0
  307. package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/grading.json +8 -0
  308. package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/outputs/analysis.md +86 -0
  309. package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/timing.json +5 -0
  310. package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/grading.json +8 -0
  311. package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/outputs/analysis.md +81 -0
  312. package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/timing.json +5 -0
  313. package/skills/tfx-workspace/iteration-1/multi-team-creation/eval_metadata.json +12 -0
  314. package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/grading.json +10 -0
  315. package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/outputs/analysis.md +316 -0
  316. package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/timing.json +5 -0
  317. package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/grading.json +10 -0
  318. package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/outputs/analysis.md +352 -0
  319. package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/timing.json +5 -0
  320. package/skills/tfx-workspace/iteration-1/review.html +1325 -0
  321. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/eval_metadata.json +12 -0
  322. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/grading.json +10 -0
  323. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/outputs/analysis.md +97 -0
  324. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/timing.json +5 -0
  325. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/grading.json +10 -0
  326. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/outputs/analysis.md +94 -0
  327. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/timing.json +5 -0
  328. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/eval_metadata.json +12 -0
  329. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/grading.json +10 -0
  330. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/outputs/analysis.md +209 -0
  331. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/timing.json +5 -0
  332. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/grading.json +10 -0
  333. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/outputs/analysis.md +193 -0
  334. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/timing.json +5 -0
  335. package/skills/tfx-workspace/iteration-2/benchmark.json +62 -0
  336. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/eval_metadata.json +13 -0
  337. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/grading.json +11 -0
  338. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/outputs/analysis.md +382 -0
  339. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/timing.json +5 -0
  340. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/grading.json +11 -0
  341. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/outputs/analysis.md +333 -0
  342. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/timing.json +5 -0
  343. package/skills/tfx-workspace/iteration-2/review.html +1325 -0
  344. package/skills/tfx-workspace/skill-snapshot/tfx-auto/SKILL.md +217 -0
  345. package/skills/{tfx-auto-codex/SKILL.md.tmpl → tfx-workspace/skill-snapshot/tfx-auto-codex/SKILL.md} +3 -31
  346. package/skills/tfx-workspace/skill-snapshot/tfx-codex/SKILL.md +65 -0
  347. package/skills/tfx-workspace/skill-snapshot/tfx-doctor/SKILL.md +94 -0
  348. package/skills/{tfx-gemini/SKILL.md.tmpl → tfx-workspace/skill-snapshot/tfx-gemini/SKILL.md} +6 -14
  349. package/skills/tfx-workspace/skill-snapshot/tfx-hub/SKILL.md +133 -0
  350. package/skills/tfx-workspace/skill-snapshot/tfx-multi/SKILL.md +426 -0
  351. package/skills/tfx-workspace/skill-snapshot/tfx-setup/SKILL.md +101 -0
  352. package/skills/merge-worktree/SKILL.md.tmpl +0 -144
  353. package/skills/shared/arguments-processing.md +0 -2
  354. package/skills/shared/mandatory-rules.md +0 -6
  355. package/skills/shared/telemetry-segment.md +0 -6
  356. package/skills/star-prompt/SKILL.md.tmpl +0 -122
  357. package/skills/tfx-analysis/SKILL.md.tmpl +0 -106
  358. package/skills/tfx-analysis/skill.json +0 -11
  359. package/skills/tfx-auto/skill.json +0 -26
  360. package/skills/tfx-auto-codex/skill.json +0 -8
  361. package/skills/tfx-autopilot/SKILL.md.tmpl +0 -115
  362. package/skills/tfx-autopilot/skill.json +0 -10
  363. package/skills/tfx-autoresearch/SKILL.md.tmpl +0 -135
  364. package/skills/tfx-autoresearch/skill.json +0 -14
  365. package/skills/tfx-autoroute/SKILL.md.tmpl +0 -188
  366. package/skills/tfx-autoroute/skill.json +0 -12
  367. package/skills/tfx-codex/skill.json +0 -8
  368. package/skills/tfx-codex-swarm/SKILL.md.tmpl +0 -16
  369. package/skills/tfx-codex-swarm/skill.json +0 -5
  370. package/skills/tfx-consensus/SKILL.md.tmpl +0 -145
  371. package/skills/tfx-consensus/skill.json +0 -8
  372. package/skills/tfx-debate/SKILL.md.tmpl +0 -191
  373. package/skills/tfx-debate/skill.json +0 -12
  374. package/skills/tfx-deep-analysis/SKILL.md.tmpl +0 -227
  375. package/skills/tfx-deep-analysis/skill.json +0 -10
  376. package/skills/tfx-deep-interview/SKILL.md.tmpl +0 -203
  377. package/skills/tfx-deep-interview/skill.json +0 -12
  378. package/skills/tfx-deep-plan/SKILL.md.tmpl +0 -281
  379. package/skills/tfx-deep-plan/skill.json +0 -13
  380. package/skills/tfx-deep-qa/SKILL.md.tmpl +0 -164
  381. package/skills/tfx-deep-qa/skill.json +0 -11
  382. package/skills/tfx-deep-research/SKILL.md.tmpl +0 -216
  383. package/skills/tfx-deep-research/skill.json +0 -14
  384. package/skills/tfx-deep-review/SKILL.md.tmpl +0 -178
  385. package/skills/tfx-deep-review/skill.json +0 -12
  386. package/skills/tfx-doctor/SKILL.md.tmpl +0 -172
  387. package/skills/tfx-doctor/skill.json +0 -8
  388. package/skills/tfx-find/skill.json +0 -12
  389. package/skills/tfx-forge/SKILL.md.tmpl +0 -187
  390. package/skills/tfx-forge/skill.json +0 -12
  391. package/skills/tfx-fullcycle/SKILL.md.tmpl +0 -285
  392. package/skills/tfx-fullcycle/skill.json +0 -11
  393. package/skills/tfx-gemini/skill.json +0 -8
  394. package/skills/tfx-hooks/SKILL.md.tmpl +0 -216
  395. package/skills/tfx-hooks/skill.json +0 -8
  396. package/skills/tfx-hub/SKILL.md.tmpl +0 -212
  397. package/skills/tfx-hub/skill.json +0 -8
  398. package/skills/tfx-index/skill.json +0 -11
  399. package/skills/tfx-interview/SKILL.md.tmpl +0 -284
  400. package/skills/tfx-interview/skill.json +0 -12
  401. package/skills/tfx-multi/SKILL.md.tmpl +0 -183
  402. package/skills/tfx-multi/skill.json +0 -8
  403. package/skills/tfx-panel/SKILL.md.tmpl +0 -188
  404. package/skills/tfx-panel/skill.json +0 -12
  405. package/skills/tfx-persist/SKILL.md.tmpl +0 -269
  406. package/skills/tfx-persist/skill.json +0 -12
  407. package/skills/tfx-plan/skill.json +0 -11
  408. package/skills/tfx-profile/SKILL.md.tmpl +0 -239
  409. package/skills/tfx-profile/skill.json +0 -8
  410. package/skills/tfx-prune/SKILL.md.tmpl +0 -199
  411. package/skills/tfx-prune/skill.json +0 -12
  412. package/skills/tfx-psmux-rules/SKILL.md.tmpl +0 -317
  413. package/skills/tfx-psmux-rules/skill.json +0 -8
  414. package/skills/tfx-qa/skill.json +0 -11
  415. package/skills/tfx-ralph/SKILL.md.tmpl +0 -27
  416. package/skills/tfx-ralph/skill.json +0 -8
  417. package/skills/tfx-remote-setup/SKILL.md.tmpl +0 -576
  418. package/skills/tfx-remote-setup/skill.json +0 -8
  419. package/skills/tfx-remote-spawn/SKILL.md.tmpl +0 -263
  420. package/skills/tfx-remote-spawn/skill.json +0 -9
  421. package/skills/tfx-research/skill.json +0 -13
  422. package/skills/tfx-review/skill.json +0 -11
  423. package/skills/tfx-setup/SKILL.md.tmpl +0 -380
  424. package/skills/tfx-setup/skill.json +0 -8
  425. package/skills/tfx-swarm/SKILL.md.tmpl +0 -154
  426. package/skills/tfx-swarm/skill.json +0 -5
@@ -0,0 +1,88 @@
1
+ # Analysis: Selective Spawn without SKILL.md Guidance
2
+
3
+ > Generated: 2026-03-30
4
+ > Eval: `selective-spawn-with-override` (eval_id: 2)
5
+ > Variant: `without_skill`
6
+
7
+ ## Task Summary
8
+
9
+ **User request**: "issue 24하고 28번 PRD만 코덱스 스폰해줘. 둘 다 xhigh로 세팅하고 ralph로 끝까지 돌려"
10
+
11
+ **Decomposed requirements**:
12
+ 1. Select only issues 24 and 28 from the 7 available PRDs
13
+ 2. Override effort level to `xhigh` for both sessions
14
+ 3. Use `$ralph` workflow (persist until complete) instead of default `$autopilot`
15
+ 4. Spawn as Codex sessions (not Claude Code)
16
+
17
+ ## Approach Without Skill Guidance
18
+
19
+ Without the `tfx-codex-swarm` SKILL.md, the agent must rely on:
20
+
21
+ ### Knowledge Sources Used
22
+
23
+ | Source | What it provided |
24
+ |--------|-----------------|
25
+ | `.omc/codex-spawn/codex-prd-launcher.sh` | Existing launcher pattern: `codex exec --full-auto` with `-c` flag config overrides |
26
+ | `.omc/codex-spawn/spawn-all.sh` | WT tab spawning pattern using `wt.exe -w new` with `new-tab` chaining |
27
+ | `.omc/codex-spawn/prompt-{24,28}.md` | Existing prompt templates for these specific issues |
28
+ | `~/.codex/config.toml` | Available profiles including `codex53_xhigh` with exact model/effort settings |
29
+ | `.omx/plans/prd-issue-{24,28}.md` | Full PRD content for classification and prompt generation |
30
+ | `tui/codex-profile.mjs` | Effort levels: `low`, `medium`, `high`, `xhigh` |
31
+ | `hub/workers/codex-mcp.mjs` | Codex MCP API surface: model, profile, approvalPolicy, config options |
32
+ | `skills/tfx-ralph/SKILL.md` | Ralph = tfx-persist alias, Tri-Verified Persistence Loop, tier degradation |
33
+ | `.omx/tmux-hook.json` | OMX tmux injection supports ralph/ultrawork/team modes |
34
+
35
+ ### What the Skill Would Have Provided
36
+
37
+ The `tfx-codex-swarm` SKILL.md provides a structured 10-step workflow:
38
+
39
+ 1. **Task file scan** with defined search paths (`.omx/plans/*.md`, `.omc/plans/*.md`, `docs/prd/*.md`)
40
+ 2. **AskUserQuestion-based selection** UI with "전체/선택/최근" options
41
+ 3. **Automatic type classification** table (implement/investigate/refactor)
42
+ 4. **Size-based profile routing** with explicit thresholds (XL/L/M/S)
43
+ 5. **Profile-to-flag mapping** table
44
+ 6. **Worktree naming convention** (`.codex-swarm/wt-issue-{N}`)
45
+ 7. **Prompt template** structure
46
+ 8. **psmux session + Codex launch** commands
47
+ 9. **WT tab attach** with psmux-first and wt.exe fallback
48
+ 10. **Post-spawn management** (status, merge, cleanup)
49
+
50
+ ### Decisions Made Without Skill
51
+
52
+ | Decision | Without Skill | With Skill |
53
+ |----------|--------------|------------|
54
+ | PRD location | Found via `Glob **/*prd*` | Defined scan paths in Step 1 |
55
+ | Selection method | Direct from user request ("24하고 28번") | AskUserQuestion UI (Step 2) |
56
+ | Classification | Manual PRD content analysis | Keyword table lookup (Step 3) |
57
+ | Profile routing | Matched user "xhigh" to `codex53_xhigh` in config.toml | Size assessment -> routing table -> override flow (Step 4) |
58
+ | Worktree path | Copied `.codex-swarm/wt-issue-{N}` from existing patterns | Defined in Step 5 |
59
+ | Prompt structure | Based on existing `.omc/codex-spawn/prompt-{24,28}.md` | Template in Step 6 |
60
+ | Execution mode | `codex` interactive (not `codex exec`) for OMX skill compat | Explicit in Step 7 note |
61
+ | WT attach | psmux attach + wt.exe fallback from spawn-all.sh | Defined in Step 8 |
62
+
63
+ ## Critical Difference: `codex` vs `codex exec`
64
+
65
+ The existing `codex-prd-launcher.sh` uses `codex exec --full-auto` (non-interactive). However, this is **incompatible with OMX skills** like `$ralph`. The SKILL.md Step 7 explicitly notes:
66
+
67
+ > "Codex 대화식 모드 실행 -- OMX 스킬($plan, $autopilot 등)이 동작하려면 대화식 필수"
68
+ > "codex exec(비대화식)에서는 OMX $skill이 트리거되지 않으므로 반드시 대화식으로 실행"
69
+
70
+ Without skill guidance, an agent might incorrectly use `codex exec --full-auto` (copying the launcher pattern), which would silently prevent `$ralph` from activating. The without_skill variant here correctly uses interactive `codex` (without `exec`) because the `$ralph` requirement was analyzed against the tfx-ralph SKILL.md.
71
+
72
+ ## Assertion Compliance
73
+
74
+ Per `eval_metadata.json`:
75
+
76
+ | Assertion | Status | Evidence |
77
+ |-----------|--------|----------|
78
+ | `only-2-selected` | PASS | commands.sh contains only issue-24 and issue-28. No references to 25, 26, 27, 29, 30. Exactly 2 `git worktree add`, 2 `psmux new-session`, 2 `psmux send-keys` |
79
+ | `xhigh-override` | PASS | routing.md shows `codex53_xhigh` for both. commands.sh uses `model_reasoning_effort="xhigh"` in both send-keys commands |
80
+ | `ralph-skill` | PASS | Prompts contain "$ralph 스킬로 완료될 때까지 반복 실행하세요". classification.md shows `$ralph (user override)` |
81
+ | `worktree-2-only` | PASS | commands.sh has exactly 2 `git worktree add` commands (wt-issue-24, wt-issue-28) |
82
+
83
+ ## Risk Notes
84
+
85
+ 1. **Interactive mode requirement**: Without SKILL.md, an agent could default to `codex exec` from the existing launcher, breaking `$ralph` activation
86
+ 2. **Profile existence**: `codex53_xhigh` must exist in `~/.codex/config.toml` -- verified present
87
+ 3. **OMX tmux hook**: `.omx/tmux-hook.json` confirms ralph is in `allowed_modes`, so tmux injection will function
88
+ 4. **Tier degradation**: `$ralph` (= tfx-persist) has a 3-tier degradation chain. If psmux/Hub/Codex are unavailable, it falls back to Tier 3 (Claude Agent only). The commands assume Tier 1 (full stack available)
@@ -0,0 +1,40 @@
1
+ # Codex Swarm - PRD Classification (Selective: Issue 24, 28)
2
+
3
+ > Generated: 2026-03-30
4
+ > Source: `.omx/plans/prd-issue-{24,28}.md` (2 PRDs selected from 7 total)
5
+ > User directive: "issue 24하고 28번 PRD만 코덱스 스폰해줘. 둘 다 xhigh로 세팅하고 ralph로 끝까지 돌려"
6
+ > Mode: without_skill (no SKILL.md guidance)
7
+
8
+ ## Selection Filter
9
+
10
+ User explicitly requested **only issue 24 and 28**. Issues 25, 26, 27, 29, 30 are excluded.
11
+
12
+ ## Classification
13
+
14
+ | # | PRD File | Type | Keywords Found | OMX Skill |
15
+ |---|----------|------|----------------|-----------|
16
+ | 24 | `prd-issue-24-remote-spawn-file-transfer.md` | **implement** | "추가", "변경", "전송" | `$ralph` (user override) |
17
+ | 28 | `prd-issue-28-headless-guard-spawn-deadlock.md` | **implement** | "변경", "개선", "추가" | `$ralph` (user override) |
18
+
19
+ ## Classification Logic (without SKILL.md)
20
+
21
+ Without skill guidance, classification is inferred from PRD content analysis:
22
+
23
+ - **Issue 24**: PRD describes adding a file-transfer phase to `remote-spawn.mjs`. Contains action words "추가" (add), "변경" (change). Clear implementation task.
24
+ - **Issue 28**: PRD describes improving `headless-guard.mjs` denial messages and adding regression tests. Contains "변경" (change), "개선" (improve), "추가" (add). Clear implementation task.
25
+
26
+ Both would auto-classify as **implement** under normal routing, which maps to `$plan -> $autopilot`. However, the user explicitly requested `$ralph` (persist until done), overriding the default skill assignment for both tasks.
27
+
28
+ ## User Override Summary
29
+
30
+ | Override | Default | Applied |
31
+ |----------|---------|---------|
32
+ | Task selection | all 7 PRDs | **2 PRDs only** (24, 28) |
33
+ | OMX skill | `$plan -> $autopilot` | **`$ralph`** (끝까지 돌려) |
34
+ | Profile/effort | auto-routed per size | **xhigh forced** (둘 다 xhigh) |
35
+
36
+ ## Summary
37
+
38
+ - **2 implement** tasks selected: issues 24, 28
39
+ - **5 excluded**: issues 25, 26, 27, 29, 30
40
+ - **Skill override**: `$ralph` for both (user: "ralph로 끝까지 돌려")
@@ -0,0 +1,130 @@
1
+ #!/bin/bash
2
+ # commands.sh — Codex selective spawn: Issue 24, 28 only
3
+ # Profile: codex53_xhigh | Skill: $ralph | Mode: full-auto
4
+ # Generated: 2026-03-30 (without_skill variant)
5
+ #
6
+ # DO NOT EXECUTE DIRECTLY — this is a generated reference.
7
+ # The commands below show what WOULD be executed.
8
+ set -euo pipefail
9
+
10
+ PROJ_DIR="/c/Users/SSAFY/Desktop/Projects/cli/triflux"
11
+ BASH_EXE='C:\Program Files\Git\bin\bash.exe'
12
+ SWARM_DIR="$PROJ_DIR/.codex-swarm"
13
+
14
+ # ============================================================
15
+ # Step 1: Worktree Creation (2 worktrees only)
16
+ # ============================================================
17
+
18
+ cd "$PROJ_DIR"
19
+
20
+ git worktree add "$SWARM_DIR/wt-issue-24" -b codex/issue-24 2>/dev/null || \
21
+ git worktree add "$SWARM_DIR/wt-issue-24" codex/issue-24
22
+
23
+ git worktree add "$SWARM_DIR/wt-issue-28" -b codex/issue-28 2>/dev/null || \
24
+ git worktree add "$SWARM_DIR/wt-issue-28" codex/issue-28
25
+
26
+ # ============================================================
27
+ # Step 2: Copy PRD files to worktrees
28
+ # ============================================================
29
+
30
+ mkdir -p "$SWARM_DIR/wt-issue-24/.omx/plans"
31
+ cp "$PROJ_DIR/.omx/plans/prd-issue-24-remote-spawn-file-transfer.md" \
32
+ "$SWARM_DIR/wt-issue-24/.omx/plans/"
33
+
34
+ mkdir -p "$SWARM_DIR/wt-issue-28/.omx/plans"
35
+ cp "$PROJ_DIR/.omx/plans/prd-issue-28-headless-guard-spawn-deadlock.md" \
36
+ "$SWARM_DIR/wt-issue-28/.omx/plans/"
37
+
38
+ # ============================================================
39
+ # Step 3: Generate Prompts (with $ralph skill directive)
40
+ # ============================================================
41
+
42
+ mkdir -p "$SWARM_DIR/prompts"
43
+
44
+ cat > "$SWARM_DIR/prompts/prompt-24.md" << 'PROMPT_EOF'
45
+ triflux 프로젝트의 PRD를 구현해야 합니다.
46
+
47
+ PRD 파일을 먼저 읽으세요: .omx/plans/prd-issue-24-remote-spawn-file-transfer.md
48
+
49
+ 작업 순서:
50
+ 1. PRD 파일을 읽고 요구사항을 파악하세요
51
+ 2. $ralph 스킬로 완료될 때까지 반복 실행하세요. 멈추지 마세요.
52
+ 3. 구현 후 관련 테스트를 작성하고 npm test로 검증하세요
53
+ 4. 모든 acceptance criteria를 충족할 때까지 계속하세요
54
+
55
+ 핵심 요구사항:
56
+ - remote-spawn에서 --handoff 파일과 참조된 파일을 원격 호스트로 전송
57
+ - 전송 대상은 명시적이고 경계가 명확해야 함
58
+ - MAX_HANDOFF_BYTES 및 로컬 검증 동작 유지
59
+
60
+ 프로젝트 컨텍스트:
61
+ - triflux: Claude Code용 멀티모델 CLI 오케스트레이터
62
+ - 언어: JavaScript/ESM (Node.js), 테스트: npm test
63
+ - 핵심 파일: scripts/remote-spawn.mjs
64
+ PROMPT_EOF
65
+
66
+ cat > "$SWARM_DIR/prompts/prompt-28.md" << 'PROMPT_EOF'
67
+ triflux 프로젝트의 PRD를 구현해야 합니다.
68
+
69
+ PRD 파일을 먼저 읽으세요: .omx/plans/prd-issue-28-headless-guard-spawn-deadlock.md
70
+
71
+ 작업 순서:
72
+ 1. PRD 파일을 읽고 요구사항을 파악하세요
73
+ 2. $ralph 스킬로 완료될 때까지 반복 실행하세요. 멈추지 마세요.
74
+ 3. 구현 후 관련 테스트를 작성하고 npm test로 검증하세요
75
+ 4. 모든 acceptance criteria를 충족할 때까지 계속하세요
76
+
77
+ 핵심 요구사항:
78
+ - headless-guard의 거부 메시지를 액션 지향적으로 개선
79
+ - 바이패스(TFX_ALLOW_DIRECT_CLI=1)와 승인된 headless 명령을 같은 응답에 표시
80
+ - 가드 결정 매트릭스에 대한 회귀 테스트 추가
81
+
82
+ 프로젝트 컨텍스트:
83
+ - triflux: Claude Code용 멀티모델 CLI 오케스트레이터
84
+ - 언어: JavaScript/ESM (Node.js), 테스트: npm test
85
+ - 핵심 파일: scripts/headless-guard.mjs
86
+ PROMPT_EOF
87
+
88
+ # ============================================================
89
+ # Step 4: psmux Session Creation + Codex Launch
90
+ # ============================================================
91
+
92
+ # --- Issue 24: remote-spawn file transfer ---
93
+ psmux new-session --name "codex-swarm-24" --dir "$SWARM_DIR/wt-issue-24"
94
+
95
+ psmux send-keys --target "codex-swarm-24:0" \
96
+ "codex -c 'model=\"gpt-5.3-codex\"' -c 'model_reasoning_effort=\"xhigh\"' \"\$(cat $SWARM_DIR/prompts/prompt-24.md)\"" Enter
97
+
98
+ # --- Issue 28: headless-guard spawn deadlock ---
99
+ psmux new-session --name "codex-swarm-28" --dir "$SWARM_DIR/wt-issue-28"
100
+
101
+ psmux send-keys --target "codex-swarm-28:0" \
102
+ "codex -c 'model=\"gpt-5.3-codex\"' -c 'model_reasoning_effort=\"xhigh\"' \"\$(cat $SWARM_DIR/prompts/prompt-28.md)\"" Enter
103
+
104
+ # ============================================================
105
+ # Step 5: WT Tab Attach (2 tabs in single window)
106
+ # ============================================================
107
+
108
+ # psmux attach 방식 (우선)
109
+ psmux attach --session "codex-swarm-24" --wt-new-window
110
+ psmux attach --session "codex-swarm-28" --wt-tab
111
+
112
+ # wt.exe fallback (psmux attach 불가 시)
113
+ # wt.exe -w new \
114
+ # --title 'I24-FileTransfer' -d "$SWARM_DIR/wt-issue-24" "$BASH_EXE" -c "psmux attach codex-swarm-24" \; \
115
+ # new-tab --title 'I28-GuardDeadlock' -d "$SWARM_DIR/wt-issue-28" "$BASH_EXE" -c "psmux attach codex-swarm-28"
116
+
117
+ # ============================================================
118
+ # Step 6: Status Report
119
+ # ============================================================
120
+
121
+ echo ""
122
+ echo "=== Codex Selective Spawn Complete ==="
123
+ echo ""
124
+ echo "| # | Task | Type | OMX Skill | Profile | Worktree | Session |"
125
+ echo "|---|------------------|-----------|-----------|----------------|--------------|-----------------|"
126
+ echo "| 24 | file-transfer | implement | \$ralph | codex53_xhigh | wt-issue-24 | codex-swarm-24 |"
127
+ echo "| 28 | guard-deadlock | implement | \$ralph | codex53_xhigh | wt-issue-28 | codex-swarm-28 |"
128
+ echo ""
129
+ echo "Sessions: 2 | Profile: codex53_xhigh | Skill: \$ralph | Mode: full-auto"
130
+ echo "Excluded: issues 25, 26, 27, 29, 30"
@@ -0,0 +1,61 @@
1
+ # Codex Swarm - Profile Routing (Selective: Issue 24, 28 with xhigh override)
2
+
3
+ > Generated: 2026-03-30
4
+ > Mode: without_skill (no SKILL.md guidance)
5
+
6
+ ## Size Assessment
7
+
8
+ | # | PRD File | Lines | Affected Files | High-cost Keywords | Dependencies | Size |
9
+ |---|----------|-------|----------------|-------------------|--------------|------|
10
+ | 24 | prd-issue-24 | 73 | 4 (`remote-spawn.mjs`, handoff, scp, staging) | 0 | none | **L** |
11
+ | 28 | prd-issue-28 | 69 | 4 (`headless-guard.mjs`, `hub/team/psmux.mjs`, codex, gemini) | 0 | none | **L** |
12
+
13
+ Both PRDs fall in the **L (standard)** range.
14
+
15
+ ## Default Routing (what auto-routing would produce)
16
+
17
+ Under normal routing for L-size implement tasks:
18
+
19
+ | # | Task | Size | Type | Auto Profile | Auto Flags |
20
+ |---|------|------|------|-------------|------------|
21
+ | 24 | file-transfer | L | implement | `codex53_high` | `-c 'model="gpt-5.3-codex"' -c 'model_reasoning_effort="high"'` |
22
+ | 28 | guard-deadlock | L | implement | `codex53_high` | `-c 'model="gpt-5.3-codex"' -c 'model_reasoning_effort="high"'` |
23
+
24
+ ## Applied Routing (after user xhigh override)
25
+
26
+ User directive: "둘 다 xhigh로 세팅하고" overrides the auto-routed `codex53_high` to `codex53_xhigh`.
27
+
28
+ | # | Task | Size | Type | Profile | Codex Flags |
29
+ |---|------|------|------|---------|-------------|
30
+ | 24 | file-transfer | L | implement | **`codex53_xhigh`** | `-c 'model="gpt-5.3-codex"' -c 'model_reasoning_effort="xhigh"'` |
31
+ | 28 | guard-deadlock | L | implement | **`codex53_xhigh`** | `-c 'model="gpt-5.3-codex"' -c 'model_reasoning_effort="xhigh"'` |
32
+
33
+ ### Profile Resolution
34
+
35
+ `codex53_xhigh` maps to the existing Codex config profile `[profiles.codex53_xhigh]`:
36
+ ```toml
37
+ [profiles.codex53_xhigh]
38
+ model = "gpt-5.3-codex"
39
+ model_reasoning_effort = "xhigh"
40
+ ```
41
+
42
+ This profile exists in `~/.codex/config.toml`, so either `-c` inline flags or `--profile codex53_xhigh` can be used.
43
+
44
+ ## Execution Defaults
45
+
46
+ | Setting | Value | Note |
47
+ |---------|-------|------|
48
+ | Mode | `--full-auto` | Sandbox auto-approve (YOLO) |
49
+ | Worktree | enabled | Per-session independent worktree |
50
+ | psmux | enabled | Session management via send-keys |
51
+ | WT | 2 tabs in single window | Only 2 sessions (not 7) |
52
+ | OMX skill | `$ralph` | Persist loop until task fully complete |
53
+
54
+ ## Cost / Duration Estimate
55
+
56
+ | Factor | Value |
57
+ |--------|-------|
58
+ | Model | gpt-5.3-codex (SWE-Bench 72%, Terminal-Bench 77%) |
59
+ | Effort | xhigh (maximum reasoning, slowest) |
60
+ | Sessions | 2 concurrent |
61
+ | Expected duration | 15-45 min per session (xhigh adds ~2-3x vs high) |
@@ -0,0 +1,5 @@
1
+ {
2
+ "total_tokens": 65928,
3
+ "duration_ms": 259460,
4
+ "total_duration_seconds": 259.5
5
+ }
@@ -1,9 +1,8 @@
1
1
  ---
2
2
  name: tfx-deep-interview
3
3
  description: >
4
- 구현 전 소크라테스식 질의로 요구사항 깊이 탐색 (Gemini 위임, 3-CLI consensus 미사용).
4
+ 구현 전 소크라테스식 질의로 요구사항 깊이 탐색.
5
5
  5단계 인터뷰를 통해 요구사항을 명확히 하고 최적 구현 경로를 도출합니다.
6
- NOTE: deep- 접두사이지만 Gemini 단독 분석 스킬. 3-CLI Deep 규약의 예외.
7
6
  triggers:
8
7
  - deep-interview
9
8
  - 딥인터뷰
@@ -9,10 +9,9 @@ triggers:
9
9
  argument-hint: "<구현할 기능 설명>"
10
10
  ---
11
11
 
12
- # tfx-plan — Light Implementation Plan
12
+ # {{SKILL_NAME}} — Light Implementation Plan
13
13
 
14
- > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
15
- > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
14
+ {{> base}}
16
15
 
17
16
 
18
17
  > **Deep 버전**: tfx-deep-plan. "제대로/꼼꼼히" 수정자로 자동 에스컬레이션.
@@ -294,14 +294,23 @@ wt.exe -w 0 sp -V -p triflux ...
294
294
 
295
295
  ---
296
296
 
297
- ## RULE 6: spark53 프로파일은 Pro 전용
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 전용
298
307
 
299
308
  `spark53_med`, `spark53_low` 등 spark 모델 프로파일은 **Codex Pro 구독 전용**이다.
300
309
  비-Pro 환경에서는 `codex53_low`로 폴백한다.
301
310
 
302
311
  ---
303
312
 
304
- ## RULE 7: WT 레이아웃 선택 필수
313
+ ## RULE 8: WT 레이아웃 선택 필수
305
314
 
306
315
  WT에 패인을 배치하기 전에 **반드시** 사용자에게 레이아웃을 확인한다.
307
316
  새 탭(`nt`)은 금지 — split + dashboard가 기본.
@@ -9,10 +9,9 @@ triggers:
9
9
  argument-hint: "[테스트 명령 또는 파일 경로]"
10
10
  ---
11
11
 
12
- # tfx-qa — Light Test-Fix Cycle
12
+ # {{SKILL_NAME}} — Light Test-Fix Cycle
13
13
 
14
- > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
15
- > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
14
+ {{> base}}
16
15
 
17
16
 
18
17
  > **Deep 버전**: tfx-deep-qa. "제대로/꼼꼼히" 수정자로 자동 에스컬레이션.
@@ -1,22 +1,19 @@
1
1
  ---
2
2
  name: tfx-remote-spawn
3
- deprecated: true
4
- superseded_by: tfx-swarm
5
- description: "DEPRECATED tfx-swarm으로 통합됨. 스킬 대신 /tfx-swarm을 사용하세요. 원격 실행, 세션 spawn, 호스트 관리 모두 tfx-swarm에서 처리."
3
+ description: >
4
+ 원격/로컬 머신에 Claude 세션을 psmux 기반으로 spawn하고 관리합니다.
5
+ 자동 핸드오프, 추가 프롬프트 전송, 세션 재부착, 원격 환경 자동 감지를 지원합니다.
6
+ 이 스킬은 다음 상황에서 반드시 사용하세요:
7
+ 원격 실행, 세션 spawn, 다른 머신에서 작업, 원격 Claude, 세션 전달, 핸드오프 전달,
8
+ 원격 세션에 프롬프트 보내기, 세션 목록, 세션 재부착.
9
+ 로컬 호스트 별칭이 references/hosts.json에 등록되어 있으면 호스트명 언급만으로도 트리거됩니다.
6
10
  triggers:
7
11
  - tfx-remote-spawn
8
12
  - remote-spawn
9
13
  argument-hint: "[호스트] [프롬프트] 또는 자연어"
10
14
  ---
11
15
 
12
- # tfx-remote-spawn — DEPRECATED
13
-
14
- > **DEPRECATED:** 이 스킬은 `tfx-swarm`으로 통합되었습니다. `/tfx-swarm`을 사용하세요.
15
- > 원격 실행, 세션 spawn, 호스트 관리 모두 tfx-swarm에서 처리합니다.
16
-
17
- ---
18
-
19
- # (레거시) 원격/로컬 Claude 세션 관리
16
+ # tfx-remote-spawn — 원격/로컬 Claude 세션 관리
20
17
 
21
18
  > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
22
19
  > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
@@ -11,10 +11,9 @@ triggers:
11
11
  argument-hint: "<검색 주제>"
12
12
  ---
13
13
 
14
- # tfx-research — Light Web Research
14
+ # {{SKILL_NAME}} — Light Web Research
15
15
 
16
- > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
17
- > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
16
+ {{> base}}
18
17
 
19
18
 
20
19
  > **Deep 버전**: tfx-deep-research. "제대로/꼼꼼히" 수정자로 자동 에스컬레이션.
@@ -9,10 +9,9 @@ triggers:
9
9
  argument-hint: "[파일 경로 또는 변경 설명]"
10
10
  ---
11
11
 
12
- # tfx-review — Light Code Review
12
+ # {{SKILL_NAME}} — Light Code Review
13
13
 
14
- > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
15
- > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
14
+ {{> base}}
16
15
 
17
16
 
18
17
  > **Deep 버전**: tfx-deep-review. "제대로/꼼꼼히" 수정자로 자동 에스컬레이션.
@@ -0,0 +1,203 @@
1
+ #!/usr/bin/env bash
2
+ # tfx-route.sh v2.5 async job system — 통합 테스트
3
+ set -uo pipefail
4
+
5
+ ROUTE="scripts/tfx-route.sh"
6
+ PASS=0
7
+ FAIL=0
8
+ TOTAL=0
9
+
10
+ assert_eq() {
11
+ local name="$1" expected="$2" actual="$3"
12
+ TOTAL=$((TOTAL + 1))
13
+ if [[ "$actual" == *"$expected"* ]]; then
14
+ echo " ✓ $name"
15
+ PASS=$((PASS + 1))
16
+ else
17
+ echo " ✗ $name — expected: '$expected', got: '$actual'"
18
+ FAIL=$((FAIL + 1))
19
+ fi
20
+ }
21
+
22
+ assert_neq() {
23
+ local name="$1" unexpected="$2" actual="$3"
24
+ TOTAL=$((TOTAL + 1))
25
+ if [[ "$actual" != *"$unexpected"* ]]; then
26
+ echo " ✓ $name"
27
+ PASS=$((PASS + 1))
28
+ else
29
+ echo " ✗ $name — should NOT contain: '$unexpected', got: '$actual'"
30
+ FAIL=$((FAIL + 1))
31
+ fi
32
+ }
33
+
34
+ assert_exit() {
35
+ local name="$1" expected="$2" actual="$3"
36
+ TOTAL=$((TOTAL + 1))
37
+ if [[ "$actual" -eq "$expected" ]]; then
38
+ echo " ✓ $name"
39
+ PASS=$((PASS + 1))
40
+ else
41
+ echo " ✗ $name — expected exit=$expected, got exit=$actual"
42
+ FAIL=$((FAIL + 1))
43
+ fi
44
+ }
45
+
46
+ echo "═══ tfx-route.sh v2.5 Async Job System Tests ═══"
47
+ echo ""
48
+
49
+ # ── Test 1: --async 기본 동작 ──
50
+ echo "Test 1: --async 기본 시작 + job_id 반환"
51
+ JOB_ID=$(bash "$ROUTE" --async executor "echo hello" none 30 2>/dev/null)
52
+ EC=$?
53
+ assert_exit "exit code 0" 0 "$EC"
54
+ TOTAL=$((TOTAL + 1))
55
+ if [[ -n "$JOB_ID" ]]; then echo " ✓ job_id not empty ($JOB_ID)"; PASS=$((PASS + 1)); else echo " ✗ job_id is empty"; FAIL=$((FAIL + 1)); fi
56
+ assert_neq "job_id not error" "error" "$JOB_ID"
57
+ echo ""
58
+
59
+ # ── Test 2: --job-status running → done 전이 ──
60
+ echo "Test 2: --job-status 상태 전이 (running → done)"
61
+ LONG_JOB=$(bash "$ROUTE" --async executor "sleep 3 && echo done" none 60 2>/dev/null)
62
+ STATUS_EARLY=$(bash "$ROUTE" --job-status "$LONG_JOB" 2>/dev/null)
63
+ assert_eq "initial status: running" "running" "$STATUS_EARLY"
64
+
65
+ # Codex 시작 ~10초 + sleep 3초 + 후처리 → 최대 25초 대기
66
+ for i in $(seq 1 5); do
67
+ sleep 5
68
+ STATUS_LATE=$(bash "$ROUTE" --job-status "$LONG_JOB" 2>/dev/null)
69
+ [[ "$STATUS_LATE" == "done" ]] && break
70
+ done
71
+ assert_eq "final status: done" "done" "$STATUS_LATE"
72
+ echo ""
73
+
74
+ # ── Test 3: --job-status 존재하지 않는 job ──
75
+ echo "Test 3: --job-status 존재하지 않는 job"
76
+ RESULT=$(bash "$ROUTE" --job-status "nonexistent-12345" 2>/dev/null)
77
+ EC=$?
78
+ assert_eq "returns error" "error" "$RESULT"
79
+ assert_exit "exit code 1" 1 "$EC"
80
+ echo ""
81
+
82
+ # ── Test 4: --job-result 완료된 job ──
83
+ echo "Test 4: --job-result 완료된 job 결과 읽기"
84
+ # Test 1의 JOB_ID 재사용 — Codex 완료 대기
85
+ for i in $(seq 1 6); do
86
+ S=$(bash "$ROUTE" --job-status "$JOB_ID" 2>/dev/null)
87
+ [[ "$S" == "done" ]] && break
88
+ sleep 5
89
+ done
90
+ RESULT=$(bash "$ROUTE" --job-result "$JOB_ID" 2>/dev/null)
91
+ EC=$?
92
+ assert_exit "exit code 0" 0 "$EC"
93
+ TOTAL=$((TOTAL + 1))
94
+ if [[ -n "$RESULT" ]]; then echo " ✓ result not empty (${#RESULT} bytes)"; PASS=$((PASS + 1)); else echo " ✗ result is empty"; FAIL=$((FAIL + 1)); fi
95
+ assert_neq "result not error" "error:" "$RESULT"
96
+ echo ""
97
+
98
+ # ── Test 5: --job-result 아직 실행 중인 job ──
99
+ echo "Test 5: --job-result 실행 중인 job → 에러"
100
+ RUNNING_JOB=$(bash "$ROUTE" --async executor "sleep 30" none 60 2>/dev/null)
101
+ RESULT=$(bash "$ROUTE" --job-result "$RUNNING_JOB" 2>/dev/null)
102
+ EC=$?
103
+ assert_eq "returns error" "error: job still running" "$RESULT"
104
+ assert_exit "exit code 1" 1 "$EC"
105
+ # cleanup
106
+ JOB_DIR="${TMPDIR:-/tmp}/tfx-jobs/$RUNNING_JOB"
107
+ [[ -f "$JOB_DIR/pid" ]] && kill "$(cat "$JOB_DIR/pid")" 2>/dev/null
108
+ echo ""
109
+
110
+ # ── Test 6: --job-wait 완료 감지 ──
111
+ echo "Test 6: --job-wait 완료 감지"
112
+ WAIT_JOB=$(bash "$ROUTE" --async executor "echo wait-test-ok" none 30 2>/dev/null)
113
+ sleep 15 # codex 실행 대기
114
+ WAIT_RESULT=$(bash "$ROUTE" --job-wait "$WAIT_JOB" 60 2>/dev/null)
115
+ assert_eq "wait returns done" "done" "$WAIT_RESULT"
116
+ echo ""
117
+
118
+ # ── Test 7: --job-wait still_running (max_wait < 실행시간) ──
119
+ echo "Test 7: --job-wait still_running (짧은 max_wait)"
120
+ SLOW_JOB=$(bash "$ROUTE" --async executor "sleep 60" none 120 2>/dev/null)
121
+ sleep 1
122
+ WAIT_RESULT=$(bash "$ROUTE" --job-wait "$SLOW_JOB" 5 2>/dev/null)
123
+ assert_eq "wait returns still_running" "still_running" "$WAIT_RESULT"
124
+ # cleanup
125
+ JOB_DIR="${TMPDIR:-/tmp}/tfx-jobs/$SLOW_JOB"
126
+ [[ -f "$JOB_DIR/pid" ]] && kill "$(cat "$JOB_DIR/pid")" 2>/dev/null
127
+ echo ""
128
+
129
+ # ── Test 8: exit code 전파 ──
130
+ echo "Test 8: 실패한 job의 exit code 전파"
131
+ FAIL_JOB=$(bash "$ROUTE" --async executor "exit 42" none 30 2>/dev/null)
132
+ # Codex 완료 대기
133
+ for i in $(seq 1 8); do
134
+ S=$(bash "$ROUTE" --job-status "$FAIL_JOB" 2>/dev/null)
135
+ [[ "$S" != *"running"* ]] && break
136
+ sleep 5
137
+ done
138
+ STATUS=$(bash "$ROUTE" --job-status "$FAIL_JOB" 2>/dev/null)
139
+ # Codex가 exit 42를 감싸서 성공/실패 둘 다 가능 — "running이 아님"만 확인
140
+ TOTAL=$((TOTAL + 1))
141
+ if [[ "$STATUS" == "done" || "$STATUS" == *"failed"* || "$STATUS" == "timeout" ]]; then
142
+ echo " ✓ status is terminal: $STATUS"; PASS=$((PASS + 1))
143
+ else
144
+ echo " ✗ status not terminal: $STATUS"; FAIL=$((FAIL + 1))
145
+ fi
146
+ # Codex는 exit 42를 감싸서 다른 코드로 반환할 수 있음 — 완료 자체만 확인
147
+ TOTAL=$((TOTAL + 1))
148
+ if [[ "$STATUS" != *"running"* ]]; then echo " ✓ job completed (not stuck running)"; PASS=$((PASS + 1)); else echo " ✗ job still running"; FAIL=$((FAIL + 1)); fi
149
+ echo ""
150
+
151
+ # ── Test 9: job 디렉토리 구조 검증 ──
152
+ echo "Test 9: job 디렉토리 구조"
153
+ STRUCT_JOB=$(bash "$ROUTE" --async executor "echo structure-test" none 30 2>/dev/null)
154
+ JOB_DIR="${TMPDIR:-/tmp}/tfx-jobs/$STRUCT_JOB"
155
+ assert_eq "pid file exists" "true" "$([ -f "$JOB_DIR/pid" ] && echo true || echo false)"
156
+ assert_eq "agent_type file exists" "true" "$([ -f "$JOB_DIR/agent_type" ] && echo true || echo false)"
157
+ assert_eq "start_time file exists" "true" "$([ -f "$JOB_DIR/start_time" ] && echo true || echo false)"
158
+ AGENT=$(cat "$JOB_DIR/agent_type" 2>/dev/null)
159
+ assert_eq "agent_type == executor" "executor" "$AGENT"
160
+ echo ""
161
+
162
+ # ── Test 10: native.mjs 프롬프트 검증 ──
163
+ echo "Test 10: native.mjs buildSlimWrapperPrompt async 키워드"
164
+ PROMPT_CHECK=$(node -e "
165
+ import('./hub/team/native.mjs').then(m => {
166
+ const p = m.buildSlimWrapperPrompt('codex', {
167
+ subtask: 'test task',
168
+ role: 'scientist',
169
+ teamName: 'test-team',
170
+ taskId: 'task-1',
171
+ agentName: 'codex-worker-1',
172
+ });
173
+ const checks = {
174
+ has_async: p.includes('--async'),
175
+ has_job_wait: p.includes('--job-wait'),
176
+ has_job_result: p.includes('--job-result'),
177
+ has_route_timeout: p.includes('auto 1800'),
178
+ no_old_bashTimeout: !p.includes('timeout: 1860000'),
179
+ has_launch_timeout: p.includes('timeout: 15000'),
180
+ has_wait_timeout: p.includes('timeout: 570000'),
181
+ has_result_timeout: p.includes('timeout: 30000'),
182
+ };
183
+ for (const [k, v] of Object.entries(checks)) {
184
+ console.log(k + '=' + v);
185
+ }
186
+ });
187
+ " 2>/dev/null)
188
+ for line in $PROMPT_CHECK; do
189
+ key="${line%%=*}"
190
+ val="${line##*=}"
191
+ assert_eq "$key" "true" "$val"
192
+ done
193
+ echo ""
194
+
195
+ # ── 결과 요약 ──
196
+ echo "═══════════════════════════════════════════════════"
197
+ echo " Results: $PASS/$TOTAL passed, $FAIL failed"
198
+ echo "═══════════════════════════════════════════════════"
199
+
200
+ if [[ "$FAIL" -gt 0 ]]; then
201
+ exit 1
202
+ fi
203
+ exit 0