@su-record/vibe 2.4.34 β†’ 2.4.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/CLAUDE.md +345 -351
  2. package/LICENSE +21 -21
  3. package/README.md +210 -210
  4. package/agents/compounder.md +261 -261
  5. package/agents/diagrammer.md +178 -178
  6. package/agents/e2e-tester.md +266 -266
  7. package/agents/explorer.md +48 -48
  8. package/agents/implementer.md +53 -53
  9. package/agents/research/best-practices-agent.md +139 -139
  10. package/agents/research/codebase-patterns-agent.md +147 -147
  11. package/agents/research/framework-docs-agent.md +178 -178
  12. package/agents/research/security-advisory-agent.md +164 -164
  13. package/agents/review/architecture-reviewer.md +107 -107
  14. package/agents/review/complexity-reviewer.md +116 -116
  15. package/agents/review/data-integrity-reviewer.md +88 -88
  16. package/agents/review/git-history-reviewer.md +103 -103
  17. package/agents/review/performance-reviewer.md +86 -86
  18. package/agents/review/python-reviewer.md +150 -150
  19. package/agents/review/rails-reviewer.md +139 -139
  20. package/agents/review/react-reviewer.md +144 -144
  21. package/agents/review/security-reviewer.md +80 -80
  22. package/agents/review/simplicity-reviewer.md +140 -140
  23. package/agents/review/test-coverage-reviewer.md +116 -116
  24. package/agents/review/typescript-reviewer.md +127 -127
  25. package/agents/searcher.md +54 -54
  26. package/agents/simplifier.md +119 -119
  27. package/agents/tester.md +49 -49
  28. package/agents/ui-previewer.md +129 -129
  29. package/commands/vibe.analyze.md +260 -260
  30. package/commands/vibe.reason.md +223 -223
  31. package/commands/vibe.review.md +213 -213
  32. package/commands/vibe.run.md +931 -931
  33. package/commands/vibe.spec.md +442 -442
  34. package/commands/vibe.utils.md +101 -101
  35. package/commands/vibe.verify.md +282 -282
  36. package/dist/cli/collaborator.js +52 -52
  37. package/dist/cli/detect.js +32 -32
  38. package/dist/cli/index.js +137 -137
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/cli/llm.js +147 -147
  41. package/dist/cli/llm.js.map +1 -1
  42. package/dist/cli/setup.d.ts +1 -1
  43. package/dist/cli/setup.d.ts.map +1 -1
  44. package/dist/cli/setup.js +48 -54
  45. package/dist/cli/setup.js.map +1 -1
  46. package/dist/lib/MemoryManager.d.ts +4 -0
  47. package/dist/lib/MemoryManager.d.ts.map +1 -1
  48. package/dist/lib/MemoryManager.js +21 -2
  49. package/dist/lib/MemoryManager.js.map +1 -1
  50. package/dist/lib/PythonParser.js +108 -108
  51. package/dist/lib/gemini-api.d.ts +13 -3
  52. package/dist/lib/gemini-api.d.ts.map +1 -1
  53. package/dist/lib/gemini-api.js +198 -7
  54. package/dist/lib/gemini-api.js.map +1 -1
  55. package/dist/lib/gpt-api.d.ts +5 -4
  56. package/dist/lib/gpt-api.d.ts.map +1 -1
  57. package/dist/lib/gpt-api.js +168 -12
  58. package/dist/lib/gpt-api.js.map +1 -1
  59. package/dist/tools/memory/saveMemory.js +1 -1
  60. package/dist/tools/memory/saveMemory.js.map +1 -1
  61. package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
  62. package/hooks/hooks.json +195 -195
  63. package/languages/dart-flutter.md +509 -0
  64. package/languages/go.md +396 -0
  65. package/languages/java-spring.md +586 -0
  66. package/languages/kotlin-android.md +491 -0
  67. package/languages/python-django.md +371 -0
  68. package/languages/python-fastapi.md +386 -0
  69. package/languages/rust.md +425 -0
  70. package/languages/swift-ios.md +516 -0
  71. package/languages/typescript-nextjs.md +441 -0
  72. package/languages/typescript-node.md +375 -0
  73. package/languages/typescript-nuxt.md +521 -0
  74. package/languages/typescript-react-native.md +446 -0
  75. package/languages/typescript-react.md +525 -0
  76. package/languages/typescript-vue.md +353 -0
  77. package/package.json +88 -87
  78. package/skills/context7-usage.md +82 -82
  79. package/skills/git-worktree.md +181 -181
  80. package/skills/multi-llm-orchestration.md +92 -92
  81. package/skills/parallel-research.md +77 -77
  82. package/skills/priority-todos.md +239 -239
  83. package/skills/tool-fallback.md +126 -126
  84. package/skills/vibe-capabilities.md +129 -129
  85. package/{.claude/vibe β†’ vibe}/config.json +3 -3
  86. package/{.claude/vibe β†’ vibe}/constitution.md +184 -184
  87. package/{.claude/vibe β†’ vibe}/rules/core/communication-guide.md +104 -104
  88. package/{.claude/vibe β†’ vibe}/rules/core/development-philosophy.md +52 -52
  89. package/{.claude/vibe β†’ vibe}/rules/core/quick-start.md +120 -120
  90. package/{.claude/vibe β†’ vibe}/rules/quality/bdd-contract-testing.md +388 -388
  91. package/{.claude/vibe β†’ vibe}/rules/quality/checklist.md +276 -276
  92. package/{.claude/vibe β†’ vibe}/rules/quality/testing-strategy.md +437 -437
  93. package/{.claude/vibe β†’ vibe}/rules/standards/anti-patterns.md +369 -369
  94. package/{.claude/vibe β†’ vibe}/rules/standards/code-structure.md +291 -291
  95. package/{.claude/vibe β†’ vibe}/rules/standards/complexity-metrics.md +312 -312
  96. package/{.claude/vibe β†’ vibe}/rules/standards/naming-conventions.md +198 -198
  97. package/{.claude/vibe β†’ vibe}/setup.sh +31 -31
  98. package/{.claude/vibe β†’ vibe}/templates/constitution-template.md +184 -184
  99. package/{.claude/vibe β†’ vibe}/templates/contract-backend-template.md +517 -517
  100. package/{.claude/vibe β†’ vibe}/templates/contract-frontend-template.md +594 -594
  101. package/{.claude/vibe β†’ vibe}/templates/feature-template.md +96 -96
  102. package/{.claude/vibe β†’ vibe}/templates/spec-template.md +199 -199
@@ -1,931 +1,931 @@
1
- ---
2
- description: Execute implementation from SPEC
3
- argument-hint: "feature name" or --phase N
4
- ---
5
-
6
- # /vibe.run
7
-
8
- Execute **Scenario-Driven Implementation** with automatic quality verification.
9
-
10
- > **핡심 원칙**: μ‹œλ‚˜λ¦¬μ˜€κ°€ κ³§ κ΅¬ν˜„ λ‹¨μœ„μ΄μž 검증 κΈ°μ€€. λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€ 톡과 = ν’ˆμ§ˆ 보μž₯.
11
-
12
- ## Usage
13
-
14
- ```
15
- /vibe.run "feature-name" # Full implementation
16
- /vibe.run "feature-name" --phase 1 # Specific Phase only
17
- /vibe.run "feature-name" ultrawork # ULTRAWORK mode (recommended)
18
- /vibe.run "feature-name" ulw # Short alias for ultrawork
19
- ```
20
-
21
- ---
22
-
23
- ## **Scenario-Driven Development (SDD)**
24
-
25
- > λΉ„κ°œλ°œμžλ„ ν’ˆμ§ˆμ„ μ‹ λ’°ν•  수 μžˆλ„λ‘, **μ‹œλ‚˜λ¦¬μ˜€ = κ΅¬ν˜„ = 검증**을 μžλ™ν™”
26
-
27
- ### 핡심 흐름
28
-
29
- ```
30
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
31
- β”‚ SCENARIO-DRIVEN IMPLEMENTATION β”‚
32
- β”‚ β”‚
33
- β”‚ Feature 파일 λ‘œλ“œ β”‚
34
- β”‚ ↓ β”‚
35
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
36
- β”‚ β”‚ Scenario 1: Happy Path β”‚ β”‚
37
- β”‚ β”‚ Given β†’ When β†’ Then β”‚ β”‚
38
- β”‚ β”‚ ↓ β”‚ β”‚
39
- β”‚ β”‚ [κ΅¬ν˜„] β†’ [μ¦‰μ‹œ 검증] β†’ βœ… Pass β”‚ β”‚
40
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
41
- β”‚ ↓ β”‚
42
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
43
- β”‚ β”‚ Scenario 2: Edge Case β”‚ β”‚
44
- β”‚ β”‚ Given β†’ When β†’ Then β”‚ β”‚
45
- β”‚ β”‚ ↓ β”‚ β”‚
46
- β”‚ β”‚ [κ΅¬ν˜„] β†’ [μ¦‰μ‹œ 검증] β†’ ❌ Fail β†’ [μˆ˜μ •] β†’ βœ… Pass β”‚ β”‚
47
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
48
- β”‚ ↓ β”‚
49
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
50
- β”‚ β”‚ Scenario N: ... β”‚ β”‚
51
- β”‚ β”‚ [κ΅¬ν˜„] β†’ [μ¦‰μ‹œ 검증] β†’ βœ… Pass β”‚ β”‚
52
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
53
- β”‚ ↓ β”‚
54
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
55
- β”‚ β”‚ πŸ“Š QUALITY REPORT β”‚ β”‚
56
- β”‚ β”‚ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ β”‚ β”‚
57
- β”‚ β”‚ μ‹œλ‚˜λ¦¬μ˜€: 5/5 톡과 βœ… β”‚ β”‚
58
- β”‚ β”‚ ν’ˆμ§ˆ 점수: 94/100 β”‚ β”‚
59
- β”‚ β”‚ λΉŒλ“œ: βœ… | ν…ŒμŠ€νŠΈ: βœ… β”‚ β”‚
60
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
61
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
62
- ```
63
-
64
- ### μ‹œλ‚˜λ¦¬μ˜€ = κ΅¬ν˜„ λ‹¨μœ„
65
-
66
- **κΈ°μ‘΄ 방식 (Phase 기반)**:
67
- ```
68
- Phase 1 β†’ Phase 2 β†’ Phase 3 β†’ ... β†’ λ§ˆμ§€λ§‰μ— 검증
69
- ↓
70
- "μ–΄λ””μ„œ 잘λͺ»λμ§€?"
71
- ```
72
-
73
- **SDD 방식 (Scenario 기반)**:
74
- ```
75
- Scenario 1 β†’ κ΅¬ν˜„ β†’ 검증 βœ…
76
- Scenario 2 β†’ κ΅¬ν˜„ β†’ 검증 βœ…
77
- Scenario 3 β†’ κ΅¬ν˜„ β†’ 검증 ❌ β†’ μˆ˜μ • β†’ βœ…
78
- ...
79
- 전체 톡과 = ν’ˆμ§ˆ 보μž₯
80
- ```
81
-
82
- ### 검증 μžλ™ν™”
83
-
84
- 각 μ‹œλ‚˜λ¦¬μ˜€ κ΅¬ν˜„ ν›„ **μžλ™ 검증**:
85
-
86
- | 검증 ν•­λͺ© | μžλ™ 체크 |
87
- |-----------|-----------|
88
- | Given (μ „μ œμ‘°κ±΄) | μƒνƒœ/데이터 μ€€λΉ„ 확인 |
89
- | When (행동) | κΈ°λŠ₯ μ‹€ν–‰ κ°€λŠ₯ μ—¬λΆ€ |
90
- | Then (κ²°κ³Ό) | μ˜ˆμƒ κ²°κ³Ό 일치 μ—¬λΆ€ |
91
- | μ½”λ“œ ν’ˆμ§ˆ | λ³΅μž‘λ„, μŠ€νƒ€μΌ, λ³΄μ•ˆ |
92
-
93
- ### μ‹€νŒ¨ μ‹œ μžλ™ μˆ˜μ •
94
-
95
- ```
96
- Scenario 검증 μ‹€νŒ¨
97
- ↓
98
- [원인 뢄석] - μ–΄λ–€ Then 쑰건이 μ‹€νŒ¨?
99
- ↓
100
- [μˆ˜μ • κ΅¬ν˜„] - ν•΄λ‹Ή λΆ€λΆ„λ§Œ μˆ˜μ •
101
- ↓
102
- [μž¬κ²€μ¦] - λ‹€μ‹œ 체크
103
- ↓
104
- 톡과할 λ•ŒκΉŒμ§€ 반볡 (μ΅œλŒ€ 3회)
105
- ```
106
-
107
- ---
108
-
109
- ## **ULTRAWORK Mode** (ulw)
110
-
111
- > Include `ultrawork` or `ulw` in your command to activate **maximum performance mode**.
112
-
113
- ### What ULTRAWORK Enables
114
-
115
- When you include `ultrawork` (or `ulw`), ALL of these activate automatically:
116
-
117
- | Feature | Description |
118
- |---------|-------------|
119
- | **Parallel Exploration** | 3+ Task(haiku) agents run simultaneously |
120
- | **Boulder Loop** | Auto-continues until ALL phases complete |
121
- | **Context Compression** | Aggressive auto-save at 70%+ context |
122
- | **No Pause** | Doesn't wait for confirmation between phases |
123
- | **External LLMs** | Auto-consults GPT/Gemini if enabled |
124
- | **Error Recovery** | Auto-retries on failure (up to 3 times) |
125
-
126
- ### Boulder Loop (Inspired by Sisyphus)
127
-
128
- Like Sisyphus rolling the boulder, ULTRAWORK **keeps going until done**:
129
-
130
- ```
131
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
132
- β”‚ BOULDER LOOP (ultrawork) β”‚
133
- β”‚ β”‚
134
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
135
- β”‚ β”‚ Phase 1 │───→│ Phase 2 │───→│ Phase 3 │───→│ Phase N β”‚ β”‚
136
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
137
- β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
138
- β”‚ ↓ ↓ ↓ ↓ β”‚
139
- β”‚ [Parallel] [Parallel] [Parallel] [Parallel] β”‚
140
- β”‚ [Implement] [Implement] [Implement] [Implement] β”‚
141
- β”‚ [Test] [Test] [Test] [Test] β”‚
142
- β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
143
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
144
- β”‚ β”‚ β”‚
145
- β”‚ ↓ β”‚
146
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
147
- β”‚ β”‚ ALL DONE? β”‚ β”‚
148
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
149
- β”‚ β”‚ β”‚ β”‚
150
- β”‚ NO YES β”‚
151
- β”‚ β”‚ β”‚ β”‚
152
- β”‚ ↓ ↓ β”‚
153
- β”‚ [Continue] [πŸŽ‰ Complete!] β”‚
154
- β”‚ β”‚
155
- β”‚ NO STOPPING until acceptance criteria met or error limit hit β”‚
156
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
157
- ```
158
-
159
- ### ULTRAWORK Example
160
-
161
- ```
162
- User: /vibe.run "brick-game" ultrawork
163
-
164
- Claude:
165
- πŸš€ ULTRAWORK MODE ACTIVATED
166
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
167
-
168
- πŸ“„ SPEC: .claude/vibe/specs/brick-game.md
169
- 🎯 4 Phases detected
170
- ⚑ Boulder Loop: ENABLED (will continue until all phases complete)
171
- πŸ”„ Auto-retry: ON (max 3 per phase)
172
- πŸ’Ύ Context compression: AGGRESSIVE
173
-
174
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
175
- πŸ”οΈ BOULDER ROLLING... Phase 1/4
176
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
177
-
178
- ⚑ [PARALLEL] Launching 3 exploration agents...
179
- βœ… Exploration complete (7.2s)
180
- πŸ”¨ Implementing...
181
- βœ… Phase 1 complete
182
-
183
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
184
- πŸ”οΈ BOULDER ROLLING... Phase 2/4
185
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
186
-
187
- ⚑ [PARALLEL] Launching 3 exploration agents...
188
- βœ… Exploration complete (6.8s)
189
- πŸ”¨ Implementing...
190
- ❌ Test failed: collision detection
191
- πŸ”„ Auto-retry 1/3...
192
- πŸ”¨ Fixing...
193
- βœ… Phase 2 complete
194
-
195
- [...continues automatically...]
196
-
197
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
198
- πŸŽ‰ BOULDER REACHED THE TOP!
199
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
200
-
201
- βœ… All 4 phases complete
202
- βœ… All acceptance criteria passed
203
- βœ… Build succeeded
204
- βœ… Tests passed
205
-
206
- ⏱️ Total: 8m 24s
207
- πŸ“Š Retries: 2
208
- πŸ’Ύ Context saved: 3 checkpoints
209
- ```
210
-
211
- ### Normal vs ULTRAWORK Comparison
212
-
213
- | Aspect | Normal | ULTRAWORK |
214
- |--------|--------|-----------|
215
- | Phase transition | May pause | Auto-continues |
216
- | On error | Reports and stops | Auto-retries (3x) |
217
- | Context 70%+ | Warning only | Auto-compress + save |
218
- | Exploration | Sequential possible | FORCED parallel |
219
- | Completion | Phase-by-phase | Until ALL done |
220
-
221
- ---
222
-
223
- ## Rules Reference
224
-
225
- **Must follow `.claude/vibe/rules/`:**
226
- - `core/development-philosophy.md` - Surgical precision, modify only requested scope
227
- - `core/quick-start.md` - Korean, DRY, SRP, YAGNI
228
- - `standards/complexity-metrics.md` - Functions ≀20 lines, nesting ≀3 levels
229
- - `quality/checklist.md` - Code quality checklist
230
-
231
- ## Description
232
-
233
- Read PTCF structured SPEC document and execute implementation immediately.
234
-
235
- > **PLAN, TASKS documents unnecessary** - SPEC is the executable prompt
236
-
237
- ## Model Orchestration
238
-
239
- Automatically select optimal model based on task type:
240
-
241
- ```
242
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
243
- β”‚ Opus 4.5 (Orchestrator) β”‚
244
- β”‚ - Coordinate overall flow β”‚
245
- β”‚ - Final decisions/review β”‚
246
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
247
- β”‚
248
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
249
- ↓ ↓ ↓
250
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
251
- β”‚ Haiku β”‚ β”‚ Sonnet β”‚ β”‚ Haiku β”‚
252
- β”‚(Explore)β”‚ β”‚ (Impl) β”‚ β”‚ (Test) β”‚
253
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
254
- ```
255
-
256
- ### Task Calls by Role
257
-
258
- | Task Type | Model | Task Parameter |
259
- |-----------|-------|----------------|
260
- | Codebase exploration | Haiku 4.5 | `model: "haiku"` |
261
- | Core implementation | Sonnet 4 | `model: "sonnet"` |
262
- | Test writing | Haiku 4.5 | `model: "haiku"` |
263
- | Architecture decisions | Opus 4.5 | Main session |
264
- | Final review | Opus 4.5 | Main session |
265
-
266
- ### External LLM Usage (When Enabled)
267
-
268
- When external LLMs are enabled in `.claude/vibe/config.json`:
269
-
270
- | Role | Prefix | Condition |
271
- |------|--------|-----------|
272
- | Architecture/Debugging | `gpt-`, `gpt.`, `μ§€ν”Όν‹°-` | When `vibe gpt login` executed (Web Search enabled) |
273
- | UI/UX Design, Exploration | `gemini-`, `gemini.`, `μ œλ―Έλ‚˜μ΄-` | When `vibe gemini login` executed (Google Search enabled) |
274
-
275
- When external LLM enabled, use hook prefixes:
276
- - `gpt.질문` - GPT architecture consultation (with web search)
277
- - `gemini.질문` - Gemini 질문/상담
278
- - `gemini- Analyze this code: [code]` - μ½”λ“œ 뢄석
279
- - `gemini- Review UI/UX for: [component]` - UI/UX 리뷰
280
-
281
- ### External LLM Fallback
282
-
283
- **IMPORTANT**: When GPT/Gemini hook fails, Claude MUST handle the task directly:
284
-
285
- **Fallback behavior**:
286
- - Do NOT retry the external LLM call
287
- - Claude handles the task using its own capabilities
288
- - Continue with the implementation without interruption
289
- - Log the fallback but don't block progress
290
-
291
- ## Vibe Tools (Semantic Analysis & Memory)
292
-
293
- Use vibe tools for accurate codebase understanding and session continuity.
294
-
295
- ### Tool Invocation
296
-
297
- All tools are called via:
298
- ```bash
299
- node -e "import('@su-record/vibe/tools').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
300
- ```
301
-
302
- ### Semantic Analysis Tools
303
-
304
- | Tool | Purpose | Usage |
305
- |------|---------|-------|
306
- | `findSymbol` | Find symbol definitions | `{symbolName: 'functionName', searchPath: '.'}` |
307
- | `findReferences` | Find all references | `{symbolName: 'functionName', searchPath: '.'}` |
308
- | `analyzeComplexity` | Analyze code complexity | `{filePath: 'src/file.ts'}` |
309
- | `validateCodeQuality` | Validate code quality | `{filePath: 'src/file.ts'}` |
310
-
311
- **Example - Find symbol:**
312
- ```bash
313
- node -e "import('@su-record/vibe/tools').then(t => t.findSymbol({symbolName: 'login', searchPath: '.'}).then(r => console.log(r.content[0].text)))"
314
- ```
315
-
316
- ### Memory Tools
317
-
318
- | Tool | Purpose | Usage |
319
- |------|---------|-------|
320
- | `saveMemory` | Save important decisions | `{key: 'decision-name', value: 'content', category: 'project'}` |
321
- | `recallMemory` | Recall saved memory | `{key: 'decision-name'}` |
322
- | `listMemories` | List all memories | `{category: 'project'}` |
323
-
324
- **Example - Save important decision:**
325
- ```bash
326
- node -e "import('@su-record/vibe/tools').then(t => t.saveMemory({key: 'auth-pattern', value: 'Using JWT with refresh tokens', category: 'project'}).then(r => console.log(r.content[0].text)))"
327
- ```
328
-
329
- ### Session Management (Auto via Hooks)
330
-
331
- - **Session start**: Hook auto-calls `startSession` to restore previous context
332
- - **Context 80%+**: Hook auto-calls `autoSaveContext` to preserve state
333
-
334
- ## Process
335
-
336
- ### 1. Load SPEC + Feature
337
-
338
- ```
339
- πŸ“„ .claude/vibe/specs/{feature-name}.md β†’ SPEC (ꡬ쑰, μ œμ•½, μ»¨ν…μŠ€νŠΈ)
340
- πŸ“„ .claude/vibe/features/{feature-name}.feature β†’ Feature (μ‹œλ‚˜λ¦¬μ˜€ = κ΅¬ν˜„ λ‹¨μœ„)
341
- ```
342
-
343
- **Feature 파일이 μ—†μœΌλ©΄ μ—λŸ¬**:
344
- ```
345
- ❌ Feature 파일이 μ—†μŠ΅λ‹ˆλ‹€.
346
- λ¨Όμ € /vibe.spec "{feature-name}"을 μ‹€ν–‰ν•˜μ„Έμš”.
347
- ```
348
-
349
- ### 2. Scenario λͺ©λ‘ μΆ”μΆœ
350
-
351
- Feature νŒŒμΌμ—μ„œ λͺ¨λ“  Scenario μΆ”μΆœ:
352
-
353
- ```markdown
354
- ## Scenarios to Implement
355
-
356
- | # | Scenario | Status |
357
- |---|----------|--------|
358
- | 1 | μœ νš¨ν•œ 둜그인 성곡 | ⬜ |
359
- | 2 | 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ | ⬜ |
360
- | 3 | 이메일 ν˜•μ‹ 검증 | ⬜ |
361
- | 4 | λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 | ⬜ |
362
-
363
- Total: 4 scenarios
364
- ```
365
-
366
- ### 3. Scenario-by-Scenario Implementation (핡심)
367
-
368
- **각 μ‹œλ‚˜λ¦¬μ˜€λ§ˆλ‹€**:
369
-
370
- ```
371
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
372
- 🎯 Scenario 1/4: μœ νš¨ν•œ 둜그인 성곡
373
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
374
-
375
- Given: μ‚¬μš©μžκ°€ λ“±λ‘λ˜μ–΄ μžˆλ‹€
376
- When: μœ νš¨ν•œ 이메일과 λΉ„λ°€λ²ˆν˜Έλ‘œ 둜그인
377
- Then: 둜그인 성곡 + JWT 토큰 λ°˜ν™˜
378
-
379
- [Step 1] κ΅¬ν˜„ 뢄석...
380
- - ν•„μš”ν•œ 파일: auth.service.ts, login.controller.ts
381
- - κ΄€λ ¨ μ½”λ“œ 탐색 쀑...
382
-
383
- [Step 2] κ΅¬ν˜„ 쀑...
384
- βœ… auth.service.ts - login() λ©”μ„œλ“œ μΆ”κ°€
385
- βœ… login.controller.ts - POST /login μ—”λ“œν¬μΈνŠΈ
386
-
387
- [Step 3] 검증 쀑...
388
- βœ… Given: ν…ŒμŠ€νŠΈ μ‚¬μš©μž 생성 κ°€λŠ₯
389
- βœ… When: 둜그인 API 호좜 성곡
390
- βœ… Then: JWT 토큰 λ°˜ν™˜ 확인
391
-
392
- βœ… Scenario 1 톡과!
393
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
394
- ```
395
-
396
- **μ‹€νŒ¨ μ‹œ**:
397
-
398
- ```
399
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
400
- 🎯 Scenario 2/4: 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬
401
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
402
-
403
- [Step 3] 검증 쀑...
404
- βœ… Given: ν…ŒμŠ€νŠΈ μ‚¬μš©μž 쑴재
405
- βœ… When: 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έλ‘œ 둜그인 μ‹œλ„
406
- ❌ Then: "Invalid credentials" μ—λŸ¬ λ©”μ‹œμ§€
407
- μ‹€μ œ: "Error occurred" λ°˜ν™˜λ¨
408
-
409
- [μžλ™ μˆ˜μ • 1/3]
410
- 원인: μ—λŸ¬ λ©”μ‹œμ§€ ν•˜λ“œμ½”λ”© μ•ˆλ¨
411
- μˆ˜μ •: auth.service.ts line 42
412
-
413
- [μž¬κ²€μ¦]
414
- βœ… Then: "Invalid credentials" μ—λŸ¬ λ©”μ‹œμ§€
415
-
416
- βœ… Scenario 2 톡과! (μˆ˜μ • 1회)
417
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
418
- ```
419
-
420
- ---
421
-
422
- ## **CRITICAL: Parallel Sub-Agent Execution**
423
-
424
- > **MUST USE PARALLEL TASK CALLS** - This is REQUIRED, not optional.
425
- > Sequential execution when parallel is possible = VIOLATION of this workflow.
426
-
427
- ### Mandatory Parallel Exploration (Phase Start)
428
-
429
- **BEFORE any implementation, you MUST launch these Task calls IN PARALLEL (single message, multiple tool calls):**
430
-
431
- ```
432
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
433
- β”‚ STEP 1: PARALLEL EXPLORATION (REQUIRED) β”‚
434
- β”‚ β”‚
435
- β”‚ Launch ALL of these in ONE message: β”‚
436
- β”‚ β”‚
437
- β”‚ Task(haiku) ─┬─→ "Analyze related files in <context>" β”‚
438
- β”‚ β”‚ β”‚
439
- β”‚ Task(haiku) ─┼─→ "Check dependencies and imports" β”‚
440
- β”‚ β”‚ β”‚
441
- β”‚ Task(haiku) ─┴─→ "Find existing patterns and conventions" β”‚
442
- β”‚ β”‚
443
- β”‚ [If GPT enabled] gpt- Review architecture: [design] β”‚
444
- β”‚ [If Gemini enabled] gemini- Suggest UX for: [component] β”‚
445
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
446
- β”‚
447
- ↓ (wait for all to complete)
448
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
449
- β”‚ STEP 2: SYNTHESIZE (Opus) β”‚
450
- β”‚ - Review all exploration results β”‚
451
- β”‚ - Decide implementation approach β”‚
452
- β”‚ - Identify files to modify/create β”‚
453
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
454
- β”‚
455
- ↓
456
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
457
- β”‚ STEP 3: IMPLEMENT + BACKGROUND AGENTS (PARALLEL) β”‚
458
- β”‚ β”‚
459
- β”‚ Main Agent (sonnet): β”‚
460
- β”‚ └─→ Execute current phase implementation β”‚
461
- β”‚ β”‚
462
- β”‚ Background Agents (haiku, run_in_background=true): β”‚
463
- β”‚ β”œβ”€β†’ Task: "Prepare Phase N+1 - analyze required files" β”‚
464
- β”‚ β”œβ”€β†’ Task: "Pre-generate test cases for current implementation" β”‚
465
- β”‚ └─→ Task: "Search for related types/interfaces needed" β”‚
466
- β”‚ β”‚
467
- β”‚ [ULTRAWORK] All 4 agents run simultaneously! β”‚
468
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
469
- β”‚
470
- ↓ (main completes, check backgrounds)
471
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
472
- β”‚ STEP 4: TEST + PHASE PIPELINING β”‚
473
- β”‚ β”‚
474
- β”‚ Current Phase: β”‚
475
- β”‚ └─→ Task(haiku): Write tests using pre-generated cases β”‚
476
- β”‚ β”‚
477
- β”‚ Next Phase Prep (from background results): β”‚
478
- β”‚ └─→ Already have file analysis, ready to start immediately β”‚
479
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
480
- ```
481
-
482
- ### Parallel Task Call Pattern (MUST FOLLOW)
483
-
484
- **Correct - Single message with multiple parallel Tasks:**
485
- ```
486
- <message>
487
- Task(haiku, "Analyze src/components/ for existing patterns")
488
- Task(haiku, "Check package.json dependencies")
489
- Task(haiku, "Find usage of similar features in codebase")
490
- </message>
491
- β†’ All 3 run simultaneously, ~3x faster
492
- ```
493
-
494
- **WRONG - Sequential calls (DO NOT DO THIS):**
495
- ```
496
- <message>Task(haiku, "Analyze...")</message>
497
- <message>Task(haiku, "Check...")</message>
498
- <message>Task(haiku, "Find...")</message>
499
- β†’ 3x slower, wastes time
500
- ```
501
-
502
- ### Background Agent Pattern (ULTRAWORK) via Orchestrator
503
-
504
- **Launch background agents for next phase via Orchestrator:**
505
- ```bash
506
- # Start background agent (doesn't block)
507
- node -e "import('@su-record/vibe/orchestrator').then(o => o.runAgent('Phase 2 prep: Analyze auth API endpoints', 'phase2-prep').then(r => console.log(r.content[0].text)))"
508
-
509
- # Multiple backgrounds in parallel
510
- node -e "import('@su-record/vibe/orchestrator').then(async o => {
511
- await Promise.all([
512
- o.runAgent('Phase 2 prep: Analyze auth API endpoints', 'phase2-prep'),
513
- o.runAgent('Pre-generate test cases for login form', 'test-prep'),
514
- o.runAgent('Find existing validation patterns', 'pattern-finder')
515
- ]);
516
- console.log('All background agents started');
517
- })"
518
- ```
519
-
520
- **Check background agent status:**
521
- ```bash
522
- node -e "import('@su-record/vibe/orchestrator').then(o => console.log(o.status().content[0].text))"
523
- ```
524
-
525
- **Get result when ready:**
526
- ```bash
527
- node -e "import('@su-record/vibe/orchestrator').then(o => o.getResult('SESSION_ID').then(r => console.log(r.content[0].text)))"
528
- ```
529
-
530
- **Why Background Agents Matter:**
531
-
532
- | Without Background | With Background |
533
- |--------------------|-----------------|
534
- | Phase 1: 60s | Phase 1: 60s (+ backgrounds running) |
535
- | Phase 2 prep: 20s | Phase 2 prep: 0s (already done!) |
536
- | Phase 2: 60s | Phase 2: 60s |
537
- | **Total: 140s** | **Total: 120s** |
538
-
539
- For 5 phases: 4 Γ— 20s saved = **80s faster**
540
-
541
- ### Why Parallel Matters
542
-
543
- | Approach | Time | Cache Benefit |
544
- |----------|------|---------------|
545
- | Sequential (3 Tasks) | ~30s | Cache cold on each |
546
- | **Parallel (3 Tasks)** | **~10s** | **Cache warmed once, shared** |
547
-
548
- vibe ProjectCache (LRU) caches ts-morph parsing results. Parallel calls share the warmed cache.
549
-
550
- ### Phase Execution Flow (ULTRAWORK Pipeline)
551
-
552
- ```
553
- Phase N Start
554
- β”‚
555
- β”œβ”€β†’ [PARALLEL] Task(haiku) Γ— 3: Exploration
556
- β”‚ - Related code analysis
557
- β”‚ - Dependency check
558
- β”‚ - Pattern discovery
559
- β”‚
560
- ↓ (all complete)
561
- β”‚
562
- β”œβ”€β†’ Opus: Synthesize and decide
563
- β”‚
564
- β”œβ”€β†’ [PARALLEL PIPELINE] ←── KEY SPEED OPTIMIZATION
565
- β”‚ β”‚
566
- β”‚ β”œβ”€β†’ Main: Task(sonnet) Implementation
567
- β”‚ β”‚
568
- β”‚ └─→ Background (run_in_background=true):
569
- β”‚ β”œβ”€β†’ Task(haiku): Phase N+1 file analysis
570
- β”‚ β”œβ”€β†’ Task(haiku): Test case preparation
571
- β”‚ └─→ Task(haiku): Type/interface lookup
572
- β”‚
573
- ↓ (main completes)
574
- β”‚
575
- β”œβ”€β†’ Task(haiku): Tests (uses pre-generated cases)
576
- β”‚
577
- ↓
578
- Phase N Complete
579
- β”‚
580
- ↓ (Background results ready - NO WAIT for Phase N+1 exploration!)
581
- β”‚
582
- Phase N+1 Start (IMMEDIATE - exploration already done!)
583
- ```
584
-
585
- **Speed Comparison:**
586
-
587
- | Mode | Phase Time | 5 Phases Total |
588
- |------|------------|----------------|
589
- | Sequential | ~2min/phase | ~10min |
590
- | Parallel Exploration | ~1.5min/phase | ~7.5min |
591
- | **ULTRAWORK Pipeline** | **~1min/phase** | **~5min** |
592
-
593
- **Why Pipeline is Faster:**
594
- - Background agents prepare next phase WHILE current phase implements
595
- - No idle time between phases
596
- - Test cases pre-generated during implementation
597
- - Cache stays warm across parallel tasks
598
-
599
- ---
600
-
601
- 1. **Related code analysis**: Task(haiku) explores `<context>` related code
602
- 2. **File creation/modification**: Task(sonnet) implements per `<output_format>`
603
- 3. **Constraint compliance**: Check `<constraints>`
604
- 4. **Run verification**: Execute verification commands
605
-
606
- ### 4. Gemini μ½”λ“œ 리뷰 + μžλ™ μˆ˜μ • (NEW)
607
-
608
- λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€ κ΅¬ν˜„ μ™„λ£Œ ν›„, **Geminiκ°€ μ½”λ“œλ₯Ό λ¦¬λ·°ν•˜κ³  ν”Όλ“œλ°± 기반으둜 μžλ™ μˆ˜μ •**:
609
-
610
- ```
611
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
612
- πŸ” GEMINI CODE REVIEW
613
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
614
-
615
- [Step 1] Geminiμ—κ²Œ κ΅¬ν˜„ μ½”λ“œ 전솑...
616
- - λ³€κ²½λœ 파일: auth.service.ts, auth.controller.ts, ...
617
-
618
- [Step 2] Gemini 리뷰 결과:
619
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
620
- β”‚ πŸ“ Gemini Feedback β”‚
621
- β”‚ β”‚
622
- β”‚ 1. [κ°œμ„ ] auth.service.ts:24 β”‚
623
- β”‚ λΉ„λ°€λ²ˆν˜Έ 비ꡐ μ‹œ timing attack λ°©μ§€ ν•„μš” β”‚
624
- β”‚ β†’ crypto.timingSafeEqual() μ‚¬μš© ꢌμž₯ β”‚
625
- β”‚ β”‚
626
- β”‚ 2. [κ°œμ„ ] auth.controller.ts:15 β”‚
627
- β”‚ rate limiting 미적용 β”‚
628
- β”‚ β†’ 둜그인 μ‹œλ„ μ œν•œ μΆ”κ°€ ꢌμž₯ β”‚
629
- β”‚ β”‚
630
- β”‚ 3. [μŠ€νƒ€μΌ] auth.service.ts:42 β”‚
631
- β”‚ 맀직 λ„˜λ²„ μ‚¬μš© β”‚
632
- β”‚ β†’ μƒμˆ˜λ‘œ μΆ”μΆœ ꢌμž₯ β”‚
633
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
634
-
635
- [Step 3] ν”Όλ“œλ°± 기반 μžλ™ μˆ˜μ •...
636
- βœ… auth.service.ts:24 - timingSafeEqual 적용
637
- βœ… auth.controller.ts:15 - rate limiter μΆ”κ°€
638
- βœ… auth.service.ts:42 - μƒμˆ˜ μΆ”μΆœ
639
-
640
- [Step 4] μž¬κ²€μ¦...
641
- βœ… λΉŒλ“œ 성곡
642
- βœ… ν…ŒμŠ€νŠΈ 톡과
643
-
644
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
645
- βœ… Gemini 리뷰 μ™„λ£Œ! 3개 κ°œμ„ μ‚¬ν•­ 반영
646
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
647
- ```
648
-
649
- **MUST: Gemini μ½”λ“œ 리뷰 (ν•„μˆ˜)**
650
-
651
- Geminiκ°€ ν™œμ„±ν™”λœ 경우, **λ°˜λ“œμ‹œ** μ•„λž˜ 훅을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œ 리뷰λ₯Ό λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€:
652
-
653
- ```
654
- gemini- Review this code for security, performance, best-practices:
655
- [λ³€κ²½λœ νŒŒμΌλ“€μ˜ 전체 μ½”λ“œ]
656
- SPEC μš”κ΅¬μ‚¬ν•­: [μš”μ•½]
657
- μ‹œλ‚˜λ¦¬μ˜€: [κ΅¬ν˜„ν•œ μ‹œλ‚˜λ¦¬μ˜€ λͺ©λ‘]
658
- ```
659
-
660
- λ˜λŠ” ν•œκΈ€λ‘œ:
661
- ```
662
- μ œλ―Έλ‚˜μ΄- 이 μ½”λ“œ λ¦¬λ·°ν•΄μ€˜ (λ³΄μ•ˆ, μ„±λŠ₯, λ² μŠ€νŠΈν”„λž™ν‹°μŠ€):
663
- [μ½”λ“œ]
664
- ```
665
-
666
- **호좜 μˆœμ„œ:**
667
- 1. λ³€κ²½λœ λͺ¨λ“  파일 λ‚΄μš©μ„ μ§ˆλ¬Έμ— 포함
668
- 2. SPEC의 핡심 μš”κ΅¬μ‚¬ν•­ μš”μ•½ μΆ”κ°€
669
- 3. ν›… 호좜 μ‹€ν–‰
670
- 4. μ‘λ‹΅μ˜ ν”Όλ“œλ°± ν•­λͺ©λ³„λ‘œ μ½”λ“œ μˆ˜μ •
671
- 5. λΉŒλ“œ/ν…ŒμŠ€νŠΈ μž¬μ‹€ν–‰
672
-
673
- **fallback 처리:**
674
- - `"status": "fallback"` 응닡 μ‹œ β†’ μŠ€ν‚΅ν•˜κ³  λ‹€μŒ λ‹¨κ³„λ‘œ μ§„ν–‰
675
- - λ„€νŠΈμ›Œν¬ μ—λŸ¬ μ‹œ β†’ 1회 μž¬μ‹œλ„ ν›„ μŠ€ν‚΅
676
-
677
- **리뷰 적용 κ·œμΉ™:**
678
-
679
- | ν”Όλ“œλ°± μœ ν˜• | 처리 |
680
- |------------|------|
681
- | λ³΄μ•ˆ 취약점 | μ¦‰μ‹œ μžλ™ μˆ˜μ • |
682
- | μ„±λŠ₯ κ°œμ„  | μ¦‰μ‹œ μžλ™ μˆ˜μ • |
683
- | 베슀트 ν”„λž™ν‹°μŠ€ | μžλ™ μˆ˜μ • |
684
- | μŠ€νƒ€μΌ/μ·¨ν–₯ | 선택적 적용 (ν”„λ‘œμ νŠΈ μ»¨λ²€μ…˜ μš°μ„ ) |
685
-
686
- **쑰건:**
687
- - Gemini MCPκ°€ ν™œμ„±ν™”λœ κ²½μš°μ—λ§Œ μ‹€ν–‰ (`vibe gemini --auth`)
688
- - fallback 응닡 μ‹œ μŠ€ν‚΅ν•˜κ³  λ‹€μŒ λ‹¨κ³„λ‘œ μ§„ν–‰
689
- - μˆ˜μ • ν›„ λ°˜λ“œμ‹œ λΉŒλ“œ/ν…ŒμŠ€νŠΈ μž¬κ²€μ¦
690
-
691
- ### 5. Quality Report (μžλ™ 생성)
692
-
693
- λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€ μ™„λ£Œ + Gemini 리뷰 ν›„ **ν’ˆμ§ˆ 리포트 μžλ™ 생성**:
694
-
695
- ```
696
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
697
- β”‚ πŸ“Š QUALITY REPORT: login β”‚
698
- β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
699
- β”‚ β”‚
700
- β”‚ βœ… μ‹œλ‚˜λ¦¬μ˜€: 4/4 톡과 β”‚
701
- β”‚ β”‚
702
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
703
- β”‚ β”‚ # β”‚ Scenario β”‚ Status β”‚ Retries β”‚ β”‚ β”‚
704
- β”‚ │───│───────────────────────────│────────│─────────│ β”‚ β”‚
705
- β”‚ β”‚ 1 β”‚ μœ νš¨ν•œ 둜그인 성곡 β”‚ βœ… β”‚ 0 β”‚ β”‚ β”‚
706
- β”‚ β”‚ 2 β”‚ 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ β”‚ βœ… β”‚ 1 β”‚ β”‚ β”‚
707
- β”‚ β”‚ 3 β”‚ 이메일 ν˜•μ‹ 검증 β”‚ βœ… β”‚ 0 β”‚ β”‚ β”‚
708
- β”‚ β”‚ 4 β”‚ λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 β”‚ βœ… β”‚ 0 β”‚ β”‚ β”‚
709
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
710
- β”‚ β”‚
711
- β”‚ πŸ“ˆ ν’ˆμ§ˆ 점수: 94/100 β”‚
712
- β”‚ β”‚
713
- β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
714
- β”‚ β”‚ ν•­λͺ© β”‚ κ²°κ³Ό β”‚ λΉ„κ³  β”‚ β”‚
715
- β”‚ │───────────────────│───────│─────────────────────────────│ β”‚
716
- β”‚ β”‚ λΉŒλ“œ β”‚ βœ… β”‚ npm run build 성곡 β”‚ β”‚
717
- β”‚ β”‚ ν…ŒμŠ€νŠΈ β”‚ βœ… β”‚ 12/12 톡과 β”‚ β”‚
718
- β”‚ β”‚ νƒ€μž… 검사 β”‚ βœ… β”‚ μ—λŸ¬ 0개 β”‚ β”‚
719
- β”‚ β”‚ λ³΅μž‘λ„ β”‚ βœ… β”‚ λͺ¨λ“  ν•¨μˆ˜ ≀30쀄 β”‚ β”‚
720
- β”‚ β”‚ λ³΄μ•ˆ β”‚ βœ… β”‚ 취약점 0개 β”‚ β”‚
721
- β”‚ β”‚ Gemini 리뷰 β”‚ βœ… β”‚ 3개 κ°œμ„ μ‚¬ν•­ 반영 β”‚ β”‚
722
- β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
723
- β”‚ β”‚
724
- β”‚ ⏱️ 총 μ†Œμš”: 3m 42s β”‚
725
- β”‚ β”‚
726
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
727
- ```
728
-
729
- **μ‚¬μš©μžκ°€ 확인할 것**:
730
- - μ‹œλ‚˜λ¦¬μ˜€ ν†΅κ³Όμœ¨ (4/4 = 100%)
731
- - ν’ˆμ§ˆ 점수 (94/100)
732
- - λΉŒλ“œ/ν…ŒμŠ€νŠΈ μƒνƒœ
733
-
734
- **μ΄κ²ƒλ§Œ 보면 ν’ˆμ§ˆμ„ μ‹ λ’°ν•  수 있음.**
735
-
736
- ### 6. Update Feature File
737
-
738
- μ‹œλ‚˜λ¦¬μ˜€ μƒνƒœ μžλ™ μ—…λ°μ΄νŠΈ:
739
-
740
- ```markdown
741
- ## Coverage
742
-
743
- | Scenario | SPEC AC | Status |
744
- |----------|---------|--------|
745
- | μœ νš¨ν•œ 둜그인 성곡 | AC-1 | βœ… |
746
- | 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ | AC-2 | βœ… |
747
- | 이메일 ν˜•μ‹ 검증 | AC-3 | βœ… |
748
- | λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 | AC-4 | βœ… |
749
-
750
- **Last verified**: 2024-01-15 14:32
751
- **Quality score**: 94/100
752
- ```
753
-
754
- ## TRUST 5 Principles
755
-
756
- Follow during implementation:
757
-
758
- | Principle | Description |
759
- |-----------|-------------|
760
- | **T**est-first | Write tests first |
761
- | **R**eadable | Clear code |
762
- | **U**nified | Consistent style |
763
- | **S**ecured | Consider security |
764
- | **T**rackable | Logging, monitoring |
765
-
766
- ## Input
767
-
768
- - `.claude/vibe/specs/{feature-name}.md` (PTCF SPEC)
769
- - `.claude/vibe/features/{feature-name}.feature` (BDD)
770
- - `CLAUDE.md` (project context)
771
-
772
- ## Output
773
-
774
- - Implemented code files
775
- - Test files
776
- - Updated SPEC document (checkmarks)
777
-
778
- ## Example
779
-
780
- ```
781
- User: /vibe.run "login"
782
-
783
- Claude:
784
- πŸ“„ Loading SPEC: .claude/vibe/specs/login.md
785
- πŸ“„ Loading Feature: .claude/vibe/features/login.feature
786
-
787
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
788
- πŸ“‹ Scenarios to Implement
789
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
790
-
791
- | # | Scenario | Status |
792
- |---|----------|--------|
793
- | 1 | μœ νš¨ν•œ 둜그인 성곡 | ⬜ |
794
- | 2 | 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ | ⬜ |
795
- | 3 | 이메일 ν˜•μ‹ 검증 | ⬜ |
796
- | 4 | λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 | ⬜ |
797
-
798
- Total: 4 scenarios
799
-
800
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
801
- 🎯 Scenario 1/4: μœ νš¨ν•œ 둜그인 성곡
802
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
803
-
804
- Given: μ‚¬μš©μžκ°€ λ“±λ‘λ˜μ–΄ μžˆλ‹€
805
- When: μœ νš¨ν•œ 이메일과 λΉ„λ°€λ²ˆν˜Έλ‘œ 둜그인
806
- Then: 둜그인 성곡 + JWT 토큰 λ°˜ν™˜
807
-
808
- ⚑ [PARALLEL] 탐색 쀑...
809
- βœ… 탐색 μ™„λ£Œ (2.1s)
810
-
811
- πŸ”¨ κ΅¬ν˜„ 쀑...
812
- βœ… auth.service.ts - login() μΆ”κ°€
813
- βœ… auth.controller.ts - POST /login
814
-
815
- πŸ” 검증 쀑...
816
- βœ… Given: OK
817
- βœ… When: OK
818
- βœ… Then: OK
819
-
820
- βœ… Scenario 1 톡과!
821
-
822
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
823
- 🎯 Scenario 2/4: 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬
824
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
825
-
826
- πŸ”¨ κ΅¬ν˜„ 쀑...
827
- βœ… auth.service.ts - λΉ„λ°€λ²ˆν˜Έ 검증 둜직
828
-
829
- πŸ” 검증 쀑...
830
- βœ… Given: OK
831
- βœ… When: OK
832
- ❌ Then: "Invalid credentials" μ—λŸ¬ λ©”μ‹œμ§€
833
- μ‹€μ œ: "Error" λ°˜ν™˜
834
-
835
- πŸ”„ μžλ™ μˆ˜μ • 1/3...
836
- μˆ˜μ •: auth.service.ts line 42
837
-
838
- πŸ” μž¬κ²€μ¦...
839
- βœ… Then: OK
840
-
841
- βœ… Scenario 2 톡과! (μˆ˜μ • 1회)
842
-
843
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
844
- 🎯 Scenario 3/4: 이메일 ν˜•μ‹ 검증
845
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
846
-
847
- πŸ”¨ κ΅¬ν˜„ 쀑...
848
- πŸ” 검증 쀑...
849
- βœ… Scenario 3 톡과!
850
-
851
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
852
- 🎯 Scenario 4/4: λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크
853
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
854
-
855
- πŸ”¨ κ΅¬ν˜„ 쀑...
856
- πŸ” 검증 쀑...
857
- βœ… Scenario 4 톡과!
858
-
859
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
860
- πŸ” GEMINI CODE REVIEW
861
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
862
-
863
- πŸ“€ Geminiμ—κ²Œ μ½”λ“œ 전솑 쀑...
864
- πŸ“ Gemini ν”Όλ“œλ°±:
865
- 1. [λ³΄μ•ˆ] timing attack λ°©μ§€ ν•„μš” β†’ μˆ˜μ • 쀑...
866
- 2. [μ„±λŠ₯] λΆˆν•„μš”ν•œ DB 호좜 β†’ μˆ˜μ • 쀑...
867
-
868
- βœ… 2개 κ°œμ„ μ‚¬ν•­ μžλ™ 반영
869
- πŸ” μž¬κ²€μ¦... βœ… 톡과
870
-
871
- β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
872
- β”‚ πŸ“Š QUALITY REPORT: login β”‚
873
- β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
874
- β”‚ β”‚
875
- β”‚ βœ… μ‹œλ‚˜λ¦¬μ˜€: 4/4 톡과 β”‚
876
- β”‚ β”‚
877
- β”‚ | # | Scenario | Status | Retries | β”‚
878
- β”‚ |---|───────────────────────|───────|─────────| β”‚
879
- β”‚ | 1 | μœ νš¨ν•œ 둜그인 성곡 | βœ… | 0 | β”‚
880
- β”‚ | 2 | 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ | βœ… | 1 | β”‚
881
- β”‚ | 3 | 이메일 ν˜•μ‹ 검증 | βœ… | 0 | β”‚
882
- β”‚ | 4 | λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 | βœ… | 0 | β”‚
883
- β”‚ β”‚
884
- β”‚ πŸ“ˆ ν’ˆμ§ˆ 점수: 94/100 β”‚
885
- β”‚ λΉŒλ“œ: βœ… | ν…ŒμŠ€νŠΈ: βœ… | νƒ€μž…: βœ… | Gemini: βœ… (2개 반영) β”‚
886
- β”‚ β”‚
887
- β”‚ ⏱️ 총 μ†Œμš”: 3m 42s β”‚
888
- β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
889
-
890
- πŸŽ‰ κ΅¬ν˜„ μ™„λ£Œ! λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€ 톡과 + Gemini 리뷰 반영.
891
- ```
892
-
893
- ### Phase-specific Execution
894
-
895
- ```
896
- User: /vibe.run "brick-game" --phase 2
897
-
898
- Claude:
899
- πŸ“„ Reading SPEC: .claude/vibe/specs/brick-game.md
900
- 🎯 Executing Phase 2 only.
901
-
902
- Phase 2: Game Logic
903
- 1. [ ] Paddle movement implementation
904
- 2. [ ] Ball physics engine
905
- 3. [ ] Brick collision handling
906
- 4. [ ] Score system
907
- 5. [ ] Game over conditions
908
-
909
- ⚑ Launching parallel exploration...
910
- [Task(haiku) Γ— 3 launched in parallel]
911
-
912
- πŸš€ Starting implementation...
913
- ```
914
-
915
- ## Error Handling
916
-
917
- On failure:
918
- 1. Check error message
919
- 2. Review `<constraints>`
920
- 3. Fix code and retry
921
- 4. If continues to fail, report to user
922
-
923
- ## Next Step
924
-
925
- ```
926
- /vibe.verify "brick-game"
927
- ```
928
-
929
- ---
930
-
931
- ARGUMENTS: $ARGUMENTS
1
+ ---
2
+ description: Execute implementation from SPEC
3
+ argument-hint: "feature name" or --phase N
4
+ ---
5
+
6
+ # /vibe.run
7
+
8
+ Execute **Scenario-Driven Implementation** with automatic quality verification.
9
+
10
+ > **핡심 원칙**: μ‹œλ‚˜λ¦¬μ˜€κ°€ κ³§ κ΅¬ν˜„ λ‹¨μœ„μ΄μž 검증 κΈ°μ€€. λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€ 톡과 = ν’ˆμ§ˆ 보μž₯.
11
+
12
+ ## Usage
13
+
14
+ ```
15
+ /vibe.run "feature-name" # Full implementation
16
+ /vibe.run "feature-name" --phase 1 # Specific Phase only
17
+ /vibe.run "feature-name" ultrawork # ULTRAWORK mode (recommended)
18
+ /vibe.run "feature-name" ulw # Short alias for ultrawork
19
+ ```
20
+
21
+ ---
22
+
23
+ ## **Scenario-Driven Development (SDD)**
24
+
25
+ > λΉ„κ°œλ°œμžλ„ ν’ˆμ§ˆμ„ μ‹ λ’°ν•  수 μžˆλ„λ‘, **μ‹œλ‚˜λ¦¬μ˜€ = κ΅¬ν˜„ = 검증**을 μžλ™ν™”
26
+
27
+ ### 핡심 흐름
28
+
29
+ ```
30
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
31
+ β”‚ SCENARIO-DRIVEN IMPLEMENTATION β”‚
32
+ β”‚ β”‚
33
+ β”‚ Feature 파일 λ‘œλ“œ β”‚
34
+ β”‚ ↓ β”‚
35
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
36
+ β”‚ β”‚ Scenario 1: Happy Path β”‚ β”‚
37
+ β”‚ β”‚ Given β†’ When β†’ Then β”‚ β”‚
38
+ β”‚ β”‚ ↓ β”‚ β”‚
39
+ β”‚ β”‚ [κ΅¬ν˜„] β†’ [μ¦‰μ‹œ 검증] β†’ βœ… Pass β”‚ β”‚
40
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
41
+ β”‚ ↓ β”‚
42
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
43
+ β”‚ β”‚ Scenario 2: Edge Case β”‚ β”‚
44
+ β”‚ β”‚ Given β†’ When β†’ Then β”‚ β”‚
45
+ β”‚ β”‚ ↓ β”‚ β”‚
46
+ β”‚ β”‚ [κ΅¬ν˜„] β†’ [μ¦‰μ‹œ 검증] β†’ ❌ Fail β†’ [μˆ˜μ •] β†’ βœ… Pass β”‚ β”‚
47
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
48
+ β”‚ ↓ β”‚
49
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
50
+ β”‚ β”‚ Scenario N: ... β”‚ β”‚
51
+ β”‚ β”‚ [κ΅¬ν˜„] β†’ [μ¦‰μ‹œ 검증] β†’ βœ… Pass β”‚ β”‚
52
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
53
+ β”‚ ↓ β”‚
54
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
55
+ β”‚ β”‚ πŸ“Š QUALITY REPORT β”‚ β”‚
56
+ β”‚ β”‚ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ β”‚ β”‚
57
+ β”‚ β”‚ μ‹œλ‚˜λ¦¬μ˜€: 5/5 톡과 βœ… β”‚ β”‚
58
+ β”‚ β”‚ ν’ˆμ§ˆ 점수: 94/100 β”‚ β”‚
59
+ β”‚ β”‚ λΉŒλ“œ: βœ… | ν…ŒμŠ€νŠΈ: βœ… β”‚ β”‚
60
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
61
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
62
+ ```
63
+
64
+ ### μ‹œλ‚˜λ¦¬μ˜€ = κ΅¬ν˜„ λ‹¨μœ„
65
+
66
+ **κΈ°μ‘΄ 방식 (Phase 기반)**:
67
+ ```
68
+ Phase 1 β†’ Phase 2 β†’ Phase 3 β†’ ... β†’ λ§ˆμ§€λ§‰μ— 검증
69
+ ↓
70
+ "μ–΄λ””μ„œ 잘λͺ»λμ§€?"
71
+ ```
72
+
73
+ **SDD 방식 (Scenario 기반)**:
74
+ ```
75
+ Scenario 1 β†’ κ΅¬ν˜„ β†’ 검증 βœ…
76
+ Scenario 2 β†’ κ΅¬ν˜„ β†’ 검증 βœ…
77
+ Scenario 3 β†’ κ΅¬ν˜„ β†’ 검증 ❌ β†’ μˆ˜μ • β†’ βœ…
78
+ ...
79
+ 전체 톡과 = ν’ˆμ§ˆ 보μž₯
80
+ ```
81
+
82
+ ### 검증 μžλ™ν™”
83
+
84
+ 각 μ‹œλ‚˜λ¦¬μ˜€ κ΅¬ν˜„ ν›„ **μžλ™ 검증**:
85
+
86
+ | 검증 ν•­λͺ© | μžλ™ 체크 |
87
+ |-----------|-----------|
88
+ | Given (μ „μ œμ‘°κ±΄) | μƒνƒœ/데이터 μ€€λΉ„ 확인 |
89
+ | When (행동) | κΈ°λŠ₯ μ‹€ν–‰ κ°€λŠ₯ μ—¬λΆ€ |
90
+ | Then (κ²°κ³Ό) | μ˜ˆμƒ κ²°κ³Ό 일치 μ—¬λΆ€ |
91
+ | μ½”λ“œ ν’ˆμ§ˆ | λ³΅μž‘λ„, μŠ€νƒ€μΌ, λ³΄μ•ˆ |
92
+
93
+ ### μ‹€νŒ¨ μ‹œ μžλ™ μˆ˜μ •
94
+
95
+ ```
96
+ Scenario 검증 μ‹€νŒ¨
97
+ ↓
98
+ [원인 뢄석] - μ–΄λ–€ Then 쑰건이 μ‹€νŒ¨?
99
+ ↓
100
+ [μˆ˜μ • κ΅¬ν˜„] - ν•΄λ‹Ή λΆ€λΆ„λ§Œ μˆ˜μ •
101
+ ↓
102
+ [μž¬κ²€μ¦] - λ‹€μ‹œ 체크
103
+ ↓
104
+ 톡과할 λ•ŒκΉŒμ§€ 반볡 (μ΅œλŒ€ 3회)
105
+ ```
106
+
107
+ ---
108
+
109
+ ## **ULTRAWORK Mode** (ulw)
110
+
111
+ > Include `ultrawork` or `ulw` in your command to activate **maximum performance mode**.
112
+
113
+ ### What ULTRAWORK Enables
114
+
115
+ When you include `ultrawork` (or `ulw`), ALL of these activate automatically:
116
+
117
+ | Feature | Description |
118
+ |---------|-------------|
119
+ | **Parallel Exploration** | 3+ Task(haiku) agents run simultaneously |
120
+ | **Boulder Loop** | Auto-continues until ALL phases complete |
121
+ | **Context Compression** | Aggressive auto-save at 70%+ context |
122
+ | **No Pause** | Doesn't wait for confirmation between phases |
123
+ | **External LLMs** | Auto-consults GPT/Gemini if enabled |
124
+ | **Error Recovery** | Auto-retries on failure (up to 3 times) |
125
+
126
+ ### Boulder Loop (Inspired by Sisyphus)
127
+
128
+ Like Sisyphus rolling the boulder, ULTRAWORK **keeps going until done**:
129
+
130
+ ```
131
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
132
+ β”‚ BOULDER LOOP (ultrawork) β”‚
133
+ β”‚ β”‚
134
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
135
+ β”‚ β”‚ Phase 1 │───→│ Phase 2 │───→│ Phase 3 │───→│ Phase N β”‚ β”‚
136
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
137
+ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
138
+ β”‚ ↓ ↓ ↓ ↓ β”‚
139
+ β”‚ [Parallel] [Parallel] [Parallel] [Parallel] β”‚
140
+ β”‚ [Implement] [Implement] [Implement] [Implement] β”‚
141
+ β”‚ [Test] [Test] [Test] [Test] β”‚
142
+ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
143
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
144
+ β”‚ β”‚ β”‚
145
+ β”‚ ↓ β”‚
146
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
147
+ β”‚ β”‚ ALL DONE? β”‚ β”‚
148
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
149
+ β”‚ β”‚ β”‚ β”‚
150
+ β”‚ NO YES β”‚
151
+ β”‚ β”‚ β”‚ β”‚
152
+ β”‚ ↓ ↓ β”‚
153
+ β”‚ [Continue] [πŸŽ‰ Complete!] β”‚
154
+ β”‚ β”‚
155
+ β”‚ NO STOPPING until acceptance criteria met or error limit hit β”‚
156
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
157
+ ```
158
+
159
+ ### ULTRAWORK Example
160
+
161
+ ```
162
+ User: /vibe.run "brick-game" ultrawork
163
+
164
+ Claude:
165
+ πŸš€ ULTRAWORK MODE ACTIVATED
166
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
167
+
168
+ πŸ“„ SPEC: .claude/vibe/specs/brick-game.md
169
+ 🎯 4 Phases detected
170
+ ⚑ Boulder Loop: ENABLED (will continue until all phases complete)
171
+ πŸ”„ Auto-retry: ON (max 3 per phase)
172
+ πŸ’Ύ Context compression: AGGRESSIVE
173
+
174
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
175
+ πŸ”οΈ BOULDER ROLLING... Phase 1/4
176
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
177
+
178
+ ⚑ [PARALLEL] Launching 3 exploration agents...
179
+ βœ… Exploration complete (7.2s)
180
+ πŸ”¨ Implementing...
181
+ βœ… Phase 1 complete
182
+
183
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
184
+ πŸ”οΈ BOULDER ROLLING... Phase 2/4
185
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
186
+
187
+ ⚑ [PARALLEL] Launching 3 exploration agents...
188
+ βœ… Exploration complete (6.8s)
189
+ πŸ”¨ Implementing...
190
+ ❌ Test failed: collision detection
191
+ πŸ”„ Auto-retry 1/3...
192
+ πŸ”¨ Fixing...
193
+ βœ… Phase 2 complete
194
+
195
+ [...continues automatically...]
196
+
197
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
198
+ πŸŽ‰ BOULDER REACHED THE TOP!
199
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
200
+
201
+ βœ… All 4 phases complete
202
+ βœ… All acceptance criteria passed
203
+ βœ… Build succeeded
204
+ βœ… Tests passed
205
+
206
+ ⏱️ Total: 8m 24s
207
+ πŸ“Š Retries: 2
208
+ πŸ’Ύ Context saved: 3 checkpoints
209
+ ```
210
+
211
+ ### Normal vs ULTRAWORK Comparison
212
+
213
+ | Aspect | Normal | ULTRAWORK |
214
+ |--------|--------|-----------|
215
+ | Phase transition | May pause | Auto-continues |
216
+ | On error | Reports and stops | Auto-retries (3x) |
217
+ | Context 70%+ | Warning only | Auto-compress + save |
218
+ | Exploration | Sequential possible | FORCED parallel |
219
+ | Completion | Phase-by-phase | Until ALL done |
220
+
221
+ ---
222
+
223
+ ## Rules Reference
224
+
225
+ **Must follow `.claude/vibe/rules/`:**
226
+ - `core/development-philosophy.md` - Surgical precision, modify only requested scope
227
+ - `core/quick-start.md` - Korean, DRY, SRP, YAGNI
228
+ - `standards/complexity-metrics.md` - Functions ≀20 lines, nesting ≀3 levels
229
+ - `quality/checklist.md` - Code quality checklist
230
+
231
+ ## Description
232
+
233
+ Read PTCF structured SPEC document and execute implementation immediately.
234
+
235
+ > **PLAN, TASKS documents unnecessary** - SPEC is the executable prompt
236
+
237
+ ## Model Orchestration
238
+
239
+ Automatically select optimal model based on task type:
240
+
241
+ ```
242
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
243
+ β”‚ Opus 4.5 (Orchestrator) β”‚
244
+ β”‚ - Coordinate overall flow β”‚
245
+ β”‚ - Final decisions/review β”‚
246
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
247
+ β”‚
248
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
249
+ ↓ ↓ ↓
250
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
251
+ β”‚ Haiku β”‚ β”‚ Sonnet β”‚ β”‚ Haiku β”‚
252
+ β”‚(Explore)β”‚ β”‚ (Impl) β”‚ β”‚ (Test) β”‚
253
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
254
+ ```
255
+
256
+ ### Task Calls by Role
257
+
258
+ | Task Type | Model | Task Parameter |
259
+ |-----------|-------|----------------|
260
+ | Codebase exploration | Haiku 4.5 | `model: "haiku"` |
261
+ | Core implementation | Sonnet 4 | `model: "sonnet"` |
262
+ | Test writing | Haiku 4.5 | `model: "haiku"` |
263
+ | Architecture decisions | Opus 4.5 | Main session |
264
+ | Final review | Opus 4.5 | Main session |
265
+
266
+ ### External LLM Usage (When Enabled)
267
+
268
+ When external LLMs are enabled in `.claude/vibe/config.json`:
269
+
270
+ | Role | Prefix | Condition |
271
+ |------|--------|-----------|
272
+ | Architecture/Debugging | `gpt-`, `gpt.`, `μ§€ν”Όν‹°-` | When `vibe gpt login` executed (Web Search enabled) |
273
+ | UI/UX Design, Exploration | `gemini-`, `gemini.`, `μ œλ―Έλ‚˜μ΄-` | When `vibe gemini login` executed (Google Search enabled) |
274
+
275
+ When external LLM enabled, use hook prefixes:
276
+ - `gpt.질문` - GPT architecture consultation (with web search)
277
+ - `gemini.질문` - Gemini 질문/상담
278
+ - `gemini- Analyze this code: [code]` - μ½”λ“œ 뢄석
279
+ - `gemini- Review UI/UX for: [component]` - UI/UX 리뷰
280
+
281
+ ### External LLM Fallback
282
+
283
+ **IMPORTANT**: When GPT/Gemini hook fails, Claude MUST handle the task directly:
284
+
285
+ **Fallback behavior**:
286
+ - Do NOT retry the external LLM call
287
+ - Claude handles the task using its own capabilities
288
+ - Continue with the implementation without interruption
289
+ - Log the fallback but don't block progress
290
+
291
+ ## Vibe Tools (Semantic Analysis & Memory)
292
+
293
+ Use vibe tools for accurate codebase understanding and session continuity.
294
+
295
+ ### Tool Invocation
296
+
297
+ All tools are called via:
298
+ ```bash
299
+ node -e "import('@su-record/vibe/tools').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
300
+ ```
301
+
302
+ ### Semantic Analysis Tools
303
+
304
+ | Tool | Purpose | Usage |
305
+ |------|---------|-------|
306
+ | `findSymbol` | Find symbol definitions | `{symbolName: 'functionName', searchPath: '.'}` |
307
+ | `findReferences` | Find all references | `{symbolName: 'functionName', searchPath: '.'}` |
308
+ | `analyzeComplexity` | Analyze code complexity | `{filePath: 'src/file.ts'}` |
309
+ | `validateCodeQuality` | Validate code quality | `{filePath: 'src/file.ts'}` |
310
+
311
+ **Example - Find symbol:**
312
+ ```bash
313
+ node -e "import('@su-record/vibe/tools').then(t => t.findSymbol({symbolName: 'login', searchPath: '.'}).then(r => console.log(r.content[0].text)))"
314
+ ```
315
+
316
+ ### Memory Tools
317
+
318
+ | Tool | Purpose | Usage |
319
+ |------|---------|-------|
320
+ | `saveMemory` | Save important decisions | `{key: 'decision-name', value: 'content', category: 'project'}` |
321
+ | `recallMemory` | Recall saved memory | `{key: 'decision-name'}` |
322
+ | `listMemories` | List all memories | `{category: 'project'}` |
323
+
324
+ **Example - Save important decision:**
325
+ ```bash
326
+ node -e "import('@su-record/vibe/tools').then(t => t.saveMemory({key: 'auth-pattern', value: 'Using JWT with refresh tokens', category: 'project'}).then(r => console.log(r.content[0].text)))"
327
+ ```
328
+
329
+ ### Session Management (Auto via Hooks)
330
+
331
+ - **Session start**: Hook auto-calls `startSession` to restore previous context
332
+ - **Context 80%+**: Hook auto-calls `autoSaveContext` to preserve state
333
+
334
+ ## Process
335
+
336
+ ### 1. Load SPEC + Feature
337
+
338
+ ```
339
+ πŸ“„ .claude/vibe/specs/{feature-name}.md β†’ SPEC (ꡬ쑰, μ œμ•½, μ»¨ν…μŠ€νŠΈ)
340
+ πŸ“„ .claude/vibe/features/{feature-name}.feature β†’ Feature (μ‹œλ‚˜λ¦¬μ˜€ = κ΅¬ν˜„ λ‹¨μœ„)
341
+ ```
342
+
343
+ **Feature 파일이 μ—†μœΌλ©΄ μ—λŸ¬**:
344
+ ```
345
+ ❌ Feature 파일이 μ—†μŠ΅λ‹ˆλ‹€.
346
+ λ¨Όμ € /vibe.spec "{feature-name}"을 μ‹€ν–‰ν•˜μ„Έμš”.
347
+ ```
348
+
349
+ ### 2. Scenario λͺ©λ‘ μΆ”μΆœ
350
+
351
+ Feature νŒŒμΌμ—μ„œ λͺ¨λ“  Scenario μΆ”μΆœ:
352
+
353
+ ```markdown
354
+ ## Scenarios to Implement
355
+
356
+ | # | Scenario | Status |
357
+ |---|----------|--------|
358
+ | 1 | μœ νš¨ν•œ 둜그인 성곡 | ⬜ |
359
+ | 2 | 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ | ⬜ |
360
+ | 3 | 이메일 ν˜•μ‹ 검증 | ⬜ |
361
+ | 4 | λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 | ⬜ |
362
+
363
+ Total: 4 scenarios
364
+ ```
365
+
366
+ ### 3. Scenario-by-Scenario Implementation (핡심)
367
+
368
+ **각 μ‹œλ‚˜λ¦¬μ˜€λ§ˆλ‹€**:
369
+
370
+ ```
371
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
372
+ 🎯 Scenario 1/4: μœ νš¨ν•œ 둜그인 성곡
373
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
374
+
375
+ Given: μ‚¬μš©μžκ°€ λ“±λ‘λ˜μ–΄ μžˆλ‹€
376
+ When: μœ νš¨ν•œ 이메일과 λΉ„λ°€λ²ˆν˜Έλ‘œ 둜그인
377
+ Then: 둜그인 성곡 + JWT 토큰 λ°˜ν™˜
378
+
379
+ [Step 1] κ΅¬ν˜„ 뢄석...
380
+ - ν•„μš”ν•œ 파일: auth.service.ts, login.controller.ts
381
+ - κ΄€λ ¨ μ½”λ“œ 탐색 쀑...
382
+
383
+ [Step 2] κ΅¬ν˜„ 쀑...
384
+ βœ… auth.service.ts - login() λ©”μ„œλ“œ μΆ”κ°€
385
+ βœ… login.controller.ts - POST /login μ—”λ“œν¬μΈνŠΈ
386
+
387
+ [Step 3] 검증 쀑...
388
+ βœ… Given: ν…ŒμŠ€νŠΈ μ‚¬μš©μž 생성 κ°€λŠ₯
389
+ βœ… When: 둜그인 API 호좜 성곡
390
+ βœ… Then: JWT 토큰 λ°˜ν™˜ 확인
391
+
392
+ βœ… Scenario 1 톡과!
393
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
394
+ ```
395
+
396
+ **μ‹€νŒ¨ μ‹œ**:
397
+
398
+ ```
399
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
400
+ 🎯 Scenario 2/4: 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬
401
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
402
+
403
+ [Step 3] 검증 쀑...
404
+ βœ… Given: ν…ŒμŠ€νŠΈ μ‚¬μš©μž 쑴재
405
+ βœ… When: 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έλ‘œ 둜그인 μ‹œλ„
406
+ ❌ Then: "Invalid credentials" μ—λŸ¬ λ©”μ‹œμ§€
407
+ μ‹€μ œ: "Error occurred" λ°˜ν™˜λ¨
408
+
409
+ [μžλ™ μˆ˜μ • 1/3]
410
+ 원인: μ—λŸ¬ λ©”μ‹œμ§€ ν•˜λ“œμ½”λ”© μ•ˆλ¨
411
+ μˆ˜μ •: auth.service.ts line 42
412
+
413
+ [μž¬κ²€μ¦]
414
+ βœ… Then: "Invalid credentials" μ—λŸ¬ λ©”μ‹œμ§€
415
+
416
+ βœ… Scenario 2 톡과! (μˆ˜μ • 1회)
417
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
418
+ ```
419
+
420
+ ---
421
+
422
+ ## **CRITICAL: Parallel Sub-Agent Execution**
423
+
424
+ > **MUST USE PARALLEL TASK CALLS** - This is REQUIRED, not optional.
425
+ > Sequential execution when parallel is possible = VIOLATION of this workflow.
426
+
427
+ ### Mandatory Parallel Exploration (Phase Start)
428
+
429
+ **BEFORE any implementation, you MUST launch these Task calls IN PARALLEL (single message, multiple tool calls):**
430
+
431
+ ```
432
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
433
+ β”‚ STEP 1: PARALLEL EXPLORATION (REQUIRED) β”‚
434
+ β”‚ β”‚
435
+ β”‚ Launch ALL of these in ONE message: β”‚
436
+ β”‚ β”‚
437
+ β”‚ Task(haiku) ─┬─→ "Analyze related files in <context>" β”‚
438
+ β”‚ β”‚ β”‚
439
+ β”‚ Task(haiku) ─┼─→ "Check dependencies and imports" β”‚
440
+ β”‚ β”‚ β”‚
441
+ β”‚ Task(haiku) ─┴─→ "Find existing patterns and conventions" β”‚
442
+ β”‚ β”‚
443
+ β”‚ [If GPT enabled] gpt- Review architecture: [design] β”‚
444
+ β”‚ [If Gemini enabled] gemini- Suggest UX for: [component] β”‚
445
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
446
+ β”‚
447
+ ↓ (wait for all to complete)
448
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
449
+ β”‚ STEP 2: SYNTHESIZE (Opus) β”‚
450
+ β”‚ - Review all exploration results β”‚
451
+ β”‚ - Decide implementation approach β”‚
452
+ β”‚ - Identify files to modify/create β”‚
453
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
454
+ β”‚
455
+ ↓
456
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
457
+ β”‚ STEP 3: IMPLEMENT + BACKGROUND AGENTS (PARALLEL) β”‚
458
+ β”‚ β”‚
459
+ β”‚ Main Agent (sonnet): β”‚
460
+ β”‚ └─→ Execute current phase implementation β”‚
461
+ β”‚ β”‚
462
+ β”‚ Background Agents (haiku, run_in_background=true): β”‚
463
+ β”‚ β”œβ”€β†’ Task: "Prepare Phase N+1 - analyze required files" β”‚
464
+ β”‚ β”œβ”€β†’ Task: "Pre-generate test cases for current implementation" β”‚
465
+ β”‚ └─→ Task: "Search for related types/interfaces needed" β”‚
466
+ β”‚ β”‚
467
+ β”‚ [ULTRAWORK] All 4 agents run simultaneously! β”‚
468
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
469
+ β”‚
470
+ ↓ (main completes, check backgrounds)
471
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
472
+ β”‚ STEP 4: TEST + PHASE PIPELINING β”‚
473
+ β”‚ β”‚
474
+ β”‚ Current Phase: β”‚
475
+ β”‚ └─→ Task(haiku): Write tests using pre-generated cases β”‚
476
+ β”‚ β”‚
477
+ β”‚ Next Phase Prep (from background results): β”‚
478
+ β”‚ └─→ Already have file analysis, ready to start immediately β”‚
479
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
480
+ ```
481
+
482
+ ### Parallel Task Call Pattern (MUST FOLLOW)
483
+
484
+ **Correct - Single message with multiple parallel Tasks:**
485
+ ```
486
+ <message>
487
+ Task(haiku, "Analyze src/components/ for existing patterns")
488
+ Task(haiku, "Check package.json dependencies")
489
+ Task(haiku, "Find usage of similar features in codebase")
490
+ </message>
491
+ β†’ All 3 run simultaneously, ~3x faster
492
+ ```
493
+
494
+ **WRONG - Sequential calls (DO NOT DO THIS):**
495
+ ```
496
+ <message>Task(haiku, "Analyze...")</message>
497
+ <message>Task(haiku, "Check...")</message>
498
+ <message>Task(haiku, "Find...")</message>
499
+ β†’ 3x slower, wastes time
500
+ ```
501
+
502
+ ### Background Agent Pattern (ULTRAWORK) via Orchestrator
503
+
504
+ **Launch background agents for next phase via Orchestrator:**
505
+ ```bash
506
+ # Start background agent (doesn't block)
507
+ node -e "import('@su-record/vibe/orchestrator').then(o => o.runAgent('Phase 2 prep: Analyze auth API endpoints', 'phase2-prep').then(r => console.log(r.content[0].text)))"
508
+
509
+ # Multiple backgrounds in parallel
510
+ node -e "import('@su-record/vibe/orchestrator').then(async o => {
511
+ await Promise.all([
512
+ o.runAgent('Phase 2 prep: Analyze auth API endpoints', 'phase2-prep'),
513
+ o.runAgent('Pre-generate test cases for login form', 'test-prep'),
514
+ o.runAgent('Find existing validation patterns', 'pattern-finder')
515
+ ]);
516
+ console.log('All background agents started');
517
+ })"
518
+ ```
519
+
520
+ **Check background agent status:**
521
+ ```bash
522
+ node -e "import('@su-record/vibe/orchestrator').then(o => console.log(o.status().content[0].text))"
523
+ ```
524
+
525
+ **Get result when ready:**
526
+ ```bash
527
+ node -e "import('@su-record/vibe/orchestrator').then(o => o.getResult('SESSION_ID').then(r => console.log(r.content[0].text)))"
528
+ ```
529
+
530
+ **Why Background Agents Matter:**
531
+
532
+ | Without Background | With Background |
533
+ |--------------------|-----------------|
534
+ | Phase 1: 60s | Phase 1: 60s (+ backgrounds running) |
535
+ | Phase 2 prep: 20s | Phase 2 prep: 0s (already done!) |
536
+ | Phase 2: 60s | Phase 2: 60s |
537
+ | **Total: 140s** | **Total: 120s** |
538
+
539
+ For 5 phases: 4 Γ— 20s saved = **80s faster**
540
+
541
+ ### Why Parallel Matters
542
+
543
+ | Approach | Time | Cache Benefit |
544
+ |----------|------|---------------|
545
+ | Sequential (3 Tasks) | ~30s | Cache cold on each |
546
+ | **Parallel (3 Tasks)** | **~10s** | **Cache warmed once, shared** |
547
+
548
+ vibe ProjectCache (LRU) caches ts-morph parsing results. Parallel calls share the warmed cache.
549
+
550
+ ### Phase Execution Flow (ULTRAWORK Pipeline)
551
+
552
+ ```
553
+ Phase N Start
554
+ β”‚
555
+ β”œβ”€β†’ [PARALLEL] Task(haiku) Γ— 3: Exploration
556
+ β”‚ - Related code analysis
557
+ β”‚ - Dependency check
558
+ β”‚ - Pattern discovery
559
+ β”‚
560
+ ↓ (all complete)
561
+ β”‚
562
+ β”œβ”€β†’ Opus: Synthesize and decide
563
+ β”‚
564
+ β”œβ”€β†’ [PARALLEL PIPELINE] ←── KEY SPEED OPTIMIZATION
565
+ β”‚ β”‚
566
+ β”‚ β”œβ”€β†’ Main: Task(sonnet) Implementation
567
+ β”‚ β”‚
568
+ β”‚ └─→ Background (run_in_background=true):
569
+ β”‚ β”œβ”€β†’ Task(haiku): Phase N+1 file analysis
570
+ β”‚ β”œβ”€β†’ Task(haiku): Test case preparation
571
+ β”‚ └─→ Task(haiku): Type/interface lookup
572
+ β”‚
573
+ ↓ (main completes)
574
+ β”‚
575
+ β”œβ”€β†’ Task(haiku): Tests (uses pre-generated cases)
576
+ β”‚
577
+ ↓
578
+ Phase N Complete
579
+ β”‚
580
+ ↓ (Background results ready - NO WAIT for Phase N+1 exploration!)
581
+ β”‚
582
+ Phase N+1 Start (IMMEDIATE - exploration already done!)
583
+ ```
584
+
585
+ **Speed Comparison:**
586
+
587
+ | Mode | Phase Time | 5 Phases Total |
588
+ |------|------------|----------------|
589
+ | Sequential | ~2min/phase | ~10min |
590
+ | Parallel Exploration | ~1.5min/phase | ~7.5min |
591
+ | **ULTRAWORK Pipeline** | **~1min/phase** | **~5min** |
592
+
593
+ **Why Pipeline is Faster:**
594
+ - Background agents prepare next phase WHILE current phase implements
595
+ - No idle time between phases
596
+ - Test cases pre-generated during implementation
597
+ - Cache stays warm across parallel tasks
598
+
599
+ ---
600
+
601
+ 1. **Related code analysis**: Task(haiku) explores `<context>` related code
602
+ 2. **File creation/modification**: Task(sonnet) implements per `<output_format>`
603
+ 3. **Constraint compliance**: Check `<constraints>`
604
+ 4. **Run verification**: Execute verification commands
605
+
606
+ ### 4. Gemini μ½”λ“œ 리뷰 + μžλ™ μˆ˜μ • (NEW)
607
+
608
+ λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€ κ΅¬ν˜„ μ™„λ£Œ ν›„, **Geminiκ°€ μ½”λ“œλ₯Ό λ¦¬λ·°ν•˜κ³  ν”Όλ“œλ°± 기반으둜 μžλ™ μˆ˜μ •**:
609
+
610
+ ```
611
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
612
+ πŸ” GEMINI CODE REVIEW
613
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
614
+
615
+ [Step 1] Geminiμ—κ²Œ κ΅¬ν˜„ μ½”λ“œ 전솑...
616
+ - λ³€κ²½λœ 파일: auth.service.ts, auth.controller.ts, ...
617
+
618
+ [Step 2] Gemini 리뷰 결과:
619
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
620
+ β”‚ πŸ“ Gemini Feedback β”‚
621
+ β”‚ β”‚
622
+ β”‚ 1. [κ°œμ„ ] auth.service.ts:24 β”‚
623
+ β”‚ λΉ„λ°€λ²ˆν˜Έ 비ꡐ μ‹œ timing attack λ°©μ§€ ν•„μš” β”‚
624
+ β”‚ β†’ crypto.timingSafeEqual() μ‚¬μš© ꢌμž₯ β”‚
625
+ β”‚ β”‚
626
+ β”‚ 2. [κ°œμ„ ] auth.controller.ts:15 β”‚
627
+ β”‚ rate limiting 미적용 β”‚
628
+ β”‚ β†’ 둜그인 μ‹œλ„ μ œν•œ μΆ”κ°€ ꢌμž₯ β”‚
629
+ β”‚ β”‚
630
+ β”‚ 3. [μŠ€νƒ€μΌ] auth.service.ts:42 β”‚
631
+ β”‚ 맀직 λ„˜λ²„ μ‚¬μš© β”‚
632
+ β”‚ β†’ μƒμˆ˜λ‘œ μΆ”μΆœ ꢌμž₯ β”‚
633
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
634
+
635
+ [Step 3] ν”Όλ“œλ°± 기반 μžλ™ μˆ˜μ •...
636
+ βœ… auth.service.ts:24 - timingSafeEqual 적용
637
+ βœ… auth.controller.ts:15 - rate limiter μΆ”κ°€
638
+ βœ… auth.service.ts:42 - μƒμˆ˜ μΆ”μΆœ
639
+
640
+ [Step 4] μž¬κ²€μ¦...
641
+ βœ… λΉŒλ“œ 성곡
642
+ βœ… ν…ŒμŠ€νŠΈ 톡과
643
+
644
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
645
+ βœ… Gemini 리뷰 μ™„λ£Œ! 3개 κ°œμ„ μ‚¬ν•­ 반영
646
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
647
+ ```
648
+
649
+ **MUST: Gemini μ½”λ“œ 리뷰 (ν•„μˆ˜)**
650
+
651
+ Geminiκ°€ ν™œμ„±ν™”λœ 경우, **λ°˜λ“œμ‹œ** μ•„λž˜ 훅을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œ 리뷰λ₯Ό λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€:
652
+
653
+ ```
654
+ gemini- Review this code for security, performance, best-practices:
655
+ [λ³€κ²½λœ νŒŒμΌλ“€μ˜ 전체 μ½”λ“œ]
656
+ SPEC μš”κ΅¬μ‚¬ν•­: [μš”μ•½]
657
+ μ‹œλ‚˜λ¦¬μ˜€: [κ΅¬ν˜„ν•œ μ‹œλ‚˜λ¦¬μ˜€ λͺ©λ‘]
658
+ ```
659
+
660
+ λ˜λŠ” ν•œκΈ€λ‘œ:
661
+ ```
662
+ μ œλ―Έλ‚˜μ΄- 이 μ½”λ“œ λ¦¬λ·°ν•΄μ€˜ (λ³΄μ•ˆ, μ„±λŠ₯, λ² μŠ€νŠΈν”„λž™ν‹°μŠ€):
663
+ [μ½”λ“œ]
664
+ ```
665
+
666
+ **호좜 μˆœμ„œ:**
667
+ 1. λ³€κ²½λœ λͺ¨λ“  파일 λ‚΄μš©μ„ μ§ˆλ¬Έμ— 포함
668
+ 2. SPEC의 핡심 μš”κ΅¬μ‚¬ν•­ μš”μ•½ μΆ”κ°€
669
+ 3. ν›… 호좜 μ‹€ν–‰
670
+ 4. μ‘λ‹΅μ˜ ν”Όλ“œλ°± ν•­λͺ©λ³„λ‘œ μ½”λ“œ μˆ˜μ •
671
+ 5. λΉŒλ“œ/ν…ŒμŠ€νŠΈ μž¬μ‹€ν–‰
672
+
673
+ **fallback 처리:**
674
+ - `"status": "fallback"` 응닡 μ‹œ β†’ μŠ€ν‚΅ν•˜κ³  λ‹€μŒ λ‹¨κ³„λ‘œ μ§„ν–‰
675
+ - λ„€νŠΈμ›Œν¬ μ—λŸ¬ μ‹œ β†’ 1회 μž¬μ‹œλ„ ν›„ μŠ€ν‚΅
676
+
677
+ **리뷰 적용 κ·œμΉ™:**
678
+
679
+ | ν”Όλ“œλ°± μœ ν˜• | 처리 |
680
+ |------------|------|
681
+ | λ³΄μ•ˆ 취약점 | μ¦‰μ‹œ μžλ™ μˆ˜μ • |
682
+ | μ„±λŠ₯ κ°œμ„  | μ¦‰μ‹œ μžλ™ μˆ˜μ • |
683
+ | 베슀트 ν”„λž™ν‹°μŠ€ | μžλ™ μˆ˜μ • |
684
+ | μŠ€νƒ€μΌ/μ·¨ν–₯ | 선택적 적용 (ν”„λ‘œμ νŠΈ μ»¨λ²€μ…˜ μš°μ„ ) |
685
+
686
+ **쑰건:**
687
+ - Gemini MCPκ°€ ν™œμ„±ν™”λœ κ²½μš°μ—λ§Œ μ‹€ν–‰ (`vibe gemini --auth`)
688
+ - fallback 응닡 μ‹œ μŠ€ν‚΅ν•˜κ³  λ‹€μŒ λ‹¨κ³„λ‘œ μ§„ν–‰
689
+ - μˆ˜μ • ν›„ λ°˜λ“œμ‹œ λΉŒλ“œ/ν…ŒμŠ€νŠΈ μž¬κ²€μ¦
690
+
691
+ ### 5. Quality Report (μžλ™ 생성)
692
+
693
+ λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€ μ™„λ£Œ + Gemini 리뷰 ν›„ **ν’ˆμ§ˆ 리포트 μžλ™ 생성**:
694
+
695
+ ```
696
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
697
+ β”‚ πŸ“Š QUALITY REPORT: login β”‚
698
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
699
+ β”‚ β”‚
700
+ β”‚ βœ… μ‹œλ‚˜λ¦¬μ˜€: 4/4 톡과 β”‚
701
+ β”‚ β”‚
702
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
703
+ β”‚ β”‚ # β”‚ Scenario β”‚ Status β”‚ Retries β”‚ β”‚ β”‚
704
+ β”‚ │───│───────────────────────────│────────│─────────│ β”‚ β”‚
705
+ β”‚ β”‚ 1 β”‚ μœ νš¨ν•œ 둜그인 성곡 β”‚ βœ… β”‚ 0 β”‚ β”‚ β”‚
706
+ β”‚ β”‚ 2 β”‚ 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ β”‚ βœ… β”‚ 1 β”‚ β”‚ β”‚
707
+ β”‚ β”‚ 3 β”‚ 이메일 ν˜•μ‹ 검증 β”‚ βœ… β”‚ 0 β”‚ β”‚ β”‚
708
+ β”‚ β”‚ 4 β”‚ λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 β”‚ βœ… β”‚ 0 β”‚ β”‚ β”‚
709
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
710
+ β”‚ β”‚
711
+ β”‚ πŸ“ˆ ν’ˆμ§ˆ 점수: 94/100 β”‚
712
+ β”‚ β”‚
713
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
714
+ β”‚ β”‚ ν•­λͺ© β”‚ κ²°κ³Ό β”‚ λΉ„κ³  β”‚ β”‚
715
+ β”‚ │───────────────────│───────│─────────────────────────────│ β”‚
716
+ β”‚ β”‚ λΉŒλ“œ β”‚ βœ… β”‚ npm run build 성곡 β”‚ β”‚
717
+ β”‚ β”‚ ν…ŒμŠ€νŠΈ β”‚ βœ… β”‚ 12/12 톡과 β”‚ β”‚
718
+ β”‚ β”‚ νƒ€μž… 검사 β”‚ βœ… β”‚ μ—λŸ¬ 0개 β”‚ β”‚
719
+ β”‚ β”‚ λ³΅μž‘λ„ β”‚ βœ… β”‚ λͺ¨λ“  ν•¨μˆ˜ ≀30쀄 β”‚ β”‚
720
+ β”‚ β”‚ λ³΄μ•ˆ β”‚ βœ… β”‚ 취약점 0개 β”‚ β”‚
721
+ β”‚ β”‚ Gemini 리뷰 β”‚ βœ… β”‚ 3개 κ°œμ„ μ‚¬ν•­ 반영 β”‚ β”‚
722
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
723
+ β”‚ β”‚
724
+ β”‚ ⏱️ 총 μ†Œμš”: 3m 42s β”‚
725
+ β”‚ β”‚
726
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
727
+ ```
728
+
729
+ **μ‚¬μš©μžκ°€ 확인할 것**:
730
+ - μ‹œλ‚˜λ¦¬μ˜€ ν†΅κ³Όμœ¨ (4/4 = 100%)
731
+ - ν’ˆμ§ˆ 점수 (94/100)
732
+ - λΉŒλ“œ/ν…ŒμŠ€νŠΈ μƒνƒœ
733
+
734
+ **μ΄κ²ƒλ§Œ 보면 ν’ˆμ§ˆμ„ μ‹ λ’°ν•  수 있음.**
735
+
736
+ ### 6. Update Feature File
737
+
738
+ μ‹œλ‚˜λ¦¬μ˜€ μƒνƒœ μžλ™ μ—…λ°μ΄νŠΈ:
739
+
740
+ ```markdown
741
+ ## Coverage
742
+
743
+ | Scenario | SPEC AC | Status |
744
+ |----------|---------|--------|
745
+ | μœ νš¨ν•œ 둜그인 성곡 | AC-1 | βœ… |
746
+ | 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ | AC-2 | βœ… |
747
+ | 이메일 ν˜•μ‹ 검증 | AC-3 | βœ… |
748
+ | λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 | AC-4 | βœ… |
749
+
750
+ **Last verified**: 2024-01-15 14:32
751
+ **Quality score**: 94/100
752
+ ```
753
+
754
+ ## TRUST 5 Principles
755
+
756
+ Follow during implementation:
757
+
758
+ | Principle | Description |
759
+ |-----------|-------------|
760
+ | **T**est-first | Write tests first |
761
+ | **R**eadable | Clear code |
762
+ | **U**nified | Consistent style |
763
+ | **S**ecured | Consider security |
764
+ | **T**rackable | Logging, monitoring |
765
+
766
+ ## Input
767
+
768
+ - `.claude/vibe/specs/{feature-name}.md` (PTCF SPEC)
769
+ - `.claude/vibe/features/{feature-name}.feature` (BDD)
770
+ - `CLAUDE.md` (project context)
771
+
772
+ ## Output
773
+
774
+ - Implemented code files
775
+ - Test files
776
+ - Updated SPEC document (checkmarks)
777
+
778
+ ## Example
779
+
780
+ ```
781
+ User: /vibe.run "login"
782
+
783
+ Claude:
784
+ πŸ“„ Loading SPEC: .claude/vibe/specs/login.md
785
+ πŸ“„ Loading Feature: .claude/vibe/features/login.feature
786
+
787
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
788
+ πŸ“‹ Scenarios to Implement
789
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
790
+
791
+ | # | Scenario | Status |
792
+ |---|----------|--------|
793
+ | 1 | μœ νš¨ν•œ 둜그인 성곡 | ⬜ |
794
+ | 2 | 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ | ⬜ |
795
+ | 3 | 이메일 ν˜•μ‹ 검증 | ⬜ |
796
+ | 4 | λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 | ⬜ |
797
+
798
+ Total: 4 scenarios
799
+
800
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
801
+ 🎯 Scenario 1/4: μœ νš¨ν•œ 둜그인 성곡
802
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
803
+
804
+ Given: μ‚¬μš©μžκ°€ λ“±λ‘λ˜μ–΄ μžˆλ‹€
805
+ When: μœ νš¨ν•œ 이메일과 λΉ„λ°€λ²ˆν˜Έλ‘œ 둜그인
806
+ Then: 둜그인 성곡 + JWT 토큰 λ°˜ν™˜
807
+
808
+ ⚑ [PARALLEL] 탐색 쀑...
809
+ βœ… 탐색 μ™„λ£Œ (2.1s)
810
+
811
+ πŸ”¨ κ΅¬ν˜„ 쀑...
812
+ βœ… auth.service.ts - login() μΆ”κ°€
813
+ βœ… auth.controller.ts - POST /login
814
+
815
+ πŸ” 검증 쀑...
816
+ βœ… Given: OK
817
+ βœ… When: OK
818
+ βœ… Then: OK
819
+
820
+ βœ… Scenario 1 톡과!
821
+
822
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
823
+ 🎯 Scenario 2/4: 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬
824
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
825
+
826
+ πŸ”¨ κ΅¬ν˜„ 쀑...
827
+ βœ… auth.service.ts - λΉ„λ°€λ²ˆν˜Έ 검증 둜직
828
+
829
+ πŸ” 검증 쀑...
830
+ βœ… Given: OK
831
+ βœ… When: OK
832
+ ❌ Then: "Invalid credentials" μ—λŸ¬ λ©”μ‹œμ§€
833
+ μ‹€μ œ: "Error" λ°˜ν™˜
834
+
835
+ πŸ”„ μžλ™ μˆ˜μ • 1/3...
836
+ μˆ˜μ •: auth.service.ts line 42
837
+
838
+ πŸ” μž¬κ²€μ¦...
839
+ βœ… Then: OK
840
+
841
+ βœ… Scenario 2 톡과! (μˆ˜μ • 1회)
842
+
843
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
844
+ 🎯 Scenario 3/4: 이메일 ν˜•μ‹ 검증
845
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
846
+
847
+ πŸ”¨ κ΅¬ν˜„ 쀑...
848
+ πŸ” 검증 쀑...
849
+ βœ… Scenario 3 톡과!
850
+
851
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
852
+ 🎯 Scenario 4/4: λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크
853
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
854
+
855
+ πŸ”¨ κ΅¬ν˜„ 쀑...
856
+ πŸ” 검증 쀑...
857
+ βœ… Scenario 4 톡과!
858
+
859
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
860
+ πŸ” GEMINI CODE REVIEW
861
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
862
+
863
+ πŸ“€ Geminiμ—κ²Œ μ½”λ“œ 전솑 쀑...
864
+ πŸ“ Gemini ν”Όλ“œλ°±:
865
+ 1. [λ³΄μ•ˆ] timing attack λ°©μ§€ ν•„μš” β†’ μˆ˜μ • 쀑...
866
+ 2. [μ„±λŠ₯] λΆˆν•„μš”ν•œ DB 호좜 β†’ μˆ˜μ • 쀑...
867
+
868
+ βœ… 2개 κ°œμ„ μ‚¬ν•­ μžλ™ 반영
869
+ πŸ” μž¬κ²€μ¦... βœ… 톡과
870
+
871
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
872
+ β”‚ πŸ“Š QUALITY REPORT: login β”‚
873
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
874
+ β”‚ β”‚
875
+ β”‚ βœ… μ‹œλ‚˜λ¦¬μ˜€: 4/4 톡과 β”‚
876
+ β”‚ β”‚
877
+ β”‚ | # | Scenario | Status | Retries | β”‚
878
+ β”‚ |---|───────────────────────|───────|─────────| β”‚
879
+ β”‚ | 1 | μœ νš¨ν•œ 둜그인 성곡 | βœ… | 0 | β”‚
880
+ β”‚ | 2 | 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έ μ—λŸ¬ | βœ… | 1 | β”‚
881
+ β”‚ | 3 | 이메일 ν˜•μ‹ 검증 | βœ… | 0 | β”‚
882
+ β”‚ | 4 | λΉ„λ°€λ²ˆν˜Έ μ°ΎκΈ° 링크 | βœ… | 0 | β”‚
883
+ β”‚ β”‚
884
+ β”‚ πŸ“ˆ ν’ˆμ§ˆ 점수: 94/100 β”‚
885
+ β”‚ λΉŒλ“œ: βœ… | ν…ŒμŠ€νŠΈ: βœ… | νƒ€μž…: βœ… | Gemini: βœ… (2개 반영) β”‚
886
+ β”‚ β”‚
887
+ β”‚ ⏱️ 총 μ†Œμš”: 3m 42s β”‚
888
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
889
+
890
+ πŸŽ‰ κ΅¬ν˜„ μ™„λ£Œ! λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€ 톡과 + Gemini 리뷰 반영.
891
+ ```
892
+
893
+ ### Phase-specific Execution
894
+
895
+ ```
896
+ User: /vibe.run "brick-game" --phase 2
897
+
898
+ Claude:
899
+ πŸ“„ Reading SPEC: .claude/vibe/specs/brick-game.md
900
+ 🎯 Executing Phase 2 only.
901
+
902
+ Phase 2: Game Logic
903
+ 1. [ ] Paddle movement implementation
904
+ 2. [ ] Ball physics engine
905
+ 3. [ ] Brick collision handling
906
+ 4. [ ] Score system
907
+ 5. [ ] Game over conditions
908
+
909
+ ⚑ Launching parallel exploration...
910
+ [Task(haiku) Γ— 3 launched in parallel]
911
+
912
+ πŸš€ Starting implementation...
913
+ ```
914
+
915
+ ## Error Handling
916
+
917
+ On failure:
918
+ 1. Check error message
919
+ 2. Review `<constraints>`
920
+ 3. Fix code and retry
921
+ 4. If continues to fail, report to user
922
+
923
+ ## Next Step
924
+
925
+ ```
926
+ /vibe.verify "brick-game"
927
+ ```
928
+
929
+ ---
930
+
931
+ ARGUMENTS: $ARGUMENTS