@su-record/vibe 2.9.2 → 2.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +30 -10
- package/README.ko.md +90 -25
- package/README.md +139 -25
- package/agents/teams/figma/figma-builder.md +29 -1
- package/agents/teams/review-debate-team.md +1 -1
- package/commands/vibe.analyze.md +324 -170
- package/commands/vibe.figma.md +549 -34
- package/commands/vibe.harness.md +177 -0
- package/commands/vibe.run.md +44 -27
- package/commands/vibe.scaffold.md +195 -0
- package/commands/vibe.spec.md +375 -947
- package/commands/vibe.trace.md +17 -0
- package/commands/vibe.verify.md +19 -10
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +29 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +4 -2
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/postinstall/constants.d.ts +1 -1
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +6 -1
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/setup/ProjectSetup.d.ts +12 -1
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +259 -72
- package/dist/cli/setup/ProjectSetup.js.map +1 -1
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +1 -1
- package/dist/cli/setup.js.map +1 -1
- package/hooks/scripts/figma-guard.js +220 -0
- package/package.json +1 -1
- package/skills/arch-guard/SKILL.md +1 -1
- package/skills/capability-loop/SKILL.md +106 -2
- package/skills/chub-usage/SKILL.md +43 -43
- package/skills/claude-md-guide/SKILL.md +175 -175
- package/skills/design-teach/SKILL.md +33 -33
- package/skills/devlog/SKILL.md +38 -38
- package/skills/event-comms/SKILL.md +23 -13
- package/skills/event-ops/SKILL.md +28 -19
- package/skills/event-planning/SKILL.md +13 -1
- package/skills/priority-todos/SKILL.md +1 -1
- package/skills/vibe.figma/SKILL.md +234 -154
- package/skills/vibe.figma.convert/SKILL.md +123 -112
- package/skills/vibe.figma.extract/SKILL.md +141 -129
- package/skills/vibe.interview/SKILL.md +358 -0
- package/skills/vibe.interview/checklists/api.md +101 -0
- package/skills/vibe.interview/checklists/feature.md +88 -0
- package/skills/vibe.interview/checklists/library.md +95 -0
- package/skills/vibe.interview/checklists/mobile.md +89 -0
- package/skills/vibe.interview/checklists/webapp.md +97 -0
- package/skills/vibe.interview/checklists/website.md +99 -0
- package/skills/vibe.plan/SKILL.md +216 -0
- package/skills/vibe.spec/SKILL.md +1155 -0
- package/{commands/vibe.spec.review.md → skills/vibe.spec.review/SKILL.md} +269 -108
- package/vibe/templates/claudemd-template.md +74 -0
- package/vibe/templates/constitution-template.md +15 -0
- package/vibe/templates/plan-template.md +194 -0
package/commands/vibe.spec.md
CHANGED
|
@@ -1,1135 +1,563 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
3
|
-
argument-hint: "feature name"
|
|
2
|
+
description: 프로젝트 명세 통합 진입점 — interview → plan → spec → review → run/figma 전체 워크플로 오케스트레이션
|
|
3
|
+
argument-hint: "(선택) feature name, plan/interview file path, or idea"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /vibe.spec
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
**vibe 워크플로 통합 진입점.** "무엇을 개발할지" 질문으로 시작해서 interview → plan → SPEC 작성 → review → 구현 + UI 디자인까지 전체 흐름을 오케스트레이션한다.
|
|
9
9
|
|
|
10
10
|
## Usage
|
|
11
11
|
|
|
12
12
|
```
|
|
13
|
-
/vibe.spec
|
|
14
|
-
/vibe.spec "
|
|
15
|
-
/vibe.spec "
|
|
16
|
-
/vibe.spec
|
|
13
|
+
/vibe.spec # 빈 시작 — "무엇을 만들까요?"부터
|
|
14
|
+
/vibe.spec "패럴랙스 웹사이트" # 아이디어/피처명 지정 시작
|
|
15
|
+
/vibe.spec ".claude/vibe/plans/{feature}.md" # 기획서 입력 (plan 단계 스킵)
|
|
16
|
+
/vibe.spec ".claude/vibe/interviews/{feature}.md" # interview 입력 (interview 단계 스킵)
|
|
17
|
+
/vibe.spec "docs/prd.md" # 외부 PRD/아이디어 파일 입력
|
|
18
|
+
/vibe.spec + 📎 첨부 # 첨부 기반 시작
|
|
19
|
+
/vibe.spec "feature-name" ultrawork # 중단 게이트 없이 자동 전 흐름 실행
|
|
17
20
|
```
|
|
18
21
|
|
|
19
|
-
|
|
22
|
+
## Philosophy
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
> **사용자는 "무엇을 만들지"만 말하면 된다. 어떤 스킬을 언제 부를지는 vibe가 결정한다.**
|
|
25
|
+
|
|
26
|
+
- **단일 진입점**: `/vibe.spec` 하나로 전체 워크플로 시작. 다른 `/vibe.*` 커맨드 이름 외울 필요 없음.
|
|
27
|
+
- **Smart resume**: 기존 interview/plan/spec 파일 존재 여부로 어느 단계부터 시작할지 자동 판단.
|
|
28
|
+
- **자동 체이닝**: 스킬 `chain-next` 메타데이터 따라 vibe.interview → vibe.plan → vibe.spec → vibe.spec.review 진행.
|
|
29
|
+
- **분기 판단**: 기획서의 `type` 필드로 UI 트랙/로직 트랙 여부 결정.
|
|
30
|
+
- **사용자 제어**: 각 단계 사이에 사용자 확인 지점(stop gate) 제공 (ultrawork 모드는 스킵).
|
|
31
|
+
|
|
32
|
+
## Flow
|
|
22
33
|
|
|
23
34
|
```
|
|
24
|
-
/vibe.spec "
|
|
35
|
+
/vibe.spec ["input"?]
|
|
36
|
+
↓
|
|
37
|
+
Phase 0: Git branch setup
|
|
38
|
+
↓
|
|
39
|
+
Phase 0.5: Input 분석 + Smart resume 결정
|
|
40
|
+
- 첨부/파일/아이디어 감지
|
|
41
|
+
- 기존 .claude/vibe/{interviews,plans,specs}/ 확인
|
|
42
|
+
- 시작 단계 결정: interview | plan | spec | review
|
|
43
|
+
↓
|
|
44
|
+
Phase 1: Interview (skill: vibe.interview)
|
|
45
|
+
- 조건: interview 파일 없음
|
|
46
|
+
- 사용자 "그만"까지 반복 인터뷰
|
|
47
|
+
- 출력: .claude/vibe/interviews/{feature}.md
|
|
48
|
+
↓
|
|
49
|
+
[Stop Gate 1] — ultrawork 모드에서는 스킵
|
|
50
|
+
↓
|
|
51
|
+
Phase 2: Plan (skill: vibe.plan)
|
|
52
|
+
- 조건: plan 파일 없음
|
|
53
|
+
- interview → 마크다운 기획서 정제
|
|
54
|
+
- 출력: .claude/vibe/plans/{feature}.md
|
|
25
55
|
↓
|
|
26
|
-
[
|
|
56
|
+
[Stop Gate 2 + 분기 판단]
|
|
57
|
+
기획서 type 읽고 경로 결정:
|
|
58
|
+
- website/webapp/mobile → UI + Logic 병렬
|
|
59
|
+
- api/library/feature-data → Logic만
|
|
27
60
|
↓
|
|
28
|
-
|
|
61
|
+
Phase 3: SPEC 작성 (skill: vibe.spec)
|
|
62
|
+
- PTCF 구조 SPEC 문서 + Feature(BDD) 파일
|
|
63
|
+
- Parallel research (GPT/Gemini/Claude agents)
|
|
64
|
+
- Large scope 자동 분할
|
|
65
|
+
- Ambiguity scan + 품질 게이트(100점, 수렴까지 루프)
|
|
66
|
+
- 출력: .claude/vibe/specs/{feature}.md + .claude/vibe/features/{feature}.feature
|
|
29
67
|
↓
|
|
30
|
-
|
|
68
|
+
Phase 4: SPEC Review (skill: vibe.spec.review)
|
|
69
|
+
- Race Review (GPT + Gemini, 라운드 수 캡 없음, 수렴까지 루프)
|
|
70
|
+
- (옵션) Codex adversarial review
|
|
71
|
+
- 사용자 최종 체크포인트
|
|
72
|
+
↓
|
|
73
|
+
Phase 5a: Logic Track → /vibe.run
|
|
74
|
+
Phase 5b: UI Track (병렬, UI 프로젝트만) → /vibe.figma
|
|
75
|
+
↓
|
|
76
|
+
Phase 6: Verify (/vibe.verify)
|
|
77
|
+
Phase 7: Trace (/vibe.trace)
|
|
78
|
+
↓
|
|
79
|
+
Done
|
|
31
80
|
```
|
|
32
81
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
> **⏱️ Timer**: Call `getCurrentTime` tool at the START. Record the result as `{start_time}`.
|
|
82
|
+
## Rules Reference
|
|
36
83
|
|
|
37
|
-
|
|
84
|
+
**`~/.claude/vibe/rules/` (global) 준수:**
|
|
38
85
|
|
|
39
|
-
|
|
86
|
+
- `core/development-philosophy.md`
|
|
87
|
+
- `core/quick-start.md` — Korean first
|
|
88
|
+
- `core/communication-guide.md`
|
|
40
89
|
|
|
41
|
-
|
|
42
|
-
1. Attachment exists? → Use attached file
|
|
43
|
-
2. Argument is file path? (existence check) → Read file
|
|
44
|
-
3. Otherwise → Conversation mode (start with feature name)
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
| Input | Result |
|
|
48
|
-
|-------|--------|
|
|
49
|
-
| 📎 Attached file | → Analyze attached file |
|
|
50
|
-
| File path (exists) | → Read file (Read tool) |
|
|
51
|
-
| Feature name | → Start conversation mode |
|
|
90
|
+
## Process
|
|
52
91
|
|
|
53
|
-
|
|
54
|
-
- Text: `.md`, `.txt`, `.rst`, `.html`, `.json`, `.yaml`, etc.
|
|
55
|
-
- Documents: `.pdf` (page-by-page analysis)
|
|
56
|
-
- Images: `.png`, `.jpg`, `.jpeg`, `.gif`, `.webp`, `.svg`, etc.
|
|
57
|
-
- Notebooks: `.ipynb` (Jupyter)
|
|
58
|
-
- **All formats Claude can read**
|
|
92
|
+
> **⏱️ Timer**: 시작 시 `getCurrentTime` 호출, `{start_time}`로 기록.
|
|
59
93
|
|
|
60
|
-
|
|
94
|
+
### Phase 0: Git Branch Setup (MANDATORY)
|
|
61
95
|
|
|
96
|
+
```bash
|
|
97
|
+
git branch --show-current
|
|
62
98
|
```
|
|
63
|
-
/vibe.spec "docs/login-prd.md"
|
|
64
99
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
- Email/password login
|
|
71
|
-
- Social login (Google, Apple)
|
|
72
|
-
- Password recovery
|
|
73
|
-
- Auto login persistence
|
|
74
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
100
|
+
| 현재 | 행동 |
|
|
101
|
+
|-----|-----|
|
|
102
|
+
| `main`/`master` | 임시 이름으로 `git checkout -b vibe/tmp` (이후 feature 이름 확정되면 리네임) |
|
|
103
|
+
| `feature/*`, `plan/*`, `interview/*`, `vibe/*` | 확인: "이 브랜치에서 계속?" |
|
|
104
|
+
| 기타 | 사용자 확인 |
|
|
75
105
|
|
|
76
|
-
|
|
77
|
-
1. Session expiration time? (default: 24 hours)
|
|
78
|
-
2. Allow concurrent login?
|
|
79
|
-
3. Confirm tech stack? (current: React + Supabase)
|
|
106
|
+
### Phase 0.5: Input 분석 + Smart Resume
|
|
80
107
|
|
|
81
|
-
|
|
108
|
+
**입력 우선순위:**
|
|
82
109
|
|
|
83
|
-
✅ Requirements confirmed → Run research → Generate SPEC → Review
|
|
84
110
|
```
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
When image files (`.png`, `.jpg`, `.jpeg`, `.webp`) are provided as input, analyze them using the best available method:
|
|
98
|
-
|
|
99
|
-
- **Gemini Enabled**: `llm-orchestrate.js gemini analyze-image` (Gemini Flash - best image recognition)
|
|
100
|
-
- **Gemini Disabled**: Claude Opus Read tool (built-in multimodal, existing behavior)
|
|
101
|
-
|
|
102
|
-
**Gemini enabled - analyze via llm-orchestrate.js:**
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
# [LLM_SCRIPT] = {{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js
|
|
106
|
-
node "[LLM_SCRIPT]" gemini analyze-image "./designs/login-wireframe.png" "Analyze this UI design image. Identify all UI elements, layout structure, colors, typography, and component hierarchy. Output a structured breakdown."
|
|
111
|
+
1. 📎 첨부 파일 있음? → 첨부 분석 → feature name 추출
|
|
112
|
+
2. 인자가 파일 경로? → 파일 위치로 시작 단계 결정:
|
|
113
|
+
.claude/vibe/interviews/*.md → Phase 2 (plan)
|
|
114
|
+
.claude/vibe/plans/*.md → Phase 3 (spec)
|
|
115
|
+
.claude/vibe/specs/*.md → Phase 4 (review)
|
|
116
|
+
기타 (.md/.txt/.pdf) → Phase 2 (plan, 외부 PRD 흡수)
|
|
117
|
+
3. 인자가 feature name? → .claude/vibe/에서 기존 파일 검색
|
|
118
|
+
existing spec → "리뷰 재실행? 이어서? 재작성?" 물음
|
|
119
|
+
existing plan → Phase 3 (spec)
|
|
120
|
+
existing interview → Phase 2 (plan)
|
|
121
|
+
아무것도 없음 → Phase 1 (interview)
|
|
122
|
+
4. 인자 없음 → Smart Resume Fallback 알고리즘 실행 (아래 참조)
|
|
107
123
|
```
|
|
108
124
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
If `success: false`, fall back to Claude Read tool.
|
|
112
|
-
|
|
113
|
-
**Gemini disabled - analyze via Claude Read tool:**
|
|
125
|
+
#### Smart Resume Fallback (인자 없는 `/vibe.spec` 호출 시)
|
|
114
126
|
|
|
115
|
-
|
|
127
|
+
**목적**: feature 이름을 기억하지 못해도 진행 중 작업을 자동 발견해서 이어서 진행할 수 있게 한다.
|
|
116
128
|
|
|
117
|
-
**Image input example:**
|
|
118
129
|
```
|
|
119
|
-
|
|
130
|
+
알고리즘:
|
|
120
131
|
|
|
121
|
-
|
|
122
|
-
|
|
132
|
+
Step 1) .claude/vibe/.last-feature 확인 (pointer 파일)
|
|
133
|
+
- 파일 없음 → Step 2로
|
|
134
|
+
- 존재 → 해당 feature의 상태 요약 출력 + 확인 질문:
|
|
135
|
+
"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
136
|
+
🔄 마지막 작업: {feature-name}
|
|
137
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
138
|
+
✅ interview: .claude/vibe/interviews/{feature}.md (status: complete, N일 전)
|
|
139
|
+
✅ plan: .claude/vibe/plans/{feature}.md (N일 전)
|
|
140
|
+
❌ spec: 없음
|
|
141
|
+
→ 다음 단계: Phase 3 (vibe.spec 스킬 — SPEC 작성)
|
|
123
142
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
- Social login buttons (Google, Apple)
|
|
143
|
+
이어서 진행할까요?
|
|
144
|
+
Enter / yes → 이어서 진행
|
|
145
|
+
list → 다른 진행 중 작업 목록 보기
|
|
146
|
+
new → 새 아이디어로 시작
|
|
147
|
+
abort → 종료"
|
|
130
148
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
149
|
+
- yes → Phase 0.5의 인자 분석 경로 3번 (feature name)으로 진입
|
|
150
|
+
- list → Step 2로
|
|
151
|
+
- new → Step 3으로
|
|
152
|
+
- abort → 종료
|
|
134
153
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
154
|
+
Step 2) 진행 중 작업 목록 표시 (.claude/vibe/ 디렉토리 스캔)
|
|
155
|
+
수집:
|
|
156
|
+
features = {} (feature name → {hasInterview, hasPlan, hasSpec, mtime})
|
|
157
|
+
for each file in .claude/vibe/interviews/*.md:
|
|
158
|
+
feature = basename without .md
|
|
159
|
+
features[feature].hasInterview = true
|
|
160
|
+
features[feature].interviewMtime = file.mtime
|
|
161
|
+
features[feature].interviewStatus = frontmatter의 status (complete/partial)
|
|
162
|
+
동일하게 plans/*.md, specs/*.md 스캔
|
|
139
163
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
- `core/quick-start.md` - Korean first, DRY, SRP
|
|
143
|
-
- `core/communication-guide.md` - Communication principles
|
|
164
|
+
정렬: 가장 최근 작업 (max mtime) 순
|
|
165
|
+
최대 10개까지 표시
|
|
144
166
|
|
|
145
|
-
|
|
167
|
+
진행 중 작업 0개 → Step 3으로
|
|
168
|
+
1개 이상 → 목록 출력 + 선택 질문:
|
|
169
|
+
"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
170
|
+
🔍 진행 중인 작업
|
|
171
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
146
172
|
|
|
147
|
-
|
|
173
|
+
1. bean-landing [interview: partial] 2일 전
|
|
174
|
+
2. todo-app [plan: complete] 어제
|
|
175
|
+
3. payment-api [spec: complete] 방금 전
|
|
176
|
+
─────────────────────────────────────────────
|
|
177
|
+
n. ➕ 새로 시작
|
|
178
|
+
a. 종료
|
|
148
179
|
|
|
149
|
-
|
|
180
|
+
선택 번호 또는 feature 이름을 입력하세요:"
|
|
150
181
|
|
|
151
|
-
|
|
182
|
+
사용자 응답 처리:
|
|
183
|
+
- 숫자 (1~N) → 해당 feature 선택 → 인자 분석 경로 3번으로
|
|
184
|
+
- 정확한 feature 이름 → 인자 분석 경로 3번으로
|
|
185
|
+
- "n" 또는 "new" → Step 3으로
|
|
186
|
+
- "a" 또는 "abort" → 종료
|
|
187
|
+
- 자유 텍스트 (매칭 없음) → "{입력}은 기존 feature가 아닙니다. 새로 시작할까요? (y/n)" 확인
|
|
152
188
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
```
|
|
156
|
-
/vibe.spec "feature"
|
|
157
|
-
↓
|
|
158
|
-
[Claude] Draft SPEC
|
|
159
|
-
↓
|
|
160
|
-
[Parallel Research] GPT + Gemini + Claude agents (8 parallel)
|
|
161
|
-
↓
|
|
162
|
-
[SPEC Review] GPT + Gemini parallel review
|
|
163
|
-
↓
|
|
164
|
-
[Claude] Finalize SPEC
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
**Setup:**
|
|
168
|
-
```bash
|
|
169
|
-
vibe gpt key <key> # Enable GPT
|
|
170
|
-
vibe gemini key <key> # Enable Gemini
|
|
171
|
-
vibe status # Check current settings
|
|
189
|
+
Step 3) 빈 시작 (기존 동작)
|
|
190
|
+
"👋 무엇을 만들고 싶으신가요?" 질문 → Phase 1 (interview)
|
|
172
191
|
```
|
|
173
192
|
|
|
174
|
-
|
|
193
|
+
#### `.last-feature` 포인터 파일 갱신 규칙
|
|
175
194
|
|
|
176
|
-
|
|
195
|
+
```
|
|
196
|
+
경로: .claude/vibe/.last-feature
|
|
197
|
+
형식: 한 줄, feature name만 저장
|
|
198
|
+
예: "bean-landing\n"
|
|
177
199
|
|
|
178
|
-
|
|
179
|
-
|
|
200
|
+
⚠ 이 파일은 **개인 작업 포인터**이므로 git에 커밋하지 않는다.
|
|
201
|
+
`.gitignore` 에 `.claude/vibe/.last-feature` 엔트리 필수.
|
|
180
202
|
|
|
181
|
-
|
|
203
|
+
갱신 시점:
|
|
204
|
+
- Phase 1 (interview) 진입 시 → feature name 결정되면 즉시 기록
|
|
205
|
+
- Phase 2 (plan) 진입 시 → 기록 (이미 맞으면 no-op)
|
|
206
|
+
- Phase 3 (spec) 진입 시 → 기록
|
|
207
|
+
- Phase 4 (review) 진입 시 → 기록
|
|
182
208
|
|
|
183
|
-
|
|
209
|
+
즉, 어느 Phase에서 멈추든 다음 /vibe.spec 호출 시 이 feature가 1순위로 제안된다.
|
|
184
210
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
211
|
+
삭제 시점:
|
|
212
|
+
- Phase 7 (trace) 완료 시 → 파일 삭제 (워크플로 완주)
|
|
213
|
+
- 사용자가 명시적으로 종료/abort 선택 시 → 삭제하지 않음 (재개 가능하게)
|
|
188
214
|
```
|
|
189
215
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
| Current Branch | Action |
|
|
193
|
-
|----------------|--------|
|
|
194
|
-
| `main` or `master` | **MUST** create feature branch: `git checkout -b feature/{feature-name}` |
|
|
195
|
-
| `feature/*` | Ask user: "Continue on this branch or create new?" |
|
|
196
|
-
| Other | Ask user to confirm |
|
|
197
|
-
|
|
198
|
-
**Example execution:**
|
|
216
|
+
**출력 예시:**
|
|
199
217
|
|
|
200
218
|
```
|
|
201
219
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
202
|
-
|
|
220
|
+
🔍 Input 분석
|
|
203
221
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
204
222
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
$ git checkout -b feature/login-page
|
|
209
|
-
|
|
210
|
-
✅ Switched to new branch: feature/login-page
|
|
223
|
+
입력: "패럴랙스 웹사이트"
|
|
224
|
+
분류: 신규 아이디어
|
|
225
|
+
기존 파일: 없음
|
|
211
226
|
|
|
227
|
+
→ 시작 단계: Phase 1 (vibe.interview)
|
|
212
228
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
213
229
|
```
|
|
214
230
|
|
|
215
|
-
|
|
216
|
-
- Convert to lowercase: `Login Page` → `login-page`
|
|
217
|
-
- Replace spaces with hyphens
|
|
218
|
-
- Prefix with `feature/`
|
|
219
|
-
- Example: `feature/passkey-auth`, `feature/dark-mode`
|
|
220
|
-
|
|
221
|
-
### 1. Project Analysis
|
|
222
|
-
|
|
223
|
-
**Existing project** (`vibe init`):
|
|
224
|
-
- Reference `CLAUDE.md` file (tech stack)
|
|
225
|
-
- **Delegate codebase analysis to explorer agent** — do NOT read project files in main session:
|
|
226
|
-
|
|
227
|
-
```text
|
|
228
|
-
Task(subagent_type="explorer-low",
|
|
229
|
-
prompt="Analyze project structure: package.json, pyproject.toml, pubspec.yaml, go.mod.
|
|
230
|
-
Find existing implementations related to [FEATURE]. Return: tech stack, relevant files, patterns used.
|
|
231
|
-
Keep summary under 200 tokens.")
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
**New project** (`vibe init <project-name>`):
|
|
235
|
-
- Suggest tech stack (2-3 options)
|
|
236
|
-
|
|
237
|
-
### 2. Collect Requirements via Conversation
|
|
231
|
+
### Phase 1: Interview (조건부)
|
|
238
232
|
|
|
239
|
-
|
|
240
|
-
- Ask **one question at a time**
|
|
241
|
-
- Present options **with numbers** + "Feel free to describe in your own words"
|
|
242
|
-
- **Natural conversation** without fixed order
|
|
233
|
+
**진입 조건:** interview 파일이 아직 없음
|
|
243
234
|
|
|
244
|
-
|
|
245
|
-
- Purpose (Why): Why is it needed?
|
|
246
|
-
- User (Who): Who will use it?
|
|
247
|
-
- Feature scope (What): What features are needed?
|
|
248
|
-
- Tech stack: Confirm existing stack or suggest new
|
|
249
|
-
- Design reference: UI/UX to reference
|
|
235
|
+
**진입 방식:**
|
|
250
236
|
|
|
251
|
-
|
|
237
|
+
1. **인자 있음** (`/vibe.spec "아이디어"`)
|
|
238
|
+
→ `vibe.interview` 스킬 로드 + 아이디어 전달
|
|
252
239
|
|
|
253
|
-
|
|
240
|
+
2. **인자 없음** (`/vibe.spec`)
|
|
241
|
+
→ **Smart Resume Fallback 먼저** (Phase 0.5 참조):
|
|
242
|
+
- `.last-feature` 있고 사용자가 "이어서" 선택 → 해당 feature로 진입 (이 Phase 1 건너뛸 수 있음)
|
|
243
|
+
- 진행 중 작업 목록에서 선택 → 해당 feature로 진입
|
|
244
|
+
- "new" 선택 or 진행 중 작업 없음 → 아래 질문으로 빈 시작
|
|
245
|
+
→ 빈 시작 질문:
|
|
246
|
+
```
|
|
247
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
248
|
+
👋 무엇을 만들고 싶으신가요?
|
|
249
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
254
250
|
|
|
255
|
-
|
|
256
|
-
-
|
|
257
|
-
-
|
|
258
|
-
-
|
|
259
|
-
-
|
|
251
|
+
예:
|
|
252
|
+
- "패럴랙스 웹사이트"
|
|
253
|
+
- "할 일 관리 앱"
|
|
254
|
+
- "Stripe 결제 연동 API"
|
|
255
|
+
- 또는 자유롭게 설명
|
|
260
256
|
|
|
261
|
-
|
|
257
|
+
(파일/이미지 첨부도 가능)
|
|
258
|
+
```
|
|
259
|
+
→ 사용자 응답 → `vibe.interview` 스킬 로드
|
|
262
260
|
|
|
263
|
-
|
|
264
|
-
|----------|--------|
|
|
265
|
-
| Exploratory (feature scope, style) | Natural conversation |
|
|
266
|
-
| **Critical** (auth, security, session) | `askUser` tool |
|
|
267
|
-
| Optional (performance, integration) | Natural conversation |
|
|
261
|
+
**스킬 로드:**
|
|
268
262
|
|
|
269
|
-
**Usage:**
|
|
270
|
-
|
|
271
|
-
```typescript
|
|
272
|
-
import { askUser, askUserQuick } from '@su-record/vibe/tools';
|
|
273
|
-
|
|
274
|
-
// Quick helper for common scenarios
|
|
275
|
-
const result = await askUserQuick.login('my-login-feature');
|
|
276
|
-
console.log(result.content[0].text);
|
|
277
|
-
|
|
278
|
-
// Custom categories
|
|
279
|
-
const result = await askUser({
|
|
280
|
-
featureName: 'user-dashboard',
|
|
281
|
-
categories: ['authentication', 'security', 'session', 'data_model'],
|
|
282
|
-
context: 'Building a user dashboard with role-based access',
|
|
283
|
-
});
|
|
284
263
|
```
|
|
285
|
-
|
|
286
|
-
**Available categories:**
|
|
287
|
-
- `authentication`: Auth methods, MFA
|
|
288
|
-
- `security`: Password policy, rate limiting
|
|
289
|
-
- `session`: Session expiry, concurrent login
|
|
290
|
-
- `data_model`: User profile fields
|
|
291
|
-
- `performance`: Response time targets
|
|
292
|
-
- `integration`: External service integration
|
|
293
|
-
|
|
294
|
-
**Example output:**
|
|
295
|
-
|
|
264
|
+
Load skill `vibe.interview` with input: {user_idea}
|
|
296
265
|
```
|
|
297
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
298
|
-
📋 Requirements Confirmation
|
|
299
|
-
Feature: login
|
|
300
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
301
|
-
|
|
302
|
-
## 🔐 Authentication
|
|
303
266
|
|
|
304
|
-
|
|
267
|
+
> **`.last-feature` 갱신**: vibe.interview 스킬이 feature name을 확정하는 즉시 `.claude/vibe/.last-feature` 에 한 줄로 기록. 이후 Phase 2/3/4 진입 시에도 동일 기록 유지 (값이 같으면 no-op).
|
|
305
268
|
|
|
306
|
-
|
|
307
|
-
|
|
269
|
+
`vibe.interview` 스킬이 자체적으로:
|
|
270
|
+
- 프로젝트 타입 감지 (website/webapp/mobile/api/library/feature)
|
|
271
|
+
- 타입별 체크리스트 로드 (`skills/vibe.interview/checklists/{type}.md`)
|
|
272
|
+
- 반복 인터뷰 실행 (사용자 "그만"까지)
|
|
273
|
+
- `.claude/vibe/interviews/{feature-name}.md` 저장
|
|
308
274
|
|
|
309
|
-
1
|
|
310
|
-
2. **Google Social Login**
|
|
311
|
-
3. **Apple Social Login**
|
|
312
|
-
...
|
|
275
|
+
**Stop Gate 1**: Interview 완료 후 (ultrawork 모드 스킵)
|
|
313
276
|
|
|
314
|
-
|
|
277
|
+
```
|
|
315
278
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
316
|
-
|
|
279
|
+
✅ Interview 완료
|
|
317
280
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
**Response parsing:**
|
|
321
281
|
|
|
322
|
-
|
|
323
|
-
|
|
282
|
+
📄 .claude/vibe/interviews/{feature}.md
|
|
283
|
+
Required: N/M | Optional: K/L | Discovered: X
|
|
324
284
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
285
|
+
다음 단계: 기획서 작성
|
|
286
|
+
1. 계속 진행 (기본)
|
|
287
|
+
2. Interview만 저장하고 종료
|
|
288
|
+
3. Interview 수정 후 다시 (vibe.interview 재실행)
|
|
329
289
|
|
|
330
|
-
|
|
331
|
-
- askUser is **skipped** in ultrawork mode
|
|
332
|
-
- Uses default values from templates automatically
|
|
333
|
-
|
|
334
|
-
### 2.5. Reference Documents via config.json (MANDATORY after tech stack confirmed)
|
|
335
|
-
|
|
336
|
-
**🚨 CRITICAL: Read config.json references IMMEDIATELY after tech stack is confirmed**
|
|
337
|
-
|
|
338
|
-
Reference documents are automatically generated in `config.json` based on the stack detected during `vibe init`:
|
|
339
|
-
|
|
340
|
-
```json
|
|
341
|
-
// .claude/vibe/config.json
|
|
342
|
-
{
|
|
343
|
-
"language": "ko",
|
|
344
|
-
"stacks": [
|
|
345
|
-
{ "type": "typescript-react", "path": "package.json" }
|
|
346
|
-
],
|
|
347
|
-
"references": {
|
|
348
|
-
"rules": [
|
|
349
|
-
"~/.claude/vibe/rules/code-quality.md",
|
|
350
|
-
"~/.claude/vibe/rules/error-handling.md",
|
|
351
|
-
"~/.claude/vibe/rules/security.md"
|
|
352
|
-
],
|
|
353
|
-
"languages": [
|
|
354
|
-
"~/.claude/vibe/languages/typescript-react.md"
|
|
355
|
-
],
|
|
356
|
-
"templates": [
|
|
357
|
-
"~/.claude/vibe/templates/spec-template.md",
|
|
358
|
-
"~/.claude/vibe/templates/feature-template.md",
|
|
359
|
-
"~/.claude/vibe/templates/constitution-template.md"
|
|
360
|
-
]
|
|
361
|
-
}
|
|
362
|
-
}
|
|
290
|
+
Enter → 계속
|
|
363
291
|
```
|
|
364
292
|
|
|
365
|
-
|
|
293
|
+
### Phase 2: Plan (조건부)
|
|
366
294
|
|
|
367
|
-
|
|
368
|
-
2. Extract `references.languages[]` paths
|
|
369
|
-
3. Read each language document for stack-specific guidelines
|
|
295
|
+
**진입 조건:** plan 파일이 아직 없음
|
|
370
296
|
|
|
371
|
-
**Example:**
|
|
372
|
-
```bash
|
|
373
|
-
# 1. Check references in config.json
|
|
374
|
-
Read .claude/vibe/config.json
|
|
375
|
-
|
|
376
|
-
# 2. Reference documents specified in references.languages
|
|
377
|
-
Read ~/.claude/vibe/languages/typescript-react.md
|
|
378
297
|
```
|
|
379
|
-
|
|
380
|
-
**Important:**
|
|
381
|
-
|
|
382
|
-
- No manual mapping needed - config.json contains all reference paths
|
|
383
|
-
- `config.json.references` is automatically referenced when running `/vibe.run`
|
|
384
|
-
- Not copied to project (referenced from global package)
|
|
385
|
-
|
|
386
|
-
### 3. Parallel Research (v2.5.0) - MANDATORY AFTER requirements confirmed
|
|
387
|
-
|
|
388
|
-
**🚨🚨🚨 ABSOLUTE RULES FOR RESEARCH PHASE 🚨🚨🚨**
|
|
389
|
-
|
|
390
|
-
**STOP! Before doing ANY research, read this carefully:**
|
|
391
|
-
|
|
392
|
-
1. **DO NOT** use Task tool to spawn research agents
|
|
393
|
-
2. **DO NOT** use context7 MCP directly for research
|
|
394
|
-
3. **DO NOT** use WebSearch tool directly for research
|
|
395
|
-
4. **YOU MUST** use Bash tool to call llm-orchestrate.js directly
|
|
396
|
-
|
|
397
|
-
**🚨🚨🚨 CRITICAL: NO FILE CREATION DURING RESEARCH 🚨🚨🚨**
|
|
398
|
-
|
|
399
|
-
5. **DO NOT** create any files in project root during research
|
|
400
|
-
6. **DO NOT** create SECURITY_*.md, RESEARCH_*.md, SUMMARY_*.md files
|
|
401
|
-
7. **DO NOT** use Write tool during research phase
|
|
402
|
-
8. **ALL research results** must be returned as text output only
|
|
403
|
-
9. **Files are ONLY created** in Step 4 (SPEC) and Step 5 (Feature) in `.claude/vibe/` directory
|
|
404
|
-
|
|
405
|
-
**When to trigger:**
|
|
406
|
-
1. ✅ Feature type decided (e.g., "passkey authentication")
|
|
407
|
-
2. ✅ Tech stack confirmed (e.g., "React + Supabase")
|
|
408
|
-
3. ✅ Language guide copied (step 2.5)
|
|
409
|
-
4. ✅ Core requirements collected
|
|
410
|
-
|
|
411
|
-
**→ IMMEDIATELY run these 6 Bash commands IN PARALLEL (all at once):**
|
|
412
|
-
|
|
413
|
-
**Step 0: Script path:**
|
|
414
|
-
- `[LLM_SCRIPT]` = `{{VIBE_PATH}}/hooks/scripts/llm-orchestrate.js`
|
|
415
|
-
|
|
416
|
-
**Run all 4 in PARALLEL (each as separate Bash tool call):**
|
|
417
|
-
```bash
|
|
418
|
-
# 1. GPT: Best practices (codex — code review & analysis)
|
|
419
|
-
node "[LLM_SCRIPT]" gpt-codex orchestrate-json "Best practices for [FEATURE] with [STACK]. Focus: architecture patterns, code conventions. Return JSON: {patterns: [], antiPatterns: [], libraries: []}"
|
|
420
|
-
|
|
421
|
-
# 2. GPT: Security (codex — code review & analysis)
|
|
422
|
-
node "[LLM_SCRIPT]" gpt-codex orchestrate-json "Security vulnerabilities for [FEATURE] with [STACK]. Focus: CVE database, known exploits. Return JSON: {vulnerabilities: [], mitigations: [], checklist: []}"
|
|
423
|
-
|
|
424
|
-
# 3. Gemini: Best practices
|
|
425
|
-
node "[LLM_SCRIPT]" gemini orchestrate-json "Best practices for [FEATURE] with [STACK]. Focus: latest trends, framework updates. Return JSON: {patterns: [], antiPatterns: [], libraries: []}"
|
|
426
|
-
|
|
427
|
-
# 4. Gemini: Security
|
|
428
|
-
node "[LLM_SCRIPT]" gemini orchestrate-json "Security advisories for [FEATURE] with [STACK]. Focus: latest patches, recent incidents. Return JSON: {advisories: [], patches: [], incidents: []}"
|
|
298
|
+
Load skill `vibe.plan` with input: .claude/vibe/interviews/{feature}.md
|
|
429
299
|
```
|
|
430
300
|
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
# GPT security (codex — code review & analysis)
|
|
437
|
-
node "[LLM_SCRIPT]" gpt-codex orchestrate-json "Security vulnerabilities for passkey authentication with React, Supabase. Focus: CVE database, known exploits. Return JSON: {vulnerabilities: [], mitigations: [], checklist: []}"
|
|
301
|
+
`vibe.plan` 스킬이 자체적으로:
|
|
302
|
+
- 템플릿 로드 (`~/.claude/vibe/templates/plan-template.md`)
|
|
303
|
+
- Interview 섹션별 정제
|
|
304
|
+
- UI 섹션 조건부 포함 (type 기반)
|
|
305
|
+
- `.claude/vibe/plans/{feature}.md` 저장
|
|
438
306
|
|
|
439
|
-
|
|
440
|
-
node "[LLM_SCRIPT]" gemini orchestrate-json "Best practices for passkey authentication with React, Supabase. Focus: latest trends, framework updates. Return JSON: {patterns: [], antiPatterns: [], libraries: []}"
|
|
307
|
+
**Stop Gate 2**: 기획서 완료 후 + 분기 판단 (ultrawork 모드 스킵)
|
|
441
308
|
|
|
442
|
-
# Gemini security
|
|
443
|
-
node "[LLM_SCRIPT]" gemini orchestrate-json "Security advisories for passkey authentication with React, Supabase. Focus: latest patches, recent incidents. Return JSON: {advisories: [], patches: [], incidents: []}"
|
|
444
309
|
```
|
|
310
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
311
|
+
✅ 기획서 완성
|
|
312
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
445
313
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
| Claude Agent | Role | Source |
|
|
449
|
-
|--------------|------|--------|
|
|
450
|
-
| `best-practices-agent` | Best practices for [feature] + [stack] | WebSearch |
|
|
451
|
-
| `framework-docs-agent` | Latest docs via context7 | context7 MCP |
|
|
452
|
-
| `codebase-patterns-agent` | Similar patterns in existing codebase | Glob, Grep |
|
|
453
|
-
| `security-advisory-agent` | Security advisories for [feature] | WebSearch |
|
|
454
|
-
|
|
455
|
-
**Total: 4 GPT/Gemini calls (Bash) + 4 Claude agents (Task) = 8 parallel research tasks**
|
|
456
|
-
|
|
457
|
-
**🚨 GPT/Gemini MUST be called via Bash with llm-orchestrate.js! 🚨**
|
|
458
|
-
|
|
459
|
-
#### 3.0.1 Agent Teams — Research Collaboration
|
|
460
|
-
|
|
461
|
-
> **팀 정의**: `agents/teams/research-team.md` 참조
|
|
462
|
-
> 설정: `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` + `teammateMode: in-process` (`~/.claude/settings.json` 전역 — postinstall 자동 설정)
|
|
463
|
-
|
|
464
|
-
**토론 결과는 SPEC의 Context 섹션에 반영됩니다.**
|
|
465
|
-
|
|
466
|
-
#### 3.1 Result Merge Rules
|
|
467
|
-
|
|
468
|
-
| Area | Merge Strategy |
|
|
469
|
-
|------|----------------|
|
|
470
|
-
| Best Practices | Deduplicate, keep most detailed |
|
|
471
|
-
| Security | ALL included (no dedup for safety) |
|
|
472
|
-
| Libraries | Consensus recommendations |
|
|
473
|
-
|
|
474
|
-
**IMPORTANT:**
|
|
475
|
-
- ❌ DO NOT skip research step
|
|
476
|
-
- ❌ DO NOT ask user "should I run research?"
|
|
477
|
-
- ✅ ALWAYS run after requirements confirmed
|
|
478
|
-
- ✅ Show "Running parallel research (Claude + GPT + Gemini)..." message
|
|
479
|
-
- ✅ Include all agent + LLM results in SPEC Context
|
|
480
|
-
- ✅ Run all 4 Bash LLM calls in parallel + 4 Task agents in parallel
|
|
481
|
-
|
|
482
|
-
**Research results are reflected in SPEC's Context section.**
|
|
483
|
-
|
|
484
|
-
### 3.2 UI/UX Design Intelligence (Auto-triggered)
|
|
314
|
+
📄 .claude/vibe/plans/{feature}.md
|
|
315
|
+
Type: {type}
|
|
485
316
|
|
|
486
|
-
|
|
487
|
-
|
|
317
|
+
{type ∈ UI}:
|
|
318
|
+
자동 경로: SPEC 작성 → Review → Logic Track + UI Track 병렬 실행
|
|
319
|
+
1. 계속 (권장)
|
|
320
|
+
2. Logic Track만 (SPEC만)
|
|
321
|
+
3. UI Track만 (/vibe.figma 바로)
|
|
322
|
+
4. 여기서 종료
|
|
488
323
|
|
|
489
|
-
|
|
324
|
+
{type ∈ non-UI}:
|
|
325
|
+
자동 경로: SPEC 작성 → Review → Logic Track
|
|
326
|
+
1. 계속 (권장)
|
|
327
|
+
2. 여기서 종료
|
|
490
328
|
|
|
329
|
+
Enter → 계속
|
|
491
330
|
```
|
|
492
|
-
[Parallel Research] GPT + Gemini + Claude agents
|
|
493
|
-
↓ (동시 실행)
|
|
494
|
-
[UI/UX Intelligence]
|
|
495
|
-
① ui-industry-analyzer (Haiku) → 산업 분석 + 디자인 전략
|
|
496
|
-
↓
|
|
497
|
-
②③ 병렬 실행:
|
|
498
|
-
② ui-design-system-gen (Sonnet) → MASTER.md 생성
|
|
499
|
-
③ ui-layout-architect (Haiku) → 레이아웃 설계
|
|
500
|
-
```
|
|
501
|
-
|
|
502
|
-
**실행 방법:**
|
|
503
331
|
|
|
504
|
-
|
|
505
|
-
```text
|
|
506
|
-
Task(subagent_type="ui-industry-analyzer",
|
|
507
|
-
prompt="Analyze product: [USER_DESCRIPTION]. Use core_ui_search to detect category, style priority, color mood, typography mood. Save result to .claude/vibe/design-system/{project}/analysis-result.json")
|
|
508
|
-
```
|
|
332
|
+
### Phase 3: SPEC 작성
|
|
509
333
|
|
|
510
|
-
|
|
511
|
-
```text
|
|
512
|
-
# ② 디자인 시스템 생성 (Sonnet)
|
|
513
|
-
Task(subagent_type="ui-design-system-gen",
|
|
514
|
-
prompt="Generate design system from analysis-result.json for project '{project}'. Use core_ui_search for style/color/typography, then core_ui_generate_design_system and core_ui_persist_design_system.")
|
|
334
|
+
**진입 조건:** spec 파일이 아직 없음 (또는 재작성 요청)
|
|
515
335
|
|
|
516
|
-
# ③ 레이아웃 설계 (Haiku) — 병렬 실행
|
|
517
|
-
Task(subagent_type="ui-layout-architect",
|
|
518
|
-
prompt="Design layout from analysis-result.json for project '{project}'. Use core_ui_search for landing patterns and dashboard layout.")
|
|
519
336
|
```
|
|
520
|
-
|
|
521
|
-
3. **결과를 SPEC Context에 주입:**
|
|
522
|
-
```markdown
|
|
523
|
-
### Design System (Auto-generated)
|
|
524
|
-
- Category: {①의 category}
|
|
525
|
-
- Style: {①의 style_priority}
|
|
526
|
-
- MASTER.md: .claude/vibe/design-system/{project}/MASTER.md
|
|
527
|
-
- Layout: {③의 pattern + sections}
|
|
337
|
+
Load skill `vibe.spec` with input: .claude/vibe/plans/{feature}.md
|
|
528
338
|
```
|
|
529
339
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
#### 4.0 Large Scope Detection & Auto-Split (MANDATORY)
|
|
340
|
+
`vibe.spec` 스킬이 PTCF 구조 SPEC 문서 + Feature(BDD) 파일 생성.
|
|
533
341
|
|
|
534
|
-
|
|
342
|
+
**핵심 단계** (상세는 `skills/vibe.spec/SKILL.md` 참조):
|
|
535
343
|
|
|
536
|
-
|
|
344
|
+
1. Project analysis (explorer agent)
|
|
345
|
+
2. config.json references 로드
|
|
346
|
+
3. Parallel research (GPT + Gemini + Claude agents, 8개 병렬)
|
|
347
|
+
4. UI/UX Design Intelligence (UI 키워드 시 자동)
|
|
348
|
+
5. PTCF SPEC 작성 (Large scope 자동 분할)
|
|
349
|
+
6. Feature file (BDD) 생성
|
|
350
|
+
7. Ambiguity scan
|
|
351
|
+
8. Quality gate (100점, 수렴까지 루프)
|
|
537
352
|
|
|
538
|
-
|
|
353
|
+
**출력:**
|
|
539
354
|
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
| Phases | 5+ phases |
|
|
543
|
-
| Files to create | 15+ files |
|
|
544
|
-
| Platforms | 2+ platforms |
|
|
545
|
-
| Major features | 4+ distinct features |
|
|
355
|
+
- `.claude/vibe/specs/{feature-name}.md` (또는 split folder)
|
|
356
|
+
- `.claude/vibe/features/{feature-name}.feature` (또는 split folder)
|
|
546
357
|
|
|
547
|
-
|
|
358
|
+
### Phase 4: SPEC Review
|
|
548
359
|
|
|
549
360
|
```
|
|
550
|
-
.
|
|
551
|
-
├── _index.md # Master SPEC
|
|
552
|
-
├── phase-1-setup.md
|
|
553
|
-
├── phase-2-core.md
|
|
554
|
-
└── ...
|
|
555
|
-
|
|
556
|
-
.claude/vibe/features/{feature-name}/
|
|
557
|
-
├── _index.feature # Master Feature
|
|
558
|
-
├── phase-1-setup.feature
|
|
559
|
-
├── phase-2-core.feature
|
|
560
|
-
└── ...
|
|
361
|
+
Load skill `vibe.spec.review` with feature: {feature-name}
|
|
561
362
|
```
|
|
562
363
|
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
**Master SPEC (`_index.md`):**
|
|
364
|
+
`vibe.spec.review` 스킬이 Race Review + 품질 검증 + 사용자 체크포인트 실행.
|
|
566
365
|
|
|
567
|
-
|
|
568
|
-
# SPEC: {feature-name} (Master)
|
|
366
|
+
**핵심 단계** (상세는 `skills/vibe.spec.review/SKILL.md` 참조):
|
|
569
367
|
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
368
|
+
1. SPEC/Feature 파일 로드 (single/split 자동 감지)
|
|
369
|
+
2. Quality Validation (100점 게이트, 수렴까지 auto-fix 루프)
|
|
370
|
+
3. Race Review (GPT + Gemini parallel, 라운드 수 캡 없음, P1=0 + 수렴 시 종료)
|
|
371
|
+
4. (옵션) Codex adversarial review
|
|
372
|
+
5. Review Debate Team (2+ P1/P2 이슈 시)
|
|
373
|
+
6. 사용자 최종 체크포인트
|
|
573
374
|
|
|
574
|
-
|
|
375
|
+
### Phase 5a: Logic Track
|
|
575
376
|
|
|
576
|
-
| Order | SPEC File | Feature File | Status |
|
|
577
|
-
|-------|-----------|--------------|--------|
|
|
578
|
-
| 1 | phase-1-setup.md | phase-1-setup.feature | ⬜ |
|
|
579
|
-
| 2 | phase-2-core.md | phase-2-core.feature | ⬜ |
|
|
580
|
-
|
|
581
|
-
## Shared Context
|
|
582
|
-
- Tech Stack: [all phases]
|
|
583
|
-
- Constraints: [all phases]
|
|
584
377
|
```
|
|
585
|
-
|
|
586
|
-
**Master Feature (`_index.feature`):**
|
|
587
|
-
|
|
588
|
-
```markdown
|
|
589
|
-
# Feature: {feature-name} (Master)
|
|
590
|
-
|
|
591
|
-
**Master SPEC**: `.claude/vibe/specs/{feature-name}/_index.md`
|
|
592
|
-
|
|
593
|
-
## Sub-Features
|
|
594
|
-
|
|
595
|
-
| Order | Feature File | SPEC File | Status |
|
|
596
|
-
|-------|--------------|-----------|--------|
|
|
597
|
-
| 1 | phase-1-setup.feature | phase-1-setup.md | ⬜ |
|
|
598
|
-
| 2 | phase-2-core.feature | phase-2-core.md | ⬜ |
|
|
599
|
-
|
|
600
|
-
## Overall User Story
|
|
601
|
-
**As a** {user}
|
|
602
|
-
**I want** {complete feature}
|
|
603
|
-
**So that** {value}
|
|
378
|
+
/vibe.run "{feature-name}"
|
|
604
379
|
```
|
|
605
380
|
|
|
606
|
-
|
|
381
|
+
SPEC → 코드 구현.
|
|
607
382
|
|
|
608
|
-
|
|
383
|
+
### Phase 5b: UI Track (type ∈ {website, webapp, mobile}일 때만)
|
|
609
384
|
|
|
610
|
-
|
|
611
|
-
---
|
|
612
|
-
status: pending
|
|
613
|
-
currentPhase: 0
|
|
614
|
-
totalPhases: 3
|
|
615
|
-
createdAt: {ISO-timestamp}
|
|
616
|
-
lastUpdated: {ISO-timestamp}
|
|
617
|
-
---
|
|
385
|
+
**5a와 병렬 실행** (또는 순차 — 사용자 선택):
|
|
618
386
|
|
|
619
|
-
# SPEC: {feature-name}
|
|
620
|
-
|
|
621
|
-
## Persona
|
|
622
|
-
<role>
|
|
623
|
-
Define AI role and expertise for implementation
|
|
624
|
-
- Senior developer on the project
|
|
625
|
-
- Follow existing code patterns
|
|
626
|
-
- Write testable code
|
|
627
|
-
</role>
|
|
628
|
-
|
|
629
|
-
## Context
|
|
630
|
-
<context>
|
|
631
|
-
### Background
|
|
632
|
-
- Why this feature is needed
|
|
633
|
-
- Who will use it
|
|
634
|
-
|
|
635
|
-
### Tech Stack
|
|
636
|
-
- Backend: {technology}
|
|
637
|
-
- Frontend: {technology}
|
|
638
|
-
- Database: {technology}
|
|
639
|
-
|
|
640
|
-
### Related Code
|
|
641
|
-
- `src/xxx/`: Existing implementation to reference
|
|
642
|
-
- `src/yyy/`: Files to modify
|
|
643
|
-
|
|
644
|
-
### Design Reference
|
|
645
|
-
- {Reference app/service}
|
|
646
|
-
</context>
|
|
647
|
-
|
|
648
|
-
## Task
|
|
649
|
-
<task>
|
|
650
|
-
### Phase 1: {phase-name}
|
|
651
|
-
1. [ ] {specific task}
|
|
652
|
-
- File: `path/to/file`
|
|
653
|
-
- Verify: `command`
|
|
654
|
-
2. [ ] {specific task}
|
|
655
|
-
|
|
656
|
-
### Phase 2: {phase-name}
|
|
657
|
-
1. [ ] {specific task}
|
|
658
|
-
2. [ ] {specific task}
|
|
659
|
-
|
|
660
|
-
### Phase 3: Testing and Verification
|
|
661
|
-
1. [ ] Unit Tests
|
|
662
|
-
2. [ ] Integration Tests
|
|
663
|
-
</task>
|
|
664
|
-
|
|
665
|
-
## Constraints
|
|
666
|
-
<constraints>
|
|
667
|
-
- Follow existing code patterns
|
|
668
|
-
- Localize error messages
|
|
669
|
-
- Separate configuration via environment variables
|
|
670
|
-
- {other constraints}
|
|
671
|
-
</constraints>
|
|
672
|
-
|
|
673
|
-
## Output Format
|
|
674
|
-
<output_format>
|
|
675
|
-
### Files to Create
|
|
676
|
-
- `path/to/new/file.ts`
|
|
677
|
-
- `path/to/new/file.test.ts`
|
|
678
|
-
|
|
679
|
-
### Files to Modify
|
|
680
|
-
- `path/to/existing/file.ts`
|
|
681
|
-
|
|
682
|
-
### Verification Commands
|
|
683
|
-
- `npm test`
|
|
684
|
-
- `npm run build`
|
|
685
|
-
</output_format>
|
|
686
|
-
|
|
687
|
-
## Acceptance Criteria
|
|
688
|
-
<acceptance>
|
|
689
|
-
- [ ] {verifiable criterion 1}
|
|
690
|
-
- [ ] {verifiable criterion 2}
|
|
691
|
-
- [ ] All tests pass
|
|
692
|
-
- [ ] Build succeeds
|
|
693
|
-
</acceptance>
|
|
694
387
|
```
|
|
695
|
-
|
|
696
|
-
### 5. Create Feature File (BDD) - Required
|
|
697
|
-
|
|
698
|
-
**🚨 CRITICAL: Feature files MUST match SPEC file structure**
|
|
699
|
-
|
|
700
|
-
| SPEC Structure | Feature Structure |
|
|
701
|
-
|----------------|-------------------|
|
|
702
|
-
| Single file (`{feature}.md`) | Single file (`{feature}.feature`) |
|
|
703
|
-
| Split (`{feature}/_index.md` + phases) | Split (`{feature}/_index.feature` + phases) |
|
|
704
|
-
|
|
705
|
-
#### 5.1 Single File (Small Scope)
|
|
706
|
-
|
|
707
|
-
Create `.claude/vibe/features/{feature-name}.feature`:
|
|
708
|
-
|
|
709
|
-
**Creation rules:**
|
|
710
|
-
1. Convert each SPEC Acceptance Criteria → one Scenario
|
|
711
|
-
2. Include Happy Path (normal case) + Edge Case (exception case)
|
|
712
|
-
3. Follow Given-When-Then format
|
|
713
|
-
|
|
714
|
-
```markdown
|
|
715
|
-
# Feature: {feature-name}
|
|
716
|
-
|
|
717
|
-
**SPEC**: `.claude/vibe/specs/{feature-name}.md`
|
|
718
|
-
|
|
719
|
-
## User Story
|
|
720
|
-
**As a** {user}
|
|
721
|
-
**I want** {feature}
|
|
722
|
-
**So that** {value}
|
|
723
|
-
|
|
724
|
-
## Scenarios
|
|
725
|
-
|
|
726
|
-
### Scenario 1: {Happy Path}
|
|
727
|
-
\`\`\`gherkin
|
|
728
|
-
Scenario: {title}
|
|
729
|
-
Given {precondition}
|
|
730
|
-
When {action}
|
|
731
|
-
Then {result}
|
|
732
|
-
\`\`\`
|
|
733
|
-
**Verification**: SPEC AC #1
|
|
734
|
-
|
|
735
|
-
### Scenario 2: {Edge Case}
|
|
736
|
-
...
|
|
737
|
-
|
|
738
|
-
## Coverage
|
|
739
|
-
| Scenario | SPEC AC | Status |
|
|
740
|
-
|----------|---------|--------|
|
|
741
|
-
| 1 | AC-1 | ⬜ |
|
|
388
|
+
/vibe.figma
|
|
742
389
|
```
|
|
743
390
|
|
|
744
|
-
|
|
391
|
+
**`/vibe.figma`에 전달할 컨텍스트:**
|
|
392
|
+
|
|
393
|
+
- `.claude/vibe/plans/{feature}.md` 경로
|
|
394
|
+
- 기획서의 §7 Look & Feel, §8 레이아웃, §9 반응형 섹션을 Phase 1 스토리보드 입력으로 사용
|
|
745
395
|
|
|
746
|
-
|
|
396
|
+
### Phase 6: Verify
|
|
747
397
|
|
|
748
398
|
```
|
|
749
|
-
|
|
750
|
-
├── _index.feature # Master: links to all phase features
|
|
751
|
-
├── phase-1-setup.feature # Scenarios for phase-1-setup.md
|
|
752
|
-
├── phase-2-core.feature # Scenarios for phase-2-core.md
|
|
753
|
-
└── ...
|
|
399
|
+
/vibe.verify "{feature-name}"
|
|
754
400
|
```
|
|
755
401
|
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
```markdown
|
|
759
|
-
# Feature: {feature-name} - Phase {N}: {phase-name}
|
|
760
|
-
|
|
761
|
-
**SPEC**: `.claude/vibe/specs/{feature-name}/phase-{N}-{name}.md`
|
|
762
|
-
**Master Feature**: `.claude/vibe/features/{feature-name}/_index.feature`
|
|
763
|
-
|
|
764
|
-
## User Story (Phase Scope)
|
|
765
|
-
**As a** {user}
|
|
766
|
-
**I want** {phase-specific feature}
|
|
767
|
-
**So that** {phase-specific value}
|
|
402
|
+
UI + 로직 + 연결 검증 (후속 PR에서 3축 확장 예정).
|
|
768
403
|
|
|
769
|
-
|
|
404
|
+
### Phase 7: Trace
|
|
770
405
|
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
## Coverage
|
|
775
|
-
| Scenario | SPEC AC | Status |
|
|
776
|
-
|----------|---------|--------|
|
|
777
|
-
| 1 | Phase {N} AC-1 | ⬜ |
|
|
406
|
+
```
|
|
407
|
+
/vibe.trace "{feature-name}"
|
|
778
408
|
```
|
|
779
409
|
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
After creating SPEC draft, **must perform systematic ambiguity check**.
|
|
783
|
-
|
|
784
|
-
#### 6.1 Mandatory Check Categories
|
|
785
|
-
|
|
786
|
-
| Category | Check Items | Red Flags |
|
|
787
|
-
|----------|-------------|-----------|
|
|
788
|
-
| **Functional Scope** | Missing features, unclear behavior | "etc.", "other", "if needed" |
|
|
789
|
-
| **Data Model** | Undefined entities, relationships | Undefined types, missing fields |
|
|
790
|
-
| **Non-Functional** | Performance, security requirements | Performance requirements without numbers |
|
|
791
|
-
| **Edge Cases** | Boundary conditions, errors | 0 failure scenarios |
|
|
792
|
-
| **Integration Points** | External APIs, contracts | API version/endpoint undefined |
|
|
793
|
-
| **User Input** | Validation rules, limits | Input limits not specified |
|
|
794
|
-
| **State Management** | State transitions, persistence | Missing state diagram |
|
|
410
|
+
SPEC ↔ 구현 추적.
|
|
795
411
|
|
|
796
|
-
|
|
412
|
+
> **Phase 7 완료 시**: `.claude/vibe/.last-feature` 삭제 (워크플로 완주 — 다음 `/vibe.spec` 호출은 빈 시작 또는 진행 중 작업 목록에서 시작).
|
|
797
413
|
|
|
798
|
-
|
|
414
|
+
## ultrawork 모드
|
|
799
415
|
|
|
800
|
-
|
|
801
|
-
|----------------|-------------------|
|
|
802
|
-
| "appropriately", "properly" | Provide specific criteria (e.g., "within 3 seconds") |
|
|
803
|
-
| "quickly", "rapidly" | Specify with numbers (e.g., "under 100ms") |
|
|
804
|
-
| "various", "multiple" | List specific items |
|
|
805
|
-
| "etc.", "other" | Specify complete list or limit scope |
|
|
806
|
-
| "if needed", "depending on situation" | Specify conditions (e.g., "when credits < 10") |
|
|
807
|
-
| "later", "in the future" | Explicitly exclude from current scope |
|
|
416
|
+
`ultrawork` (또는 `ulw`)가 인자에 포함되면:
|
|
808
417
|
|
|
809
|
-
|
|
418
|
+
- **모든 Stop Gate 스킵**
|
|
419
|
+
- interview → plan → spec → review → run → (figma 병렬) 전체 자동 실행
|
|
420
|
+
- askUser 체크포인트 스킵, 기본값 사용
|
|
421
|
+
- 수동 개입 없이 완주
|
|
810
422
|
|
|
811
423
|
```
|
|
812
|
-
|
|
813
|
-
↓
|
|
814
|
-
2. Auto-scan for forbidden terms
|
|
815
|
-
↓
|
|
816
|
-
3. Review checklist by category
|
|
817
|
-
↓
|
|
818
|
-
4. List discovered ambiguities
|
|
819
|
-
↓
|
|
820
|
-
5. Auto-fixable items → Fix immediately
|
|
821
|
-
Needs user confirmation → Ask question
|
|
822
|
-
↓
|
|
823
|
-
6. Re-verify (max 2 rounds — remaining ambiguities → user confirmation or TODO)
|
|
424
|
+
/vibe.spec "패럴랙스 웹사이트" ultrawork
|
|
824
425
|
```
|
|
825
426
|
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
| Ambiguity Type | Auto-Fix Method |
|
|
829
|
-
|----------------|-----------------|
|
|
830
|
-
| Timeout undefined | Apply default 30 seconds |
|
|
831
|
-
| Retry count undefined | Apply default 3 retries |
|
|
832
|
-
| Pagination undefined | Apply default 20 items/page |
|
|
833
|
-
| Input length undefined | Text 500 chars, password 8-64 chars |
|
|
834
|
-
| File size undefined | Image 5MB, video 100MB |
|
|
835
|
-
|
|
836
|
-
#### 6.5 Ambiguity Output Format
|
|
427
|
+
## Smart Resume 예시
|
|
837
428
|
|
|
838
|
-
|
|
839
|
-
## 🔍 Ambiguity Scan Results
|
|
840
|
-
|
|
841
|
-
### Found Issues: 3
|
|
842
|
-
|
|
843
|
-
#### 1. Functional Scope
|
|
844
|
-
- ⚠️ "Login failure behavior" not defined
|
|
845
|
-
→ **Auto-fix**: Apply 5-minute lockout after 3 failures
|
|
846
|
-
- ⚠️ "Session expiration handling" unclear
|
|
847
|
-
→ **Question**: Session expiration time? (30min/1hour/24hours)
|
|
848
|
-
|
|
849
|
-
#### 2. Edge Cases
|
|
850
|
-
- ⚠️ Concurrent login permission undefined
|
|
851
|
-
→ **Question**: Allow concurrent login? (Y/N)
|
|
852
|
-
|
|
853
|
-
### Auto-fixed: 1
|
|
854
|
-
### Needs clarification: 2
|
|
429
|
+
### 예시 1: 신규 프로젝트
|
|
855
430
|
```
|
|
431
|
+
User: /vibe.spec "원두 브랜드 랜딩"
|
|
856
432
|
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
433
|
+
Claude: 🔍 Input 분석
|
|
434
|
+
입력: "원두 브랜드 랜딩"
|
|
435
|
+
분류: 신규 아이디어
|
|
436
|
+
기존 파일: 없음
|
|
437
|
+
→ 시작 단계: Phase 1 (vibe.interview)
|
|
862
438
|
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
| **Completeness** | All ACs converted to Feature scenarios | 10% |
|
|
867
|
-
| **Clarity** | No ambiguous terms (e.g., "appropriately", "quickly") | 10% |
|
|
868
|
-
| **Clarity** | All numbers/limits specified (e.g., "max 500 chars") | 10% |
|
|
869
|
-
| **Testability** | All ACs are auto-testable | 10% |
|
|
870
|
-
| **Security** | Authentication/authorization requirements defined | 10% |
|
|
871
|
-
| **Security** | Sensitive data handling method specified | 5% |
|
|
872
|
-
| **Error Handling** | Major failure scenarios defined | 10% |
|
|
873
|
-
| **Error Handling** | User error messages specified | 5% |
|
|
874
|
-
| **Performance** | Response time/throughput targets specified | 5% |
|
|
875
|
-
| **Edge Cases** | Boundary condition handling defined | 5% |
|
|
876
|
-
| **Dependencies** | External systems/APIs specified | 5% |
|
|
877
|
-
|
|
878
|
-
#### 7.2 Quality Score Calculation
|
|
879
|
-
|
|
880
|
-
```
|
|
881
|
-
Score = Σ(Check item met × Weight) / 100
|
|
882
|
-
|
|
883
|
-
Grades:
|
|
884
|
-
- 95-100: ✅ EXCELLENT - Ready to start implementation
|
|
885
|
-
- 90-94: ⚠️ GOOD - Minor improvements required before implementation
|
|
886
|
-
- 80-89: ⚠️ FAIR - Significant improvements required
|
|
887
|
-
- 0-79: ❌ POOR - Rewrite required
|
|
439
|
+
[vibe.interview 스킬 로드]
|
|
440
|
+
Type: website 감지 → checklists/website.md 로드
|
|
441
|
+
...
|
|
888
442
|
```
|
|
889
443
|
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
**Minimum 95 points required to complete SPEC draft**
|
|
893
|
-
|
|
894
|
-
```
|
|
895
|
-
SPEC writing complete
|
|
896
|
-
↓
|
|
897
|
-
[Calculate Quality Score]
|
|
898
|
-
↓
|
|
899
|
-
Score < 95? → Show missing items → Attempt auto-fix → Re-evaluate
|
|
900
|
-
↓
|
|
901
|
-
Score ≥ 95 → SPEC Draft Complete → Handoff to /vibe.spec.review
|
|
444
|
+
### 예시 2: 기획서에서 시작
|
|
902
445
|
```
|
|
446
|
+
User: /vibe.spec ".claude/vibe/plans/bean-landing.md"
|
|
903
447
|
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|--------------|-----------------|
|
|
910
|
-
| Missing AC | Auto-generate AC based on Task |
|
|
911
|
-
| Numbers not specified | Apply project defaults (e.g., timeout 30s) |
|
|
912
|
-
| Missing error handling | Add common error scenarios |
|
|
913
|
-
| Missing performance targets | Apply industry standard criteria |
|
|
914
|
-
|
|
915
|
-
### 8. SPEC Draft Complete - Handoff to Review
|
|
916
|
-
|
|
917
|
-
**🚨 IMPORTANT: GPT/Gemini review is now a SEPARATE command**
|
|
918
|
-
|
|
919
|
-
After SPEC draft is complete (score ≥ 95):
|
|
920
|
-
|
|
921
|
-
**If `ultrawork` mode:**
|
|
922
|
-
- ❌ DO NOT show handoff message
|
|
923
|
-
- ❌ DO NOT ask for confirmation
|
|
924
|
-
- ✅ Immediately proceed to `/vibe.spec.review "{feature-name}"`
|
|
925
|
-
- ✅ After review passes, immediately proceed to `/vibe.run "{feature-name}" ultrawork`
|
|
926
|
-
|
|
927
|
-
**If normal mode:**
|
|
928
|
-
Output the handoff message:
|
|
448
|
+
Claude: 🔍 Input 분석
|
|
449
|
+
입력: plan 파일 경로
|
|
450
|
+
분류: 기존 기획서
|
|
451
|
+
Feature: bean-landing
|
|
452
|
+
→ 시작 단계: Phase 3 (vibe.spec)
|
|
929
453
|
|
|
454
|
+
[vibe.spec 스킬 로드]
|
|
455
|
+
기획서 읽기 → research → PTCF 작성 ...
|
|
930
456
|
```
|
|
931
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
932
|
-
✅ SPEC DRAFT COMPLETE: {feature-name}
|
|
933
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
934
|
-
|
|
935
|
-
📋 SPEC: .claude/vibe/specs/{feature-name}.md
|
|
936
|
-
📋 Feature: .claude/vibe/features/{feature-name}.feature
|
|
937
|
-
📊 Quality Score: {score}/100
|
|
938
|
-
⏱️ Started: {start_time}
|
|
939
|
-
⏱️ Completed: {getCurrentTime 결과}
|
|
940
|
-
|
|
941
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
942
|
-
⚠️ NEXT STEP: Run SPEC review
|
|
943
|
-
|
|
944
|
-
Option 1 (same session):
|
|
945
|
-
/vibe.spec.review "{feature-name}"
|
|
946
457
|
|
|
947
|
-
|
|
948
|
-
/new → /vibe.spec.review "{feature-name}"
|
|
949
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
458
|
+
### 예시 3: 기존 feature 재개
|
|
950
459
|
```
|
|
460
|
+
User: /vibe.spec "bean-landing"
|
|
951
461
|
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
| File | Path | When |
|
|
961
|
-
|------|------|------|
|
|
962
|
-
| SPEC | `.claude/vibe/specs/{feature-name}.md` | After quality validation (Step 7) |
|
|
963
|
-
| Feature | `.claude/vibe/features/{feature-name}.feature` | Immediately after SPEC |
|
|
964
|
-
|
|
965
|
-
### Large Scope (Split Files)
|
|
966
|
-
|
|
967
|
-
| File | Path | When |
|
|
968
|
-
|------|------|------|
|
|
969
|
-
| Master SPEC | `.claude/vibe/specs/{feature-name}/_index.md` | After quality validation |
|
|
970
|
-
| Phase SPEC | `.claude/vibe/specs/{feature-name}/phase-{N}-{name}.md` | Per phase |
|
|
971
|
-
| Master Feature | `.claude/vibe/features/{feature-name}/_index.feature` | After Master SPEC |
|
|
972
|
-
| Phase Feature | `.claude/vibe/features/{feature-name}/phase-{N}-{name}.feature` | Per phase SPEC |
|
|
973
|
-
|
|
974
|
-
**❌ FORBIDDEN:**
|
|
975
|
-
|
|
976
|
-
- Creating files in project root (e.g., `feature-name.md`)
|
|
977
|
-
- Creating files outside `.claude/vibe/` directory
|
|
978
|
-
- Skipping file creation
|
|
979
|
-
- Using different file names than feature-name
|
|
980
|
-
- Creating split SPEC without matching split Feature files
|
|
981
|
-
|
|
982
|
-
**✅ REQUIRED:**
|
|
462
|
+
Claude: 🔍 Input 분석
|
|
463
|
+
입력: feature name
|
|
464
|
+
기존 파일 검색...
|
|
465
|
+
✅ interview: .claude/vibe/interviews/bean-landing.md
|
|
466
|
+
✅ plan: .claude/vibe/plans/bean-landing.md
|
|
467
|
+
❌ spec: 없음
|
|
468
|
+
→ 시작 단계: Phase 3 (vibe.spec)
|
|
983
469
|
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
- Confirm file creation in response
|
|
987
|
-
- **Each SPEC file must have a matching Feature file**
|
|
988
|
-
|
|
989
|
-
### File Creation Template
|
|
990
|
-
|
|
991
|
-
**Single file:**
|
|
992
|
-
```
|
|
993
|
-
1. Write .claude/vibe/specs/{feature-name}.md
|
|
994
|
-
2. Write .claude/vibe/features/{feature-name}.feature
|
|
995
|
-
3. Confirm: "✅ Created: specs/{feature-name}.md + features/{feature-name}.feature"
|
|
470
|
+
[vibe.spec 스킬 로드]
|
|
471
|
+
...
|
|
996
472
|
```
|
|
997
473
|
|
|
998
|
-
|
|
999
|
-
```
|
|
1000
|
-
1. Write .claude/vibe/specs/{feature-name}/_index.md
|
|
1001
|
-
2. Write .claude/vibe/specs/{feature-name}/phase-1-setup.md
|
|
1002
|
-
3. Write .claude/vibe/specs/{feature-name}/phase-2-core.md
|
|
1003
|
-
4. Write .claude/vibe/features/{feature-name}/_index.feature
|
|
1004
|
-
5. Write .claude/vibe/features/{feature-name}/phase-1-setup.feature
|
|
1005
|
-
6. Write .claude/vibe/features/{feature-name}/phase-2-core.feature
|
|
1006
|
-
7. Confirm: "✅ Created: {N} SPEC files + {N} Feature files"
|
|
474
|
+
### 예시 4: SPEC 리뷰 재실행
|
|
1007
475
|
```
|
|
476
|
+
User: /vibe.spec "bean-landing"
|
|
1008
477
|
|
|
1009
|
-
|
|
478
|
+
Claude: 🔍 Input 분석
|
|
479
|
+
기존 파일:
|
|
480
|
+
✅ spec: .claude/vibe/specs/bean-landing.md
|
|
481
|
+
✅ feature: .claude/vibe/features/bean-landing.feature
|
|
1010
482
|
|
|
483
|
+
이미 SPEC이 존재합니다. 어떻게 진행할까요?
|
|
484
|
+
1. SPEC 리뷰 (Phase 4: vibe.spec.review 스킬 로드)
|
|
485
|
+
2. /vibe.run 실행 (구현)
|
|
486
|
+
3. SPEC 재작성 (기존 백업 후 새로 작성)
|
|
487
|
+
4. 종료
|
|
1011
488
|
```
|
|
1012
|
-
User: /vibe.spec "brick-game"
|
|
1013
489
|
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
1. Classic Breakout style
|
|
1018
|
-
2. Arkanoid (with power-up items)
|
|
1019
|
-
3. Custom style with special gameplay
|
|
490
|
+
### 예시 5: feature 이름을 잊고 인자 없이 호출 (Smart Resume Fallback)
|
|
491
|
+
```
|
|
492
|
+
User: /vibe.spec
|
|
1020
493
|
|
|
1021
|
-
|
|
494
|
+
Claude: (.last-feature 읽기 → "bean-landing" 발견)
|
|
1022
495
|
|
|
1023
|
-
|
|
496
|
+
🔄 마지막 작업: bean-landing
|
|
497
|
+
✅ interview: .claude/vibe/interviews/bean-landing.md (status: partial, 2일 전)
|
|
498
|
+
❌ plan: 없음
|
|
499
|
+
❌ spec: 없음
|
|
500
|
+
→ 다음 단계: Phase 2 (vibe.plan — 기획서 작성)
|
|
1024
501
|
|
|
1025
|
-
|
|
502
|
+
이어서 진행할까요?
|
|
503
|
+
Enter / yes → 이어서 진행
|
|
504
|
+
list → 다른 진행 중 작업 목록 보기
|
|
505
|
+
new → 새 아이디어로 시작
|
|
506
|
+
abort → 종료
|
|
1026
507
|
|
|
1027
|
-
|
|
1028
|
-
2. Mobile (iOS/Android)
|
|
1029
|
-
3. Desktop
|
|
508
|
+
User: yes
|
|
1030
509
|
|
|
1031
|
-
|
|
510
|
+
Claude: [Phase 2 진입]
|
|
511
|
+
.last-feature = bean-landing
|
|
512
|
+
[vibe.plan 스킬 로드]
|
|
513
|
+
...
|
|
514
|
+
```
|
|
1032
515
|
|
|
1033
|
-
|
|
1034
|
-
|
|
516
|
+
### 예시 6: 여러 feature 중 선택 (Fallback list 모드)
|
|
517
|
+
```
|
|
518
|
+
User: /vibe.spec
|
|
1035
519
|
|
|
1036
|
-
|
|
1037
|
-
2. **Canvas + JavaScript** - Lightweight with fine control
|
|
1038
|
-
3. **PixiJS + Matter.js** - High-performance rendering
|
|
520
|
+
Claude: (.last-feature 없음 → 디렉토리 스캔)
|
|
1039
521
|
|
|
1040
|
-
|
|
522
|
+
🔍 진행 중인 작업
|
|
1041
523
|
|
|
1042
|
-
|
|
524
|
+
1. bean-landing [interview: partial] 2일 전
|
|
525
|
+
2. todo-app [plan: complete] 어제
|
|
526
|
+
3. payment-api [spec: complete] 방금 전
|
|
527
|
+
─────────────────────────────────────────────
|
|
528
|
+
n. ➕ 새로 시작
|
|
529
|
+
a. 종료
|
|
1043
530
|
|
|
1044
|
-
|
|
1045
|
-
2. Neon graphics (Arkanoid)
|
|
1046
|
-
3. Modern 3D effects
|
|
531
|
+
선택 번호 또는 feature 이름을 입력하세요:
|
|
1047
532
|
|
|
1048
533
|
User: 2
|
|
1049
534
|
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
## 🔍 Ambiguity Scan Results
|
|
1055
|
-
|
|
1056
|
-
### Functional Scope
|
|
1057
|
-
- ⚠️ Game over condition not defined (ball drop vs lives system)
|
|
1058
|
-
- ⚠️ Stage clear condition unclear
|
|
1059
|
-
|
|
1060
|
-
### Edge Cases
|
|
1061
|
-
- ⚠️ Ball reflection angle when hitting paddle edge
|
|
1062
|
-
- ⚠️ Multiple brick collision handling
|
|
1063
|
-
|
|
1064
|
-
Please clarify the above items.
|
|
1065
|
-
|
|
1066
|
-
User: 3 lives, clear when all bricks destroyed, edge reflects at 45 degrees
|
|
1067
|
-
|
|
1068
|
-
Claude: Thank you. SPEC has been refined.
|
|
1069
|
-
|
|
1070
|
-
🔍 Re-check result: 0 ambiguities
|
|
1071
|
-
📊 Quality score: 92/100 (A)
|
|
1072
|
-
|
|
1073
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1074
|
-
🔍 SPEC REVIEW (Gemini)
|
|
1075
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1076
|
-
|
|
1077
|
-
📤 Sending SPEC...
|
|
1078
|
-
📝 Gemini feedback:
|
|
1079
|
-
1. [Edge] Ball speed increase logic undefined
|
|
1080
|
-
2. [Security] Need score manipulation prevention
|
|
1081
|
-
|
|
1082
|
-
✅ 2 improvements auto-applied
|
|
1083
|
-
🔍 Re-verifying... ✅ Passed
|
|
1084
|
-
|
|
1085
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1086
|
-
✅ SPEC Complete!
|
|
1087
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1088
|
-
|
|
1089
|
-
📄 .claude/vibe/specs/brick-game.md (PTCF structure)
|
|
1090
|
-
📄 .claude/vibe/features/brick-game.feature
|
|
1091
|
-
📊 Quality score: 95/100 (A) ← Improved after review
|
|
1092
|
-
```
|
|
1093
|
-
|
|
1094
|
-
## Core Tools (Semantic Analysis & Memory)
|
|
1095
|
-
|
|
1096
|
-
### Tool Invocation
|
|
1097
|
-
All tools are called via:
|
|
1098
|
-
```bash
|
|
1099
|
-
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.TOOL_NAME({...args}).then(r => console.log(r.content[0].text)))"
|
|
535
|
+
Claude: Feature: todo-app 선택
|
|
536
|
+
✅ plan 완성 → Phase 3 (vibe.spec) 진입
|
|
537
|
+
.last-feature = todo-app
|
|
538
|
+
...
|
|
1100
539
|
```
|
|
1101
540
|
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
| Tool | Purpose | When to Use |
|
|
1105
|
-
|------|---------|-------------|
|
|
1106
|
-
| `findSymbol` | Find symbol definitions | Locate existing implementations to reference |
|
|
1107
|
-
| `findReferences` | Find all references | Understand how existing code is used |
|
|
1108
|
-
| `analyzeComplexity` | Code complexity analysis | Evaluate complexity of code to modify |
|
|
1109
|
-
| `saveMemory` | Save important decisions | Store confirmed requirements, design decisions |
|
|
1110
|
-
| `recallMemory` | Recall saved memory | Retrieve previous project decisions |
|
|
541
|
+
## Rollback / Resume
|
|
1111
542
|
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
543
|
+
- 각 Phase 종료 시 상태가 `.claude/vibe/{interviews,plans,specs,features}/`에 저장됨
|
|
544
|
+
- **`.claude/vibe/.last-feature` pointer**가 각 Phase 진입 시 갱신되어 "가장 최근에 작업한 feature" 추적 (Phase 7 완주 시 삭제)
|
|
545
|
+
- 중단 시 다시 `/vibe.spec`으로 돌아오면 Smart Resume Fallback 동작:
|
|
546
|
+
- 인자 있음 (`/vibe.spec "feature-name"` 또는 파일 경로) → 해당 feature의 가장 진행된 단계 다음으로 바로 진입
|
|
547
|
+
- 인자 없음 → `.last-feature` 우선 제안 → 거부하면 진행 중 작업 목록 제시 → 또 거부하면 빈 시작
|
|
548
|
+
- 수동 개입 필요시 스킬 직접 호출 가능 (`Load skill vibe.interview` 등)
|
|
1118
549
|
|
|
1119
|
-
|
|
1120
|
-
```bash
|
|
1121
|
-
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.saveMemory({key: 'brick-game-requirements', value: 'Platform: Web, Stack: Phaser.js, Style: Neon', category: 'spec', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
|
|
1122
|
-
```
|
|
550
|
+
## Next Step
|
|
1123
551
|
|
|
1124
|
-
**3. Recall previous decisions:**
|
|
1125
|
-
```bash
|
|
1126
|
-
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.recallMemory({key: 'brick-game-requirements', projectPath: process.cwd()}).then(r => console.log(r.content[0].text)))"
|
|
1127
552
|
```
|
|
553
|
+
# 전형적인 사용
|
|
554
|
+
/vibe.spec "프로젝트 아이디어"
|
|
1128
555
|
|
|
1129
|
-
|
|
556
|
+
# 중간 단계 재개
|
|
557
|
+
/vibe.spec "feature-name"
|
|
1130
558
|
|
|
1131
|
-
|
|
1132
|
-
/vibe.
|
|
559
|
+
# ultrawork 자동 완주
|
|
560
|
+
/vibe.spec "feature-name" ultrawork
|
|
1133
561
|
```
|
|
1134
562
|
|
|
1135
563
|
---
|