triflux 10.4.0 → 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.
- package/.claude-plugin/marketplace.json +34 -0
- package/.claude-plugin/plugin.json +22 -0
- package/bin/tfx-doctor-tui.mjs +1 -1
- package/bin/tfx-doctor.mjs +6 -1
- package/bin/tfx-profile.mjs +1 -1
- package/bin/tfx-setup-tui.mjs +1 -1
- package/bin/tfx-setup.mjs +6 -1
- package/bin/triflux.mjs +2396 -1140
- package/config/mcp-registry.json +29 -0
- package/hooks/agent-route-guard.mjs +12 -8
- package/hooks/cross-review-tracker.mjs +21 -8
- package/hooks/error-context.mjs +19 -7
- package/hooks/hook-adaptive-collector.mjs +18 -16
- package/hooks/hook-manager.mjs +93 -32
- package/hooks/hook-orchestrator.mjs +108 -24
- package/hooks/hook-registry.json +267 -256
- package/hooks/keyword-rules.json +6 -10
- package/hooks/lib/resolve-root.mjs +1 -1
- package/hooks/mcp-config-watcher.mjs +6 -2
- package/hooks/pipeline-stop.mjs +3 -6
- package/hooks/safety-guard.mjs +99 -28
- package/hooks/session-start-fast.mjs +143 -0
- package/hooks/subagent-verifier.mjs +5 -4
- package/hub/account-broker.mjs +256 -60
- package/hub/adaptive-diagnostic.mjs +75 -48
- package/hub/adaptive-inject.mjs +96 -58
- package/hub/adaptive-memory.mjs +156 -42
- package/hub/adaptive.mjs +60 -31
- package/hub/assign-callbacks.mjs +163 -126
- package/hub/bridge.mjs +0 -1
- package/hub/cli-adapter-base.mjs +200 -48
- package/hub/codex-adapter.mjs +76 -96
- package/hub/codex-compat.mjs +3 -3
- package/hub/codex-preflight.mjs +63 -37
- package/hub/delegator/contracts.mjs +19 -23
- package/hub/delegator/index.mjs +14 -14
- package/hub/delegator/service.mjs +88 -64
- package/hub/delegator/tool-definitions.mjs +35 -35
- package/hub/fullcycle.mjs +33 -17
- package/hub/gemini-adapter.mjs +69 -94
- package/hub/hitl.mjs +202 -143
- package/hub/intent.mjs +161 -38
- package/hub/lib/cache-guard.mjs +43 -17
- package/hub/lib/mcp-response-cache.mjs +66 -32
- package/hub/lib/memory-store.mjs +285 -111
- package/hub/lib/path-utils.mjs +35 -37
- package/hub/lib/process-utils.mjs +106 -37
- package/hub/lib/spawn-trace.mjs +527 -0
- package/hub/lib/ssh-command.mjs +34 -4
- package/hub/lib/ssh-retry.mjs +5 -1
- package/hub/lib/uuidv7.mjs +4 -3
- package/hub/memory-doctor.mjs +266 -106
- package/hub/middleware/request-logger.mjs +61 -34
- package/hub/paths.mjs +9 -9
- package/hub/pipeline/gates/confidence.mjs +34 -15
- package/hub/pipeline/gates/consensus.mjs +27 -15
- package/hub/pipeline/gates/index.mjs +7 -3
- package/hub/pipeline/gates/selfcheck.mjs +57 -19
- package/hub/pipeline/index.mjs +77 -42
- package/hub/pipeline/state.mjs +10 -10
- package/hub/pipeline/transitions.mjs +40 -23
- package/hub/platform.mjs +57 -48
- package/hub/promote-penalties.mjs +25 -7
- package/hub/quality/deslop.mjs +70 -49
- package/hub/research.mjs +32 -25
- package/hub/router.mjs +924 -791
- package/hub/routing/complexity.mjs +132 -29
- package/hub/routing/index.mjs +17 -12
- package/hub/routing/q-learning.mjs +76 -28
- package/hub/server.mjs +4 -4
- package/hub/session-fingerprint.mjs +127 -61
- package/hub/state.mjs +84 -43
- package/hub/store-adapter.mjs +59 -26
- package/hub/store.mjs +356 -153
- package/hub/team/agent-map.json +22 -7
- package/hub/team/ansi.mjs +186 -122
- package/hub/team/backend.mjs +28 -10
- package/hub/team/cli/commands/attach.mjs +57 -37
- package/hub/team/cli/commands/control.mjs +29 -8
- package/hub/team/cli/commands/debug.mjs +95 -74
- package/hub/team/cli/commands/focus.mjs +80 -53
- package/hub/team/cli/commands/interrupt.mjs +18 -6
- package/hub/team/cli/commands/kill.mjs +16 -5
- package/hub/team/cli/commands/list.mjs +31 -24
- package/hub/team/cli/commands/send.mjs +19 -6
- package/hub/team/cli/commands/start/index.mjs +154 -31
- package/hub/team/cli/commands/start/parse-args.mjs +38 -11
- package/hub/team/cli/commands/start/start-headless.mjs +112 -36
- package/hub/team/cli/commands/start/start-in-process.mjs +50 -40
- package/hub/team/cli/commands/start/start-mux.mjs +122 -73
- package/hub/team/cli/commands/start/start-wt.mjs +86 -69
- package/hub/team/cli/commands/status.mjs +43 -14
- package/hub/team/cli/commands/stop.mjs +11 -4
- package/hub/team/cli/commands/task.mjs +8 -3
- package/hub/team/cli/commands/tasks.mjs +13 -13
- package/hub/team/cli/index.mjs +2 -2
- package/hub/team/cli/manifest.mjs +38 -8
- package/hub/team/cli/render.mjs +52 -30
- package/hub/team/cli/services/attach-fallback.mjs +74 -54
- package/hub/team/cli/services/hub-client.mjs +42 -14
- package/hub/team/cli/services/member-selector.mjs +37 -30
- package/hub/team/cli/services/native-control.mjs +143 -116
- package/hub/team/cli/services/runtime-mode.mjs +2 -1
- package/hub/team/cli/services/state-store.mjs +25 -8
- package/hub/team/cli/services/task-model.mjs +40 -30
- package/hub/team/conductor-mesh-bridge.mjs +24 -23
- package/hub/team/conductor.mjs +8 -4
- package/hub/team/dashboard-anchor.mjs +4 -5
- package/hub/team/dashboard-layout.mjs +3 -1
- package/hub/team/dashboard-open.mjs +41 -21
- package/hub/team/dashboard.mjs +76 -28
- package/hub/team/event-log.mjs +18 -10
- package/hub/team/handoff.mjs +31 -15
- package/hub/team/headless.mjs +2 -1
- package/hub/team/health-probe.mjs +69 -54
- package/hub/team/launcher-template.mjs +16 -13
- package/hub/team/native-supervisor.mjs +65 -21
- package/hub/team/native.mjs +74 -35
- package/hub/team/nativeProxy.mjs +184 -113
- package/hub/team/notify.mjs +120 -77
- package/hub/team/orchestrator.mjs +166 -161
- package/hub/team/pane.mjs +12 -7
- package/hub/team/process-cleanup.mjs +25 -16
- package/hub/team/psmux.mjs +491 -201
- package/hub/team/remote-probe.mjs +68 -52
- package/hub/team/remote-session.mjs +117 -59
- package/hub/team/remote-watcher.mjs +61 -33
- package/hub/team/routing.mjs +51 -25
- package/hub/team/runtime-strategy.mjs +3 -1
- package/hub/team/session.mjs +675 -611
- package/hub/team/shared.mjs +13 -13
- package/hub/team/staleState.mjs +72 -30
- package/hub/team/swarm-locks.mjs +15 -13
- package/hub/team/swarm-planner.mjs +32 -21
- package/hub/team/swarm-reconciler.mjs +48 -23
- package/hub/team/tui-lite.mjs +266 -68
- package/hub/team/tui-remote-adapter.mjs +14 -10
- package/hub/team/tui-viewer.mjs +99 -43
- package/hub/team/tui.mjs +708 -271
- package/hub/team/worktree-lifecycle.mjs +152 -58
- package/hub/team/wt-manager.mjs +24 -14
- package/hub/token-mode.mjs +71 -71
- package/hub/tray.mjs +411 -368
- package/hub/workers/claude-worker.mjs +162 -118
- package/hub/workers/codex-mcp.mjs +558 -507
- package/hub/workers/delegator-mcp.mjs +507 -333
- package/hub/workers/factory.mjs +21 -21
- package/hub/workers/gemini-worker.mjs +115 -84
- package/hub/workers/interface.mjs +6 -1
- package/hub/workers/worker-utils.mjs +21 -14
- package/hud/colors.mjs +27 -9
- package/hud/constants.mjs +162 -26
- package/hud/context-monitor.mjs +82 -41
- package/hud/hud-qos-status.mjs +129 -49
- package/hud/mission-board.mjs +6 -3
- package/hud/providers/claude.mjs +226 -115
- package/hud/providers/codex.mjs +62 -22
- package/hud/providers/gemini.mjs +168 -56
- package/hud/renderers.mjs +384 -119
- package/hud/terminal.mjs +101 -31
- package/hud/utils.mjs +78 -38
- package/mesh/index.mjs +11 -5
- package/mesh/mesh-budget.mjs +18 -9
- package/mesh/mesh-heartbeat.mjs +1 -1
- package/mesh/mesh-queue.mjs +3 -5
- package/mesh/mesh-router.mjs +5 -4
- package/package.json +56 -21
- package/scripts/__tests__/gen-skill-docs.test.mjs +36 -7
- package/scripts/__tests__/keyword-detector.test.mjs +77 -28
- package/scripts/__tests__/mcp-guard-engine.test.mjs +58 -20
- package/scripts/__tests__/remote-spawn-transfer.test.mjs +30 -19
- package/scripts/__tests__/remote-spawn.test.mjs +10 -4
- package/scripts/__tests__/session-start-fast.test.mjs +36 -0
- package/scripts/__tests__/skill-template.test.mjs +98 -50
- package/scripts/__tests__/smoke.test.mjs +1 -1
- package/scripts/__tests__/spawn-trace.test.mjs +102 -0
- package/scripts/__tests__/tfx-doctor-diagnose.test.mjs +48 -0
- package/scripts/cache-doctor.mjs +11 -4
- package/scripts/cache-warmup.mjs +96 -37
- package/scripts/claudemd-sync.mjs +27 -17
- package/scripts/codex-gateway-preflight.mjs +52 -37
- package/scripts/codex-mcp-gateway-sync.mjs +59 -39
- package/scripts/config-audit.mjs +232 -0
- package/scripts/convert-to-tmpl.mjs +54 -0
- package/scripts/cross-review-gate.mjs +35 -12
- package/scripts/cross-review-tracker.mjs +21 -8
- package/scripts/demo.mjs +35 -17
- package/scripts/doctor-diagnose.mjs +284 -0
- package/scripts/gen-skill-docs.mjs +7 -2
- package/scripts/gen-skill-manifest.mjs +2 -1
- package/scripts/headless-guard.mjs +86 -48
- package/scripts/hub-ensure.mjs +139 -120
- package/scripts/keyword-detector.mjs +293 -272
- package/scripts/keyword-rules-expander.mjs +538 -521
- package/scripts/lib/claudemd-scanner.mjs +6 -1
- package/scripts/lib/context.mjs +3 -3
- package/scripts/lib/cross-review-utils.mjs +6 -3
- package/scripts/lib/env-probe.mjs +47 -28
- package/scripts/lib/gemini-profiles.mjs +44 -10
- package/scripts/lib/handoff.mjs +33 -17
- package/scripts/lib/hook-utils.mjs +8 -6
- package/scripts/lib/keyword-rules.mjs +43 -19
- package/scripts/lib/logger.mjs +24 -24
- package/scripts/lib/mcp-filter.mjs +377 -239
- package/scripts/lib/mcp-guard-engine.mjs +194 -79
- package/scripts/lib/mcp-manifest.mjs +23 -13
- package/scripts/lib/mcp-server-catalog.mjs +355 -118
- package/scripts/lib/psmux-info.mjs +11 -6
- package/scripts/lib/remote-spawn-transfer.mjs +44 -14
- package/scripts/lib/skill-template.mjs +30 -7
- package/scripts/mcp-check.mjs +58 -39
- package/scripts/mcp-gateway-config.mjs +83 -39
- package/scripts/mcp-gateway-ensure.mjs +43 -35
- package/scripts/mcp-gateway-integration-test.mjs +70 -58
- package/scripts/mcp-gateway-start.mjs +126 -60
- package/scripts/mcp-gateway-verify.mjs +24 -22
- package/scripts/mcp-safety-guard.mjs +44 -11
- package/scripts/notion-read.mjs +669 -554
- package/scripts/pack.mjs +94 -89
- package/scripts/preflight-cache.mjs +27 -10
- package/scripts/preinstall.mjs +42 -13
- package/scripts/remote-spawn.mjs +309 -94
- package/scripts/run.cjs +8 -5
- package/scripts/session-spawn-helper.mjs +130 -39
- package/scripts/session-stale-cleanup.mjs +123 -0
- package/scripts/setup.mjs +941 -492
- package/scripts/test-lock.mjs +20 -7
- package/scripts/test-tfx-route-no-claude-native.mjs +61 -57
- package/scripts/tfx-batch-stats.mjs +117 -96
- package/scripts/tfx-gate-activate.mjs +11 -4
- package/scripts/tfx-route-post.mjs +87 -20
- package/scripts/tfx-route-worker.mjs +57 -51
- package/scripts/tfx-route.sh +41 -124
- package/scripts/tmp-cleanup.mjs +21 -7
- package/scripts/token-snapshot.mjs +204 -85
- package/skills/.omc/state/idle-notif-cooldown.json +1 -1
- package/skills/.omc/state/last-tool-error.json +1 -1
- package/skills/.omc/state/subagent-tracking.json +1 -1
- package/skills/_templates/base.md +1 -6
- package/skills/merge-worktree/SKILL.md.tmpl +144 -0
- package/skills/shared/telemetry-segment.md +6 -0
- package/skills/star-prompt/SKILL.md.tmpl +222 -0
- package/skills/tfx-analysis/SKILL.md.tmpl +107 -0
- package/skills/tfx-analysis/skill.json +1 -6
- package/skills/tfx-auto/SKILL.md +1 -0
- package/skills/{tfx-workspace/skill-snapshot/tfx-auto-codex/SKILL.md → tfx-auto-codex/SKILL.md.tmpl} +33 -4
- package/skills/tfx-auto-codex/skill.json +1 -3
- package/skills/tfx-autopilot/SKILL.md.tmpl +116 -0
- package/skills/tfx-autopilot/skill.json +1 -5
- package/skills/tfx-autoresearch/SKILL.md.tmpl +136 -0
- package/skills/tfx-autoroute/SKILL.md.tmpl +189 -0
- package/skills/tfx-autoroute/skill.json +1 -7
- package/skills/tfx-codex/SKILL.md +1 -0
- package/skills/tfx-codex/skill.json +1 -3
- package/skills/tfx-codex-swarm/SKILL.md.tmpl +16 -0
- package/skills/tfx-codex-swarm/evals/evals.json +1 -1
- package/skills/tfx-codex-swarm/skill.json +1 -4
- package/skills/tfx-codex-swarm-workspace/iteration-1/benchmark.json +54 -12
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/grading.json +35 -7
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/grading.json +35 -7
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/grading.json +25 -5
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/grading.json +25 -5
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/grading.json +20 -4
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/grading.json +16 -4
- package/skills/tfx-consensus/SKILL.md.tmpl +146 -0
- package/skills/tfx-debate/SKILL.md.tmpl +192 -0
- package/skills/tfx-debate/skill.json +1 -7
- package/skills/tfx-deep-analysis/SKILL.md.tmpl +228 -0
- package/skills/tfx-deep-analysis/skill.json +1 -5
- package/skills/tfx-deep-interview/SKILL.md.tmpl +203 -0
- package/skills/tfx-deep-plan/SKILL.md.tmpl +282 -0
- package/skills/tfx-deep-qa/SKILL.md.tmpl +165 -0
- package/skills/tfx-deep-qa/skill.json +1 -6
- package/skills/tfx-deep-research/SKILL.md.tmpl +217 -0
- package/skills/tfx-deep-review/SKILL.md.tmpl +179 -0
- package/skills/tfx-doctor/SKILL.md +21 -0
- package/skills/tfx-doctor/SKILL.md.tmpl +172 -0
- package/skills/tfx-doctor/skill.json +1 -3
- package/skills/tfx-find/SKILL.md +1 -0
- package/skills/tfx-forge/SKILL.md.tmpl +187 -0
- package/skills/tfx-fullcycle/SKILL.md.tmpl +286 -0
- package/skills/tfx-fullcycle/skill.json +1 -6
- package/skills/{tfx-workspace/skill-snapshot/tfx-gemini/SKILL.md → tfx-gemini/SKILL.md.tmpl} +16 -7
- package/skills/tfx-gemini/skill.json +1 -3
- package/skills/tfx-hooks/SKILL.md.tmpl +216 -0
- package/skills/tfx-hooks/skill.json +1 -3
- package/skills/tfx-hub/SKILL.md.tmpl +212 -0
- package/skills/tfx-hub/skill.json +1 -3
- package/skills/tfx-index/SKILL.md +1 -0
- package/skills/tfx-index/skill.json +1 -6
- package/skills/tfx-interview/SKILL.md.tmpl +285 -0
- package/skills/tfx-multi/SKILL.md.tmpl +183 -0
- package/skills/tfx-multi/skill.json +1 -3
- package/skills/tfx-panel/SKILL.md.tmpl +189 -0
- package/skills/tfx-panel/skill.json +1 -7
- package/skills/tfx-persist/SKILL.md.tmpl +270 -0
- package/skills/tfx-persist/skill.json +1 -7
- package/skills/tfx-plan/SKILL.md +1 -0
- package/skills/tfx-plan/skill.json +1 -6
- package/skills/tfx-profile/SKILL.md.tmpl +239 -0
- package/skills/tfx-profile/skill.json +1 -3
- package/skills/tfx-prune/SKILL.md.tmpl +200 -0
- package/skills/tfx-prune/skill.json +1 -7
- package/skills/tfx-psmux-rules/SKILL.md.tmpl +326 -0
- package/skills/tfx-psmux-rules/skill.json +1 -4
- package/skills/tfx-qa/SKILL.md +1 -0
- package/skills/tfx-qa/skill.json +1 -6
- package/skills/tfx-ralph/SKILL.md.tmpl +28 -0
- package/skills/tfx-ralph/skill.json +1 -4
- package/skills/tfx-remote-setup/SKILL.md.tmpl +576 -0
- package/skills/tfx-remote-setup/skill.json +1 -3
- package/skills/tfx-remote-spawn/SKILL.md.tmpl +263 -0
- package/skills/tfx-remote-spawn/references/hosts.json +16 -16
- package/skills/tfx-remote-spawn/skill.json +1 -4
- package/skills/tfx-research/SKILL.md +1 -0
- package/skills/tfx-review/SKILL.md +1 -0
- package/skills/tfx-review/skill.json +1 -6
- package/skills/tfx-setup/SKILL.md.tmpl +504 -0
- package/skills/tfx-setup/skill.json +1 -3
- package/skills/tfx-swarm/SKILL.md +22 -0
- package/skills/tfx-swarm/SKILL.md.tmpl +218 -0
- package/tui/codex-profile.mjs +457 -0
- package/tui/core.mjs +266 -0
- package/tui/doctor.mjs +375 -0
- package/tui/gemini-profile.mjs +299 -0
- package/tui/monitor-data.mjs +152 -0
- package/tui/monitor.mjs +339 -0
- package/tui/setup.mjs +533 -0
- package/CLAUDE.md +0 -193
- package/references/hosts.json +0 -33
- package/skills/tfx-workspace/async-tests/run-tests.sh +0 -203
- package/skills/tfx-workspace/evals/evals.json +0 -79
- package/skills/tfx-workspace/iteration-1/benchmark.json +0 -162
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/eval_metadata.json +0 -11
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/grading.json +0 -9
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/outputs/analysis.md +0 -154
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/grading.json +0 -9
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/outputs/analysis.md +0 -126
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/eval_metadata.json +0 -11
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/grading.json +0 -9
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/outputs/analysis.md +0 -119
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/grading.json +0 -9
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/outputs/analysis.md +0 -115
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/eval_metadata.json +0 -10
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/grading.json +0 -8
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/outputs/analysis.md +0 -86
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/grading.json +0 -8
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/outputs/analysis.md +0 -81
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/multi-team-creation/eval_metadata.json +0 -12
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/grading.json +0 -10
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/outputs/analysis.md +0 -316
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/grading.json +0 -10
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/outputs/analysis.md +0 -352
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/review.html +0 -1325
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/eval_metadata.json +0 -12
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/grading.json +0 -10
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/outputs/analysis.md +0 -97
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/grading.json +0 -10
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/outputs/analysis.md +0 -94
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/eval_metadata.json +0 -12
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/grading.json +0 -10
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/outputs/analysis.md +0 -209
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/grading.json +0 -10
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/outputs/analysis.md +0 -193
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-2/benchmark.json +0 -62
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/eval_metadata.json +0 -13
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/grading.json +0 -11
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/outputs/analysis.md +0 -382
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/grading.json +0 -11
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/outputs/analysis.md +0 -333
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-2/review.html +0 -1325
- package/skills/tfx-workspace/skill-snapshot/tfx-auto/SKILL.md +0 -217
- package/skills/tfx-workspace/skill-snapshot/tfx-codex/SKILL.md +0 -65
- package/skills/tfx-workspace/skill-snapshot/tfx-doctor/SKILL.md +0 -94
- package/skills/tfx-workspace/skill-snapshot/tfx-hub/SKILL.md +0 -133
- package/skills/tfx-workspace/skill-snapshot/tfx-multi/SKILL.md +0 -426
- package/skills/tfx-workspace/skill-snapshot/tfx-setup/SKILL.md +0 -101
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tfx-setup
|
|
3
|
+
description: >
|
|
4
|
+
triflux 초기 설정 및 진단. AskUserQuestion 기반 인터랙티브 위저드로
|
|
5
|
+
파일 동기화, HUD 설정, Codex 프로파일, CLI 진단, MCP 확인, 검색 MCP 설정을 수행합니다.
|
|
6
|
+
Use when: setup, 설정, 설치, install, 초기화, 처음, 시작, wizard
|
|
7
|
+
triggers:
|
|
8
|
+
- tfx-setup
|
|
9
|
+
argument-hint: "[doctor]"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# {{SKILL_NAME}} — triflux 초기 설정 위저드
|
|
13
|
+
|
|
14
|
+
> 설치 후 최초 1회 + **매 업데이트 후** 실행 권장.
|
|
15
|
+
> `tfx update` 완료 후에도 이 스킬의 단계 1.5(훅 등록 확인)를 반드시 실행하여
|
|
16
|
+
> 신규/변경된 훅이 settings.json에 반영되도록 한다.
|
|
17
|
+
> 훅 우선순위 관리는 `tfx-hooks` 스킬의 오케스트레이터 패턴을 따른다.
|
|
18
|
+
|
|
19
|
+
## 워크플로우
|
|
20
|
+
|
|
21
|
+
### Step 1: 모드 선택 (AskUserQuestion)
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
question: "어떤 설정 모드를 실행하시겠습니까?"
|
|
25
|
+
header: "모드"
|
|
26
|
+
options:
|
|
27
|
+
- label: "전체 설정 (Recommended)"
|
|
28
|
+
description: "6단계 순서 실행: 동기화 → HUD → 프로파일 → CLI → MCP → 검색 MCP"
|
|
29
|
+
- label: "단계별 선택"
|
|
30
|
+
description: "필요한 단계만 골라서 실행"
|
|
31
|
+
- label: "현재 상태 확인"
|
|
32
|
+
description: "설정 없이 진단만 수행"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
`doctor` 인자가 있으면 바로 `triflux doctor` 실행.
|
|
36
|
+
|
|
37
|
+
### Step 2: 전체 설정 (6단계)
|
|
38
|
+
|
|
39
|
+
각 단계를 순서대로 실행하며 결과를 보고한다.
|
|
40
|
+
|
|
41
|
+
#### 단계 1: 파일 동기화
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
Bash("triflux setup")
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
스크립트/HUD/스킬을 `~/.claude/`에 배포. 결과 표시.
|
|
48
|
+
|
|
49
|
+
#### 단계 1.5: 훅 등록 확인
|
|
50
|
+
|
|
51
|
+
`~/.claude/settings.json`을 Read 도구로 읽어 필수 훅이 등록되어 있는지 확인한다.
|
|
52
|
+
|
|
53
|
+
필수 훅 목록:
|
|
54
|
+
| 이벤트 | matcher | 스크립트 | 역할 |
|
|
55
|
+
|--------|---------|---------|------|
|
|
56
|
+
| PreToolUse | Bash\|Agent | headless-guard-fast.sh | Codex/Gemini 직접 호출 차단 |
|
|
57
|
+
| PreToolUse | Bash | psmux-safety-guard.mjs | psmux kill-session 직접 호출 차단 (WT 프리징 방지) |
|
|
58
|
+
| PreToolUse | Skill | tfx-gate-activate.mjs | tfx-multi 게이트 |
|
|
59
|
+
|
|
60
|
+
누락된 훅이 있으면 update-config 스킬로 등록한다. 이미 있으면 ✅ 표시.
|
|
61
|
+
|
|
62
|
+
#### 단계 2: HUD 설정
|
|
63
|
+
|
|
64
|
+
`~/.claude/settings.json`을 Read 도구로 읽어 `statusLine` 확인.
|
|
65
|
+
|
|
66
|
+
- statusLine이 이미 `hud-qos-status.mjs`를 가리키면 → ✅ 표시
|
|
67
|
+
- statusLine이 없으면 → AskUserQuestion:
|
|
68
|
+
```
|
|
69
|
+
question: "HUD statusLine을 설정하시겠습니까?"
|
|
70
|
+
header: "HUD"
|
|
71
|
+
options:
|
|
72
|
+
- label: "설정 (Recommended)"
|
|
73
|
+
description: "hud-qos-status.mjs를 statusLine으로 등록"
|
|
74
|
+
- label: "건너뛰기"
|
|
75
|
+
description: "나중에 수동 설정"
|
|
76
|
+
```
|
|
77
|
+
- statusLine이 다른 값이면 → AskUserQuestion:
|
|
78
|
+
```
|
|
79
|
+
question: "기존 statusLine을 triflux HUD로 교체하시겠습니까?"
|
|
80
|
+
header: "HUD"
|
|
81
|
+
options:
|
|
82
|
+
- label: "교체"
|
|
83
|
+
description: "기존 statusLine을 triflux HUD로 덮어씀"
|
|
84
|
+
- label: "유지"
|
|
85
|
+
description: "현재 statusLine 유지"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
설정 시 Edit 도구로 settings.json 수정:
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"statusLine": {
|
|
92
|
+
"type": "command",
|
|
93
|
+
"command": "\"<NODE_PATH>\" \"<HOME>/.claude/hud/hud-qos-status.mjs\""
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
#### 단계 3: Codex 프로파일
|
|
99
|
+
|
|
100
|
+
`~/.codex/config.toml`을 Read 도구로 읽어 필수 프로파일 존재 여부 확인.
|
|
101
|
+
필수: `codex53_high`, `codex53_xhigh`, `spark53_low`.
|
|
102
|
+
|
|
103
|
+
- 모두 존재 → ✅ 표시
|
|
104
|
+
- 누락 있으면 → AskUserQuestion:
|
|
105
|
+
```
|
|
106
|
+
question: "누락된 Codex 프로파일 N개를 생성하시겠습니까?"
|
|
107
|
+
header: "Profiles"
|
|
108
|
+
options:
|
|
109
|
+
- label: "생성 (Recommended)"
|
|
110
|
+
description: "누락된 프로파일을 config.toml에 추가"
|
|
111
|
+
- label: "건너뛰기"
|
|
112
|
+
description: "나중에 /tfx-profile로 관리"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
#### 단계 3.5: Gemini 프로필
|
|
116
|
+
|
|
117
|
+
`~/.gemini/triflux-profiles.json` 존재 여부 확인.
|
|
118
|
+
필수 프로필: `pro31`, `flash3`.
|
|
119
|
+
|
|
120
|
+
- 파일 존재 + 필수 프로필 있음 → ✅ 표시
|
|
121
|
+
- 파일 미존재 → 기본 프로필 5개 자동 생성 (pro31, flash3, pro25, flash25, lite25)
|
|
122
|
+
- 누락 있으면 → AskUserQuestion:
|
|
123
|
+
```
|
|
124
|
+
question: "누락된 Gemini 프로필을 생성하시겠습니까?"
|
|
125
|
+
header: "Gemini Profiles"
|
|
126
|
+
options:
|
|
127
|
+
- label: "생성 (Recommended)"
|
|
128
|
+
description: "누락된 프로필을 triflux-profiles.json에 추가"
|
|
129
|
+
- label: "건너뛰기"
|
|
130
|
+
description: "나중에 /tfx-profile --gemini로 관리"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
#### 단계 3.6: Codex MCP Gateway 싱글톤 전환
|
|
134
|
+
|
|
135
|
+
Codex CLI가 매 호출마다 MCP 서버를 stdio로 spawn하면 좀비 Node.js 프로세스가 생긴다.
|
|
136
|
+
gateway SSE 싱글톤을 사용하도록 config.toml을 전환한다.
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
node scripts/codex-mcp-gateway-sync.mjs --status
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
- 전부 `sse` → ✅ 이미 전환됨
|
|
143
|
+
- `stdio` 또는 `missing` 있으면 → AskUserQuestion:
|
|
144
|
+
```
|
|
145
|
+
question: "Codex MCP 서버를 gateway 싱글톤(SSE)으로 전환하시겠습니까? 매 호출마다 MCP를 새로 spawn하는 대신, 영속 gateway 데몬을 공유합니다. (좀비 Node.js 방지)"
|
|
146
|
+
header: "MCP Gateway"
|
|
147
|
+
options:
|
|
148
|
+
- label: "전환 (Recommended)"
|
|
149
|
+
description: "stdio → SSE URL 전환. 좀비 프로세스 방지"
|
|
150
|
+
- label: "건너뛰기"
|
|
151
|
+
description: "현재 stdio 방식 유지"
|
|
152
|
+
```
|
|
153
|
+
"전환" 선택 시:
|
|
154
|
+
1. gateway 데몬이 안 떠 있으면 먼저 기동: `node scripts/mcp-gateway-start.mjs`
|
|
155
|
+
2. config.toml 전환: `node scripts/codex-mcp-gateway-sync.mjs --enable`
|
|
156
|
+
3. 결과 확인: `node scripts/codex-mcp-gateway-sync.mjs --status`
|
|
157
|
+
|
|
158
|
+
#### 단계 3.7: Codex config.toml 충돌 감지
|
|
159
|
+
|
|
160
|
+
`~/.codex/config.toml`을 Read 도구로 읽어 `approval_mode`와 `sandbox` 설정을 확인한다.
|
|
161
|
+
|
|
162
|
+
**충돌 감지 규칙:**
|
|
163
|
+
- `approval_mode = "full-auto"` 가 config.toml에 있으면 → CLI에서 `--full-auto` 플래그 중복 사용 금지
|
|
164
|
+
- `sandbox = "elevated"` 가 config.toml에 있으면 → CLI에서 sandbox 플래그 중복 사용 금지
|
|
165
|
+
- 프로파일별 설정과 기본 설정이 충돌하면 → 경고 표시
|
|
166
|
+
|
|
167
|
+
결과 표시:
|
|
168
|
+
```
|
|
169
|
+
## Codex config.toml 분석
|
|
170
|
+
|
|
171
|
+
| 설정 | 값 | CLI 주의사항 |
|
|
172
|
+
|------|-----|-------------|
|
|
173
|
+
| approval_mode | full-auto | --full-auto 플래그 생략 필수 |
|
|
174
|
+
| sandbox | elevated | sandbox 플래그 생략 필수 |
|
|
175
|
+
| model | codex-mini-latest | 프로파일별 오버라이드 가능 |
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
충돌 발견 시 AskUserQuestion:
|
|
179
|
+
```
|
|
180
|
+
question: "config.toml에 approval_mode=full-auto가 설정되어 있습니다. triflux의 headless 실행에서 CLI 플래그 중복을 방지하려면 이 설정을 유지하는 것이 좋습니다. 현재 설정을 유지할까요?"
|
|
181
|
+
header: "Codex Config"
|
|
182
|
+
options:
|
|
183
|
+
- label: "유지 (Recommended)"
|
|
184
|
+
description: "config.toml 기본값 사용, CLI 플래그 자동 생략"
|
|
185
|
+
- label: "수정"
|
|
186
|
+
description: "config.toml을 편집하여 직접 조정"
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**CLAUDE.md 주입 (필수):** 감지된 config.toml 설정을 프로젝트 CLAUDE.md의 `<codex-config>` 섹션에 반영한다.
|
|
190
|
+
이렇게 해야 훅(headless-guard, safety-guard)이 명령을 차단했을 때, Claude가 차단 메시지를 읽고 "왜 차단됐는지" + "어떻게 수정해야 하는지"를 CLAUDE.md에서 찾아서 올바르게 재시도할 수 있다.
|
|
191
|
+
|
|
192
|
+
주입 예시 (Edit 도구로 `<codex-config>` 섹션 업데이트):
|
|
193
|
+
```markdown
|
|
194
|
+
<codex-config>
|
|
195
|
+
## Codex config.toml
|
|
196
|
+
|
|
197
|
+
config.toml에 이미 설정된 값은 CLI 플래그로 중복 지정하지 않는다.
|
|
198
|
+
|
|
199
|
+
| config.toml에 있으면 | CLI에서 생략 |
|
|
200
|
+
|---------------------|-------------|
|
|
201
|
+
| `approval_mode = "full-auto"` | `--full-auto` |
|
|
202
|
+
| `sandbox = "elevated"` | `--full-auto` |
|
|
203
|
+
|
|
204
|
+
안전 패턴: config.toml에 기본값을 두고, CLI에서는 `--profile` 선택만 한다.
|
|
205
|
+
</codex-config>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
차단 → 수정 흐름:
|
|
209
|
+
1. headless-guard가 `codex exec --full-auto` 차단
|
|
210
|
+
2. 차단 메시지: "config.toml에 approval_mode=full-auto 있으므로 --full-auto 중복"
|
|
211
|
+
3. Claude가 CLAUDE.md `<codex-config>` 읽음 → `--full-auto` 제거 후 재실행
|
|
212
|
+
4. 동일 실수 반복 방지
|
|
213
|
+
|
|
214
|
+
#### 단계 3.8: 원격 기기 프로빙 (Swarm Multi-Machine)
|
|
215
|
+
|
|
216
|
+
`references/hosts.json` 또는 `~/.triflux/hosts.json` 존재 여부 확인.
|
|
217
|
+
|
|
218
|
+
- 파일 없음 → AskUserQuestion:
|
|
219
|
+
```
|
|
220
|
+
question: "원격 기기에서 스웜을 실행할 계획이 있나요? (tfx-swarm의 다중 기기 기능)"
|
|
221
|
+
header: "Remote"
|
|
222
|
+
options:
|
|
223
|
+
- label: "네, 원격 설정"
|
|
224
|
+
description: "SSH 호스트를 감지하고 연결 테스트합니다"
|
|
225
|
+
- label: "나중에"
|
|
226
|
+
description: "로컬만 사용. 나중에 /tfx-remote-setup으로 설정"
|
|
227
|
+
```
|
|
228
|
+
"네" 선택 시 → `/tfx-remote-setup` 스킬 호출하여 호스트 위저드 실행
|
|
229
|
+
|
|
230
|
+
- 파일 있음 → 등록된 호스트 각각에 대해 SSH 연결 + Claude 설치 프로브:
|
|
231
|
+
```bash
|
|
232
|
+
ssh -o ConnectTimeout=5 <host> echo ok 2>/dev/null && echo "REACHABLE" || echo "UNREACHABLE"
|
|
233
|
+
```
|
|
234
|
+
결과 표시:
|
|
235
|
+
```
|
|
236
|
+
## 원격 기기 상태
|
|
237
|
+
|
|
238
|
+
| 호스트 | SSH | Claude | 스웜 사용 |
|
|
239
|
+
|--------|-----|--------|----------|
|
|
240
|
+
| ryzen5-7600 | ✅ | ✅ v1.0.30 | 가능 |
|
|
241
|
+
| m2 | ✅ | ⚠ 미설치 | 불가 (Claude 설치 필요) |
|
|
242
|
+
| ultra4 | ❌ 연결 실패 | — | 불가 |
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
#### 단계 4: CLI 진단
|
|
246
|
+
|
|
247
|
+
`triflux doctor --json`에는 psmux 설치 여부뿐 아니라 **버전/capability preflight**도 포함된다.
|
|
248
|
+
특히 Windows에서는 아래 capability가 모두 있어야 headless 멀티모델 오케스트레이션을 안전하게 쓸 수 있다:
|
|
249
|
+
|
|
250
|
+
- `new-session`
|
|
251
|
+
- `attach-session`
|
|
252
|
+
- `kill-session`
|
|
253
|
+
- `capture-pane`
|
|
254
|
+
- `detach-client` 지원 여부도 함께 확인 (attach/detach hardening 참고)
|
|
255
|
+
|
|
256
|
+
`triflux doctor --json`을 Bash로 실행하여 CLI 존재 여부 확인.
|
|
257
|
+
결과를 테이블로 표시.
|
|
258
|
+
|
|
259
|
+
#### 단계 5: MCP 서버 설정 위저드
|
|
260
|
+
|
|
261
|
+
> MCP 서버를 선택적으로 활성화한다. API 키 없는 서버는 건너뛸 수 있다.
|
|
262
|
+
> 선택 결과는 `~/.claude/cache/mcp-enabled.json` 매니페스트에 저장된다.
|
|
263
|
+
> 이후 gateway-start, gateway-config, mcp-filter 모두 이 매니페스트를 참조한다.
|
|
264
|
+
|
|
265
|
+
##### 5-1: 기존 매니페스트 확인
|
|
266
|
+
|
|
267
|
+
Read 도구로 `~/.claude/cache/mcp-enabled.json` 읽기 시도.
|
|
268
|
+
- 존재하면 → 현재 설정 표시 후 AskUserQuestion:
|
|
269
|
+
```
|
|
270
|
+
question: "MCP 서버 설정을 변경하시겠습니까?"
|
|
271
|
+
header: "MCP"
|
|
272
|
+
options:
|
|
273
|
+
- label: "현재 설정 유지"
|
|
274
|
+
description: "활성: {현재 enabled 목록}"
|
|
275
|
+
- label: "다시 설정"
|
|
276
|
+
description: "서버를 다시 선택"
|
|
277
|
+
```
|
|
278
|
+
"현재 설정 유지" 선택 시 → Step 5 완료, 다음 단계로.
|
|
279
|
+
|
|
280
|
+
##### 5-2: Core 서버 안내
|
|
281
|
+
|
|
282
|
+
Core 서버(context7, serena)는 API 키 불필요, 자동 활성화됨을 표시:
|
|
283
|
+
```
|
|
284
|
+
✅ context7 — 라이브러리 문서 조회 (API 키 불필요)
|
|
285
|
+
✅ serena — 시맨틱 코드 분석 (API 키 불필요)
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
##### 5-3: 검색 MCP 선택
|
|
289
|
+
|
|
290
|
+
AskUserQuestion(multiSelect):
|
|
291
|
+
```
|
|
292
|
+
question: "어떤 검색 MCP를 활성화하시겠습니까? (API 키 필요)"
|
|
293
|
+
header: "검색 MCP"
|
|
294
|
+
multiSelect: true
|
|
295
|
+
options:
|
|
296
|
+
- label: "brave-search"
|
|
297
|
+
description: "Brave 웹/뉴스 검색 (BRAVE_API_KEY 필요)"
|
|
298
|
+
- label: "exa"
|
|
299
|
+
description: "코드/리포/학술 검색 (EXA_API_KEY 필요)"
|
|
300
|
+
- label: "tavily"
|
|
301
|
+
description: "리서치/팩트체크 검색 (TAVILY_API_KEY 필요)"
|
|
302
|
+
- label: "없음"
|
|
303
|
+
description: "검색 MCP 사용 안 함 (context7만 사용)"
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
선택된 서버마다 환경변수 존재 여부를 `process.env`로 확인:
|
|
307
|
+
- 환경변수 있음 → ✅ 표시
|
|
308
|
+
- 환경변수 없음 → ⚠️ 경고 + 안내:
|
|
309
|
+
```
|
|
310
|
+
⚠️ exa: EXA_API_KEY가 설정되지 않았습니다.
|
|
311
|
+
→ 환경변수를 설정한 뒤 세션을 재시작하면 활성화됩니다.
|
|
312
|
+
→ 매니페스트에는 활성으로 기록합니다 (키 추가 후 바로 사용 가능).
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
##### 5-4: 통합 MCP 선택
|
|
316
|
+
|
|
317
|
+
AskUserQuestion(multiSelect):
|
|
318
|
+
```
|
|
319
|
+
question: "어떤 통합 MCP를 활성화하시겠습니까?"
|
|
320
|
+
header: "통합 MCP"
|
|
321
|
+
multiSelect: true
|
|
322
|
+
options:
|
|
323
|
+
- label: "jira"
|
|
324
|
+
description: "Jira 이슈/스프린트 관리 (JIRA_API_TOKEN + EMAIL + URL 필요)"
|
|
325
|
+
- label: "notion"
|
|
326
|
+
description: "Notion 페이지 관리 (NOTION_TOKEN 필요)"
|
|
327
|
+
- label: "없음"
|
|
328
|
+
description: "통합 MCP 사용 안 함"
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
notion 선택 시 notion-guest도 함께 활성화.
|
|
332
|
+
환경변수 체크는 5-3과 동일 패턴.
|
|
333
|
+
|
|
334
|
+
##### 5-5: 매니페스트 저장
|
|
335
|
+
|
|
336
|
+
선택된 서버 목록을 수집하여 Bash 도구로 저장:
|
|
337
|
+
```bash
|
|
338
|
+
node -e "
|
|
339
|
+
import { writeManifest } from './scripts/lib/mcp-manifest.mjs';
|
|
340
|
+
writeManifest(['brave-search', 'exa']); // 예시: 선택된 서버
|
|
341
|
+
console.log('Manifest saved');
|
|
342
|
+
"
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
또는 Write 도구로 직접 `~/.claude/cache/mcp-enabled.json` 작성:
|
|
346
|
+
```json
|
|
347
|
+
{
|
|
348
|
+
"version": 1,
|
|
349
|
+
"updatedAt": "2026-03-31T...",
|
|
350
|
+
"enabled": ["context7", "serena", "brave-search", "exa"]
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
##### 5-6: 결과 표시
|
|
355
|
+
|
|
356
|
+
```
|
|
357
|
+
## MCP 서버 설정 완료
|
|
358
|
+
|
|
359
|
+
| 서버 | 상태 | 비고 |
|
|
360
|
+
|------|------|------|
|
|
361
|
+
| context7 | ✅ 활성 | Core (항상 활성) |
|
|
362
|
+
| serena | ✅ 활성 | Core (항상 활성) |
|
|
363
|
+
| brave-search | ✅ 활성 | BRAVE_API_KEY ✅ |
|
|
364
|
+
| exa | ⚠️ 활성 | EXA_API_KEY 미설정 — 키 추가 후 사용 가능 |
|
|
365
|
+
| tavily | ⏭️ 건너뜀 | 사용자 선택 |
|
|
366
|
+
| jira | ⏭️ 건너뜀 | 사용자 선택 |
|
|
367
|
+
| notion | ⏭️ 건너뜀 | 사용자 선택 |
|
|
368
|
+
|
|
369
|
+
💡 나중에 변경: `/tfx-setup` → 단계별 선택 → MCP 설정
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
#### 단계 6: 검색 MCP 설정
|
|
373
|
+
|
|
374
|
+
프로젝트 `.mcp.json`을 Read 도구로 읽어 기존 검색 MCP 서버 확인.
|
|
375
|
+
환경변수 파일(`~/projects/.env`, 프로젝트 `.env`)에서 API 키 자동 감지.
|
|
376
|
+
|
|
377
|
+
감지된 키 상태를 옵션 description에 반영하여 표시 → AskUserQuestion:
|
|
378
|
+
```
|
|
379
|
+
question: "어떤 검색 MCP 서버를 설정하시겠습니까?"
|
|
380
|
+
header: "검색 MCP"
|
|
381
|
+
multiSelect: true
|
|
382
|
+
options:
|
|
383
|
+
- label: "Exa Web Search"
|
|
384
|
+
description: "시맨틱 검색 + 크롤링 (EXA_API_KEY: ✅감지됨/❌미감지)"
|
|
385
|
+
- label: "Brave Search"
|
|
386
|
+
description: "웹/뉴스/이미지 검색 (BRAVE_API_KEY: ✅감지됨/❌미감지)"
|
|
387
|
+
- label: "Tavily Search"
|
|
388
|
+
description: "AI 최적화 검색 (TAVILY_API_KEY: ✅감지됨/❌미감지)"
|
|
389
|
+
- label: "건너뛰기"
|
|
390
|
+
description: "검색 MCP 설정 안 함"
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
"건너뛰기" 선택 시 이 단계 종료.
|
|
394
|
+
|
|
395
|
+
각 선택된 서버에 대해:
|
|
396
|
+
1. API 키가 감지됨 → "감지된 키를 사용합니다" 확인 메시지
|
|
397
|
+
2. API 키 미감지 → AskUserQuestion으로 키 입력 요청:
|
|
398
|
+
```
|
|
399
|
+
question: "{서버명} API 키를 입력하세요 (발급: {URL})"
|
|
400
|
+
header: "API Key"
|
|
401
|
+
```
|
|
402
|
+
빈 입력이면 해당 서버 건너뛰기.
|
|
403
|
+
3. `.mcp.json`에 서버 추가 (Edit 도구). 파일 없으면 Write 도구로 생성.
|
|
404
|
+
|
|
405
|
+
MCP 서버 설정 레지스트리:
|
|
406
|
+
```json
|
|
407
|
+
{
|
|
408
|
+
"exa": {
|
|
409
|
+
"command": "npx",
|
|
410
|
+
"args": ["-y", "exa-mcp-server"],
|
|
411
|
+
"env": { "EXA_API_KEY": "{key}" },
|
|
412
|
+
"keyUrl": "https://exa.ai/dashboard"
|
|
413
|
+
},
|
|
414
|
+
"brave-search": {
|
|
415
|
+
"command": "npx",
|
|
416
|
+
"args": ["-y", "@modelcontextprotocol/server-brave-search"],
|
|
417
|
+
"env": { "BRAVE_API_KEY": "{key}" },
|
|
418
|
+
"keyUrl": "https://brave.com/search/api/"
|
|
419
|
+
},
|
|
420
|
+
"tavily": {
|
|
421
|
+
"command": "npx",
|
|
422
|
+
"args": ["-y", "tavily-mcp@latest"],
|
|
423
|
+
"env": { "TAVILY_API_KEY": "{key}" },
|
|
424
|
+
"keyUrl": "https://app.tavily.com/home"
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
키 감지 경로 (순서대로 탐색, 첫 번째 매치 사용):
|
|
430
|
+
1. 셸 환경변수 (`$EXA_API_KEY` 등)
|
|
431
|
+
2. `~/projects/.env`
|
|
432
|
+
3. 프로젝트 루트 `.env`
|
|
433
|
+
4. `~/.claude/settings.json` → `env` 섹션
|
|
434
|
+
|
|
435
|
+
### Step 3: 단계별 선택
|
|
436
|
+
|
|
437
|
+
AskUserQuestion(multiSelect):
|
|
438
|
+
```
|
|
439
|
+
question: "실행할 단계를 선택하세요"
|
|
440
|
+
header: "단계"
|
|
441
|
+
multiSelect: true
|
|
442
|
+
options:
|
|
443
|
+
- label: "파일 동기화"
|
|
444
|
+
description: "스크립트/HUD/스킬 배포"
|
|
445
|
+
- label: "HUD 설정"
|
|
446
|
+
description: "settings.json statusLine 등록"
|
|
447
|
+
- label: "Codex 프로파일"
|
|
448
|
+
description: "필수 프로파일 생성"
|
|
449
|
+
- label: "Gemini 프로필"
|
|
450
|
+
description: "triflux-profiles.json 생성/확인"
|
|
451
|
+
- label: "CLI + MCP 진단"
|
|
452
|
+
description: "CLI 존재 + MCP 인벤토리 확인"
|
|
453
|
+
- label: "검색 MCP"
|
|
454
|
+
description: "Exa/Brave/Tavily 검색 서버 설정"
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
선택된 단계만 순서대로 실행.
|
|
458
|
+
|
|
459
|
+
### Step 4: 결과 요약
|
|
460
|
+
|
|
461
|
+
```
|
|
462
|
+
## tfx-setup 완료
|
|
463
|
+
|
|
464
|
+
| 항목 | 상태 |
|
|
465
|
+
|------|------|
|
|
466
|
+
| 파일 동기화 | ✅ |
|
|
467
|
+
| HUD 설정 | ✅ statusLine 등록됨 |
|
|
468
|
+
| Codex 프로파일 | ✅ 3개 확인 |
|
|
469
|
+
| Codex config.toml | ✅ approval_mode=full-auto (CLI 플래그 자동 생략) |
|
|
470
|
+
| Codex CLI | ✅ |
|
|
471
|
+
| Gemini CLI | ⚠ 미설치 (선택) |
|
|
472
|
+
| 원격 기기 | ✅ 2대 사용 가능 (ryzen5-7600, m2) / ❌ 1대 연결 실패 |
|
|
473
|
+
| MCP 인벤토리 | ✅ N개 서버 |
|
|
474
|
+
| 검색 MCP | ✅ Exa, Tavily / ⏭ Brave (키 없음) |
|
|
475
|
+
|
|
476
|
+
### 스웜 기능 수준
|
|
477
|
+
|
|
478
|
+
| 기능 | 상태 | 필요 조건 |
|
|
479
|
+
|------|------|----------|
|
|
480
|
+
| 로컬 단일 모델 | ✅ | Codex CLI |
|
|
481
|
+
| 로컬 다중 모델 | ✅ | Codex CLI + Gemini CLI |
|
|
482
|
+
| 다중 기기 스웜 | ✅ 2대 | SSH 호스트 + Claude 설치 |
|
|
483
|
+
| 전체 (다중 기기 x 다중 모델) | ✅ | 위 전부 |
|
|
484
|
+
|
|
485
|
+
### 다음 단계
|
|
486
|
+
- Codex 미설치 시: `npm install -g @openai/codex`
|
|
487
|
+
- Gemini 미설치 시: `npm install -g @google/gemini-cli`
|
|
488
|
+
- 원격 호스트 추가: `/tfx-remote-setup`
|
|
489
|
+
- 검색 MCP 추가/변경: `/tfx-setup` → 단계별 선택 → 검색 MCP
|
|
490
|
+
- 세션 재시작하면 HUD + 검색 MCP가 활성화됩니다
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
## 에러 처리
|
|
494
|
+
|
|
495
|
+
| 상황 | 처리 |
|
|
496
|
+
|------|------|
|
|
497
|
+
| `triflux: command not found` | `npm install -g triflux` 안내 |
|
|
498
|
+
| `settings.json` 파싱 실패 | 백업 생성 후 새로 작성 |
|
|
499
|
+
| 기존 statusLine이 다른 HUD | 교체/유지 AskUserQuestion |
|
|
500
|
+
| node.exe 경로에 공백 | 큰따옴표로 감싸기 |
|
|
501
|
+
|
|
502
|
+
## standalone TUI
|
|
503
|
+
|
|
504
|
+
터미널에서 직접 실행도 가능: `node tui/setup.mjs` (arrow key 방식)
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-setup",
|
|
3
3
|
"description": "triflux 초기 설정 및 진단. AskUserQuestion 기반 인터랙티브 위저드로 파일 동기화, HUD 설정, Codex 프로파일, CLI 진단, MCP 확인, 검색 MCP 설정을 수행합니다. Use when: setup, 설정, 설치, install, 초기화, 처음, 시작, wizard",
|
|
4
|
-
"triggers": [
|
|
5
|
-
"tfx-setup"
|
|
6
|
-
],
|
|
4
|
+
"triggers": ["tfx-setup"],
|
|
7
5
|
"argument_hint": "[doctor]"
|
|
8
6
|
}
|
|
@@ -1,5 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tfx-swarm
|
|
3
|
+
description: "tfx-swarm — 다중 기기 x 다중 모델 스웜 오케스트레이션"
|
|
4
|
+
triggers:
|
|
5
|
+
- swarm
|
|
6
|
+
- 스웜
|
|
7
|
+
- 병렬 실행
|
|
8
|
+
- codex-swarm
|
|
9
|
+
---
|
|
10
|
+
|
|
1
11
|
# tfx-swarm — 다중 기기 x 다중 모델 스웜 오케스트레이션
|
|
2
12
|
|
|
13
|
+
> **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
|
|
14
|
+
> 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
|
|
15
|
+
|
|
16
|
+
> **Telemetry**
|
|
17
|
+
>
|
|
18
|
+
> - Skill: `tfx-swarm`
|
|
19
|
+
> - Description: `tfx-swarm — 다중 기기 x 다중 모델 스웜 오케스트레이션`
|
|
20
|
+
> - Session: 요청별 식별자를 유지해 단계별 실행 로그를 추적한다.
|
|
21
|
+
> - Errors: 실패 시 원인/복구/재시도 여부를 구조화해 기록한다.
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
3
25
|
> **Multi-Machine x Multi-Model Swarm.** PRD 하나로 로컬과 원격 머신에서
|
|
4
26
|
> Claude + Codex + Gemini를 병렬 실행하고, file-lease로 충돌을 방지하며,
|
|
5
27
|
> 결과를 자동 통합한다. triflux의 킬러 스킬.
|