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.
- package/CLAUDE.md +171 -0
- package/README.md +32 -15
- package/bin/triflux.mjs +62 -5
- package/hooks/agent-route-guard.mjs +109 -0
- package/hooks/cross-review-tracker.mjs +122 -0
- package/hooks/error-context.mjs +148 -0
- package/hooks/hook-adaptive-collector.mjs +86 -0
- package/hooks/hook-manager.mjs +365 -0
- package/hooks/hook-orchestrator.mjs +312 -0
- package/hooks/hook-registry.json +246 -0
- package/hooks/hooks.json +89 -0
- package/hooks/keyword-rules.json +574 -0
- package/hooks/lib/resolve-root.mjs +59 -0
- package/hooks/mcp-config-watcher.mjs +80 -0
- package/hooks/pipeline-stop.mjs +76 -0
- package/hooks/safety-guard.mjs +169 -0
- package/hooks/subagent-verifier.mjs +80 -0
- package/hub/account-broker.mjs +251 -0
- package/hub/adaptive-diagnostic.mjs +323 -0
- package/hub/adaptive-inject.mjs +186 -0
- package/hub/adaptive-memory.mjs +163 -0
- package/hub/adaptive.mjs +143 -0
- package/hub/assign-callbacks.mjs +133 -0
- package/hub/bridge.mjs +799 -0
- package/hub/cli-adapter-base.mjs +280 -0
- package/hub/codex-adapter.mjs +199 -0
- package/hub/codex-compat.mjs +11 -0
- package/hub/codex-preflight.mjs +166 -0
- package/hub/delegator/contracts.mjs +37 -0
- package/hub/delegator/index.mjs +14 -0
- package/hub/delegator/schema/delegator-tools.schema.json +250 -0
- package/hub/delegator/service.mjs +307 -0
- package/hub/delegator/tool-definitions.mjs +35 -0
- package/hub/fullcycle.mjs +96 -0
- package/hub/gemini-adapter.mjs +180 -0
- package/hub/hitl.mjs +143 -0
- package/hub/intent.mjs +193 -0
- package/hub/lib/cache-guard.mjs +114 -0
- package/hub/lib/known-errors.json +72 -0
- package/hub/lib/memory-store.mjs +748 -0
- package/hub/lib/process-utils.mjs +361 -0
- package/hub/lib/ssh-command.mjs +211 -0
- package/hub/lib/ssh-retry.mjs +59 -0
- package/hub/lib/uuidv7.mjs +44 -0
- package/hub/memory-doctor.mjs +480 -0
- package/hub/middleware/request-logger.mjs +161 -0
- package/hub/paths.mjs +30 -0
- package/hub/pipe.mjs +664 -0
- package/hub/pipeline/gates/confidence.mjs +56 -0
- package/hub/pipeline/gates/consensus.mjs +94 -0
- package/hub/pipeline/gates/index.mjs +5 -0
- package/hub/pipeline/gates/selfcheck.mjs +82 -0
- package/hub/pipeline/index.mjs +318 -0
- package/hub/pipeline/state.mjs +191 -0
- package/hub/pipeline/transitions.mjs +124 -0
- package/hub/platform.mjs +225 -0
- package/hub/public/dashboard.html +355 -0
- package/hub/public/tray-icon.ico +0 -0
- package/hub/public/tray-icon.png +0 -0
- package/hub/quality/deslop.mjs +253 -0
- package/hub/reflexion.mjs +372 -0
- package/hub/research.mjs +146 -0
- package/hub/router.mjs +791 -0
- package/hub/routing/complexity.mjs +166 -0
- package/hub/routing/index.mjs +117 -0
- package/hub/routing/q-learning.mjs +336 -0
- package/hub/schema.sql +148 -0
- package/hub/server.mjs +1264 -0
- package/hub/session-fingerprint.mjs +352 -0
- package/hub/state.mjs +258 -0
- package/hub/store-adapter.mjs +118 -0
- package/hub/store.mjs +857 -0
- package/hub/team/agent-map.json +11 -0
- package/hub/team/ansi.mjs +379 -0
- package/hub/team/backend.mjs +90 -0
- package/hub/team/cli/commands/attach.mjs +37 -0
- package/hub/team/cli/commands/control.mjs +43 -0
- package/hub/team/cli/commands/debug.mjs +74 -0
- package/hub/team/cli/commands/focus.mjs +53 -0
- package/hub/team/cli/commands/interrupt.mjs +36 -0
- package/hub/team/cli/commands/kill.mjs +37 -0
- package/hub/team/cli/commands/list.mjs +24 -0
- package/hub/team/cli/commands/send.mjs +37 -0
- package/hub/team/cli/commands/start/index.mjs +106 -0
- package/hub/team/cli/commands/start/parse-args.mjs +130 -0
- package/hub/team/cli/commands/start/start-headless.mjs +109 -0
- package/hub/team/cli/commands/start/start-in-process.mjs +40 -0
- package/hub/team/cli/commands/start/start-mux.mjs +73 -0
- package/hub/team/cli/commands/start/start-wt.mjs +69 -0
- package/hub/team/cli/commands/status.mjs +87 -0
- package/hub/team/cli/commands/stop.mjs +31 -0
- package/hub/team/cli/commands/task.mjs +30 -0
- package/hub/team/cli/commands/tasks.mjs +13 -0
- package/hub/team/cli/help.mjs +42 -0
- package/hub/team/cli/index.mjs +41 -0
- package/hub/team/cli/manifest.mjs +29 -0
- package/hub/team/cli/render.mjs +30 -0
- package/hub/team/cli/services/attach-fallback.mjs +54 -0
- package/hub/team/cli/services/hub-client.mjs +227 -0
- package/hub/team/cli/services/member-selector.mjs +30 -0
- package/hub/team/cli/services/native-control.mjs +117 -0
- package/hub/team/cli/services/runtime-mode.mjs +62 -0
- package/hub/team/cli/services/state-store.mjs +48 -0
- package/hub/team/cli/services/task-model.mjs +30 -0
- package/hub/team/conductor-mesh-bridge.mjs +121 -0
- package/hub/team/conductor.mjs +671 -0
- package/hub/team/dashboard-anchor.mjs +14 -0
- package/hub/team/dashboard-layout.mjs +33 -0
- package/hub/team/dashboard-open.mjs +153 -0
- package/hub/team/dashboard.mjs +274 -0
- package/hub/team/event-log.mjs +76 -0
- package/hub/team/handoff.mjs +303 -0
- package/hub/team/headless.mjs +1156 -0
- package/hub/team/health-probe.mjs +272 -0
- package/hub/team/launcher-template.mjs +95 -0
- package/hub/team/lead-control.mjs +104 -0
- package/hub/team/native-supervisor.mjs +392 -0
- package/hub/team/native.mjs +649 -0
- package/hub/team/nativeProxy.mjs +688 -0
- package/hub/team/notify.mjs +293 -0
- package/hub/team/orchestrator.mjs +161 -0
- package/hub/team/pane.mjs +153 -0
- package/hub/team/process-cleanup.mjs +342 -0
- package/hub/team/psmux.mjs +1354 -0
- package/hub/team/remote-probe.mjs +276 -0
- package/hub/team/remote-session.mjs +299 -0
- package/hub/team/remote-watcher.mjs +478 -0
- package/hub/team/routing.mjs +223 -0
- package/hub/team/session-sync.mjs +169 -0
- package/hub/team/session.mjs +611 -0
- package/hub/team/shared.mjs +13 -0
- package/hub/team/staleState.mjs +361 -0
- package/hub/team/swarm-hypervisor.mjs +589 -0
- package/hub/team/swarm-locks.mjs +204 -0
- package/hub/team/swarm-planner.mjs +260 -0
- package/hub/team/swarm-reconciler.mjs +137 -0
- package/hub/team/tui-lite.mjs +380 -0
- package/hub/team/tui-remote-adapter.mjs +393 -0
- package/hub/team/tui-viewer.mjs +463 -0
- package/hub/team/tui.mjs +1449 -0
- package/hub/team/worktree-lifecycle.mjs +193 -0
- package/hub/team/wt-manager.mjs +407 -0
- package/hub/team/wt-templates.json +43 -0
- package/hub/team-bridge.mjs +27 -0
- package/hub/token-mode.mjs +224 -0
- package/hub/tools.mjs +636 -0
- package/hub/tray.mjs +376 -0
- package/hub/workers/claude-worker.mjs +475 -0
- package/hub/workers/codex-mcp.mjs +507 -0
- package/hub/workers/delegator-mcp.mjs +1076 -0
- package/hub/workers/factory.mjs +21 -0
- package/hub/workers/gemini-worker.mjs +374 -0
- package/hub/workers/interface.mjs +52 -0
- package/hub/workers/worker-utils.mjs +104 -0
- package/hud/colors.mjs +88 -0
- package/hud/constants.mjs +88 -0
- package/hud/context-monitor.mjs +403 -0
- package/hud/hud-qos-status.mjs +210 -0
- package/hud/providers/claude.mjs +314 -0
- package/hud/providers/codex.mjs +151 -0
- package/hud/providers/gemini.mjs +320 -0
- package/hud/renderers.mjs +442 -0
- package/hud/terminal.mjs +140 -0
- package/hud/utils.mjs +313 -0
- package/mesh/index.mjs +63 -0
- package/mesh/mesh-budget.mjs +128 -0
- package/mesh/mesh-heartbeat.mjs +100 -0
- package/mesh/mesh-protocol.mjs +96 -0
- package/mesh/mesh-queue.mjs +165 -0
- package/mesh/mesh-registry.mjs +78 -0
- package/mesh/mesh-router.mjs +76 -0
- package/package.json +8 -1
- package/references/hosts.json +33 -0
- package/scripts/__tests__/gen-skill-docs.test.mjs +87 -0
- package/scripts/__tests__/keyword-detector.test.mjs +234 -0
- package/scripts/__tests__/mcp-guard-engine.test.mjs +118 -0
- package/scripts/__tests__/remote-spawn-transfer.test.mjs +117 -0
- package/scripts/__tests__/remote-spawn.test.mjs +92 -0
- package/scripts/__tests__/skill-template.test.mjs +193 -0
- package/scripts/__tests__/smoke.test.mjs +34 -0
- package/scripts/cache-buildup.mjs +30 -0
- package/scripts/cache-doctor.mjs +149 -0
- package/scripts/cache-warmup.mjs +557 -0
- package/scripts/claudemd-sync.mjs +148 -0
- package/scripts/cli-route.sh +3 -0
- package/scripts/completions/tfx.bash +47 -0
- package/scripts/completions/tfx.fish +44 -0
- package/scripts/completions/tfx.zsh +83 -0
- package/scripts/cross-review-gate.mjs +126 -0
- package/scripts/cross-review-tracker.mjs +238 -0
- package/scripts/gen-skill-docs.mjs +111 -0
- package/scripts/headless-guard-fast.sh +21 -0
- package/scripts/headless-guard.mjs +360 -0
- package/scripts/hub-ensure.mjs +120 -0
- package/scripts/keyword-detector.mjs +272 -0
- package/scripts/keyword-rules-expander.mjs +521 -0
- package/scripts/lib/claudemd-scanner.mjs +218 -0
- package/scripts/lib/context.mjs +67 -0
- package/scripts/lib/cross-review-utils.mjs +51 -0
- package/scripts/lib/env-probe.mjs +241 -0
- package/scripts/lib/gemini-profiles.mjs +85 -0
- package/scripts/lib/handoff.mjs +171 -0
- package/scripts/lib/hook-utils.mjs +14 -0
- package/scripts/lib/keyword-rules.mjs +166 -0
- package/scripts/lib/logger.mjs +105 -0
- package/scripts/lib/mcp-filter.mjs +739 -0
- package/scripts/lib/mcp-guard-engine.mjs +954 -0
- package/scripts/lib/mcp-manifest.mjs +79 -0
- package/scripts/lib/mcp-server-catalog.mjs +118 -0
- package/scripts/lib/psmux-info.mjs +119 -0
- package/scripts/lib/remote-spawn-transfer.mjs +196 -0
- package/scripts/lib/skill-template.mjs +326 -0
- package/scripts/mcp-check.mjs +237 -0
- package/scripts/mcp-cleanup.ps1 +17 -0
- package/scripts/mcp-gateway-config.mjs +207 -0
- package/scripts/mcp-gateway-ensure.mjs +85 -0
- package/scripts/mcp-gateway-integration-test.mjs +228 -0
- package/scripts/mcp-gateway-start.mjs +226 -0
- package/scripts/mcp-gateway-start.ps1 +141 -0
- package/scripts/mcp-gateway-verify.mjs +77 -0
- package/scripts/mcp-safety-guard.mjs +44 -0
- package/scripts/notion-read.mjs +556 -0
- package/scripts/pack.mjs +295 -0
- package/scripts/preflight-cache.mjs +69 -0
- package/scripts/preinstall.mjs +96 -0
- package/scripts/remote-spawn.mjs +1376 -0
- package/scripts/run.cjs +79 -0
- package/scripts/session-spawn-helper.mjs +185 -0
- package/scripts/setup.mjs +1178 -0
- package/scripts/test-lock.mjs +71 -0
- package/scripts/test-tfx-route-no-claude-native.mjs +57 -0
- package/scripts/tfx-batch-stats.mjs +96 -0
- package/scripts/tfx-gate-activate.mjs +89 -0
- package/scripts/tfx-route-post.mjs +505 -0
- package/scripts/tfx-route-worker.mjs +223 -0
- package/scripts/tfx-route.sh +2014 -0
- package/scripts/tmp-cleanup.mjs +103 -0
- package/scripts/token-snapshot.mjs +575 -0
- package/skills/tfx-auto/SKILL.md.tmpl +2 -3
- package/skills/tfx-autoresearch/SKILL.md +6 -5
- package/skills/tfx-codex/SKILL.md.tmpl +2 -3
- package/skills/tfx-codex-swarm-workspace/iteration-1/benchmark.json +33 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/eval_metadata.json +42 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/grading.json +11 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/analysis.md +87 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/classification.md +35 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/commands.sh +275 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/routing.md +56 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/timing.json +5 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/grading.json +11 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/analysis.md +92 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/classification.md +71 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/commands.sh +264 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/routing.md +113 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/timing.json +5 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/eval_metadata.json +32 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/grading.json +9 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/analysis.md +96 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/classification.md +38 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/commands.sh +151 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/routing.md +51 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/timing.json +5 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/grading.json +9 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/analysis.md +127 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/classification.md +57 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/commands.sh +129 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/routing.md +84 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/timing.json +5 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/eval_metadata.json +27 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/grading.json +8 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/analysis.md +98 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/classification.md +65 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/commands.sh +123 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/routing.md +66 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/timing.json +5 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/grading.json +8 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/analysis.md +88 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/classification.md +40 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/commands.sh +130 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/routing.md +61 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/timing.json +5 -0
- package/skills/tfx-deep-interview/SKILL.md +1 -2
- package/skills/tfx-plan/SKILL.md.tmpl +2 -3
- package/skills/tfx-psmux-rules/SKILL.md +11 -2
- package/skills/tfx-qa/SKILL.md.tmpl +2 -3
- package/skills/tfx-remote-spawn/SKILL.md +8 -11
- package/skills/tfx-research/SKILL.md.tmpl +2 -3
- package/skills/tfx-review/SKILL.md.tmpl +2 -3
- package/skills/tfx-workspace/async-tests/run-tests.sh +203 -0
- package/skills/tfx-workspace/evals/evals.json +79 -0
- package/skills/tfx-workspace/iteration-1/benchmark.json +162 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/eval_metadata.json +11 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/grading.json +9 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/outputs/analysis.md +154 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/grading.json +9 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/outputs/analysis.md +126 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/eval_metadata.json +11 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/grading.json +9 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/outputs/analysis.md +119 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/grading.json +9 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/outputs/analysis.md +115 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/eval_metadata.json +10 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/grading.json +8 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/outputs/analysis.md +86 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/grading.json +8 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/outputs/analysis.md +81 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/eval_metadata.json +12 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/outputs/analysis.md +316 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/outputs/analysis.md +352 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/review.html +1325 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/eval_metadata.json +12 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/outputs/analysis.md +97 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/outputs/analysis.md +94 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/eval_metadata.json +12 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/outputs/analysis.md +209 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/outputs/analysis.md +193 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-2/benchmark.json +62 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/eval_metadata.json +13 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/grading.json +11 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/outputs/analysis.md +382 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/grading.json +11 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/outputs/analysis.md +333 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-2/review.html +1325 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-auto/SKILL.md +217 -0
- package/skills/{tfx-auto-codex/SKILL.md.tmpl → tfx-workspace/skill-snapshot/tfx-auto-codex/SKILL.md} +3 -31
- package/skills/tfx-workspace/skill-snapshot/tfx-codex/SKILL.md +65 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-doctor/SKILL.md +94 -0
- package/skills/{tfx-gemini/SKILL.md.tmpl → tfx-workspace/skill-snapshot/tfx-gemini/SKILL.md} +6 -14
- package/skills/tfx-workspace/skill-snapshot/tfx-hub/SKILL.md +133 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-multi/SKILL.md +426 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-setup/SKILL.md +101 -0
- package/skills/merge-worktree/SKILL.md.tmpl +0 -144
- package/skills/shared/arguments-processing.md +0 -2
- package/skills/shared/mandatory-rules.md +0 -6
- package/skills/shared/telemetry-segment.md +0 -6
- package/skills/star-prompt/SKILL.md.tmpl +0 -122
- package/skills/tfx-analysis/SKILL.md.tmpl +0 -106
- package/skills/tfx-analysis/skill.json +0 -11
- package/skills/tfx-auto/skill.json +0 -26
- package/skills/tfx-auto-codex/skill.json +0 -8
- package/skills/tfx-autopilot/SKILL.md.tmpl +0 -115
- package/skills/tfx-autopilot/skill.json +0 -10
- package/skills/tfx-autoresearch/SKILL.md.tmpl +0 -135
- package/skills/tfx-autoresearch/skill.json +0 -14
- package/skills/tfx-autoroute/SKILL.md.tmpl +0 -188
- package/skills/tfx-autoroute/skill.json +0 -12
- package/skills/tfx-codex/skill.json +0 -8
- package/skills/tfx-codex-swarm/SKILL.md.tmpl +0 -16
- package/skills/tfx-codex-swarm/skill.json +0 -5
- package/skills/tfx-consensus/SKILL.md.tmpl +0 -145
- package/skills/tfx-consensus/skill.json +0 -8
- package/skills/tfx-debate/SKILL.md.tmpl +0 -191
- package/skills/tfx-debate/skill.json +0 -12
- package/skills/tfx-deep-analysis/SKILL.md.tmpl +0 -227
- package/skills/tfx-deep-analysis/skill.json +0 -10
- package/skills/tfx-deep-interview/SKILL.md.tmpl +0 -203
- package/skills/tfx-deep-interview/skill.json +0 -12
- package/skills/tfx-deep-plan/SKILL.md.tmpl +0 -281
- package/skills/tfx-deep-plan/skill.json +0 -13
- package/skills/tfx-deep-qa/SKILL.md.tmpl +0 -164
- package/skills/tfx-deep-qa/skill.json +0 -11
- package/skills/tfx-deep-research/SKILL.md.tmpl +0 -216
- package/skills/tfx-deep-research/skill.json +0 -14
- package/skills/tfx-deep-review/SKILL.md.tmpl +0 -178
- package/skills/tfx-deep-review/skill.json +0 -12
- package/skills/tfx-doctor/SKILL.md.tmpl +0 -172
- package/skills/tfx-doctor/skill.json +0 -8
- package/skills/tfx-find/skill.json +0 -12
- package/skills/tfx-forge/SKILL.md.tmpl +0 -187
- package/skills/tfx-forge/skill.json +0 -12
- package/skills/tfx-fullcycle/SKILL.md.tmpl +0 -285
- package/skills/tfx-fullcycle/skill.json +0 -11
- package/skills/tfx-gemini/skill.json +0 -8
- package/skills/tfx-hooks/SKILL.md.tmpl +0 -216
- package/skills/tfx-hooks/skill.json +0 -8
- package/skills/tfx-hub/SKILL.md.tmpl +0 -212
- package/skills/tfx-hub/skill.json +0 -8
- package/skills/tfx-index/skill.json +0 -11
- package/skills/tfx-interview/SKILL.md.tmpl +0 -284
- package/skills/tfx-interview/skill.json +0 -12
- package/skills/tfx-multi/SKILL.md.tmpl +0 -183
- package/skills/tfx-multi/skill.json +0 -8
- package/skills/tfx-panel/SKILL.md.tmpl +0 -188
- package/skills/tfx-panel/skill.json +0 -12
- package/skills/tfx-persist/SKILL.md.tmpl +0 -269
- package/skills/tfx-persist/skill.json +0 -12
- package/skills/tfx-plan/skill.json +0 -11
- package/skills/tfx-profile/SKILL.md.tmpl +0 -239
- package/skills/tfx-profile/skill.json +0 -8
- package/skills/tfx-prune/SKILL.md.tmpl +0 -199
- package/skills/tfx-prune/skill.json +0 -12
- package/skills/tfx-psmux-rules/SKILL.md.tmpl +0 -317
- package/skills/tfx-psmux-rules/skill.json +0 -8
- package/skills/tfx-qa/skill.json +0 -11
- package/skills/tfx-ralph/SKILL.md.tmpl +0 -27
- package/skills/tfx-ralph/skill.json +0 -8
- package/skills/tfx-remote-setup/SKILL.md.tmpl +0 -576
- package/skills/tfx-remote-setup/skill.json +0 -8
- package/skills/tfx-remote-spawn/SKILL.md.tmpl +0 -263
- package/skills/tfx-remote-spawn/skill.json +0 -9
- package/skills/tfx-research/skill.json +0 -13
- package/skills/tfx-review/skill.json +0 -11
- package/skills/tfx-setup/SKILL.md.tmpl +0 -380
- package/skills/tfx-setup/skill.json +0 -8
- package/skills/tfx-swarm/SKILL.md.tmpl +0 -154
- package/skills/tfx-swarm/skill.json +0 -5
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# commands.sh — Without-skill agent's LIKELY generated commands
|
|
3
|
+
# Generated: 2026-03-30
|
|
4
|
+
# Mode: no skill guidance — agent improvises from project knowledge
|
|
5
|
+
#
|
|
6
|
+
# NOTE: These commands are NOT meant to be executed.
|
|
7
|
+
# They represent what an agent WITHOUT the tfx-codex-swarm skill
|
|
8
|
+
# would LIKELY generate when asked:
|
|
9
|
+
# "이 PRD 3개 파일을 각각 독립적으로 코덱스한테 맡겨서 병렬로 구현해줘"
|
|
10
|
+
#
|
|
11
|
+
# Eval assertions to satisfy:
|
|
12
|
+
# - 3-paths-recognized: auth-refactor, api-v2, cache-layer all present
|
|
13
|
+
# - worktree-isolation: git worktree add x3
|
|
14
|
+
# - psmux-and-wt: psmux + wt commands present
|
|
15
|
+
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
PROJECT_ROOT="C:/Users/SSAFY/Desktop/Projects/cli/triflux"
|
|
18
|
+
cd "$PROJECT_ROOT"
|
|
19
|
+
|
|
20
|
+
# ============================================================
|
|
21
|
+
# PHASE 1: Git Worktree Creation (3 independent worktrees)
|
|
22
|
+
# ============================================================
|
|
23
|
+
# Without skill: agent likely uses a simpler naming scheme
|
|
24
|
+
# Skill would use: .codex-swarm/wt-{slug}
|
|
25
|
+
# Without skill: agent may use project-root-level worktrees or a flat dir
|
|
26
|
+
|
|
27
|
+
git worktree add .codex-swarm/wt-auth-refactor -b codex/auth-refactor 2>/dev/null || \
|
|
28
|
+
git worktree add .codex-swarm/wt-auth-refactor codex/auth-refactor
|
|
29
|
+
|
|
30
|
+
git worktree add .codex-swarm/wt-api-v2 -b codex/api-v2 2>/dev/null || \
|
|
31
|
+
git worktree add .codex-swarm/wt-api-v2 codex/api-v2
|
|
32
|
+
|
|
33
|
+
git worktree add .codex-swarm/wt-cache-layer -b codex/cache-layer 2>/dev/null || \
|
|
34
|
+
git worktree add .codex-swarm/wt-cache-layer codex/cache-layer
|
|
35
|
+
|
|
36
|
+
# ============================================================
|
|
37
|
+
# PHASE 2: Codex Session Spawn
|
|
38
|
+
# ============================================================
|
|
39
|
+
# Critical difference: WITHOUT skill, the agent likely does ONE of:
|
|
40
|
+
#
|
|
41
|
+
# (A) Direct codex CLI calls in background <-- most probable
|
|
42
|
+
# (B) tfx-route.sh --async <-- if agent discovers it
|
|
43
|
+
# (C) psmux sessions + codex <-- if agent knows psmux
|
|
44
|
+
#
|
|
45
|
+
# We show all three scenarios below.
|
|
46
|
+
|
|
47
|
+
# ── Scenario A: Direct codex (most likely without skill) ──────────
|
|
48
|
+
# Agent just runs 3 codex processes in background.
|
|
49
|
+
# No psmux, no WT integration, no profile routing.
|
|
50
|
+
|
|
51
|
+
codex --full-auto \
|
|
52
|
+
--dangerously-bypass-approvals-and-sandbox \
|
|
53
|
+
-m "docs/prd/auth-refactor.md 의 PRD를 읽고 구현해줘" \
|
|
54
|
+
&
|
|
55
|
+
|
|
56
|
+
codex --full-auto \
|
|
57
|
+
--dangerously-bypass-approvals-and-sandbox \
|
|
58
|
+
-m "docs/prd/api-v2.md 의 PRD를 읽고 구현해줘" \
|
|
59
|
+
&
|
|
60
|
+
|
|
61
|
+
codex --full-auto \
|
|
62
|
+
--dangerously-bypass-approvals-and-sandbox \
|
|
63
|
+
-m "docs/prd/cache-layer.md 의 PRD를 읽고 구현해줘" \
|
|
64
|
+
&
|
|
65
|
+
|
|
66
|
+
wait
|
|
67
|
+
|
|
68
|
+
# ── Scenario B: tfx-route.sh --async (if agent discovers it) ─────
|
|
69
|
+
# Better: uses project's routing infra. Gets profile routing for free.
|
|
70
|
+
# But still no psmux/WT integration.
|
|
71
|
+
|
|
72
|
+
bash scripts/tfx-route.sh --async executor \
|
|
73
|
+
"docs/prd/auth-refactor.md PRD를 읽고 구현해줘" implement &
|
|
74
|
+
AUTH_JOB=$!
|
|
75
|
+
|
|
76
|
+
bash scripts/tfx-route.sh --async executor \
|
|
77
|
+
"docs/prd/api-v2.md PRD를 읽고 구현해줘" implement &
|
|
78
|
+
API_JOB=$!
|
|
79
|
+
|
|
80
|
+
bash scripts/tfx-route.sh --async executor \
|
|
81
|
+
"docs/prd/cache-layer.md PRD를 읽고 구현해줘" implement &
|
|
82
|
+
CACHE_JOB=$!
|
|
83
|
+
|
|
84
|
+
wait
|
|
85
|
+
|
|
86
|
+
# ── Scenario C: psmux + codex (optimistic — matches skill) ────────
|
|
87
|
+
# Agent knows about psmux and creates proper sessions.
|
|
88
|
+
# This is the closest to skill-guided behavior but lacks:
|
|
89
|
+
# - Profile differentiation per task
|
|
90
|
+
# - OMX skill mapping ($plan -> $autopilot)
|
|
91
|
+
# - Size-based routing
|
|
92
|
+
# - Prompt file generation
|
|
93
|
+
|
|
94
|
+
# Session creation
|
|
95
|
+
psmux new-session --name "codex-auth-refactor" \
|
|
96
|
+
--dir "$PROJECT_ROOT/.codex-swarm/wt-auth-refactor"
|
|
97
|
+
|
|
98
|
+
psmux new-session --name "codex-api-v2" \
|
|
99
|
+
--dir "$PROJECT_ROOT/.codex-swarm/wt-api-v2"
|
|
100
|
+
|
|
101
|
+
psmux new-session --name "codex-cache-layer" \
|
|
102
|
+
--dir "$PROJECT_ROOT/.codex-swarm/wt-cache-layer"
|
|
103
|
+
|
|
104
|
+
# Send codex commands (no profile flags — flat routing)
|
|
105
|
+
psmux send-keys --target "codex-auth-refactor:0" \
|
|
106
|
+
"codex --full-auto --dangerously-bypass-approvals-and-sandbox \"docs/prd/auth-refactor.md PRD를 읽고 리팩터링 구현해줘\"" Enter
|
|
107
|
+
|
|
108
|
+
psmux send-keys --target "codex-api-v2:0" \
|
|
109
|
+
"codex --full-auto --dangerously-bypass-approvals-and-sandbox \"docs/prd/api-v2.md PRD를 읽고 API v2 구현해줘\"" Enter
|
|
110
|
+
|
|
111
|
+
psmux send-keys --target "codex-cache-layer:0" \
|
|
112
|
+
"codex --full-auto --dangerously-bypass-approvals-and-sandbox \"docs/prd/cache-layer.md PRD를 읽고 캐시 레이어 구현해줘\"" Enter
|
|
113
|
+
|
|
114
|
+
# WT tab attach (if agent knows psmux attach)
|
|
115
|
+
psmux attach --session "codex-auth-refactor" --wt-new-window
|
|
116
|
+
psmux attach --session "codex-api-v2" --wt-tab
|
|
117
|
+
psmux attach --session "codex-cache-layer" --wt-tab
|
|
118
|
+
|
|
119
|
+
# ── WT fallback (if agent uses wt.exe directly) ──────────────────
|
|
120
|
+
BASH_EXE='C:\Program Files\Git\bin\bash.exe'
|
|
121
|
+
wt.exe -w new \
|
|
122
|
+
--title "auth-refactor" -d "$PROJECT_ROOT/.codex-swarm/wt-auth-refactor" \
|
|
123
|
+
"$BASH_EXE" -c "psmux attach codex-auth-refactor" \; \
|
|
124
|
+
new-tab \
|
|
125
|
+
--title "api-v2" -d "$PROJECT_ROOT/.codex-swarm/wt-api-v2" \
|
|
126
|
+
"$BASH_EXE" -c "psmux attach codex-api-v2" \; \
|
|
127
|
+
new-tab \
|
|
128
|
+
--title "cache-layer" -d "$PROJECT_ROOT/.codex-swarm/wt-cache-layer" \
|
|
129
|
+
"$BASH_EXE" -c "psmux attach codex-cache-layer"
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Profile Routing (without skill guidance)
|
|
2
|
+
|
|
3
|
+
> Generated: 2026-03-30
|
|
4
|
+
> Mode: **no skill** — agent must discover routing from tfx-route.sh infrastructure
|
|
5
|
+
|
|
6
|
+
## What the Agent Knows
|
|
7
|
+
|
|
8
|
+
Without the codex-swarm skill, the agent has no routing table (Step 4 of SKILL.md).
|
|
9
|
+
It must derive Codex profiles from one of:
|
|
10
|
+
|
|
11
|
+
1. **tfx-route.sh** — the project's CLI router (if the agent discovers it)
|
|
12
|
+
2. **Raw codex CLI flags** — if the agent knows Codex CLI syntax
|
|
13
|
+
3. **No routing at all** — just runs `codex` with defaults
|
|
14
|
+
|
|
15
|
+
## Likely Agent Behavior: Scenario Analysis
|
|
16
|
+
|
|
17
|
+
### Scenario A: Agent discovers tfx-route.sh (best case)
|
|
18
|
+
|
|
19
|
+
The agent finds `scripts/tfx-route.sh` and sees the `route_agent()` function with profile mappings.
|
|
20
|
+
It would extract:
|
|
21
|
+
|
|
22
|
+
| Agent Type | Profile | CLI Flags |
|
|
23
|
+
|-----------|---------|-----------|
|
|
24
|
+
| executor | `codex53_high` | `exec --profile codex53_high --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check` |
|
|
25
|
+
| executor (bg) | `codex53_high` | same, `RUN_MODE="bg"` |
|
|
26
|
+
| scientist | `gpt54_high` | `exec --profile gpt54_high ...` |
|
|
27
|
+
|
|
28
|
+
The agent might map all 3 PRDs to `executor` type (since user said "구현") and use `codex53_high`:
|
|
29
|
+
|
|
30
|
+
| # | PRD File | Agent Type | Profile | Timeout |
|
|
31
|
+
|---|----------|-----------|---------|---------|
|
|
32
|
+
| 1 | auth-refactor.md | executor | codex53_high | 1080s |
|
|
33
|
+
| 2 | api-v2.md | executor | codex53_high | 1080s |
|
|
34
|
+
| 3 | cache-layer.md | executor | codex53_high | 1080s |
|
|
35
|
+
|
|
36
|
+
**Problem**: No size-based differentiation. All 3 get identical profiles regardless of complexity.
|
|
37
|
+
|
|
38
|
+
### Scenario B: Agent uses codex CLI directly (likely case)
|
|
39
|
+
|
|
40
|
+
The agent skips tfx-route.sh entirely and invokes `codex` with `--full-auto`:
|
|
41
|
+
|
|
42
|
+
| # | PRD File | Command | Profile |
|
|
43
|
+
|---|----------|---------|---------|
|
|
44
|
+
| 1 | auth-refactor.md | `codex --full-auto "..."` | default (no profile) |
|
|
45
|
+
| 2 | api-v2.md | `codex --full-auto "..."` | default (no profile) |
|
|
46
|
+
| 3 | cache-layer.md | `codex --full-auto "..."` | default (no profile) |
|
|
47
|
+
|
|
48
|
+
**Problem**: No profile routing at all. All tasks use Codex defaults.
|
|
49
|
+
|
|
50
|
+
### Scenario C: Agent uses tfx-route.sh --async (optimistic case)
|
|
51
|
+
|
|
52
|
+
If the agent discovers the `--async` flag in tfx-route.sh:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
tfx-route.sh --async executor "PRD auth-refactor 구현" implement
|
|
56
|
+
tfx-route.sh --async executor "PRD api-v2 구현" implement
|
|
57
|
+
tfx-route.sh --async executor "PRD cache-layer 구현" implement
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
This gets profile routing for free via tfx-route.sh, but still no per-task size differentiation.
|
|
61
|
+
|
|
62
|
+
## Comparison: Skill-Guided Routing
|
|
63
|
+
|
|
64
|
+
The skill's Step 4 would produce differentiated routing:
|
|
65
|
+
|
|
66
|
+
| # | PRD File | Size | Type | Profile (with skill) | Profile (without skill) |
|
|
67
|
+
|---|----------|------|------|---------------------|------------------------|
|
|
68
|
+
| 1 | auth-refactor.md | L (est.) | refactor | `codex53_high` | `codex53_high` or default |
|
|
69
|
+
| 2 | api-v2.md | XL (est.) | implement | `codex53_xhigh` | `codex53_high` or default |
|
|
70
|
+
| 3 | cache-layer.md | M (est.) | implement | `codex53_med` | `codex53_high` or default |
|
|
71
|
+
|
|
72
|
+
Key differences:
|
|
73
|
+
- **With skill**: Size-based differentiation (XL/L/M/S) drives profile selection
|
|
74
|
+
- **Without skill**: Flat routing -- all tasks get the same profile
|
|
75
|
+
- **With skill**: Type-aware routing (refactor vs implement use different profile ladders)
|
|
76
|
+
- **Without skill**: All treated as "executor" type uniformly
|
|
77
|
+
|
|
78
|
+
## Missing Without Skill
|
|
79
|
+
|
|
80
|
+
1. **No PRD line-count / file-impact analysis** (Step 4-1 of SKILL.md)
|
|
81
|
+
2. **No routing table** (Step 4-2) — the 4x4 type-vs-size matrix is unknown
|
|
82
|
+
3. **No profile flag mapping** — `codex53_xhigh` -> specific CLI flags
|
|
83
|
+
4. **No AskUserQuestion for override** — user cannot adjust routing interactively
|
|
84
|
+
5. **No cost optimization** — small tasks waste xhigh tokens, large tasks may undershoot
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"eval_id": 2,
|
|
3
|
+
"eval_name": "selective-spawn-with-override",
|
|
4
|
+
"prompt": "issue 24하고 28번 PRD만 코덱스 스폰해줘. 둘 다 xhigh로 세팅하고 ralph로 끝까지 돌려",
|
|
5
|
+
"assertions": [
|
|
6
|
+
{
|
|
7
|
+
"name": "only-2-selected",
|
|
8
|
+
"description": "issue 24, 28만 선택 (나머지 제외)",
|
|
9
|
+
"check": "commands.sh에 issue-24, issue-28만 존재. 25,26,27,29,30 없음"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "xhigh-override",
|
|
13
|
+
"description": "프로파일이 xhigh로 오버라이드",
|
|
14
|
+
"check": "routing.md에 codex53_xhigh 적용, commands.sh에 model_reasoning_effort=\"xhigh\""
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"name": "ralph-skill",
|
|
18
|
+
"description": "OMX 스킬이 $ralph로 설정",
|
|
19
|
+
"check": "프롬프트 또는 commands에서 $ralph 참조"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "worktree-2-only",
|
|
23
|
+
"description": "worktree 2개만 생성",
|
|
24
|
+
"check": "commands.sh에 git worktree add가 정확히 2개"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
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개만"}
|
|
7
|
+
]
|
|
8
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# tfx-codex-swarm Execution Analysis
|
|
2
|
+
|
|
3
|
+
> Generated by: tfx-codex-swarm skill
|
|
4
|
+
> Date: 2026-03-30
|
|
5
|
+
> Request: "issue 24하고 28번 PRD만 코덱스 스폰해줘. 둘 다 xhigh로 세팅하고 ralph로 끝까지 돌려"
|
|
6
|
+
|
|
7
|
+
## Request Parsing
|
|
8
|
+
|
|
9
|
+
| Element | Parsed Value |
|
|
10
|
+
|---------|-------------|
|
|
11
|
+
| Target PRDs | issue #24, issue #28 (explicit selection) |
|
|
12
|
+
| Profile override | `xhigh` -> `codex53_xhigh` for both |
|
|
13
|
+
| OMX skill override | `$ralph` for both ("끝까지 돌려" = run to completion) |
|
|
14
|
+
| Execution mode | `--full-auto` (default) |
|
|
15
|
+
|
|
16
|
+
## Skill Workflow Trace
|
|
17
|
+
|
|
18
|
+
### Step 1: Scan
|
|
19
|
+
- Scanned `.omx/plans/*.md` -- found 7 PRDs (issues 24-30)
|
|
20
|
+
- User specified issues 24 and 28 only -- 5 PRDs skipped
|
|
21
|
+
|
|
22
|
+
### Step 2: Selection
|
|
23
|
+
- User explicitly named issue 24 and 28 -- no AskUserQuestion needed
|
|
24
|
+
- Bypassed interactive selection entirely
|
|
25
|
+
|
|
26
|
+
### Step 3: Classification
|
|
27
|
+
- Both PRDs analyzed for content keywords
|
|
28
|
+
- Issue #24: keywords "추가", "변경" -> **implement**
|
|
29
|
+
- Issue #28: keywords "fix", "변경", "추가" -> **implement**
|
|
30
|
+
- Auto skill would be `$plan` -> `$autopilot` for both
|
|
31
|
+
- **User override: `$ralph`** -- takes precedence, no AskUserQuestion
|
|
32
|
+
|
|
33
|
+
### Step 4: Profile Routing
|
|
34
|
+
- Issue #24: 73 lines, 4 files, 0 high-cost keywords -> **L (standard)**
|
|
35
|
+
- Issue #28: 68 lines, 3 files, 0 high-cost keywords -> **L (standard)**
|
|
36
|
+
- Auto profile for implement/L = `codex53_high`
|
|
37
|
+
- **User override: `codex53_xhigh`** -- takes precedence, no AskUserQuestion
|
|
38
|
+
|
|
39
|
+
### Step 5: Worktree
|
|
40
|
+
- 2 worktrees to create: `.codex-swarm/wt-issue-24`, `.codex-swarm/wt-issue-28`
|
|
41
|
+
- Branch naming: `codex/issue-24`, `codex/issue-28`
|
|
42
|
+
|
|
43
|
+
### Step 6: Prompts
|
|
44
|
+
- 2 prompt files generated in `.codex-swarm/prompts/`
|
|
45
|
+
- Each prompt includes: PRD path reference, `$ralph` skill instruction, verification steps
|
|
46
|
+
- PRD files copied into respective worktrees
|
|
47
|
+
|
|
48
|
+
### Step 7: psmux + Codex
|
|
49
|
+
- 2 psmux sessions: `codex-swarm-24`, `codex-swarm-28`
|
|
50
|
+
- Codex flags: `-c 'model="gpt-5.3-codex"' -c 'model_reasoning_effort="xhigh"' --full-auto`
|
|
51
|
+
- Launch via `psmux send-keys` for interactive mode (OMX skill requires interactive)
|
|
52
|
+
|
|
53
|
+
### Step 8: WT Attach
|
|
54
|
+
- First session opens new WT window
|
|
55
|
+
- Second session attaches as tab in same window
|
|
56
|
+
- Fallback: direct `wt.exe` command included
|
|
57
|
+
|
|
58
|
+
## Override Impact Analysis
|
|
59
|
+
|
|
60
|
+
### Profile override: codex53_high -> codex53_xhigh
|
|
61
|
+
|
|
62
|
+
| Metric | codex53_high | codex53_xhigh | Delta |
|
|
63
|
+
|--------|-------------|---------------|-------|
|
|
64
|
+
| Model | gpt-5.3-codex | gpt-5.3-codex | same |
|
|
65
|
+
| Reasoning effort | high | xhigh | +1 tier |
|
|
66
|
+
| Expected token cost | ~1x | ~1.5-2x | higher |
|
|
67
|
+
| Expected quality | standard | maximum | better for complex tasks |
|
|
68
|
+
|
|
69
|
+
The override is reasonable: both PRDs involve non-trivial implementation work across multiple files with edge-case handling (path normalization, cross-shell quoting for #24; guard decision matrix testing for #28). The `xhigh` reasoning effort gives the model more room to handle these nuances correctly.
|
|
70
|
+
|
|
71
|
+
### Skill override: $autopilot -> $ralph
|
|
72
|
+
|
|
73
|
+
| Aspect | $autopilot | $ralph |
|
|
74
|
+
|--------|-----------|--------|
|
|
75
|
+
| Planning | yes | yes |
|
|
76
|
+
| Execution | single pass | iterative until completion |
|
|
77
|
+
| Verification | basic | full loop |
|
|
78
|
+
| Recovery | manual | automatic retry |
|
|
79
|
+
|
|
80
|
+
The override is well-suited: `$ralph` ("끝까지 돌려") ensures each session runs its implementation to completion with verification loops, rather than stopping after a single autopilot pass. For issues that have clear acceptance criteria (both PRDs do), this maximizes the probability of a fully-resolved branch.
|
|
81
|
+
|
|
82
|
+
## Resource Summary
|
|
83
|
+
|
|
84
|
+
| Resource | Count |
|
|
85
|
+
|----------|-------|
|
|
86
|
+
| Worktrees | 2 |
|
|
87
|
+
| psmux sessions | 2 |
|
|
88
|
+
| WT tabs | 2 (1 window) |
|
|
89
|
+
| Codex instances | 2 (parallel) |
|
|
90
|
+
| Profile | codex53_xhigh x2 |
|
|
91
|
+
| Branches | `codex/issue-24`, `codex/issue-28` |
|
|
92
|
+
|
|
93
|
+
## Post-Spawn Actions (Step 10)
|
|
94
|
+
|
|
95
|
+
After both sessions complete, the user can:
|
|
96
|
+
1. **Status check**: `psmux capture-pane --session "codex-swarm-{24,28}" --lines 5`
|
|
97
|
+
2. **Merge results**: `git merge codex/issue-24 && git merge codex/issue-28`
|
|
98
|
+
3. **Cleanup**: `psmux kill-session --name "codex-swarm-*" && git worktree prune && rm -rf .codex-swarm/`
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# tfx-codex-swarm Classification Report
|
|
2
|
+
|
|
3
|
+
> Generated by: tfx-codex-swarm skill (Step 3)
|
|
4
|
+
> Date: 2026-03-30
|
|
5
|
+
> Mode: Selective spawn (user-specified issues 24, 28)
|
|
6
|
+
> User overrides: OMX skill = $ralph (both), Profile = xhigh (both)
|
|
7
|
+
|
|
8
|
+
## Step 1: Scan Results
|
|
9
|
+
|
|
10
|
+
Scan path: `.omx/plans/*.md`
|
|
11
|
+
|
|
12
|
+
| # | PRD File | Found |
|
|
13
|
+
|---|----------|-------|
|
|
14
|
+
| 24 | `.omx/plans/prd-issue-24-remote-spawn-file-transfer.md` | YES |
|
|
15
|
+
| 28 | `.omx/plans/prd-issue-28-headless-guard-spawn-deadlock.md` | YES |
|
|
16
|
+
|
|
17
|
+
Other PRDs in `.omx/plans/` (skipped per user selection):
|
|
18
|
+
- prd-issue-25-remote-spawn-resize-blank-screen.md
|
|
19
|
+
- prd-issue-26-remote-spawn-session-cleanup.md
|
|
20
|
+
- prd-issue-27-hud-dashboard-anchor.md
|
|
21
|
+
- prd-issue-29-headless-cwd-propagation.md
|
|
22
|
+
- prd-issue-30-remote-spawn-terminal-minimize.md
|
|
23
|
+
|
|
24
|
+
## Step 2: Task Selection
|
|
25
|
+
|
|
26
|
+
User explicitly specified: **issue 24, issue 28** -- skip AskUserQuestion, proceed to Step 3.
|
|
27
|
+
|
|
28
|
+
## Step 3: Classification & OMX Skill Mapping
|
|
29
|
+
|
|
30
|
+
### Issue #24 — remote-spawn-file-transfer
|
|
31
|
+
|
|
32
|
+
| Signal | Value |
|
|
33
|
+
|--------|-------|
|
|
34
|
+
| Content keywords | "추가" (file-transfer phase), "변경" (rewrite prompt), "implement" (transfer phase) |
|
|
35
|
+
| Auto-classified type | **implement** (구현) |
|
|
36
|
+
| Default OMX skill | `$plan` -> `$autopilot` |
|
|
37
|
+
| **User override** | **`$ralph`** (끝까지 돌려) |
|
|
38
|
+
|
|
39
|
+
Key implementation tasks:
|
|
40
|
+
- Add file-transfer phase to `scripts/remote-spawn.mjs`
|
|
41
|
+
- Implement remote staging directory + prompt path rewriting
|
|
42
|
+
- Add size/existence checks aligned with `MAX_HANDOFF_BYTES`
|
|
43
|
+
- Fail-fast on missing files before SSH launch
|
|
44
|
+
|
|
45
|
+
### Issue #28 — headless-guard-spawn-deadlock
|
|
46
|
+
|
|
47
|
+
| Signal | Value |
|
|
48
|
+
|--------|-------|
|
|
49
|
+
| Content keywords | "fix" (deadlock perception), "변경" (denial message), "추가" (regression tests) |
|
|
50
|
+
| Auto-classified type | **implement** (구현) |
|
|
51
|
+
| Default OMX skill | `$plan` -> `$autopilot` |
|
|
52
|
+
| **User override** | **`$ralph`** (끝까지 돌려) |
|
|
53
|
+
|
|
54
|
+
Key implementation tasks:
|
|
55
|
+
- Rewrite guard denial message to be action-oriented
|
|
56
|
+
- Surface bypass (`TFX_ALLOW_DIRECT_CLI=1`) and approved headless command in response
|
|
57
|
+
- Add regression tests for deny/bypass/nested-session matrix
|
|
58
|
+
- Keep guard intent intact (no removal)
|
|
59
|
+
|
|
60
|
+
## Classification Summary
|
|
61
|
+
|
|
62
|
+
| # | Task | Auto Type | Auto Skill | **Override Skill** |
|
|
63
|
+
|---|------|-----------|------------|-------------------|
|
|
64
|
+
| 24 | remote-spawn-file-transfer | implement | `$plan` -> `$autopilot` | **`$ralph`** |
|
|
65
|
+
| 28 | headless-guard-spawn-deadlock | implement | `$plan` -> `$autopilot` | **`$ralph`** |
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# tfx-codex-swarm: Selective Spawn Commands
|
|
4
|
+
# Generated by: tfx-codex-swarm skill (Steps 5-8)
|
|
5
|
+
# Date: 2026-03-30
|
|
6
|
+
# Target issues: #24 (remote-spawn-file-transfer), #28 (headless-guard-spawn-deadlock)
|
|
7
|
+
# Profile: codex53_xhigh (user override)
|
|
8
|
+
# OMX Skill: $ralph (user override)
|
|
9
|
+
# =============================================================================
|
|
10
|
+
# WARNING: This script is a DRY RUN artifact. Do NOT execute directly.
|
|
11
|
+
# =============================================================================
|
|
12
|
+
|
|
13
|
+
PROJECT_ROOT="C:/Users/SSAFY/Desktop/Projects/cli/triflux"
|
|
14
|
+
BASH_EXE='C:\Program Files\Git\bin\bash.exe'
|
|
15
|
+
|
|
16
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
17
|
+
# Step 5: Worktree Creation
|
|
18
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
19
|
+
|
|
20
|
+
# Issue #24 — worktree
|
|
21
|
+
git worktree add "${PROJECT_ROOT}/.codex-swarm/wt-issue-24" -b codex/issue-24 2>/dev/null || \
|
|
22
|
+
git worktree add "${PROJECT_ROOT}/.codex-swarm/wt-issue-24" codex/issue-24
|
|
23
|
+
|
|
24
|
+
# Issue #28 — worktree
|
|
25
|
+
git worktree add "${PROJECT_ROOT}/.codex-swarm/wt-issue-28" -b codex/issue-28 2>/dev/null || \
|
|
26
|
+
git worktree add "${PROJECT_ROOT}/.codex-swarm/wt-issue-28" codex/issue-28
|
|
27
|
+
|
|
28
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
29
|
+
# Step 6: Prompt Generation
|
|
30
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
31
|
+
|
|
32
|
+
mkdir -p "${PROJECT_ROOT}/.codex-swarm/prompts"
|
|
33
|
+
|
|
34
|
+
# --- Prompt for Issue #24 ---
|
|
35
|
+
cat > "${PROJECT_ROOT}/.codex-swarm/prompts/prompt-24.md" << 'PROMPT_24'
|
|
36
|
+
triflux 프로젝트의 태스크를 구현해야 합니다.
|
|
37
|
+
|
|
38
|
+
태스크 파일을 먼저 읽으세요: .omx/plans/prd-issue-24-remote-spawn-file-transfer.md
|
|
39
|
+
|
|
40
|
+
작업 순서:
|
|
41
|
+
1. 태스크 파일을 읽고 요구사항을 파악하세요
|
|
42
|
+
2. $ralph 스킬을 사용하세요 — 계획 수립 후 완료까지 반복 실행합니다. 작업이 완전히 끝날 때까지 멈추지 마세요.
|
|
43
|
+
3. 모든 acceptance criteria를 충족하는지 검증하세요
|
|
44
|
+
4. npm test로 기존 테스트가 깨지지 않았는지 확인하세요
|
|
45
|
+
|
|
46
|
+
프로젝트 정보:
|
|
47
|
+
- triflux: Claude Code용 멀티모델 CLI 오케스트레이터
|
|
48
|
+
- 언어: JavaScript/ESM (Node.js), 테스트: npm test
|
|
49
|
+
PROMPT_24
|
|
50
|
+
|
|
51
|
+
# Copy PRD into worktree
|
|
52
|
+
cp "${PROJECT_ROOT}/.omx/plans/prd-issue-24-remote-spawn-file-transfer.md" \
|
|
53
|
+
"${PROJECT_ROOT}/.codex-swarm/wt-issue-24/.omx/plans/prd-issue-24-remote-spawn-file-transfer.md"
|
|
54
|
+
|
|
55
|
+
# --- Prompt for Issue #28 ---
|
|
56
|
+
cat > "${PROJECT_ROOT}/.codex-swarm/prompts/prompt-28.md" << 'PROMPT_28'
|
|
57
|
+
triflux 프로젝트의 태스크를 구현해야 합니다.
|
|
58
|
+
|
|
59
|
+
태스크 파일을 먼저 읽으세요: .omx/plans/prd-issue-28-headless-guard-spawn-deadlock.md
|
|
60
|
+
|
|
61
|
+
작업 순서:
|
|
62
|
+
1. 태스크 파일을 읽고 요구사항을 파악하세요
|
|
63
|
+
2. $ralph 스킬을 사용하세요 — 계획 수립 후 완료까지 반복 실행합니다. 작업이 완전히 끝날 때까지 멈추지 마세요.
|
|
64
|
+
3. 모든 acceptance criteria를 충족하는지 검증하세요
|
|
65
|
+
4. npm test로 기존 테스트가 깨지지 않았는지 확인하세요
|
|
66
|
+
|
|
67
|
+
프로젝트 정보:
|
|
68
|
+
- triflux: Claude Code용 멀티모델 CLI 오케스트레이터
|
|
69
|
+
- 언어: JavaScript/ESM (Node.js), 테스트: npm test
|
|
70
|
+
PROMPT_28
|
|
71
|
+
|
|
72
|
+
# Copy PRD into worktree
|
|
73
|
+
cp "${PROJECT_ROOT}/.omx/plans/prd-issue-28-headless-guard-spawn-deadlock.md" \
|
|
74
|
+
"${PROJECT_ROOT}/.codex-swarm/wt-issue-28/.omx/plans/prd-issue-28-headless-guard-spawn-deadlock.md"
|
|
75
|
+
|
|
76
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
77
|
+
# Step 7: psmux Session Creation + Codex Launch
|
|
78
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
79
|
+
|
|
80
|
+
# Common Codex flags (codex53_xhigh profile)
|
|
81
|
+
PROFILE_FLAGS="-c 'model=\"gpt-5.3-codex\"' -c 'model_reasoning_effort=\"xhigh\"'"
|
|
82
|
+
|
|
83
|
+
# --- Issue #24 session ---
|
|
84
|
+
psmux new-session \
|
|
85
|
+
--name "codex-swarm-24" \
|
|
86
|
+
--dir "${PROJECT_ROOT}/.codex-swarm/wt-issue-24"
|
|
87
|
+
|
|
88
|
+
psmux send-keys --target "codex-swarm-24:0" \
|
|
89
|
+
"codex -c 'model=\"gpt-5.3-codex\"' -c 'model_reasoning_effort=\"xhigh\"' --full-auto \"\$(cat ${PROJECT_ROOT}/.codex-swarm/prompts/prompt-24.md)\"" Enter
|
|
90
|
+
|
|
91
|
+
# --- Issue #28 session ---
|
|
92
|
+
psmux new-session \
|
|
93
|
+
--name "codex-swarm-28" \
|
|
94
|
+
--dir "${PROJECT_ROOT}/.codex-swarm/wt-issue-28"
|
|
95
|
+
|
|
96
|
+
psmux send-keys --target "codex-swarm-28:0" \
|
|
97
|
+
"codex -c 'model=\"gpt-5.3-codex\"' -c 'model_reasoning_effort=\"xhigh\"' --full-auto \"\$(cat ${PROJECT_ROOT}/.codex-swarm/prompts/prompt-28.md)\"" Enter
|
|
98
|
+
|
|
99
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
100
|
+
# Step 8: WT Tab Batch Attach
|
|
101
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
102
|
+
|
|
103
|
+
# Primary method: psmux attach
|
|
104
|
+
psmux attach --session "codex-swarm-24" --wt-new-window
|
|
105
|
+
psmux attach --session "codex-swarm-28" --wt-tab
|
|
106
|
+
|
|
107
|
+
# Fallback: wt.exe direct (if psmux attach unavailable)
|
|
108
|
+
# wt.exe -w new \
|
|
109
|
+
# --title "issue-24: file-transfer" \
|
|
110
|
+
# -d "${PROJECT_ROOT}/.codex-swarm/wt-issue-24" \
|
|
111
|
+
# "$BASH_EXE" -c "psmux attach codex-swarm-24" \; \
|
|
112
|
+
# new-tab \
|
|
113
|
+
# --title "issue-28: guard-deadlock" \
|
|
114
|
+
# -d "${PROJECT_ROOT}/.codex-swarm/wt-issue-28" \
|
|
115
|
+
# "$BASH_EXE" -c "psmux attach codex-swarm-28"
|
|
116
|
+
|
|
117
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
118
|
+
# Status Report (Step 9 — would be displayed after spawn)
|
|
119
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
120
|
+
# | # | Task | Type | OMX Skill | Profile | Worktree | Session |
|
|
121
|
+
# |---|----------------------------|----------|-----------|----------------|---------------|-----------------|
|
|
122
|
+
# | 24 | remote-spawn-file-transfer | implement | $ralph | codex53_xhigh | wt-issue-24 | codex-swarm-24 |
|
|
123
|
+
# | 28 | headless-guard-deadlock | implement | $ralph | codex53_xhigh | wt-issue-28 | codex-swarm-28 |
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# tfx-codex-swarm Routing Report
|
|
2
|
+
|
|
3
|
+
> Generated by: tfx-codex-swarm skill (Step 4)
|
|
4
|
+
> Date: 2026-03-30
|
|
5
|
+
|
|
6
|
+
## Step 4-1: Task Size Estimation
|
|
7
|
+
|
|
8
|
+
### Issue #24 — remote-spawn-file-transfer
|
|
9
|
+
|
|
10
|
+
| Signal | Measurement | Value |
|
|
11
|
+
|--------|-------------|-------|
|
|
12
|
+
| PRD length | `wc -l` | **73 lines** |
|
|
13
|
+
| Affected files | paths mentioned in PRD | **4 files** (`scripts/remote-spawn.mjs`, handoff files, PRD paths, SSH launcher) |
|
|
14
|
+
| High-cost keywords | architecture/migration/refactoring | **0** (none) |
|
|
15
|
+
| Dependency depth | cross-issue/PRD references | **0** (self-contained) |
|
|
16
|
+
|
|
17
|
+
**Size classification: L (standard)** -- 40-80 lines, 3-5 files, 0-1 high-cost keywords
|
|
18
|
+
|
|
19
|
+
### Issue #28 — headless-guard-spawn-deadlock
|
|
20
|
+
|
|
21
|
+
| Signal | Measurement | Value |
|
|
22
|
+
|--------|-------------|-------|
|
|
23
|
+
| PRD length | `wc -l` | **68 lines** |
|
|
24
|
+
| Affected files | paths mentioned in PRD | **3 files** (`scripts/headless-guard.mjs`, `hub/team/psmux.mjs`, test files) |
|
|
25
|
+
| High-cost keywords | architecture/migration/refactoring | **0** (none) |
|
|
26
|
+
| Dependency depth | cross-issue/PRD references | **0** (self-contained) |
|
|
27
|
+
|
|
28
|
+
**Size classification: L (standard)** -- 40-80 lines, 3-5 files, 0-1 high-cost keywords
|
|
29
|
+
|
|
30
|
+
## Step 4-2: Profile Routing
|
|
31
|
+
|
|
32
|
+
### Auto-routing (what the harness would choose)
|
|
33
|
+
|
|
34
|
+
| Type \ Size | XL | **L** | M | S |
|
|
35
|
+
|-------------|-----|-----|-----|-----|
|
|
36
|
+
| **implement** | codex53_xhigh | **codex53_high** | codex53_med | codex53_low |
|
|
37
|
+
|
|
38
|
+
Both issues: type=implement, size=L --> auto-route = `codex53_high`
|
|
39
|
+
|
|
40
|
+
### User override
|
|
41
|
+
|
|
42
|
+
User said: "둘 다 xhigh로 세팅하고" --> override both to `codex53_xhigh`
|
|
43
|
+
|
|
44
|
+
## Step 4-3: Final Routing Table
|
|
45
|
+
|
|
46
|
+
| # | Task | Size | Type | Auto Profile | **Final Profile** |
|
|
47
|
+
|---|------|------|------|-------------|-------------------|
|
|
48
|
+
| 24 | remote-spawn-file-transfer | L | implement | codex53_high | **codex53_xhigh** |
|
|
49
|
+
| 28 | headless-guard-spawn-deadlock | L | implement | codex53_high | **codex53_xhigh** |
|
|
50
|
+
|
|
51
|
+
## Profile -> Codex CLI Flags
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
codex53_xhigh -> -c 'model="gpt-5.3-codex"' -c 'model_reasoning_effort="xhigh"'
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Both sessions use identical flags.
|
|
58
|
+
|
|
59
|
+
## Step 4-4: Other Settings
|
|
60
|
+
|
|
61
|
+
| Setting | Value | Note |
|
|
62
|
+
|---------|-------|------|
|
|
63
|
+
| Execution mode | `--full-auto` | Sandbox auto-approve (YOLO) |
|
|
64
|
+
| Worktree | enabled | Per-session independent worktree |
|
|
65
|
+
| psmux | enabled | Session management |
|
|
66
|
+
| OMX skill | `$ralph` | User override (both sessions) |
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
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 패턴)"}
|
|
7
|
+
]
|
|
8
|
+
}
|