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
@@ -1,8 +1,24 @@
1
1
  {
2
2
  "expectations": [
3
- {"text": "only-2-selected", "passed": true, "evidence": "issue-24, issue-28만 존재, 다른 이슈 없음"},
4
- {"text": "xhigh-override", "passed": true, "evidence": "codex53_xhigh, model_reasoning_effort=xhigh"},
5
- {"text": "ralph-skill", "passed": true, "evidence": "프롬프트에 $ralph 참조, 반복 실행 지시"},
6
- {"text": "worktree-2-only", "passed": true, "evidence": "git worktree add 2개만"}
3
+ {
4
+ "text": "only-2-selected",
5
+ "passed": true,
6
+ "evidence": "issue-24, issue-28만 존재, 다른 이슈 없음"
7
+ },
8
+ {
9
+ "text": "xhigh-override",
10
+ "passed": true,
11
+ "evidence": "codex53_xhigh, model_reasoning_effort=xhigh"
12
+ },
13
+ {
14
+ "text": "ralph-skill",
15
+ "passed": true,
16
+ "evidence": "프롬프트에 $ralph 참조, 반복 실행 지시"
17
+ },
18
+ {
19
+ "text": "worktree-2-only",
20
+ "passed": true,
21
+ "evidence": "git worktree add 2개만"
22
+ }
7
23
  ]
8
24
  }
@@ -1,8 +1,20 @@
1
1
  {
2
2
  "expectations": [
3
- {"text": "only-2-selected", "passed": true, "evidence": "24, 28만 선택됨"},
4
- {"text": "xhigh-override", "passed": true, "evidence": "xhigh 적용, config.toml 프로파일 참조"},
5
- {"text": "ralph-skill", "passed": true, "evidence": "$ralph 참조 존재"},
6
- {"text": "worktree-2-only", "passed": true, "evidence": "2개 worktree (create-or-reuse 패턴)"}
3
+ {
4
+ "text": "only-2-selected",
5
+ "passed": true,
6
+ "evidence": "24, 28만 선택됨"
7
+ },
8
+ {
9
+ "text": "xhigh-override",
10
+ "passed": true,
11
+ "evidence": "xhigh 적용, config.toml 프로파일 참조"
12
+ },
13
+ { "text": "ralph-skill", "passed": true, "evidence": "$ralph 참조 존재" },
14
+ {
15
+ "text": "worktree-2-only",
16
+ "passed": true,
17
+ "evidence": "2개 worktree (create-or-reuse 패턴)"
18
+ }
7
19
  ]
8
20
  }
@@ -0,0 +1,146 @@
1
+ ---
2
+ internal: true
3
+ name: tfx-consensus
4
+ description: >
5
+ 3자 합의 엔진 — 모든 Deep 스킬의 핵심 인프라. Claude/Codex/Gemini 독립 분석 결과를 교차검증하여 편향 없는 합의를 도출한다.
6
+ 독립 실행도 가능: '합의로 분석해', '3자 합의', 'consensus' 같은 요청 시 직접 호출 가능.
7
+ triggers: [consensus, 합의]
8
+ argument-hint: "<분석 주제 또는 컨텍스트> (Deep 스킬 내부 자동 호출 또는 직접 사용 가능)"
9
+ ---
10
+
11
+ # {{SKILL_NAME}} — Tri-CLI Consensus Engine
12
+
13
+ > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
14
+ > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
15
+
16
+
17
+ > **인프라**: 다른 스킬이 내부적으로 사용. 직접 호출할 필요 없음.
18
+ > 모든 Deep 스킬의 공통 기반. 3개 CLI의 독립 결과를 교차검증하여 합의 도출.
19
+
20
+ ## HARD RULES
21
+
22
+ > headless-guard가 이 규칙 위반을 **자동 차단**한다. 우회 불가.
23
+
24
+ 1. **`codex exec` / `gemini -p` 직접 호출 절대 금지**
25
+ 2. Codex·Gemini → `Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'cli:프롬프트:역할' --timeout 600")` **만** 사용
26
+ 3. Claude → `Agent(run_in_background=true)`
27
+ 4. Bash + Agent를 같은 메시지에서 동시 호출하여 병렬 실행
28
+
29
+ 이 스킬은 직접 호출하지 않는다. `tfx-deep-*` 스킬이 내부적으로 사용한다.
30
+
31
+ ## MODEL ROLES
32
+
33
+ | Model | Profile | 역할 | 강점 |
34
+ |-------|---------|------|------|
35
+ | Claude Opus | architect | 합의 통합 및 교차검증 조율 | 논리 분석, 불일치 해소 |
36
+ | Codex | analyst | 구현/보안 관점 독립 분석 | 코드 품질, 취약점 탐지 |
37
+ | Gemini | analyst | UX/문서화 관점 독립 분석 | DX, 접근성, 가독성 |
38
+
39
+ ## EXECUTION STEPS
40
+
41
+ ### Step 1: 독립 분석 dispatch (Anti-Herding)
42
+
43
+ 3개 CLI가 **동시에, 상호 결과를 보지 않고** 독립 분석한다. 한 CLI의 결과가 다른 CLI에 영향을 주면 편향이 발생한다.
44
+
45
+ **아래 2개 도구를 반드시 같은 응답에서 동시에 호출하라.**
46
+
47
+ **도구 1 — Claude (Opus/Sonnet) 독립 분석:**
48
+ ```
49
+ Agent(
50
+ subagent_type="oh-my-claudecode:architect",
51
+ model="opus",
52
+ run_in_background=true,
53
+ name="consensus-claude",
54
+ description="독립 분석 — Claude 관점",
55
+ prompt="{analysis_prompt} 출력 형식을 JSON으로 강제: { findings: [{ id: 'F1', category: '...', severity: 'critical|high|medium|low', description: '...', evidence: '...' }], summary: '...', confidence: 0.0-1.0 }"
56
+ )
57
+ ```
58
+
59
+ **도구 2 — Codex+Gemini 독립 분석 headless dispatch:**
60
+ ```
61
+ Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'codex:{analysis_prompt} 출력 형식을 JSON으로 강제: { findings: [{ id: string, category: string, severity: critical|high|medium|low, description: string, evidence: string }], summary: string, confidence: 0.0-1.0 }:analyst' --assign 'gemini:{analysis_prompt} 출력 형식을 JSON으로 강제: { findings: [{ id: string, category: string, severity: critical|high|medium|low, description: string, evidence: string }], summary: string, confidence: 0.0-1.0 }:analyst' --timeout 600")
62
+ ```
63
+
64
+ ### Step 2: 교차검증 (Cross-Validation)
65
+
66
+ 3개 결과(`result_claude`, `result_codex`, `result_gemini`)를 수집한 후 Claude가 통합 교차검증을 수행한다.
67
+
68
+ 합의 분류 알고리즘:
69
+ - 각 finding에 대해 동의한 CLI 수를 집계
70
+ - `agreement_count >= 2` → **CONSENSUS** (합의됨)
71
+ - `agreement_count == 1` → **DISPUTED** (미합의 — 추가 검증 필요)
72
+ - `consensus_score = len(CONSENSUS) / len(ALL_UNIQUE) * 100`
73
+
74
+ `consensus_score >= 70`이면 Step 4로 직행. 미만이면 Step 3 진행.
75
+
76
+ ### Step 3: Resolution (consensus_score < 70일 때만)
77
+
78
+ 미합의 항목에 대해 2차 라운드를 진행한다.
79
+
80
+ **아래 2개 도구를 반드시 같은 응답에서 동시에 호출하라.**
81
+
82
+ **도구 1 — Claude 재검토:**
83
+ ```
84
+ Agent(
85
+ subagent_type="oh-my-claudecode:architect",
86
+ model="opus",
87
+ run_in_background=true,
88
+ name="consensus-resolve-claude",
89
+ description="미합의 항목 2차 검토",
90
+ prompt="미합의 항목 목록: {disputed_items}. 다른 두 CLI의 반대 논거: Codex — {codex_rebuttal}, Gemini — {gemini_rebuttal}. 각 항목에 대해 수용(accept) 또는 반박(rebut)으로 응답하라. 수용 시 근거 필수."
91
+ )
92
+ ```
93
+
94
+ **도구 2 — Codex+Gemini 재검토:**
95
+ ```
96
+ Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'codex:미합의 항목 목록: {disputed_items}. 다른 두 CLI의 반대 논거: Claude — {claude_rebuttal}, Gemini — {gemini_rebuttal}. 각 항목에 대해 수용(accept) 또는 반박(rebut)으로 응답하라. 수용 시 근거 필수.:analyst' --assign 'gemini:미합의 항목 목록: {disputed_items}. 다른 두 CLI의 반대 논거: Claude — {claude_rebuttal}, Codex — {codex_rebuttal}. 각 항목에 대해 수용(accept) 또는 반박(rebut)으로 응답하라. 수용 시 근거 필수.:analyst' --timeout 600")
97
+ ```
98
+
99
+ Resolution 결과 처리:
100
+ - 수용 2개 이상 → CONSENSUS로 승격
101
+ - 여전히 미합의 → 사용자에게 판단 요청 (AskUserQuestion)
102
+
103
+ ### Step 4: 최종 합의 결과 반환
104
+
105
+ Learned Weights를 `.omc/state/consensus-weights.json`에서 읽어 가중 투표에 적용한다:
106
+
107
+ ```json
108
+ {
109
+ "claude": { "accuracy": 0.85, "total": 100, "correct": 85 },
110
+ "codex": { "accuracy": 0.82, "total": 100, "correct": 82 },
111
+ "gemini": { "accuracy": 0.78, "total": 100, "correct": 78 }
112
+ }
113
+ ```
114
+
115
+ 가중 투표:
116
+ `weighted_score = (claude_vote * 0.85 + codex_vote * 0.82 + gemini_vote * 0.78) / (0.85 + 0.82 + 0.78)`
117
+
118
+ 최종 결과를 호출 스킬에 반환한다:
119
+
120
+ ```json
121
+ {
122
+ "consensus_score": 85,
123
+ "consensus_items": [...],
124
+ "disputed_items": [...],
125
+ "resolved_items": [...],
126
+ "user_decision_needed": [...],
127
+ "cli_weights": { "claude": 0.85, "codex": 0.82, "gemini": 0.78 }
128
+ }
129
+ ```
130
+
131
+ ## ERROR RECOVERY
132
+
133
+ | 상황 | 대응 |
134
+ |------|------|
135
+ | headless timeout (600s) | Claude Agent로 해당 역할 대체 실행 |
136
+ | Codex 워커 실패 | Agent(oh-my-claudecode:architect, model="opus") 대체 |
137
+ | Gemini 워커 실패 | Agent(oh-my-claudecode:critic, model="sonnet") 대체 |
138
+
139
+ ## 토큰 예산
140
+
141
+ | Phase | 토큰 |
142
+ |-------|------|
143
+ | Phase 1 (3x 독립분석) | ~15K (각 5K) |
144
+ | Phase 2 (교차검증) | ~3K |
145
+ | Phase 3 (Resolution, 필요 시) | ~8K |
146
+ | **총합** | **18-26K** |
@@ -0,0 +1,192 @@
1
+ ---
2
+ internal: true
3
+ name: tfx-debate
4
+ description: "기술 선택, 아키텍처 비교, 설계 결정에서 3-CLI 구조화 토론으로 최적 답을 도출한다. 'A vs B', '뭐가 나을까', '비교해줘', '어떤 걸 쓸까', '장단점', 'tradeoff' 같은 비교/선택 요청에 반드시 사용한다. 단순 질문이 아닌 여러 옵션 사이의 결정이 필요할 때 적극 활용."
5
+ triggers:
6
+ - debate
7
+ - 토론
8
+ - 3자 토론
9
+ - tri-debate
10
+ - 멀티모델 토론
11
+ argument-hint: "<토론 주제 또는 질문>"
12
+ ---
13
+
14
+ # {{SKILL_NAME}} — Tri-CLI Structured Debate
15
+
16
+ > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
17
+ > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
18
+
19
+
20
+ > 3개 CLI가 독립 분석 → 교차검증 → 합의 도출. Anti-herding으로 편향 없는 결론.
21
+
22
+ ## 용도
23
+
24
+ - 설계 결정에서 최적 방향을 찾을 때
25
+ - 코드 아키텍처 선택지 비교
26
+ - 기술 선택 (프레임워크, 라이브러리, 접근법)
27
+ - 요구사항 해석이 모호할 때
28
+ - 어떤 주제든 다관점 분석이 필요할 때
29
+
30
+ ## HARD RULES
31
+
32
+ > headless-guard가 이 규칙 위반을 **자동 차단**한다. 우회 불가.
33
+
34
+ 1. **`codex exec` / `gemini -p` 직접 호출 절대 금지**
35
+ 2. Codex·Gemini → `Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'cli:프롬프트:역할' --timeout 600")` **만** 사용
36
+ 3. Claude → `Agent(run_in_background=true)`
37
+ 4. Bash + Agent를 같은 메시지에서 동시 호출하여 병렬 실행
38
+
39
+ ## MODEL ROLES
40
+
41
+ | CLI | 역할 |
42
+ |-----|------|
43
+ | Claude | 소프트웨어 아키텍트 — 시스템 설계 관점 |
44
+ | Codex | 시니어 백엔드 엔지니어 — 구현/기술적 트레이드오프 관점 |
45
+ | Gemini | DevOps/인프라 엔지니어 + DX 전문가 — 운영/개발자경험 관점 |
46
+
47
+ ## EXECUTION STEPS
48
+
49
+ ### Step 1: 주제 파싱 및 명확화
50
+
51
+ 사용자 입력에서 토론 주제를 추출하라. 주제가 모호하거나 비교 대상이 불명확하면 AskUserQuestion으로 명확화하라:
52
+
53
+ ```
54
+ AskUserQuestion:
55
+ "토론 주제를 더 구체적으로 선택해주세요:"
56
+ 1. {옵션A} vs {옵션B} 기술 비교
57
+ 2. {주제} 아키텍처 접근법 비교
58
+ 3. 직접 입력
59
+ ```
60
+
61
+ 주제가 명확한 경우 (예: "REST vs GraphQL") 이 단계를 건너뛰어라.
62
+
63
+ 파싱 결과를 내부적으로 보유하라:
64
+ - topic: 토론 주제
65
+ - context: 프로젝트 컨텍스트 (자동 추출)
66
+ - options: 비교 대상 목록
67
+ - criteria: 평가 기준 목록
68
+
69
+ ### Step 2: 독립 분석 (Anti-Herding)
70
+
71
+ **아래 2개 도구를 반드시 같은 응답에서 동시에 호출하라.**
72
+
73
+ Claude Agent를 백그라운드로 실행하라:
74
+
75
+ ```
76
+ Agent(
77
+ subagent_type="claude",
78
+ model="opus",
79
+ run_in_background=true,
80
+ prompt="당신은 소프트웨어 아키텍트입니다. {topic}에 대해 분석하세요.
81
+ 프로젝트 컨텍스트: {context}
82
+ 각 옵션의 장점, 단점, 리스크를 구조화하세요.
83
+ 최종 추천과 근거를 제시하세요.
84
+ JSON 형식으로 출력하세요: { recommendation, reasoning, pros, cons, risks, confidence }"
85
+ )
86
+ ```
87
+
88
+ Codex와 Gemini를 headless dispatch로 동시에 실행하라:
89
+
90
+ ```
91
+ Bash("tfx multi --teammate-mode headless --auto-attach --dashboard \
92
+ --assign 'codex:당신은 시니어 백엔드 엔지니어입니다. {topic}에 대해 구현 관점에서 분석하세요. 프로젝트 컨텍스트: {context}. 각 옵션의 기술적 트레이드오프를 평가하고 구현 난이도, 성능, 확장성을 중심으로 분석하세요. JSON 형식으로 출력하세요: { recommendation, reasoning, pros, cons, risks, confidence }:analyst' \
93
+ --assign 'gemini:당신은 DevOps/인프라 엔지니어이자 DX 전문가입니다. {topic}에 대해 운영+개발자경험 관점에서 분석하세요. 프로젝트 컨텍스트: {context}. 배포 복잡도, 모니터링, 온보딩 난이도, 개발자 생산성을 중심으로 분석하세요. JSON 형식으로 출력하세요: { recommendation, reasoning, pros, cons, risks, confidence }:analyst' \
94
+ --timeout 600")
95
+ ```
96
+
97
+ ### Step 3: 결과 수집 및 교차검증
98
+
99
+ 3개 결과가 모두 수집되면 다음 기준으로 교차검증하라:
100
+
101
+ 합의 수준을 판정하라:
102
+ - 3/3 동일 추천 → "만장일치" (Strong Consensus) → Step 5로 바로 진행
103
+ - 2/3 동일 추천 → "다수 합의" (Majority Consensus) → Step 5로 진행
104
+ - 3개 모두 다름 → "불일치" (Disputed) → Step 4 토론 라운드 실행
105
+
106
+ 항목별 교차검증을 수행하라:
107
+ - 2개 이상 CLI가 동일 장점/단점 지적 → 확정
108
+ - 1개 CLI만 지적 → "미검증" 표시
109
+
110
+ ### Step 4: 토론 라운드 (불일치 시에만 실행)
111
+
112
+ 불일치 항목이 있으면 각 CLI에게 다음 프롬프트로 2차 라운드를 실행하라.
113
+
114
+ **아래 2개 도구를 반드시 같은 응답에서 동시에 호출하라.**
115
+
116
+ Claude Agent를 백그라운드로 실행하라:
117
+
118
+ ```
119
+ Agent(
120
+ subagent_type="claude",
121
+ model="opus",
122
+ run_in_background=true,
123
+ prompt="다음은 다른 두 분석가의 결론입니다.
124
+ 분석가 A (백엔드 엔지니어): {codex_recommendation} — 근거: {codex_reasoning}
125
+ 분석가 B (DevOps/DX): {gemini_recommendation} — 근거: {gemini_reasoning}
126
+
127
+ 당신의 원래 입장: {claude_recommendation}
128
+
129
+ 다른 분석가의 논거를 검토한 후:
130
+ 1. 수용할 점이 있으면 입장을 수정하세요
131
+ 2. 반박할 점이 있으면 근거를 제시하세요
132
+ 3. 최종 추천을 JSON으로 다시 제출하세요: { recommendation, reasoning, confidence, changed }"
133
+ )
134
+ ```
135
+
136
+ Codex와 Gemini 2차 라운드를 headless dispatch로 동시에 실행하라:
137
+
138
+ ```
139
+ Bash("tfx multi --teammate-mode headless --auto-attach --dashboard \
140
+ --assign 'codex:다음은 다른 두 분석가의 결론입니다. 분석가 A (아키텍트): {claude_recommendation} — 근거: {claude_reasoning}. 분석가 B (DevOps/DX): {gemini_recommendation} — 근거: {gemini_reasoning}. 당신의 원래 입장: {codex_recommendation}. 다른 분석가의 논거를 검토한 후 수용할 점은 반영하고 반박할 점은 근거를 제시하세요. JSON으로 최종 추천을 제출하세요: { recommendation, reasoning, confidence, changed }:analyst' \
141
+ --assign 'gemini:다음은 다른 두 분석가의 결론입니다. 분석가 A (아키텍트): {claude_recommendation} — 근거: {claude_reasoning}. 분석가 B (백엔드 엔지니어): {codex_recommendation} — 근거: {codex_reasoning}. 당신의 원래 입장: {gemini_recommendation}. 다른 분석가의 논거를 검토한 후 수용할 점은 반영하고 반박할 점은 근거를 제시하세요. JSON으로 최종 추천을 제출하세요: { recommendation, reasoning, confidence, changed }:analyst' \
142
+ --timeout 600")
143
+ ```
144
+
145
+ ### Step 5: 최종 종합
146
+
147
+ Claude Opus가 전체 토론을 종합하여 다음 구조로 최종 보고서를 작성하라:
148
+
149
+ ```markdown
150
+ ## 토론 결과: {topic}
151
+
152
+ ### 합의 사항 (Consensus Score: {score}%)
153
+ - [항목 1] — 3/3 합의
154
+ - [항목 2] — 2/3 합의 (반대: {dissenter} — 근거: {reason})
155
+
156
+ ### 최종 추천
157
+ {recommendation}
158
+
159
+ ### 근거 (3자 종합)
160
+ {synthesized_reasoning}
161
+
162
+ ### 리스크 및 완화 방안
163
+ {risks_and_mitigations}
164
+
165
+ ### 불일치 (해소되지 않은 항목)
166
+ {unresolved_disputes — if any}
167
+ ```
168
+
169
+ ## ERROR RECOVERY
170
+
171
+ - Codex 또는 Gemini 결과가 없으면: 2개 소스로 교차검증을 진행하고 보고서에 누락 CLI를 명시하라
172
+ - tfx multi 명령이 실패하면: 오류 메시지를 출력하고 재시도 1회 후 실패를 사용자에게 보고하라
173
+ - Agent 결과가 없으면: Claude 관점 없이 나머지 2개 소스로 진행하라
174
+ - Round 2 후에도 불일치가 지속되면: 해소되지 않은 항목으로 보고서에 명시하고 최종 추천은 다수결로 결정하라
175
+
176
+ ## TOKEN BUDGET
177
+
178
+ | 단계 | 토큰 |
179
+ |------|------|
180
+ | Step 2 (3x 독립) | ~15K |
181
+ | Step 3 (교차검증) | ~2K |
182
+ | Step 4 (토론, 불일치 시) | ~8K |
183
+ | Step 5 (종합) | ~3K |
184
+ | **총합** | **20-28K** |
185
+
186
+ ## 사용 예
187
+
188
+ ```
189
+ /tfx-debate "우리 서비스에 Redis vs PostgreSQL LISTEN/NOTIFY for real-time events"
190
+ /tfx-debate "모노레포 vs 멀티레포 for our 3-service architecture"
191
+ /tfx-debate "이 함수를 리팩터링할 때 Strategy 패턴 vs 단순 switch-case"
192
+ ```
@@ -1,13 +1,7 @@
1
1
  {
2
2
  "name": "tfx-debate",
3
3
  "description": "기술 선택, 아키텍처 비교, 설계 결정에서 3-CLI 구조화 토론으로 최적 답을 도출한다. 'A vs B', '뭐가 나을까', '비교해줘', '어떤 걸 쓸까', '장단점', 'tradeoff' 같은 비교/선택 요청에 반드시 사용한다. 단순 질문이 아닌 여러 옵션 사이의 결정이 필요할 때 적극 활용.",
4
- "triggers": [
5
- "debate",
6
- "토론",
7
- "3자 토론",
8
- "tri-debate",
9
- "멀티모델 토론"
10
- ],
4
+ "triggers": ["debate", "토론", "3자 토론", "tri-debate", "멀티모델 토론"],
11
5
  "argument_hint": "<토론 주제 또는 질문>",
12
6
  "internal": true
13
7
  }
@@ -0,0 +1,228 @@
1
+ ---
2
+ internal: true
3
+ name: tfx-deep-analysis
4
+ description: "다각도 심층 분석이 필요할 때 사용한다. 'deep analyze', '심층 분석', '제대로 분석', '3관점 분석', '편향 없이 분석' 같은 요청에 사용. 아키텍처 결정, 기술 부채 평가, 대규모 리팩터링 전 분석에 적극 활용."
5
+ triggers:
6
+ - deep analyze
7
+ - 심층 분석
8
+ - deep-analysis
9
+ argument-hint: "<분석 대상 — 파일, 디렉토리, 또는 주제>"
10
+ ---
11
+
12
+ # {{SKILL_NAME}} — Tri-CLI Deep Analysis
13
+
14
+ > **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
15
+ > 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
16
+
17
+
18
+ > **Light 버전**: tfx-analysis. 기본값. 깊이 수정자 없으면 Light 선택.
19
+ > Claude(아키텍처) + Codex(구현/보안) + Gemini(UX/문서화) → Tri-Debate → 합의.
20
+ > 3자 전문 관점의 편향 없는 분석.
21
+
22
+ ## 전제조건 프로브 및 Tier Degradation
23
+
24
+ > **진입 즉시 실행** — 10초 내 가시적 출력을 보장한다. 빈 stdout + exit 0 **금지**.
25
+
26
+ ### 환경 프로브
27
+
28
+ 워크플로우 진입 전, 아래 프로브를 실행하여 가용 환경을 감지한다:
29
+
30
+ ```bash
31
+ psmux --version 2>/dev/null && \
32
+ curl -sf http://127.0.0.1:27888/status >/dev/null && \
33
+ codex --version 2>/dev/null && \
34
+ gemini --version 2>/dev/null
35
+ ```
36
+
37
+ ### Tier 판정
38
+
39
+ | Tier | 조건 | 실행 방식 |
40
+ |------|------|----------|
41
+ | **Tier 1** | psmux + Hub + Codex + Gemini 전부 정상 | 기존 headless multi (변경 없음) |
42
+ | **Tier 2** | 일부 CLI만 가용 (Codex 또는 Gemini 중 하나) | 가용 CLI + Claude Agent 조합 |
43
+ | **Tier 3** | headless 불가 또는 `claude -p` one-shot | Claude Agent only |
44
+
45
+ ```
46
+ IF claude -p (one-shot 모드):
47
+ → Tier 3 즉시 fallback
48
+
49
+ IF psmux 없음 OR Hub 미응답:
50
+ → Tier 3
51
+
52
+ IF Codex 없음 AND Gemini 없음:
53
+ → Tier 3
54
+
55
+ IF Codex 없음 OR Gemini 없음:
56
+ → Tier 2
57
+
58
+ ELSE:
59
+ → Tier 1
60
+ ```
61
+
62
+ ### Tier 3 진입 시 필수 출력
63
+
64
+ ```
65
+ ⚠ [Tier 3] headless multi 환경 미충족 — single-model 모드로 실행합니다 (consensus 미적용)
66
+ 누락: {missing_components}
67
+ 권장: psmux, Hub, Codex CLI, Gemini CLI 설치 후 재실행
68
+ ```
69
+
70
+ Tier 3에서는 모든 headless dispatch(`tfx multi ...`)를 **Claude Agent**(subagent)로 대체한다.
71
+ Tier 2에서는 누락된 CLI만 Claude Agent로 대체한다.
72
+
73
+ ## HARD RULES
74
+
75
+ > headless-guard가 이 규칙 위반을 **자동 차단**한다. 우회 불가.
76
+
77
+ 1. **`codex exec` / `gemini -p` 직접 호출 절대 금지**
78
+ 2. Codex·Gemini → `Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'cli:프롬프트:역할' --timeout 600")` **만** 사용
79
+ 3. Claude → `Agent(run_in_background=true)`
80
+ 4. Bash + Agent를 같은 메시지에서 동시 호출하여 병렬 실행
81
+
82
+ ## 용도
83
+
84
+ - 아키텍처 결정 전 종합 분석
85
+ - 레거시 코드베이스 상태 진단
86
+ - 보안 + 성능 + UX 교차 분석
87
+ - 기술 부채 종합 평가
88
+ - 리팩터링 범위 결정
89
+ - 마이그레이션 전 영향도 분석
90
+
91
+ ## MODEL ROLES
92
+
93
+ | Model | Profile | 역할 | 강점 |
94
+ |-------|---------|------|------|
95
+ | Claude Opus | architect | 아키텍처/설계 분석 | 레이어 분리, SOLID, 확장성 |
96
+ | Codex | security-engineer | 구현/보안 분석 | 복잡도, OWASP, 기술 부채 |
97
+ | Gemini | ux-engineer | UX/문서화 분석 | DX, 접근성, 네이밍, 국제화 |
98
+
99
+ ## EXECUTION STEPS
100
+
101
+ ### Step 1: 범위 파싱
102
+
103
+ 분석 대상(`{target}`)을 파싱하고 분석 범위를 확정한다:
104
+ - target: 사용자가 지정한 파일/디렉토리/주제
105
+ - scope: 디렉토리 전체 + 하위 모듈
106
+ - analysis_depth: 파일 구조 + 코드 본문 + 의존성
107
+ - focus_areas: 아키텍처, 보안, 성능, DX
108
+
109
+ ### Step 2: 3-CLI 독립 분석 (Anti-Herding)
110
+
111
+ **아래 2개 도구를 반드시 같은 응답에서 동시에 호출하라.**
112
+
113
+ **도구 1 — Claude Opus (아키텍처):**
114
+ ```
115
+ Agent(
116
+ subagent_type="oh-my-claudecode:architect",
117
+ model="opus",
118
+ run_in_background=true,
119
+ name="arch-analyst",
120
+ description="아키텍처 심층 분석",
121
+ prompt="소프트웨어 아키텍트로서 분석하라. 대상: {target}. 분석 렌즈: 1. 아키텍처 — 레이어 분리, 의존성 방향, 순환 참조. 2. 설계 패턴 — SOLID 준수, 적절한 추상화 수준. 3. 모듈 응집도/결합도 — cohesion/coupling 평가. 4. 확장성 — 새 요구사항 추가 시 변경 범위. 5. 테스트 용이성 — DI, 인터페이스, mock 가능성. JSON으로 반환: { findings: [{id, category, severity, description, location, recommendation}], architecture_diagram: '텍스트 기반 구조도', health_score: 0-100 }"
122
+ )
123
+ ```
124
+
125
+ **도구 2 — Codex+Gemini headless dispatch:**
126
+ ```
127
+ Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'codex:시니어 엔지니어+보안 전문가로서 분석하라. 대상: {target}. 분석 렌즈: 1. 구현 품질 — 복잡도, 중복, 에러 핸들링. 2. 성능 — 알고리즘 효율, 메모리 패턴, I/O 병목. 3. 보안 — OWASP Top 10, 입력 검증, 인증/인가. 4. 안정성 — 에러 전파, 장애 격리, 리소스 관리. 5. 기술 부채 — deprecated API, TODO, 하드코딩. JSON: { findings: [...], metrics: {complexity, loc, tech_debt_hours}, health_score: 0-100 }:security-engineer' --assign 'gemini:UX 엔지니어+테크니컬 라이터로서 분석하라. 대상: {target}. 분석 렌즈: 1. DX(개발자 경험) — API 직관성, 에러 메시지, 사용 용이성. 2. 문서화 — JSDoc/주석 품질, README, 예제 코드. 3. 접근성 — UI가 있으면 WCAG 2.1 AA, 키보드/스크린리더. 4. 국제화 — 하드코딩 문자열, 로케일 처리. 5. 네이밍 — 일관성, 도메인 언어, 가독성. JSON: { findings: [...], documentation_score: 0-100, health_score: 0-100 }:ux-engineer' --timeout 600")
128
+ ```
129
+
130
+ ### Step 3: Tri-Debate (교차검증)
131
+
132
+ 3개 결과를 수집한 후, **아래 2개 도구를 반드시 같은 응답에서 동시에 호출하라.**
133
+
134
+ **도구 1 — Claude 교차검증:**
135
+ ```
136
+ Agent(
137
+ subagent_type="oh-my-claudecode:architect",
138
+ model="opus",
139
+ run_in_background=true,
140
+ name="arch-debate",
141
+ description="교차검증 — 아키텍처 관점",
142
+ prompt="다른 두 분석가의 결과입니다. 분석가 A(Codex): {codex_findings_summary}. 분석가 B(Gemini): {gemini_findings_summary}. 1. 동의하는 발견에 '+1' 표시. 2. 반대하는 발견에 근거를 제시하여 반박. 3. 다른 분석가가 놓친 중요 사항 추가. 4. health_score를 재조정하라."
143
+ )
144
+ ```
145
+
146
+ **도구 2 — Codex+Gemini 교차검증:**
147
+ ```
148
+ Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'codex:다른 두 분석가의 결과입니다. 분석가 A(Claude): {claude_findings_summary}. 분석가 B(Gemini): {gemini_findings_summary}. 1. 동의하는 발견에 +1 표시. 2. 반대하는 발견에 근거를 제시하여 반박. 3. 다른 분석가가 놓친 중요 사항 추가. 4. health_score를 재조정하라.:security-engineer' --assign 'gemini:다른 두 분석가의 결과입니다. 분석가 A(Claude): {claude_findings_summary}. 분석가 B(Codex): {codex_findings_summary}. 1. 동의하는 발견에 +1 표시. 2. 반대하는 발견에 근거를 제시하여 반박. 3. 다른 분석가가 놓친 중요 사항 추가. 4. health_score를 재조정하라.:ux-engineer' --timeout 600")
149
+ ```
150
+
151
+ 교차검증 후 합의 분류:
152
+ - 3/3 동의 → CONFIRMED
153
+ - 2/3 동의 → LIKELY (반대 의견 첨부)
154
+ - 1/3만 지적 → UNVERIFIED
155
+
156
+ ### Step 4: 합의 종합 보고서 출력
157
+
158
+ 아래 형식으로 최종 보고서를 출력한다:
159
+
160
+ ```markdown
161
+ # Deep Analysis Report: {target}
162
+ **Consensus Score**: {score}% | **Analysts**: Claude/Codex/Gemini
163
+ **Health Score**: {weighted_avg}/100
164
+
165
+ ## Executive Summary
166
+ {3-5줄 핵심 요약 — 3자 합의 기반}
167
+
168
+ ## Architecture
169
+ {Claude 주도 분석 + Codex/Gemini 교차검증}
170
+ ### 구조도
171
+ {텍스트 기반 아키텍처 다이어그램}
172
+ ### 강점
173
+ - {3/3 합의된 아키텍처 강점}
174
+ ### 약점
175
+ - {2+ 합의된 아키텍처 약점}
176
+
177
+ ## 발견사항 (합의된 항목)
178
+
179
+ ### Critical
180
+ - [C1] `{file}:{line}` — {description} — {3/3}
181
+ - 아키텍처: {Claude} | 구현: {Codex} | DX: {Gemini}
182
+ - **권장**: {recommendation}
183
+
184
+ ### High
185
+ - [H1] ...
186
+
187
+ ### Medium
188
+ - [M1] ...
189
+
190
+ ## 메트릭
191
+ | 항목 | 값 | 평가 |
192
+ |------|-----|------|
193
+ | 아키텍처 건강도 | {Claude score}/100 | {평가} |
194
+ | 구현 품질 | {Codex score}/100 | {평가} |
195
+ | DX/문서화 | {Gemini score}/100 | {평가} |
196
+ | 종합 (가중평균) | {avg}/100 | {평가} |
197
+ | 기술 부채 추정 | {hours}h | {심각도} |
198
+
199
+ ## 개선 로드맵 (합의 순)
200
+ | 우선순위 | 항목 | 예상 공수 | 합의도 |
201
+ |---------|------|----------|--------|
202
+ | P0 | {item} | {hours}h | 3/3 |
203
+ | P1 | {item} | {hours}h | 2/3 |
204
+
205
+ ## Unverified (참고용)
206
+ - [U1] {description} (by {single_cli})
207
+
208
+ ## 불일치 사항
209
+ - {항목}: Claude는 {X}, Codex는 {Y}, Gemini는 {Z}
210
+ ```
211
+
212
+ ## ERROR RECOVERY
213
+
214
+ | 상황 | 대응 |
215
+ |------|------|
216
+ | headless timeout (600s) | Claude Agent로 해당 역할 대체 실행 |
217
+ | Codex 워커 실패 | Agent(oh-my-claudecode:architect, model="opus") 대체 |
218
+ | Gemini 워커 실패 | Agent(oh-my-claudecode:critic, model="sonnet") 대체 |
219
+
220
+ ## 토큰 예산
221
+
222
+ | Phase | 토큰 |
223
+ |-------|------|
224
+ | Phase 1 (수집) | ~1K |
225
+ | Phase 2 (3x 독립분석) | ~15K |
226
+ | Phase 3 (Tri-Debate) | ~9K |
227
+ | Phase 4 (보고서) | ~5K |
228
+ | **총합** | **~30K** |
@@ -1,11 +1,7 @@
1
1
  {
2
2
  "name": "tfx-deep-analysis",
3
3
  "description": "다각도 심층 분석이 필요할 때 사용한다. 'deep analyze', '심층 분석', '제대로 분석', '3관점 분석', '편향 없이 분석' 같은 요청에 사용. 아키텍처 결정, 기술 부채 평가, 대규모 리팩터링 전 분석에 적극 활용.",
4
- "triggers": [
5
- "deep analyze",
6
- "심층 분석",
7
- "deep-analysis"
8
- ],
4
+ "triggers": ["deep analyze", "심층 분석", "deep-analysis"],
9
5
  "argument_hint": "<분석 대상 — 파일, 디렉토리, 또는 주제>",
10
6
  "internal": true
11
7
  }