triflux 10.3.4 → 10.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- 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/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 +11 -0
- 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 +95 -57
- package/hub/adaptive-memory.mjs +156 -42
- package/hub/adaptive.mjs +60 -31
- package/hub/assign-callbacks.mjs +67 -30
- 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 +3 -3
- package/hub/delegator/service.mjs +88 -64
- package/hub/delegator/tool-definitions.mjs +5 -5
- package/hub/fullcycle.mjs +33 -17
- package/hub/gemini-adapter.mjs +69 -94
- package/hub/hitl.mjs +89 -30
- 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 +240 -107
- 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 +126 -60
- 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 +29 -9
- package/hub/team/cli/commands/control.mjs +29 -8
- package/hub/team/cli/commands/debug.mjs +32 -11
- package/hub/team/cli/commands/focus.mjs +38 -11
- 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 +11 -4
- 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 +12 -2
- package/hub/team/cli/commands/start/start-mux.mjs +70 -21
- package/hub/team/cli/commands/start/start-wt.mjs +29 -12
- 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 +1 -1
- package/hub/team/cli/index.mjs +2 -2
- package/hub/team/cli/manifest.mjs +38 -8
- package/hub/team/cli/render.mjs +30 -8
- package/hub/team/cli/services/attach-fallback.mjs +31 -11
- package/hub/team/cli/services/hub-client.mjs +42 -14
- package/hub/team/cli/services/member-selector.mjs +11 -4
- package/hub/team/cli/services/native-control.mjs +48 -21
- 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 +16 -6
- 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 +119 -76
- package/hub/team/orchestrator.mjs +9 -4
- 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 +98 -34
- 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 +66 -23
- package/hub/workers/claude-worker.mjs +162 -118
- package/hub/workers/codex-mcp.mjs +192 -141
- package/hub/workers/delegator-mcp.mjs +507 -333
- package/hub/workers/factory.mjs +8 -8
- 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 +2 -1
- 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/completions/tfx.bash +47 -47
- package/scripts/completions/tfx.fish +44 -44
- package/scripts/completions/tfx.zsh +83 -83
- 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 +45 -26
- package/scripts/keyword-detector.mjs +41 -20
- package/scripts/keyword-rules-expander.mjs +47 -30
- 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 +300 -63
- 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 +199 -84
- 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 +16 -12
- package/scripts/tfx-batch-stats.mjs +32 -11
- 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/agent-replay-8f0e10a9-9693-4410-96f5-a6b07e8ed995.jsonl +1 -0
- package/skills/.omc/state/idle-notif-cooldown.json +3 -0
- package/skills/.omc/state/last-tool-error.json +7 -0
- package/skills/.omc/state/subagent-tracking.json +7 -0
- 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-auto-codex/SKILL.md.tmpl +106 -0
- 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-gemini/SKILL.md.tmpl +91 -0
- 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 -0
- 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 +88 -33
- package/tui/core.mjs +45 -15
- package/tui/doctor.mjs +75 -28
- package/tui/gemini-profile.mjs +74 -29
- package/tui/monitor-data.mjs +8 -4
- package/tui/monitor.mjs +71 -27
- package/tui/setup.mjs +133 -42
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tfx-deep-interview
|
|
3
|
+
description: >
|
|
4
|
+
구현 전 소크라테스식 질의로 요구사항 깊이 탐색.
|
|
5
|
+
5단계 인터뷰를 통해 요구사항을 명확히 하고 최적 구현 경로를 도출합니다.
|
|
6
|
+
triggers:
|
|
7
|
+
- deep-interview
|
|
8
|
+
- 딥인터뷰
|
|
9
|
+
- 소크라테스
|
|
10
|
+
- 깊이 탐색
|
|
11
|
+
- 요구사항 분석
|
|
12
|
+
argument-hint: "<topic>"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# {{SKILL_NAME}} — 소크라테스식 깊이 탐색
|
|
16
|
+
|
|
17
|
+
> **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
|
|
18
|
+
> 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
> 구현 전에 질문을 통해 요구사항의 깊이를 탐색합니다.
|
|
22
|
+
> "좋은 답은 좋은 질문에서 나온다."
|
|
23
|
+
|
|
24
|
+
## 사용법
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
/deep-interview 인증 시스템 리팩터링
|
|
28
|
+
/deep-interview JWT 기반 세션 관리
|
|
29
|
+
/딥인터뷰 데이터 파이프라인 설계
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 위임 패턴
|
|
33
|
+
|
|
34
|
+
Claude 토큰을 절약하기 위해 분석 작업은 Gemini CLI에 위임합니다.
|
|
35
|
+
|
|
36
|
+
- **Claude 담당**: AskUserQuestion (사용자 상호작용), 산출물 저장
|
|
37
|
+
- **Gemini 담당**: 질문 생성, 응답 분석, 종합 문서 초안 작성
|
|
38
|
+
|
|
39
|
+
각 단계에서 Claude는 누적 컨텍스트를 Gemini에 전달하고, Gemini가 반환한 질문을 AskUserQuestion으로 사용자에게 제시합니다. 사용자 답변은 다음 단계 Gemini 호출의 입력으로 전달됩니다.
|
|
40
|
+
|
|
41
|
+
**Fallback**: Gemini 호출이 실패하면 Claude Opus가 모든 분석을 직접 수행합니다 (원래 동작 유지).
|
|
42
|
+
|
|
43
|
+
## 토큰 예산
|
|
44
|
+
|
|
45
|
+
| 담당 | 토큰 | 역할 |
|
|
46
|
+
|------|------|------|
|
|
47
|
+
| Claude | ~2K | 오케스트레이션 + AskUserQuestion만 |
|
|
48
|
+
| Gemini | ~10K | 분석 + 질문 생성 + 문서 초안 |
|
|
49
|
+
|
|
50
|
+
## 5단계 인터뷰 프로세스
|
|
51
|
+
|
|
52
|
+
인터뷰는 반드시 아래 5단계를 순서대로 진행합니다. 각 단계에서 사용자 응답을 수집한 후 다음 단계로 이동합니다.
|
|
53
|
+
|
|
54
|
+
### Stage 1: Clarify (명확화)
|
|
55
|
+
|
|
56
|
+
> "정확히 무엇을 달성하려는가?"
|
|
57
|
+
|
|
58
|
+
목표를 한 문장으로 정의하고, 성공 기준과 현재 상태의 차이를 파악합니다.
|
|
59
|
+
|
|
60
|
+
**단계 진입 시 Gemini 위임:**
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
Bash("bash scripts/tfx-route.sh gemini exec 'Deep interview Stage 1: Clarify. Topic: {topic}. Previous answers: none. Generate 3 probing questions for this stage and analyze prior responses. Return JSON: {analysis, questions, key_insights}'")
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Gemini가 반환한 `questions` 배열을 AskUserQuestion으로 사용자에게 제시합니다.
|
|
67
|
+
|
|
68
|
+
**질문 템플릿 (Gemini 실패 시 Fallback):**
|
|
69
|
+
|
|
70
|
+
1. "이 작업의 핵심 목표를 한 문장으로 설명해주세요."
|
|
71
|
+
2. "완료 후 어떤 상태가 되어야 성공인가요?"
|
|
72
|
+
3. "현재 상태에서 가장 큰 문제점은 무엇인가요?"
|
|
73
|
+
|
|
74
|
+
### Stage 2: Decompose (분해)
|
|
75
|
+
|
|
76
|
+
> "이것을 어떤 하위 문제로 나눌 수 있는가?"
|
|
77
|
+
|
|
78
|
+
대상을 3-5개의 독립적 하위 문제로 분해하고, 의존성과 우선순위를 결정합니다.
|
|
79
|
+
|
|
80
|
+
**단계 진입 시 Gemini 위임:**
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
Bash("bash scripts/tfx-route.sh gemini exec 'Deep interview Stage 2: Decompose. Topic: {topic}. Previous answers: {stage1_answers}. Generate 3 probing questions for this stage and analyze prior responses. Return JSON: {analysis, questions, key_insights}'")
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Gemini가 반환한 `questions` 배열을 AskUserQuestion으로 사용자에게 제시합니다.
|
|
87
|
+
|
|
88
|
+
**질문 템플릿 (Gemini 실패 시 Fallback):**
|
|
89
|
+
|
|
90
|
+
1. "이 작업을 3-5개의 독립된 단계로 나눈다면?"
|
|
91
|
+
2. "각 단계 사이에 의존성이 있나요?"
|
|
92
|
+
3. "가장 먼저 해결해야 할 핵심 문제는?"
|
|
93
|
+
|
|
94
|
+
### Stage 3: Challenge (반론)
|
|
95
|
+
|
|
96
|
+
> "이 접근의 약점은?"
|
|
97
|
+
|
|
98
|
+
선택한 접근 방식의 단점을 식별하고, 실패 시나리오와 기술 부채 가능성을 탐색합니다.
|
|
99
|
+
|
|
100
|
+
**단계 진입 시 Gemini 위임:**
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
Bash("bash scripts/tfx-route.sh gemini exec 'Deep interview Stage 3: Challenge. Topic: {topic}. Previous answers: {stage1_answers} {stage2_answers}. Generate 3 probing questions for this stage and analyze prior responses. Return JSON: {analysis, questions, key_insights}'")
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Gemini가 반환한 `questions` 배열을 AskUserQuestion으로 사용자에게 제시합니다.
|
|
107
|
+
|
|
108
|
+
**질문 템플릿 (Gemini 실패 시 Fallback):**
|
|
109
|
+
|
|
110
|
+
1. "이 방식이 실패할 수 있는 시나리오는?"
|
|
111
|
+
2. "6개월 후 이 코드를 유지보수할 때 문제가 될 부분은?"
|
|
112
|
+
3. "이 접근이 다른 시스템에 미치는 영향은?"
|
|
113
|
+
|
|
114
|
+
### Stage 4: Alternatives (대안)
|
|
115
|
+
|
|
116
|
+
> "다른 방법은?"
|
|
117
|
+
|
|
118
|
+
최소 2개의 대안을 검토하고, 각 대안의 trade-off를 비교합니다.
|
|
119
|
+
|
|
120
|
+
**단계 진입 시 Gemini 위임:**
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
Bash("bash scripts/tfx-route.sh gemini exec 'Deep interview Stage 4: Alternatives. Topic: {topic}. Previous answers: {stage1_answers} {stage2_answers} {stage3_answers}. Generate 3 probing questions for this stage and analyze prior responses. Return JSON: {analysis, questions, key_insights}'")
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Gemini가 반환한 `questions` 배열을 AskUserQuestion으로 사용자에게 제시합니다.
|
|
127
|
+
|
|
128
|
+
**질문 템플릿 (Gemini 실패 시 Fallback):**
|
|
129
|
+
|
|
130
|
+
1. "같은 목표를 달성할 수 있는 완전히 다른 접근은?"
|
|
131
|
+
2. "시간이 절반밖에 없다면 어떤 방식을 택하겠습니까?"
|
|
132
|
+
3. "이 기술 대신 다른 것을 사용하면 어떤 trade-off가 있나요?"
|
|
133
|
+
|
|
134
|
+
### Stage 5: Synthesize (종합)
|
|
135
|
+
|
|
136
|
+
> "최적 경로는?"
|
|
137
|
+
|
|
138
|
+
인터뷰 결과를 종합하여 실행 계획을 도출하고, 구조화된 요구사항 문서를 생성합니다.
|
|
139
|
+
|
|
140
|
+
**단계 진입 시 Gemini 위임:**
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
Bash("bash scripts/tfx-route.sh gemini exec 'Deep interview Stage 5: Synthesize. Topic: {topic}. Previous answers: {stage1_answers} {stage2_answers} {stage3_answers} {stage4_answers}. Generate 3 probing questions for this stage and analyze prior responses. Return JSON: {analysis, questions, key_insights}'")
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Gemini가 반환한 `questions` 배열을 AskUserQuestion으로 사용자에게 제시합니다.
|
|
147
|
+
|
|
148
|
+
**질문 템플릿 (Gemini 실패 시 Fallback):**
|
|
149
|
+
|
|
150
|
+
1. "지금까지의 논의를 종합하면, 최적의 접근 방식은?"
|
|
151
|
+
2. "첫 번째 단계로 무엇을 실행하시겠습니까?"
|
|
152
|
+
3. "이 결정에 대해 확신하는 정도는? (1-10)"
|
|
153
|
+
|
|
154
|
+
## 산출물
|
|
155
|
+
|
|
156
|
+
인터뷰 완료 후 Gemini가 전체 인터뷰 문서 초안을 생성하고, Claude가 Write 툴로 `.tfx/plans/interview-{timestamp}.md`에 저장합니다.
|
|
157
|
+
|
|
158
|
+
**산출물 생성 Gemini 위임:**
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
Bash("bash scripts/tfx-route.sh gemini exec 'Deep interview complete. Topic: {topic}. All answers: {all_answers}. Generate a structured requirements document draft. Return the full markdown document.'")
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Gemini 실패 시 Claude가 직접 아래 형식으로 문서를 작성합니다.
|
|
165
|
+
|
|
166
|
+
### 산출물 형식
|
|
167
|
+
|
|
168
|
+
```markdown
|
|
169
|
+
# Interview: {topic}
|
|
170
|
+
Date: {date}
|
|
171
|
+
|
|
172
|
+
## Goal
|
|
173
|
+
{1문장 목표}
|
|
174
|
+
|
|
175
|
+
## Decomposition
|
|
176
|
+
{하위 문제 목록}
|
|
177
|
+
|
|
178
|
+
## Risks & Challenges
|
|
179
|
+
{식별된 위험}
|
|
180
|
+
|
|
181
|
+
## Alternatives Considered
|
|
182
|
+
| 대안 | 장점 | 단점 |
|
|
183
|
+
|------|------|------|
|
|
184
|
+
| ... | ... | ... |
|
|
185
|
+
|
|
186
|
+
## Decision
|
|
187
|
+
{최종 결정 + 근거}
|
|
188
|
+
|
|
189
|
+
## Action Plan
|
|
190
|
+
1. {단계 1}
|
|
191
|
+
2. {단계 2}
|
|
192
|
+
3. ...
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## 동작 규칙
|
|
196
|
+
|
|
197
|
+
1. 각 단계에서 반드시 사용자 응답을 수집한 후 다음 단계로 이동합니다.
|
|
198
|
+
2. 사용자가 명확한 답을 못 할 경우, 후속 질문으로 유도합니다.
|
|
199
|
+
3. 단계를 건너뛰지 않습니다 (5단계 모두 필수).
|
|
200
|
+
4. 이전 단계의 답변을 다음 단계 질문에 반영합니다 (대화형 연결).
|
|
201
|
+
5. 최종 산출물은 항상 `.tfx/plans/interview-{timestamp}.md`에 마크다운 파일로 저장합니다.
|
|
202
|
+
6. 인터뷰 시작 시 현재 주제와 관련된 코드베이스를 탐색하여 컨텍스트를 확보합니다.
|
|
203
|
+
7. 각 단계 전환 시 이전 단계 요약을 한 줄로 보여줍니다.
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
---
|
|
2
|
+
internal: true
|
|
3
|
+
name: tfx-deep-plan
|
|
4
|
+
description: "중요한 기능의 구현 계획을 3자 합의로 수립할 때 사용한다. 'deep plan', '합의 계획', 'ralplan', '철저한 계획', '제대로 설계하고 시작하자' 같은 요청에 사용. 마이크로서비스 도입, 대규모 리팩터링 등 리스크가 큰 작업의 사전 계획에 적극 활용."
|
|
5
|
+
triggers:
|
|
6
|
+
- deep plan
|
|
7
|
+
- 합의 계획
|
|
8
|
+
- consensus plan
|
|
9
|
+
- deep-plan
|
|
10
|
+
- 철저한 계획
|
|
11
|
+
- ralplan
|
|
12
|
+
argument-hint: "<구현할 기능 설명>"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# {{SKILL_NAME}} — Tri-Model Consensus Planning
|
|
16
|
+
|
|
17
|
+
> **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
|
|
18
|
+
> 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
> **Light 버전**: tfx-plan. 기본값. 깊이 수정자 없으면 Light 선택.
|
|
22
|
+
3개 모델(Opus 4.6 · GPT 5.4 · Gemini)이 독립 설계 후 교차검증하여 합의된 계획을 도출한다.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 전제조건 프로브 및 Tier Degradation
|
|
27
|
+
|
|
28
|
+
> **진입 즉시 실행** — 10초 내 가시적 출력을 보장한다. 빈 stdout + exit 0 **금지**.
|
|
29
|
+
|
|
30
|
+
### 환경 프로브
|
|
31
|
+
|
|
32
|
+
워크플로우 진입 전, 아래 프로브를 실행하여 가용 환경을 감지한다:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
psmux --version 2>/dev/null && \
|
|
36
|
+
curl -sf http://127.0.0.1:27888/status >/dev/null && \
|
|
37
|
+
codex --version 2>/dev/null && \
|
|
38
|
+
gemini --version 2>/dev/null
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Tier 판정
|
|
42
|
+
|
|
43
|
+
| Tier | 조건 | 실행 방식 |
|
|
44
|
+
|------|------|----------|
|
|
45
|
+
| **Tier 1** | psmux + Hub + Codex + Gemini 전부 정상 | 기존 headless multi (변경 없음) |
|
|
46
|
+
| **Tier 2** | 일부 CLI만 가용 (Codex 또는 Gemini 중 하나) | 가용 CLI + Claude Agent 조합 |
|
|
47
|
+
| **Tier 3** | headless 불가 또는 `claude -p` one-shot | Claude Agent only |
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
IF claude -p (one-shot 모드):
|
|
51
|
+
→ Tier 3 즉시 fallback
|
|
52
|
+
|
|
53
|
+
IF psmux 없음 OR Hub 미응답:
|
|
54
|
+
→ Tier 3
|
|
55
|
+
|
|
56
|
+
IF Codex 없음 AND Gemini 없음:
|
|
57
|
+
→ Tier 3
|
|
58
|
+
|
|
59
|
+
IF Codex 없음 OR Gemini 없음:
|
|
60
|
+
→ Tier 2
|
|
61
|
+
|
|
62
|
+
ELSE:
|
|
63
|
+
→ Tier 1
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Tier 3 진입 시 필수 출력
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
⚠ [Tier 3] headless multi 환경 미충족 — single-model 모드로 실행합니다 (consensus 미적용)
|
|
70
|
+
누락: {missing_components}
|
|
71
|
+
권장: psmux, Hub, Codex CLI, Gemini CLI 설치 후 재실행
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Tier 3에서는 모든 headless dispatch(`tfx multi ...`)를 **Claude Agent**(subagent)로 대체한다.
|
|
75
|
+
Tier 2에서는 누락된 CLI만 Claude Agent로 대체한다.
|
|
76
|
+
|
|
77
|
+
## HARD RULES
|
|
78
|
+
|
|
79
|
+
> headless-guard가 이 규칙 위반을 **자동 차단**한다. 우회 불가.
|
|
80
|
+
|
|
81
|
+
1. **`codex exec` / `gemini -p` 직접 호출 절대 금지**
|
|
82
|
+
2. Codex·Gemini 작업은 반드시 아래 형식으로만 실행:
|
|
83
|
+
`Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'cli:프롬프트:역할' --timeout 600")`
|
|
84
|
+
3. Claude 작업은 `Agent(run_in_background=true)`
|
|
85
|
+
4. Step 2, Step 4에서 **Bash + Agent를 같은 메시지에서 동시 호출**하여 3개 모델 병렬 실행
|
|
86
|
+
|
|
87
|
+
## MODEL ROLES
|
|
88
|
+
|
|
89
|
+
| Model | Profile | 역할 | 강점 |
|
|
90
|
+
|-------|---------|------|------|
|
|
91
|
+
| **Claude Opus 4.6** | Agent(model="opus") | Planner | 전략적 아키텍처 비전, 리스크 통합 판단 |
|
|
92
|
+
| **Codex GPT 5.4** | `--assign 'codex:...:architect'` (gpt54_xhigh) | Architect | 구현 설계, API 인터페이스, 파일 구조 |
|
|
93
|
+
| **Gemini** | `--assign 'gemini:...:critic'` | Critic | 엣지케이스, 보안 위협, 테스트 전략 |
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## EXECUTION — 아래 Step을 순서대로 실행하라
|
|
98
|
+
|
|
99
|
+
사용자 입력을 `TASK`로 참조한다.
|
|
100
|
+
|
|
101
|
+
### Step 1: 코드베이스 정찰
|
|
102
|
+
|
|
103
|
+
TASK와 관련된 코드베이스를 파악한다. 결과를 `RECON`으로 기억한다.
|
|
104
|
+
|
|
105
|
+
도구 호출:
|
|
106
|
+
```
|
|
107
|
+
Agent(
|
|
108
|
+
subagent_type="Explore",
|
|
109
|
+
model="haiku",
|
|
110
|
+
description="codebase recon",
|
|
111
|
+
prompt="다음 기능과 관련된 코드베이스를 탐색하라: [TASK 삽입]
|
|
112
|
+
보고할 것: (1) 관련 파일/디렉토리 (2) 기존 아키텍처 패턴 (3) 주요 의존성/인터페이스. bullet point로 간결하게."
|
|
113
|
+
)
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Step 2: Round 1 — 독립 설계 (Anti-Herding)
|
|
117
|
+
|
|
118
|
+
3개 모델이 서로의 결과를 **보지 않고** 동시에 독립 분석한다.
|
|
119
|
+
**아래 2개 도구를 반드시 같은 응답에서 동시에 호출하라.**
|
|
120
|
+
|
|
121
|
+
#### 2a. Claude Opus — Planner (Agent, background)
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
Agent(
|
|
125
|
+
subagent_type="oh-my-claudecode:architect",
|
|
126
|
+
model="opus",
|
|
127
|
+
run_in_background=true,
|
|
128
|
+
name="planner-r1",
|
|
129
|
+
description="deep-plan R1 Planner",
|
|
130
|
+
prompt="소프트웨어 아키텍트로서 구현 계획을 수립하라.
|
|
131
|
+
|
|
132
|
+
기능: [TASK 삽입]
|
|
133
|
+
코드베이스: [RECON 삽입]
|
|
134
|
+
|
|
135
|
+
아래 JSON으로 응답하라:
|
|
136
|
+
{
|
|
137
|
+
\"vision\": \"설계 방향 1-2문장\",
|
|
138
|
+
\"tasks\": [{\"id\": \"T1\", \"title\": \"...\", \"desc\": \"...\", \"deps\": [], \"complexity\": \"low|med|high\"}],
|
|
139
|
+
\"order\": [\"T1\", \"T2\"],
|
|
140
|
+
\"risks\": [{\"id\": \"R1\", \"desc\": \"...\", \"severity\": \"critical|high|med|low\", \"mitigation\": \"...\"}],
|
|
141
|
+
\"files\": [{\"path\": \"...\", \"action\": \"create|modify|delete\", \"reason\": \"...\"}],
|
|
142
|
+
\"confidence\": 0.85,
|
|
143
|
+
\"reasoning\": \"핵심 결정 이유\"
|
|
144
|
+
}"
|
|
145
|
+
)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
#### 2b. Codex + Gemini — Architect + Critic (headless)
|
|
149
|
+
|
|
150
|
+
`TASK`와 `RECON`을 프롬프트에 삽입하여 아래 Bash를 호출한다.
|
|
151
|
+
프롬프트 안의 작은따옴표는 `'\''`로 이스케이프한다.
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
Bash("tfx multi --teammate-mode headless --auto-attach --dashboard \
|
|
155
|
+
--assign 'codex:시니어 엔지니어로서 기술적 설계를 작성하라. 기능: [TASK]. 코드베이스: [RECON]. JSON 응답: {\"architecture\": \"패턴+이유\", \"components\": [{\"name\": \"\", \"responsibility\": \"\", \"interfaces\": []}], \"data_models\": [{\"name\": \"\", \"fields\": [], \"relations\": []}], \"api\": [{\"endpoint\": \"\", \"method\": \"\", \"desc\": \"\"}], \"files\": [{\"path\": \"\", \"purpose\": \"\"}], \"impl_notes\": [], \"confidence\": 0.85}:architect' \
|
|
156
|
+
--assign 'gemini:QA 보안 전문가로서 구현 리스크를 분석하라. 기능: [TASK]. 코드베이스: [RECON]. JSON 응답: {\"edge_cases\": [{\"id\": \"E1\", \"scenario\": \"\", \"impact\": \"\", \"fix\": \"\"}], \"security\": [{\"id\": \"S1\", \"threat\": \"\", \"severity\": \"critical|high|med|low\", \"mitigation\": \"\"}], \"performance\": [{\"id\": \"P1\", \"bottleneck\": \"\", \"optimization\": \"\"}], \"test_strategy\": {\"unit\": [], \"integration\": [], \"edge_case\": []}, \"missing_reqs\": [], \"risk_level\": \"low|med|high|critical\", \"confidence\": 0.85}:critic' \
|
|
157
|
+
--timeout 600")
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Step 3: 결과 수집
|
|
161
|
+
|
|
162
|
+
- `RESULT_PLANNER`: planner-r1 Agent 결과 (SendMessage로 수신 또는 완료 알림 대기)
|
|
163
|
+
- `RESULT_ARCHITECT` + `RESULT_CRITIC`: headless stdout JSON에서 각 워커 출력 추출
|
|
164
|
+
|
|
165
|
+
**실패 워커 처리**: 워커가 실패하면 Claude Agent로 해당 역할을 대체 실행한다.
|
|
166
|
+
|
|
167
|
+
### Step 4: Round 2 — 교차 검토
|
|
168
|
+
|
|
169
|
+
각 모델에게 다른 두 모델의 Round 1 결과를 제시하고 수용/수정/반박을 요청한다.
|
|
170
|
+
**아래 2개 도구를 반드시 같은 응답에서 동시에 호출하라.**
|
|
171
|
+
|
|
172
|
+
#### 4a. Claude Opus — 계획 수정 (Agent, background)
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
Agent(
|
|
176
|
+
subagent_type="oh-my-claudecode:critic",
|
|
177
|
+
model="opus",
|
|
178
|
+
run_in_background=true,
|
|
179
|
+
name="planner-r2",
|
|
180
|
+
description="deep-plan R2 cross-review",
|
|
181
|
+
prompt="Round 1 결과를 교차 검토하고 계획을 수정하라.
|
|
182
|
+
|
|
183
|
+
네 계획: [RESULT_PLANNER 삽입]
|
|
184
|
+
Architect(Codex) 설계: [RESULT_ARCHITECT 삽입]
|
|
185
|
+
Critic(Gemini) 분석: [RESULT_CRITIC 삽입]
|
|
186
|
+
|
|
187
|
+
각 항목에 대해:
|
|
188
|
+
- ACCEPT: 수용 (이유)
|
|
189
|
+
- MODIFY: 부분 수정 (원안→수정안, 이유)
|
|
190
|
+
- REJECT: 반박 (근거)
|
|
191
|
+
|
|
192
|
+
JSON: {\"revisions\": [{\"source\": \"codex|gemini\", \"item\": \"...\", \"action\": \"accept|modify|reject\", \"reason\": \"...\"}], \"updated_plan\": {같은 스키마}}"
|
|
193
|
+
)
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
#### 4b. Codex + Gemini — 교차 검토 (headless)
|
|
197
|
+
|
|
198
|
+
3개 Round 1 결과를 각 프롬프트에 삽입한다. 결과가 길면 핵심만 요약하여 삽입.
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
Bash("tfx multi --teammate-mode headless --auto-attach --dashboard \
|
|
202
|
+
--assign 'codex:교차 검토하라. Planner 계획: [RESULT_PLANNER 요약]. 네 설계: [RESULT_ARCHITECT 요약]. Critic 분석: [RESULT_CRITIC 요약]. 각 항목 ACCEPT/MODIFY/REJECT + 이유. JSON: {\"revisions\": [...], \"updated_design\": {같은 스키마}}:architect' \
|
|
203
|
+
--assign 'gemini:교차 검토하라. Planner 계획: [RESULT_PLANNER 요약]. Architect 설계: [RESULT_ARCHITECT 요약]. 네 분석: [RESULT_CRITIC 요약]. 우려 해소 여부 판단. JSON: {\"resolved\": [...], \"still_concerned\": [...], \"new_concerns\": [...], \"updated_test_strategy\": {...}}:critic' \
|
|
204
|
+
--timeout 600")
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Step 5: 합의 점수 산출
|
|
208
|
+
|
|
209
|
+
Round 2 결과를 모아 Claude가 직접 계산한다 (Agent 불필요):
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
모든 고유 항목에 대해:
|
|
213
|
+
동의 수 = 해당 항목에 동의한 모델 수 (ACCEPT 또는 유사 제안)
|
|
214
|
+
|
|
215
|
+
>= 2 동의 → CONSENSUS (합의)
|
|
216
|
+
== 1 동의 → DISPUTED (미합의)
|
|
217
|
+
|
|
218
|
+
consensus_score = CONSENSUS / 전체_고유_항목 * 100
|
|
219
|
+
|
|
220
|
+
분기:
|
|
221
|
+
>= 80% → Step 6 확정
|
|
222
|
+
60-79% → Round 3 진행 (미합의 항목만 재토론, 같은 headless 패턴)
|
|
223
|
+
< 60% → AskUserQuestion으로 핵심 불일치 제시, 사용자 판단 요청
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Step 6: 합의된 계획 출력
|
|
227
|
+
|
|
228
|
+
아래 형식으로 최종 결과를 출력한다:
|
|
229
|
+
|
|
230
|
+
```markdown
|
|
231
|
+
## 합의된 구현 계획: [TASK]
|
|
232
|
+
|
|
233
|
+
**Consensus**: {score}% | **Rounds**: {count} | **Models**: Opus 4.6 + GPT 5.4 + Gemini
|
|
234
|
+
|
|
235
|
+
### 설계 방향
|
|
236
|
+
{3자 합의된 아키텍처 결정}
|
|
237
|
+
|
|
238
|
+
### 태스크
|
|
239
|
+
| # | 태스크 | 복잡도 | 합의 | 비고 |
|
|
240
|
+
|---|--------|--------|------|------|
|
|
241
|
+
| T1 | {title} | {complexity} | P:✓ A:✓ C:✓ | {notes} |
|
|
242
|
+
|
|
243
|
+
### 파일 변경
|
|
244
|
+
| 파일 | 작업 | 이유 |
|
|
245
|
+
|------|------|------|
|
|
246
|
+
| {path} | {action} | {reason} |
|
|
247
|
+
|
|
248
|
+
### 리스크 & 완화
|
|
249
|
+
| 리스크 | 심각도 | 완화 | 합의 |
|
|
250
|
+
|--------|--------|------|------|
|
|
251
|
+
| {risk} | {severity} | {mitigation} | {n}/3 |
|
|
252
|
+
|
|
253
|
+
### 테스트 전략 (Critic 주도)
|
|
254
|
+
{Gemini가 제안하고 나머지가 합의한 테스트 계획}
|
|
255
|
+
|
|
256
|
+
### 미합의 사항
|
|
257
|
+
| 항목 | Planner(Opus) | Architect(GPT5.4) | Critic(Gemini) |
|
|
258
|
+
|------|---------------|---------------------|----------------|
|
|
259
|
+
| {item} | {position} | {position} | {position} |
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## ERROR RECOVERY
|
|
265
|
+
|
|
266
|
+
| 상황 | 대응 |
|
|
267
|
+
|------|------|
|
|
268
|
+
| headless timeout (600s) | Claude Agent로 해당 역할 대체 실행 |
|
|
269
|
+
| Codex 워커 실패 | `Agent(subagent_type="oh-my-claudecode:architect", model="opus")` 대체 |
|
|
270
|
+
| Gemini 워커 실패 | `Agent(subagent_type="oh-my-claudecode:critic", model="sonnet")` 대체 |
|
|
271
|
+
| consensus < 60% | AskUserQuestion → 사용자 방향 결정 후 해당 방향으로 확정 |
|
|
272
|
+
| 프롬프트 quoting 오류 | 작은따옴표 → `'\''` 이스케이프. 줄바꿈 → 공백 치환 |
|
|
273
|
+
|
|
274
|
+
## TOKEN BUDGET
|
|
275
|
+
|
|
276
|
+
| Phase | Tokens |
|
|
277
|
+
|-------|--------|
|
|
278
|
+
| Step 1: Recon (Haiku) | ~2K |
|
|
279
|
+
| Step 2: Round 1 (3 parallel) | ~15K |
|
|
280
|
+
| Step 4: Round 2 (3 parallel) | ~12K |
|
|
281
|
+
| Step 5-6: Consensus + Output | ~3K |
|
|
282
|
+
| **Total** | **~25-32K** |
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
internal: true
|
|
3
|
+
name: tfx-deep-qa
|
|
4
|
+
description: "보안, 성능, 접근성까지 포함한 철저한 검증이 필요할 때 사용한다. 'deep qa', '심층 검증', '철저히 테스트', '보안까지 확인', '전방위 검증' 같은 요청에 사용. 프로덕션 배포 전 다각도 품질 검증에 적극 활용."
|
|
5
|
+
triggers:
|
|
6
|
+
- deep qa
|
|
7
|
+
- 심층 검증
|
|
8
|
+
- thorough test
|
|
9
|
+
- deep-qa
|
|
10
|
+
argument-hint: "[테스트 대상 경로 또는 기능 설명]"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# {{SKILL_NAME}} — Tri-CLI Deep Verification
|
|
14
|
+
|
|
15
|
+
> **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
|
|
16
|
+
> 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
> **Light 버전**: tfx-qa. 기본값. 깊이 수정자 없으면 Light 선택.
|
|
20
|
+
> 3-CLI 독립 검증 → 교차검증 → 2+ 합의 항목만 보고. false-positive 87% 감소.
|
|
21
|
+
|
|
22
|
+
## 핵심 원리
|
|
23
|
+
|
|
24
|
+
**Anti-Herding**: 3개 CLI가 서로의 결과를 보지 않고 독립 검증.
|
|
25
|
+
**Consensus Only**: 2개 이상 CLI가 동일 이슈를 지적한 항목만 최종 보고.
|
|
26
|
+
|
|
27
|
+
## 용도
|
|
28
|
+
|
|
29
|
+
- 릴리스 전 전면 검증
|
|
30
|
+
- 보안/성능/접근성을 동시에 다각도 점검
|
|
31
|
+
- 단일 CLI 검증으로는 놓치는 교차 영역 결함 탐지
|
|
32
|
+
- false-positive 최소화가 필요한 QA 게이트
|
|
33
|
+
|
|
34
|
+
## HARD RULES
|
|
35
|
+
|
|
36
|
+
> headless-guard가 이 규칙 위반을 **자동 차단**한다. 우회 불가.
|
|
37
|
+
|
|
38
|
+
1. **`codex exec` / `gemini -p` 직접 호출 절대 금지**
|
|
39
|
+
2. Codex·Gemini → `Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'cli:프롬프트:역할' --timeout 600")` **만** 사용
|
|
40
|
+
3. Claude → `Agent(run_in_background=true)`
|
|
41
|
+
4. Bash + Agent를 같은 메시지에서 동시 호출하여 병렬 실행
|
|
42
|
+
|
|
43
|
+
## MODEL ROLES
|
|
44
|
+
|
|
45
|
+
| CLI | 역할 | 관점 |
|
|
46
|
+
|-----|------|------|
|
|
47
|
+
| Claude Opus | 기능검증 | 기능 정확성, 엣지케이스, 누락 테스트 |
|
|
48
|
+
| Codex | 보안+성능 | OWASP Top 10, O(n²) 복잡도, 메모리 누수, 입력 검증 |
|
|
49
|
+
| Gemini | UX+접근성 | API 응답 일관성, 에러 메시지, WCAG 2.1 AA |
|
|
50
|
+
|
|
51
|
+
## EXECUTION STEPS
|
|
52
|
+
|
|
53
|
+
### Step 1: 검증 대상 수집
|
|
54
|
+
|
|
55
|
+
대상을 다음 우선순위로 결정한다:
|
|
56
|
+
1. 사용자 지정 파일/경로 → 해당 범위
|
|
57
|
+
2. `git diff` (staged + unstaged) → 변경된 파일
|
|
58
|
+
3. 지정 없음 → 프로젝트 전체 테스트
|
|
59
|
+
|
|
60
|
+
수집 항목: 변경 파일 목록 + diff, 관련 테스트 파일, 영향 받는 모듈/의존성
|
|
61
|
+
|
|
62
|
+
### Step 2: 3-CLI 독립 검증 — 아래 2개 도구를 반드시 같은 응답에서 동시에 호출하라.
|
|
63
|
+
|
|
64
|
+
**Claude Agent (기능검증):**
|
|
65
|
+
```
|
|
66
|
+
Agent(
|
|
67
|
+
subagent_type="oh-my-claudecode:verifier",
|
|
68
|
+
model="opus",
|
|
69
|
+
run_in_background=true,
|
|
70
|
+
name="qa-functional",
|
|
71
|
+
description="기능 정확성 및 엣지케이스 검증",
|
|
72
|
+
prompt="QA 엔지니어로서 다음 코드의 기능 정확성을 검증하라. 테스트를 실행하고 결과를 보고하라. 누락된 엣지 케이스를 식별하라 (null, 빈 입력, 경계값, 동시성). 누락된 테스트 케이스를 제안하라. JSON으로 응답하라: { test_result: {pass, fail, skip}, findings: [{id, file, line, category, severity, description, test_scenario}], edge_case_tests: [...], overall_verdict: 'pass'|'fail' }"
|
|
73
|
+
)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Codex + Gemini headless dispatch (보안+성능+UX):**
|
|
77
|
+
```
|
|
78
|
+
Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'codex:보안/성능 전문가로서 이 코드를 검증하라. OWASP Top 10을 체크하라. O(n²) 이상 복잡도를 탐지하라. 메모리 누수 패턴을 찾아라. 입력 검증 누락을 확인하라. JSON으로 응답하라: { findings: [{id, file, line, category, severity, description, fix}], overall_verdict: \"pass\"|\"fail\" }:verifier' --assign 'gemini:UX/접근성 전문가로서 이 코드를 검증하라. API 응답 형식 일관성을 확인하라. 에러 메시지의 사용자 친화성을 평가하라. WCAG 2.1 AA 준수를 검토하라 (UI 관련 시). 문서와 실제 동작 일치 여부를 확인하라. JSON으로 응답하라: { findings: [{id, file, line, category, severity, description, suggestion}], overall_verdict: \"pass\"|\"fail\" }:verifier' --timeout 600")
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Step 3: Consensus Scoring
|
|
82
|
+
|
|
83
|
+
모든 findings를 수집하여 유사도를 비교한다:
|
|
84
|
+
- 동일 파일+라인±5 + 유사 카테고리 → 동일 이슈로 간주
|
|
85
|
+
- 3/3 합의 → CONFIRMED (severity 유지)
|
|
86
|
+
- 2/3 합의 → LIKELY (severity 유지, 반대 의견 첨부)
|
|
87
|
+
- 1/3만 지적 → UNVERIFIED (참고용, 별도 섹션)
|
|
88
|
+
|
|
89
|
+
`consensus_score = consensus_items / total_unique_items × 100`
|
|
90
|
+
|
|
91
|
+
### Step 4: 실패 수정 — 합의된 Critical/High 항목에 대해서만 실행
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'codex:다음 합의된 이슈들을 수정하라. 각 이슈에 대해 최소한의 변경으로 수정하고 수정 후 테스트를 재실행하여 통과 여부를 확인하라. 이슈 목록: {consensus_findings}:fixer' --timeout 300")
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Step 5: 종합 보고서 작성
|
|
98
|
+
|
|
99
|
+
아래 형식으로 보고서를 출력한다:
|
|
100
|
+
|
|
101
|
+
```markdown
|
|
102
|
+
## Deep QA Report: {target}
|
|
103
|
+
**Consensus Score**: {score}% | **Verifiers**: Claude/Codex/Gemini
|
|
104
|
+
**Verdict**: PASS / CONDITIONAL PASS / FAIL
|
|
105
|
+
|
|
106
|
+
### Critical (3/3 합의)
|
|
107
|
+
- [C1] `{file}:{line}` — {description}
|
|
108
|
+
- Claude: {detail} | Codex: {detail} | Gemini: {detail}
|
|
109
|
+
- **Fix**: {applied_fix}
|
|
110
|
+
|
|
111
|
+
### High (2/3 합의)
|
|
112
|
+
- [H1] `{file}:{line}` — {description}
|
|
113
|
+
- 합의: {agreers} | 반대: {dissenter}: "{reason}"
|
|
114
|
+
|
|
115
|
+
### Verified Medium
|
|
116
|
+
- ...
|
|
117
|
+
|
|
118
|
+
### 엣지 케이스 테스트 제안
|
|
119
|
+
| 시나리오 | 입력 | 기대 결과 | 제안자 |
|
|
120
|
+
|---------|------|----------|--------|
|
|
121
|
+
| {scenario} | {input} | {expected} | Claude |
|
|
122
|
+
|
|
123
|
+
### Unverified (1/3만 지적, 참고용)
|
|
124
|
+
- [U1] `{file}:{line}` — {description} (by {single_cli})
|
|
125
|
+
|
|
126
|
+
### 수정 요약
|
|
127
|
+
- 수정된 파일: {list}
|
|
128
|
+
- 테스트 재실행 결과: {pass}/{total}
|
|
129
|
+
|
|
130
|
+
### 검증 통계
|
|
131
|
+
| CLI | 영역 | 발견 수 | 합의 기여율 |
|
|
132
|
+
|-----|------|---------|------------|
|
|
133
|
+
| Claude | 기능/엣지케이스 | {n} | {%} |
|
|
134
|
+
| Codex | 보안/성능 | {n} | {%} |
|
|
135
|
+
| Gemini | UX/접근성 | {n} | {%} |
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## ERROR RECOVERY
|
|
139
|
+
|
|
140
|
+
| 오류 | 조치 |
|
|
141
|
+
|------|------|
|
|
142
|
+
| headless dispatch 타임아웃 | `--timeout` 값을 900으로 올려 재시도 |
|
|
143
|
+
| Agent 결과 미수신 | Step 2를 Agent만 단독 재실행 |
|
|
144
|
+
| consensus 0% | 대상 범위가 너무 넓음 — 파일 단위로 분할 후 재실행 |
|
|
145
|
+
| tfx multi 명령 실패 | `tfx status`로 teammate 연결 상태 확인 |
|
|
146
|
+
|
|
147
|
+
## 토큰 예산
|
|
148
|
+
|
|
149
|
+
| 단계 | 토큰 |
|
|
150
|
+
|------|------|
|
|
151
|
+
| Step 1 (수집) | ~1K |
|
|
152
|
+
| Step 2 (3x 독립 검증) | ~15K |
|
|
153
|
+
| Step 3 (Consensus) | ~3K |
|
|
154
|
+
| Step 4 (수정) | ~3K |
|
|
155
|
+
| Step 5 (보고) | ~3K |
|
|
156
|
+
| **총합** | **~25K** |
|
|
157
|
+
|
|
158
|
+
## 사용 예
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
/tfx-deep-qa
|
|
162
|
+
/tfx-deep-qa "src/auth/ 디렉토리 전체"
|
|
163
|
+
/tfx-deep-qa "최근 커밋 변경사항 심층 검증"
|
|
164
|
+
/tfx-deep-qa "결제 모듈 배포 전 최종 검증"
|
|
165
|
+
```
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tfx-deep-qa",
|
|
3
3
|
"description": "보안, 성능, 접근성까지 포함한 철저한 검증이 필요할 때 사용한다. 'deep qa', '심층 검증', '철저히 테스트', '보안까지 확인', '전방위 검증' 같은 요청에 사용. 프로덕션 배포 전 다각도 품질 검증에 적극 활용.",
|
|
4
|
-
"triggers": [
|
|
5
|
-
"deep qa",
|
|
6
|
-
"심층 검증",
|
|
7
|
-
"thorough test",
|
|
8
|
-
"deep-qa"
|
|
9
|
-
],
|
|
4
|
+
"triggers": ["deep qa", "심층 검증", "thorough test", "deep-qa"],
|
|
10
5
|
"argument_hint": "[테스트 대상 경로 또는 기능 설명]",
|
|
11
6
|
"internal": true
|
|
12
7
|
}
|