@su-record/vibe 2.9.1 → 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 +31 -10
- package/README.ko.md +90 -25
- package/README.md +139 -25
- package/agents/teams/debug-team.md +70 -0
- package/agents/teams/dev-team.md +88 -0
- package/agents/teams/docs-team.md +80 -0
- package/agents/teams/figma/figma-analyst.md +52 -0
- package/agents/teams/figma/figma-architect.md +112 -0
- package/agents/teams/figma/figma-auditor.md +82 -0
- package/agents/teams/figma/figma-builder.md +100 -0
- package/agents/teams/figma-team.md +85 -0
- package/agents/teams/fullstack-team.md +83 -0
- package/agents/teams/lite-team.md +69 -0
- package/agents/teams/migration-team.md +78 -0
- package/agents/teams/refactor-team.md +94 -0
- package/agents/teams/research-team.md +86 -0
- package/agents/teams/review-debate-team.md +125 -0
- package/agents/teams/security-team.md +81 -0
- package/commands/vibe.analyze.md +324 -170
- package/commands/vibe.figma.md +549 -34
- package/commands/vibe.harness.md +177 -0
- package/commands/vibe.review.md +1 -63
- package/commands/vibe.run.md +52 -403
- package/commands/vibe.scaffold.md +195 -0
- package/commands/vibe.spec.md +373 -1003
- 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/hooks/scripts/figma-refine.js +315 -0
- package/hooks/scripts/figma-to-scss.js +394 -0
- package/hooks/scripts/figma-validate.js +353 -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 +263 -115
- package/skills/vibe.figma/templates/component-spec.md +168 -0
- package/skills/vibe.figma.convert/SKILL.md +131 -84
- package/skills/vibe.figma.convert/rubrics/conversion-rules.md +12 -0
- package/skills/vibe.figma.extract/SKILL.md +148 -108
- package/skills/vibe.figma.extract/rubrics/image-rules.md +15 -3
- 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} +272 -155
- 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,1193 +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}`.
|
|
36
|
-
|
|
37
|
-
## Input Mode Detection (Auto-detect)
|
|
82
|
+
## Rules Reference
|
|
38
83
|
|
|
39
|
-
|
|
84
|
+
**`~/.claude/vibe/rules/` (global) 준수:**
|
|
40
85
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
3. Otherwise → Conversation mode (start with feature name)
|
|
45
|
-
```
|
|
86
|
+
- `core/development-philosophy.md`
|
|
87
|
+
- `core/quick-start.md` — Korean first
|
|
88
|
+
- `core/communication-guide.md`
|
|
46
89
|
|
|
47
|
-
|
|
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.
|
|
125
|
+
#### Smart Resume Fallback (인자 없는 `/vibe.spec` 호출 시)
|
|
112
126
|
|
|
113
|
-
|
|
127
|
+
**목적**: feature 이름을 기억하지 못해도 진행 중 작업을 자동 발견해서 이어서 진행할 수 있게 한다.
|
|
114
128
|
|
|
115
|
-
Use the Read tool directly on the image file. Claude can read images natively.
|
|
116
|
-
|
|
117
|
-
**Image input example:**
|
|
118
129
|
```
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
🖼️ Image analysis: designs/login-wireframe.png
|
|
122
|
-
(via Gemini Flash / Claude Opus)
|
|
130
|
+
알고리즘:
|
|
123
131
|
|
|
124
|
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
→ Generate SPEC
|
|
136
|
-
```
|
|
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 작성)
|
|
137
142
|
|
|
138
|
-
|
|
143
|
+
이어서 진행할까요?
|
|
144
|
+
Enter / yes → 이어서 진행
|
|
145
|
+
list → 다른 진행 중 작업 목록 보기
|
|
146
|
+
new → 새 아이디어로 시작
|
|
147
|
+
abort → 종료"
|
|
139
148
|
|
|
140
|
-
|
|
141
|
-
-
|
|
142
|
-
-
|
|
143
|
-
-
|
|
149
|
+
- yes → Phase 0.5의 인자 분석 경로 3번 (feature name)으로 진입
|
|
150
|
+
- list → Step 2로
|
|
151
|
+
- new → Step 3으로
|
|
152
|
+
- abort → 종료
|
|
144
153
|
|
|
145
|
-
|
|
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 스캔
|
|
146
163
|
|
|
147
|
-
|
|
164
|
+
정렬: 가장 최근 작업 (max mtime) 순
|
|
165
|
+
최대 10개까지 표시
|
|
148
166
|
|
|
149
|
-
|
|
167
|
+
진행 중 작업 0개 → Step 3으로
|
|
168
|
+
1개 이상 → 목록 출력 + 선택 질문:
|
|
169
|
+
"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
170
|
+
🔍 진행 중인 작업
|
|
171
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
150
172
|
|
|
151
|
-
|
|
173
|
+
1. bean-landing [interview: partial] 2일 전
|
|
174
|
+
2. todo-app [plan: complete] 어제
|
|
175
|
+
3. payment-api [spec: complete] 방금 전
|
|
176
|
+
─────────────────────────────────────────────
|
|
177
|
+
n. ➕ 새로 시작
|
|
178
|
+
a. 종료
|
|
152
179
|
|
|
153
|
-
|
|
180
|
+
선택 번호 또는 feature 이름을 입력하세요:"
|
|
154
181
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
↓
|
|
162
|
-
[SPEC Review] GPT + Gemini parallel review
|
|
163
|
-
↓
|
|
164
|
-
[Claude] Finalize SPEC
|
|
165
|
-
```
|
|
182
|
+
사용자 응답 처리:
|
|
183
|
+
- 숫자 (1~N) → 해당 feature 선택 → 인자 분석 경로 3번으로
|
|
184
|
+
- 정확한 feature 이름 → 인자 분석 경로 3번으로
|
|
185
|
+
- "n" 또는 "new" → Step 3으로
|
|
186
|
+
- "a" 또는 "abort" → 종료
|
|
187
|
+
- 자유 텍스트 (매칭 없음) → "{입력}은 기존 feature가 아닙니다. 새로 시작할까요? (y/n)" 확인
|
|
166
188
|
|
|
167
|
-
|
|
168
|
-
|
|
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
|
|
238
|
-
|
|
239
|
-
**Principles:**
|
|
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
|
|
243
|
-
|
|
244
|
-
**Required confirmations:**
|
|
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
|
|
231
|
+
### Phase 1: Interview (조건부)
|
|
250
232
|
|
|
251
|
-
|
|
233
|
+
**진입 조건:** interview 파일이 아직 없음
|
|
252
234
|
|
|
253
|
-
|
|
235
|
+
**진입 방식:**
|
|
254
236
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
- 🛡️ Security: rate limiting, session management
|
|
258
|
-
- ⏱️ Session: duration, concurrent login policy
|
|
259
|
-
- 📊 Data Model: required fields, relationships
|
|
237
|
+
1. **인자 있음** (`/vibe.spec "아이디어"`)
|
|
238
|
+
→ `vibe.interview` 스킬 로드 + 아이디어 전달
|
|
260
239
|
|
|
261
|
-
|
|
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
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
262
250
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
251
|
+
예:
|
|
252
|
+
- "패럴랙스 웹사이트"
|
|
253
|
+
- "할 일 관리 앱"
|
|
254
|
+
- "Stripe 결제 연동 API"
|
|
255
|
+
- 또는 자유롭게 설명
|
|
268
256
|
|
|
269
|
-
|
|
257
|
+
(파일/이미지 첨부도 가능)
|
|
258
|
+
```
|
|
259
|
+
→ 사용자 응답 → `vibe.interview` 스킬 로드
|
|
270
260
|
|
|
271
|
-
|
|
272
|
-
import { askUser, askUserQuick } from '@su-record/vibe/tools';
|
|
261
|
+
**스킬 로드:**
|
|
273
262
|
|
|
274
|
-
|
|
275
|
-
|
|
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
|
-
});
|
|
263
|
+
```
|
|
264
|
+
Load skill `vibe.interview` with input: {user_idea}
|
|
284
265
|
```
|
|
285
266
|
|
|
286
|
-
|
|
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
|
|
267
|
+
> **`.last-feature` 갱신**: vibe.interview 스킬이 feature name을 확정하는 즉시 `.claude/vibe/.last-feature` 에 한 줄로 기록. 이후 Phase 2/3/4 진입 시에도 동일 기록 유지 (값이 같으면 no-op).
|
|
293
268
|
|
|
294
|
-
|
|
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` 저장
|
|
274
|
+
|
|
275
|
+
**Stop Gate 1**: Interview 완료 후 (ultrawork 모드 스킵)
|
|
295
276
|
|
|
296
277
|
```
|
|
297
278
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
298
|
-
|
|
299
|
-
Feature: login
|
|
279
|
+
✅ Interview 완료
|
|
300
280
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
301
281
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
### 🔐 Q-AUTHENTICATION-001
|
|
282
|
+
📄 .claude/vibe/interviews/{feature}.md
|
|
283
|
+
Required: N/M | Optional: K/L | Discovered: X
|
|
305
284
|
|
|
306
|
-
|
|
307
|
-
|
|
285
|
+
다음 단계: 기획서 작성
|
|
286
|
+
1. 계속 진행 (기본)
|
|
287
|
+
2. Interview만 저장하고 종료
|
|
288
|
+
3. Interview 수정 후 다시 (vibe.interview 재실행)
|
|
308
289
|
|
|
309
|
-
|
|
310
|
-
2. **Google Social Login**
|
|
311
|
-
3. **Apple Social Login**
|
|
312
|
-
...
|
|
313
|
-
|
|
314
|
-
**Required**
|
|
315
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
316
|
-
Total 6 questions (Required: 4)
|
|
317
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
290
|
+
Enter → 계속
|
|
318
291
|
```
|
|
319
292
|
|
|
320
|
-
|
|
293
|
+
### Phase 2: Plan (조건부)
|
|
321
294
|
|
|
322
|
-
|
|
323
|
-
import { parseUserResponse } from '@su-record/vibe/tools';
|
|
295
|
+
**진입 조건:** plan 파일이 아직 없음
|
|
324
296
|
|
|
325
|
-
// User responds: "1, 2, 4" (selected option numbers)
|
|
326
|
-
const response = parseUserResponse(question, "1, 2, 4");
|
|
327
|
-
// { questionId: "Q-AUTH-001", value: ["email_password", "social_google", "passkey"], timestamp: "..." }
|
|
328
297
|
```
|
|
329
|
-
|
|
330
|
-
**ultrawork mode:**
|
|
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
|
-
}
|
|
298
|
+
Load skill `vibe.plan` with input: .claude/vibe/interviews/{feature}.md
|
|
363
299
|
```
|
|
364
300
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
301
|
+
`vibe.plan` 스킬이 자체적으로:
|
|
302
|
+
- 템플릿 로드 (`~/.claude/vibe/templates/plan-template.md`)
|
|
303
|
+
- Interview 섹션별 정제
|
|
304
|
+
- UI 섹션 조건부 포함 (type 기반)
|
|
305
|
+
- `.claude/vibe/plans/{feature}.md` 저장
|
|
370
306
|
|
|
371
|
-
**
|
|
372
|
-
```bash
|
|
373
|
-
# 1. Check references in config.json
|
|
374
|
-
Read .claude/vibe/config.json
|
|
307
|
+
**Stop Gate 2**: 기획서 완료 후 + 분기 판단 (ultrawork 모드 스킵)
|
|
375
308
|
|
|
376
|
-
# 2. Reference documents specified in references.languages
|
|
377
|
-
Read ~/.claude/vibe/languages/typescript-react.md
|
|
378
309
|
```
|
|
310
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
311
|
+
✅ 기획서 완성
|
|
312
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
379
313
|
|
|
380
|
-
|
|
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: []}"
|
|
314
|
+
📄 .claude/vibe/plans/{feature}.md
|
|
315
|
+
Type: {type}
|
|
420
316
|
|
|
421
|
-
|
|
422
|
-
|
|
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. 여기서 종료
|
|
423
323
|
|
|
424
|
-
|
|
425
|
-
|
|
324
|
+
{type ∈ non-UI}:
|
|
325
|
+
자동 경로: SPEC 작성 → Review → Logic Track
|
|
326
|
+
1. 계속 (권장)
|
|
327
|
+
2. 여기서 종료
|
|
426
328
|
|
|
427
|
-
|
|
428
|
-
node "[LLM_SCRIPT]" gemini orchestrate-json "Security advisories for [FEATURE] with [STACK]. Focus: latest patches, recent incidents. Return JSON: {advisories: [], patches: [], incidents: []}"
|
|
329
|
+
Enter → 계속
|
|
429
330
|
```
|
|
430
331
|
|
|
431
|
-
|
|
432
|
-
```bash
|
|
433
|
-
# GPT best practices (codex — code review & analysis)
|
|
434
|
-
node "[LLM_SCRIPT]" gpt-codex orchestrate-json "Best practices for passkey authentication with React, Supabase. Focus: architecture patterns, code conventions. Return JSON: {patterns: [], antiPatterns: [], libraries: []}"
|
|
332
|
+
### Phase 3: SPEC 작성
|
|
435
333
|
|
|
436
|
-
|
|
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: []}"
|
|
334
|
+
**진입 조건:** spec 파일이 아직 없음 (또는 재작성 요청)
|
|
438
335
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
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: []}"
|
|
336
|
+
```
|
|
337
|
+
Load skill `vibe.spec` with input: .claude/vibe/plans/{feature}.md
|
|
444
338
|
```
|
|
445
339
|
|
|
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
|
-
> **Agent Teams**: 개별 리서치 결과를 실제 팀으로 교차 검증하여 더 깊은 인사이트를 도출합니다.
|
|
462
|
-
> 설정: `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` + `teammateMode: in-process` (`~/.claude/settings.json` 전역 — postinstall 자동 설정)
|
|
463
|
-
|
|
464
|
-
**팀 구성:**
|
|
465
|
-
|
|
466
|
-
| 팀원 | 역할 |
|
|
467
|
-
|------|------|
|
|
468
|
-
| best-practices (리더) | 패턴/안티패턴 종합, 충돌 해결, 최종 요약 |
|
|
469
|
-
| security-advisory | 보안 관점 검증, 보안 리스크 식별 |
|
|
470
|
-
| codebase-patterns | 기존 코드와의 일관성 검증 |
|
|
471
|
-
| framework-docs | 최신 문서/API 변경사항 확인 |
|
|
472
|
-
|
|
473
|
-
**실행 순서:**
|
|
474
|
-
|
|
475
|
-
1. `TeamCreate(team_name="research-{feature}")` — 팀 + 공유 태스크 리스트 생성
|
|
476
|
-
2. 4개 팀원 병렬 생성 — 각각 `Task(team_name=..., name=..., subagent_type=...)` 으로 spawn
|
|
477
|
-
3. 팀원들이 공유 TaskList에서 작업을 claim하고, SendMessage로 상호 검증
|
|
478
|
-
4. 리더(best-practices)가 최종 통합 요약 작성 → SPEC Context에 반영
|
|
479
|
-
5. 모든 팀원 shutdown_request → TeamDelete로 정리
|
|
340
|
+
`vibe.spec` 스킬이 PTCF 구조 SPEC 문서 + Feature(BDD) 파일 생성.
|
|
480
341
|
|
|
481
|
-
|
|
342
|
+
**핵심 단계** (상세는 `skills/vibe.spec/SKILL.md` 참조):
|
|
482
343
|
|
|
483
|
-
|
|
484
|
-
|
|
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점, 수렴까지 루프)
|
|
485
352
|
|
|
486
|
-
|
|
487
|
-
Task(team_name="research-{feature}", name="best-practices", subagent_type="best-practices-agent",
|
|
488
|
-
prompt="리서치 팀 리더. 10개 병렬 리서치 결과를 종합하세요.
|
|
489
|
-
리서치 결과: {all_research_results}
|
|
490
|
-
역할: 패턴/안티패턴 종합, 팀원 간 충돌 해결, 최종 통합 요약 작성.
|
|
491
|
-
TaskList를 확인하고 작업을 claim하세요. 팀원에게 SendMessage로 검증을 요청하세요.
|
|
492
|
-
모든 작업 완료 후 최종 요약을 작성하세요.")
|
|
353
|
+
**출력:**
|
|
493
354
|
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
역할: 보안 관점에서 모든 권장사항 검증.
|
|
497
|
-
보안 리스크 발견 시 best-practices에게 SendMessage로 알리세요.
|
|
498
|
-
TaskList에서 보안 관련 작업을 claim하세요.")
|
|
355
|
+
- `.claude/vibe/specs/{feature-name}.md` (또는 split folder)
|
|
356
|
+
- `.claude/vibe/features/{feature-name}.feature` (또는 split folder)
|
|
499
357
|
|
|
500
|
-
|
|
501
|
-
prompt="리서치 팀 코드베이스 담당. 리서치 결과: {all_research_results}
|
|
502
|
-
역할: 권장사항이 기존 코드 패턴과 호환되는지 검증.
|
|
503
|
-
비호환 발견 시 best-practices에게 SendMessage로 알리세요.
|
|
504
|
-
TaskList에서 호환성 관련 작업을 claim하세요.")
|
|
358
|
+
### Phase 4: SPEC Review
|
|
505
359
|
|
|
506
|
-
Task(team_name="research-{feature}", name="framework-docs", subagent_type="framework-docs-agent",
|
|
507
|
-
prompt="리서치 팀 문서 담당. 리서치 결과: {all_research_results}
|
|
508
|
-
역할: 최신 API/문서와 권장사항 대조 검증.
|
|
509
|
-
폐기/변경된 API 발견 시 best-practices에게 SendMessage로 알리세요.
|
|
510
|
-
TaskList에서 문서 검증 관련 작업을 claim하세요.")
|
|
511
360
|
```
|
|
512
|
-
|
|
513
|
-
**팀원 간 통신 예시:**
|
|
514
|
-
|
|
515
|
-
```text
|
|
516
|
-
security-advisory → best-practices: "JWT 라이브러리 권장사항에 CVE-2024-xxxx 취약점. 대안 필요"
|
|
517
|
-
codebase-patterns → best-practices: "기존 코드가 class 패턴인데 함수형 권장은 비호환. 점진적 마이그레이션 제안"
|
|
518
|
-
framework-docs → best-practices: "React 19에서 useEffect 패턴 변경됨. 리서치 결과의 패턴은 구버전"
|
|
519
|
-
best-practices → broadcast: "최종 합의: JWT는 jose 라이브러리로 교체, 함수형 전환은 신규 파일만 적용"
|
|
361
|
+
Load skill `vibe.spec.review` with feature: {feature-name}
|
|
520
362
|
```
|
|
521
363
|
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
#### 3.1 Result Merge Rules
|
|
525
|
-
|
|
526
|
-
| Area | Merge Strategy |
|
|
527
|
-
|------|----------------|
|
|
528
|
-
| Best Practices | Deduplicate, keep most detailed |
|
|
529
|
-
| Security | ALL included (no dedup for safety) |
|
|
530
|
-
| Libraries | Consensus recommendations |
|
|
531
|
-
|
|
532
|
-
**IMPORTANT:**
|
|
533
|
-
- ❌ DO NOT skip research step
|
|
534
|
-
- ❌ DO NOT ask user "should I run research?"
|
|
535
|
-
- ✅ ALWAYS run after requirements confirmed
|
|
536
|
-
- ✅ Show "Running parallel research (Claude + GPT + Gemini)..." message
|
|
537
|
-
- ✅ Include all agent + LLM results in SPEC Context
|
|
538
|
-
- ✅ Run all 4 Bash LLM calls in parallel + 4 Task agents in parallel
|
|
539
|
-
|
|
540
|
-
**Research results are reflected in SPEC's Context section.**
|
|
364
|
+
`vibe.spec.review` 스킬이 Race Review + 품질 검증 + 사용자 체크포인트 실행.
|
|
541
365
|
|
|
542
|
-
|
|
366
|
+
**핵심 단계** (상세는 `skills/vibe.spec.review/SKILL.md` 참조):
|
|
543
367
|
|
|
544
|
-
|
|
545
|
-
|
|
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. 사용자 최종 체크포인트
|
|
546
374
|
|
|
547
|
-
|
|
375
|
+
### Phase 5a: Logic Track
|
|
548
376
|
|
|
549
377
|
```
|
|
550
|
-
|
|
551
|
-
↓ (동시 실행)
|
|
552
|
-
[UI/UX Intelligence]
|
|
553
|
-
① ui-industry-analyzer (Haiku) → 산업 분석 + 디자인 전략
|
|
554
|
-
↓
|
|
555
|
-
②③ 병렬 실행:
|
|
556
|
-
② ui-design-system-gen (Sonnet) → MASTER.md 생성
|
|
557
|
-
③ ui-layout-architect (Haiku) → 레이아웃 설계
|
|
378
|
+
/vibe.run "{feature-name}"
|
|
558
379
|
```
|
|
559
380
|
|
|
560
|
-
|
|
381
|
+
SPEC → 코드 구현.
|
|
561
382
|
|
|
562
|
-
|
|
563
|
-
```text
|
|
564
|
-
Task(subagent_type="ui-industry-analyzer",
|
|
565
|
-
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")
|
|
566
|
-
```
|
|
383
|
+
### Phase 5b: UI Track (type ∈ {website, webapp, mobile}일 때만)
|
|
567
384
|
|
|
568
|
-
|
|
569
|
-
```text
|
|
570
|
-
# ② 디자인 시스템 생성 (Sonnet)
|
|
571
|
-
Task(subagent_type="ui-design-system-gen",
|
|
572
|
-
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.")
|
|
385
|
+
**5a와 병렬 실행** (또는 순차 — 사용자 선택):
|
|
573
386
|
|
|
574
|
-
# ③ 레이아웃 설계 (Haiku) — 병렬 실행
|
|
575
|
-
Task(subagent_type="ui-layout-architect",
|
|
576
|
-
prompt="Design layout from analysis-result.json for project '{project}'. Use core_ui_search for landing patterns and dashboard layout.")
|
|
577
387
|
```
|
|
578
|
-
|
|
579
|
-
3. **결과를 SPEC Context에 주입:**
|
|
580
|
-
```markdown
|
|
581
|
-
### Design System (Auto-generated)
|
|
582
|
-
- Category: {①의 category}
|
|
583
|
-
- Style: {①의 style_priority}
|
|
584
|
-
- MASTER.md: .claude/vibe/design-system/{project}/MASTER.md
|
|
585
|
-
- Layout: {③의 pattern + sections}
|
|
388
|
+
/vibe.figma
|
|
586
389
|
```
|
|
587
390
|
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
#### 4.0 Large Scope Detection & Auto-Split (MANDATORY)
|
|
591
|
-
|
|
592
|
-
**🚨 CRITICAL: Automatically split SPEC when scope is large**
|
|
391
|
+
**`/vibe.figma`에 전달할 컨텍스트:**
|
|
593
392
|
|
|
594
|
-
|
|
393
|
+
- `.claude/vibe/plans/{feature}.md` 경로
|
|
394
|
+
- 기획서의 §7 Look & Feel, §8 레이아웃, §9 반응형 섹션을 Phase 1 스토리보드 입력으로 사용
|
|
595
395
|
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
| Criteria | Threshold |
|
|
599
|
-
|----------|-----------|
|
|
600
|
-
| Phases | 5+ phases |
|
|
601
|
-
| Files to create | 15+ files |
|
|
602
|
-
| Platforms | 2+ platforms |
|
|
603
|
-
| Major features | 4+ distinct features |
|
|
604
|
-
|
|
605
|
-
**Auto-split output (SPEC + Feature files must match):**
|
|
396
|
+
### Phase 6: Verify
|
|
606
397
|
|
|
607
398
|
```
|
|
608
|
-
|
|
609
|
-
├── _index.md # Master SPEC
|
|
610
|
-
├── phase-1-setup.md
|
|
611
|
-
├── phase-2-core.md
|
|
612
|
-
└── ...
|
|
613
|
-
|
|
614
|
-
.claude/vibe/features/{feature-name}/
|
|
615
|
-
├── _index.feature # Master Feature
|
|
616
|
-
├── phase-1-setup.feature
|
|
617
|
-
├── phase-2-core.feature
|
|
618
|
-
└── ...
|
|
399
|
+
/vibe.verify "{feature-name}"
|
|
619
400
|
```
|
|
620
401
|
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
**Master SPEC (`_index.md`):**
|
|
402
|
+
UI + 로직 + 연결 검증 (후속 PR에서 3축 확장 예정).
|
|
624
403
|
|
|
625
|
-
|
|
626
|
-
# SPEC: {feature-name} (Master)
|
|
404
|
+
### Phase 7: Trace
|
|
627
405
|
|
|
628
|
-
## Overview
|
|
629
|
-
- Total phases: N
|
|
630
|
-
- Dependencies: [list]
|
|
631
|
-
|
|
632
|
-
## Sub-SPECs
|
|
633
|
-
|
|
634
|
-
| Order | SPEC File | Feature File | Status |
|
|
635
|
-
|-------|-----------|--------------|--------|
|
|
636
|
-
| 1 | phase-1-setup.md | phase-1-setup.feature | ⬜ |
|
|
637
|
-
| 2 | phase-2-core.md | phase-2-core.feature | ⬜ |
|
|
638
|
-
|
|
639
|
-
## Shared Context
|
|
640
|
-
- Tech Stack: [all phases]
|
|
641
|
-
- Constraints: [all phases]
|
|
642
406
|
```
|
|
643
|
-
|
|
644
|
-
**Master Feature (`_index.feature`):**
|
|
645
|
-
|
|
646
|
-
```markdown
|
|
647
|
-
# Feature: {feature-name} (Master)
|
|
648
|
-
|
|
649
|
-
**Master SPEC**: `.claude/vibe/specs/{feature-name}/_index.md`
|
|
650
|
-
|
|
651
|
-
## Sub-Features
|
|
652
|
-
|
|
653
|
-
| Order | Feature File | SPEC File | Status |
|
|
654
|
-
|-------|--------------|-----------|--------|
|
|
655
|
-
| 1 | phase-1-setup.feature | phase-1-setup.md | ⬜ |
|
|
656
|
-
| 2 | phase-2-core.feature | phase-2-core.md | ⬜ |
|
|
657
|
-
|
|
658
|
-
## Overall User Story
|
|
659
|
-
**As a** {user}
|
|
660
|
-
**I want** {complete feature}
|
|
661
|
-
**So that** {value}
|
|
662
|
-
```
|
|
663
|
-
|
|
664
|
-
**Small scope (default):**
|
|
665
|
-
|
|
666
|
-
Create `.claude/vibe/specs/{feature-name}.md`:
|
|
667
|
-
|
|
668
|
-
```markdown
|
|
669
|
-
---
|
|
670
|
-
status: pending
|
|
671
|
-
currentPhase: 0
|
|
672
|
-
totalPhases: 3
|
|
673
|
-
createdAt: {ISO-timestamp}
|
|
674
|
-
lastUpdated: {ISO-timestamp}
|
|
675
|
-
---
|
|
676
|
-
|
|
677
|
-
# SPEC: {feature-name}
|
|
678
|
-
|
|
679
|
-
## Persona
|
|
680
|
-
<role>
|
|
681
|
-
Define AI role and expertise for implementation
|
|
682
|
-
- Senior developer on the project
|
|
683
|
-
- Follow existing code patterns
|
|
684
|
-
- Write testable code
|
|
685
|
-
</role>
|
|
686
|
-
|
|
687
|
-
## Context
|
|
688
|
-
<context>
|
|
689
|
-
### Background
|
|
690
|
-
- Why this feature is needed
|
|
691
|
-
- Who will use it
|
|
692
|
-
|
|
693
|
-
### Tech Stack
|
|
694
|
-
- Backend: {technology}
|
|
695
|
-
- Frontend: {technology}
|
|
696
|
-
- Database: {technology}
|
|
697
|
-
|
|
698
|
-
### Related Code
|
|
699
|
-
- `src/xxx/`: Existing implementation to reference
|
|
700
|
-
- `src/yyy/`: Files to modify
|
|
701
|
-
|
|
702
|
-
### Design Reference
|
|
703
|
-
- {Reference app/service}
|
|
704
|
-
</context>
|
|
705
|
-
|
|
706
|
-
## Task
|
|
707
|
-
<task>
|
|
708
|
-
### Phase 1: {phase-name}
|
|
709
|
-
1. [ ] {specific task}
|
|
710
|
-
- File: `path/to/file`
|
|
711
|
-
- Verify: `command`
|
|
712
|
-
2. [ ] {specific task}
|
|
713
|
-
|
|
714
|
-
### Phase 2: {phase-name}
|
|
715
|
-
1. [ ] {specific task}
|
|
716
|
-
2. [ ] {specific task}
|
|
717
|
-
|
|
718
|
-
### Phase 3: Testing and Verification
|
|
719
|
-
1. [ ] Unit Tests
|
|
720
|
-
2. [ ] Integration Tests
|
|
721
|
-
</task>
|
|
722
|
-
|
|
723
|
-
## Constraints
|
|
724
|
-
<constraints>
|
|
725
|
-
- Follow existing code patterns
|
|
726
|
-
- Localize error messages
|
|
727
|
-
- Separate configuration via environment variables
|
|
728
|
-
- {other constraints}
|
|
729
|
-
</constraints>
|
|
730
|
-
|
|
731
|
-
## Output Format
|
|
732
|
-
<output_format>
|
|
733
|
-
### Files to Create
|
|
734
|
-
- `path/to/new/file.ts`
|
|
735
|
-
- `path/to/new/file.test.ts`
|
|
736
|
-
|
|
737
|
-
### Files to Modify
|
|
738
|
-
- `path/to/existing/file.ts`
|
|
739
|
-
|
|
740
|
-
### Verification Commands
|
|
741
|
-
- `npm test`
|
|
742
|
-
- `npm run build`
|
|
743
|
-
</output_format>
|
|
744
|
-
|
|
745
|
-
## Acceptance Criteria
|
|
746
|
-
<acceptance>
|
|
747
|
-
- [ ] {verifiable criterion 1}
|
|
748
|
-
- [ ] {verifiable criterion 2}
|
|
749
|
-
- [ ] All tests pass
|
|
750
|
-
- [ ] Build succeeds
|
|
751
|
-
</acceptance>
|
|
407
|
+
/vibe.trace "{feature-name}"
|
|
752
408
|
```
|
|
753
409
|
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
**🚨 CRITICAL: Feature files MUST match SPEC file structure**
|
|
757
|
-
|
|
758
|
-
| SPEC Structure | Feature Structure |
|
|
759
|
-
|----------------|-------------------|
|
|
760
|
-
| Single file (`{feature}.md`) | Single file (`{feature}.feature`) |
|
|
761
|
-
| Split (`{feature}/_index.md` + phases) | Split (`{feature}/_index.feature` + phases) |
|
|
762
|
-
|
|
763
|
-
#### 5.1 Single File (Small Scope)
|
|
764
|
-
|
|
765
|
-
Create `.claude/vibe/features/{feature-name}.feature`:
|
|
410
|
+
SPEC ↔ 구현 추적.
|
|
766
411
|
|
|
767
|
-
**
|
|
768
|
-
1. Convert each SPEC Acceptance Criteria → one Scenario
|
|
769
|
-
2. Include Happy Path (normal case) + Edge Case (exception case)
|
|
770
|
-
3. Follow Given-When-Then format
|
|
412
|
+
> **Phase 7 완료 시**: `.claude/vibe/.last-feature` 삭제 (워크플로 완주 — 다음 `/vibe.spec` 호출은 빈 시작 또는 진행 중 작업 목록에서 시작).
|
|
771
413
|
|
|
772
|
-
|
|
773
|
-
# Feature: {feature-name}
|
|
414
|
+
## ultrawork 모드
|
|
774
415
|
|
|
775
|
-
|
|
416
|
+
`ultrawork` (또는 `ulw`)가 인자에 포함되면:
|
|
776
417
|
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
## Scenarios
|
|
783
|
-
|
|
784
|
-
### Scenario 1: {Happy Path}
|
|
785
|
-
\`\`\`gherkin
|
|
786
|
-
Scenario: {title}
|
|
787
|
-
Given {precondition}
|
|
788
|
-
When {action}
|
|
789
|
-
Then {result}
|
|
790
|
-
\`\`\`
|
|
791
|
-
**Verification**: SPEC AC #1
|
|
792
|
-
|
|
793
|
-
### Scenario 2: {Edge Case}
|
|
794
|
-
...
|
|
795
|
-
|
|
796
|
-
## Coverage
|
|
797
|
-
| Scenario | SPEC AC | Status |
|
|
798
|
-
|----------|---------|--------|
|
|
799
|
-
| 1 | AC-1 | ⬜ |
|
|
800
|
-
```
|
|
801
|
-
|
|
802
|
-
#### 5.2 Split Files (Large Scope)
|
|
803
|
-
|
|
804
|
-
When SPEC is split into phases, Feature files MUST also be split:
|
|
418
|
+
- **모든 Stop Gate 스킵**
|
|
419
|
+
- interview → plan → spec → review → run → (figma 병렬) 전체 자동 실행
|
|
420
|
+
- askUser 체크포인트 스킵, 기본값 사용
|
|
421
|
+
- 수동 개입 없이 완주
|
|
805
422
|
|
|
806
423
|
```
|
|
807
|
-
|
|
808
|
-
├── _index.feature # Master: links to all phase features
|
|
809
|
-
├── phase-1-setup.feature # Scenarios for phase-1-setup.md
|
|
810
|
-
├── phase-2-core.feature # Scenarios for phase-2-core.md
|
|
811
|
-
└── ...
|
|
424
|
+
/vibe.spec "패럴랙스 웹사이트" ultrawork
|
|
812
425
|
```
|
|
813
426
|
|
|
814
|
-
|
|
427
|
+
## Smart Resume 예시
|
|
815
428
|
|
|
816
|
-
|
|
817
|
-
# Feature: {feature-name} - Phase {N}: {phase-name}
|
|
818
|
-
|
|
819
|
-
**SPEC**: `.claude/vibe/specs/{feature-name}/phase-{N}-{name}.md`
|
|
820
|
-
**Master Feature**: `.claude/vibe/features/{feature-name}/_index.feature`
|
|
821
|
-
|
|
822
|
-
## User Story (Phase Scope)
|
|
823
|
-
**As a** {user}
|
|
824
|
-
**I want** {phase-specific feature}
|
|
825
|
-
**So that** {phase-specific value}
|
|
826
|
-
|
|
827
|
-
## Scenarios
|
|
828
|
-
|
|
829
|
-
### Scenario 1: {Phase Happy Path}
|
|
830
|
-
...
|
|
831
|
-
|
|
832
|
-
## Coverage
|
|
833
|
-
| Scenario | SPEC AC | Status |
|
|
834
|
-
|----------|---------|--------|
|
|
835
|
-
| 1 | Phase {N} AC-1 | ⬜ |
|
|
429
|
+
### 예시 1: 신규 프로젝트
|
|
836
430
|
```
|
|
431
|
+
User: /vibe.spec "원두 브랜드 랜딩"
|
|
837
432
|
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
433
|
+
Claude: 🔍 Input 분석
|
|
434
|
+
입력: "원두 브랜드 랜딩"
|
|
435
|
+
분류: 신규 아이디어
|
|
436
|
+
기존 파일: 없음
|
|
437
|
+
→ 시작 단계: Phase 1 (vibe.interview)
|
|
843
438
|
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
| **Data Model** | Undefined entities, relationships | Undefined types, missing fields |
|
|
848
|
-
| **Non-Functional** | Performance, security requirements | Performance requirements without numbers |
|
|
849
|
-
| **Edge Cases** | Boundary conditions, errors | 0 failure scenarios |
|
|
850
|
-
| **Integration Points** | External APIs, contracts | API version/endpoint undefined |
|
|
851
|
-
| **User Input** | Validation rules, limits | Input limits not specified |
|
|
852
|
-
| **State Management** | State transitions, persistence | Missing state diagram |
|
|
853
|
-
|
|
854
|
-
#### 6.2 Forbidden Ambiguous Terms
|
|
855
|
-
|
|
856
|
-
If the following terms exist in SPEC, **clarification is mandatory**:
|
|
857
|
-
|
|
858
|
-
| Forbidden Term | Replacement Method |
|
|
859
|
-
|----------------|-------------------|
|
|
860
|
-
| "appropriately", "properly" | Provide specific criteria (e.g., "within 3 seconds") |
|
|
861
|
-
| "quickly", "rapidly" | Specify with numbers (e.g., "under 100ms") |
|
|
862
|
-
| "various", "multiple" | List specific items |
|
|
863
|
-
| "etc.", "other" | Specify complete list or limit scope |
|
|
864
|
-
| "if needed", "depending on situation" | Specify conditions (e.g., "when credits < 10") |
|
|
865
|
-
| "later", "in the future" | Explicitly exclude from current scope |
|
|
866
|
-
|
|
867
|
-
#### 6.3 Check Process
|
|
868
|
-
|
|
869
|
-
```
|
|
870
|
-
1. Write SPEC draft
|
|
871
|
-
↓
|
|
872
|
-
2. Auto-scan for forbidden terms
|
|
873
|
-
↓
|
|
874
|
-
3. Review checklist by category
|
|
875
|
-
↓
|
|
876
|
-
4. List discovered ambiguities
|
|
877
|
-
↓
|
|
878
|
-
5. Auto-fixable items → Fix immediately
|
|
879
|
-
Needs user confirmation → Ask question
|
|
880
|
-
↓
|
|
881
|
-
6. Re-verify (max 2 rounds — remaining ambiguities → user confirmation or TODO)
|
|
439
|
+
[vibe.interview 스킬 로드]
|
|
440
|
+
Type: website 감지 → checklists/website.md 로드
|
|
441
|
+
...
|
|
882
442
|
```
|
|
883
443
|
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
| Ambiguity Type | Auto-Fix Method |
|
|
887
|
-
|----------------|-----------------|
|
|
888
|
-
| Timeout undefined | Apply default 30 seconds |
|
|
889
|
-
| Retry count undefined | Apply default 3 retries |
|
|
890
|
-
| Pagination undefined | Apply default 20 items/page |
|
|
891
|
-
| Input length undefined | Text 500 chars, password 8-64 chars |
|
|
892
|
-
| File size undefined | Image 5MB, video 100MB |
|
|
893
|
-
|
|
894
|
-
#### 6.5 Ambiguity Output Format
|
|
895
|
-
|
|
896
|
-
```markdown
|
|
897
|
-
## 🔍 Ambiguity Scan Results
|
|
898
|
-
|
|
899
|
-
### Found Issues: 3
|
|
900
|
-
|
|
901
|
-
#### 1. Functional Scope
|
|
902
|
-
- ⚠️ "Login failure behavior" not defined
|
|
903
|
-
→ **Auto-fix**: Apply 5-minute lockout after 3 failures
|
|
904
|
-
- ⚠️ "Session expiration handling" unclear
|
|
905
|
-
→ **Question**: Session expiration time? (30min/1hour/24hours)
|
|
906
|
-
|
|
907
|
-
#### 2. Edge Cases
|
|
908
|
-
- ⚠️ Concurrent login permission undefined
|
|
909
|
-
→ **Question**: Allow concurrent login? (Y/N)
|
|
910
|
-
|
|
911
|
-
### Auto-fixed: 1
|
|
912
|
-
### Needs clarification: 2
|
|
444
|
+
### 예시 2: 기획서에서 시작
|
|
913
445
|
```
|
|
446
|
+
User: /vibe.spec ".claude/vibe/plans/bean-landing.md"
|
|
914
447
|
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
| Category | Check Item | Weight |
|
|
922
|
-
|----------|------------|--------|
|
|
923
|
-
| **Completeness** | All user flows included in Task | 15% |
|
|
924
|
-
| **Completeness** | All ACs converted to Feature scenarios | 10% |
|
|
925
|
-
| **Clarity** | No ambiguous terms (e.g., "appropriately", "quickly") | 10% |
|
|
926
|
-
| **Clarity** | All numbers/limits specified (e.g., "max 500 chars") | 10% |
|
|
927
|
-
| **Testability** | All ACs are auto-testable | 10% |
|
|
928
|
-
| **Security** | Authentication/authorization requirements defined | 10% |
|
|
929
|
-
| **Security** | Sensitive data handling method specified | 5% |
|
|
930
|
-
| **Error Handling** | Major failure scenarios defined | 10% |
|
|
931
|
-
| **Error Handling** | User error messages specified | 5% |
|
|
932
|
-
| **Performance** | Response time/throughput targets specified | 5% |
|
|
933
|
-
| **Edge Cases** | Boundary condition handling defined | 5% |
|
|
934
|
-
| **Dependencies** | External systems/APIs specified | 5% |
|
|
935
|
-
|
|
936
|
-
#### 7.2 Quality Score Calculation
|
|
448
|
+
Claude: 🔍 Input 분석
|
|
449
|
+
입력: plan 파일 경로
|
|
450
|
+
분류: 기존 기획서
|
|
451
|
+
Feature: bean-landing
|
|
452
|
+
→ 시작 단계: Phase 3 (vibe.spec)
|
|
937
453
|
|
|
454
|
+
[vibe.spec 스킬 로드]
|
|
455
|
+
기획서 읽기 → research → PTCF 작성 ...
|
|
938
456
|
```
|
|
939
|
-
Score = Σ(Check item met × Weight) / 100
|
|
940
457
|
|
|
941
|
-
|
|
942
|
-
- 95-100: ✅ EXCELLENT - Ready to start implementation
|
|
943
|
-
- 90-94: ⚠️ GOOD - Minor improvements required before implementation
|
|
944
|
-
- 80-89: ⚠️ FAIR - Significant improvements required
|
|
945
|
-
- 0-79: ❌ POOR - Rewrite required
|
|
458
|
+
### 예시 3: 기존 feature 재개
|
|
946
459
|
```
|
|
460
|
+
User: /vibe.spec "bean-landing"
|
|
947
461
|
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
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)
|
|
951
469
|
|
|
470
|
+
[vibe.spec 스킬 로드]
|
|
471
|
+
...
|
|
952
472
|
```
|
|
953
|
-
SPEC writing complete
|
|
954
|
-
↓
|
|
955
|
-
[Calculate Quality Score]
|
|
956
|
-
↓
|
|
957
|
-
Score < 95? → Show missing items → Attempt auto-fix → Re-evaluate
|
|
958
|
-
↓
|
|
959
|
-
Score ≥ 95 → SPEC Draft Complete → Handoff to /vibe.spec.review
|
|
960
|
-
```
|
|
961
|
-
|
|
962
|
-
#### 7.4 Auto-Fix for Low Score
|
|
963
|
-
|
|
964
|
-
If score is below 95, attempt automatic fixes:
|
|
965
|
-
|
|
966
|
-
| Missing Item | Auto-Fix Method |
|
|
967
|
-
|--------------|-----------------|
|
|
968
|
-
| Missing AC | Auto-generate AC based on Task |
|
|
969
|
-
| Numbers not specified | Apply project defaults (e.g., timeout 30s) |
|
|
970
|
-
| Missing error handling | Add common error scenarios |
|
|
971
|
-
| Missing performance targets | Apply industry standard criteria |
|
|
972
|
-
|
|
973
|
-
### 8. SPEC Draft Complete - Handoff to Review
|
|
974
|
-
|
|
975
|
-
**🚨 IMPORTANT: GPT/Gemini review is now a SEPARATE command**
|
|
976
|
-
|
|
977
|
-
After SPEC draft is complete (score ≥ 95):
|
|
978
|
-
|
|
979
|
-
**If `ultrawork` mode:**
|
|
980
|
-
- ❌ DO NOT show handoff message
|
|
981
|
-
- ❌ DO NOT ask for confirmation
|
|
982
|
-
- ✅ Immediately proceed to `/vibe.spec.review "{feature-name}"`
|
|
983
|
-
- ✅ After review passes, immediately proceed to `/vibe.run "{feature-name}" ultrawork`
|
|
984
|
-
|
|
985
|
-
**If normal mode:**
|
|
986
|
-
Output the handoff message:
|
|
987
473
|
|
|
474
|
+
### 예시 4: SPEC 리뷰 재실행
|
|
988
475
|
```
|
|
989
|
-
|
|
990
|
-
✅ SPEC DRAFT COMPLETE: {feature-name}
|
|
991
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
476
|
+
User: /vibe.spec "bean-landing"
|
|
992
477
|
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
⏱️ Completed: {getCurrentTime 결과}
|
|
478
|
+
Claude: 🔍 Input 분석
|
|
479
|
+
기존 파일:
|
|
480
|
+
✅ spec: .claude/vibe/specs/bean-landing.md
|
|
481
|
+
✅ feature: .claude/vibe/features/bean-landing.feature
|
|
998
482
|
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
Option 2 (recommended for large context):
|
|
1006
|
-
/new → /vibe.spec.review "{feature-name}"
|
|
1007
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
483
|
+
이미 SPEC이 존재합니다. 어떻게 진행할까요?
|
|
484
|
+
1. SPEC 리뷰 (Phase 4: vibe.spec.review 스킬 로드)
|
|
485
|
+
2. /vibe.run 실행 (구현)
|
|
486
|
+
3. SPEC 재작성 (기존 백업 후 새로 작성)
|
|
487
|
+
4. 종료
|
|
1008
488
|
```
|
|
1009
489
|
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
**🚨 CRITICAL: Files MUST be created in these EXACT paths. NO exceptions.**
|
|
1015
|
-
|
|
1016
|
-
### Small Scope (Single File)
|
|
1017
|
-
|
|
1018
|
-
| File | Path | When |
|
|
1019
|
-
|------|------|------|
|
|
1020
|
-
| SPEC | `.claude/vibe/specs/{feature-name}.md` | After quality validation (Step 7) |
|
|
1021
|
-
| Feature | `.claude/vibe/features/{feature-name}.feature` | Immediately after SPEC |
|
|
1022
|
-
|
|
1023
|
-
### Large Scope (Split Files)
|
|
1024
|
-
|
|
1025
|
-
| File | Path | When |
|
|
1026
|
-
|------|------|------|
|
|
1027
|
-
| Master SPEC | `.claude/vibe/specs/{feature-name}/_index.md` | After quality validation |
|
|
1028
|
-
| Phase SPEC | `.claude/vibe/specs/{feature-name}/phase-{N}-{name}.md` | Per phase |
|
|
1029
|
-
| Master Feature | `.claude/vibe/features/{feature-name}/_index.feature` | After Master SPEC |
|
|
1030
|
-
| Phase Feature | `.claude/vibe/features/{feature-name}/phase-{N}-{name}.feature` | Per phase SPEC |
|
|
1031
|
-
|
|
1032
|
-
**❌ FORBIDDEN:**
|
|
490
|
+
### 예시 5: feature 이름을 잊고 인자 없이 호출 (Smart Resume Fallback)
|
|
491
|
+
```
|
|
492
|
+
User: /vibe.spec
|
|
1033
493
|
|
|
1034
|
-
-
|
|
1035
|
-
- Creating files outside `.claude/vibe/` directory
|
|
1036
|
-
- Skipping file creation
|
|
1037
|
-
- Using different file names than feature-name
|
|
1038
|
-
- Creating split SPEC without matching split Feature files
|
|
494
|
+
Claude: (.last-feature 읽기 → "bean-landing" 발견)
|
|
1039
495
|
|
|
1040
|
-
|
|
496
|
+
🔄 마지막 작업: bean-landing
|
|
497
|
+
✅ interview: .claude/vibe/interviews/bean-landing.md (status: partial, 2일 전)
|
|
498
|
+
❌ plan: 없음
|
|
499
|
+
❌ spec: 없음
|
|
500
|
+
→ 다음 단계: Phase 2 (vibe.plan — 기획서 작성)
|
|
1041
501
|
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
502
|
+
이어서 진행할까요?
|
|
503
|
+
Enter / yes → 이어서 진행
|
|
504
|
+
list → 다른 진행 중 작업 목록 보기
|
|
505
|
+
new → 새 아이디어로 시작
|
|
506
|
+
abort → 종료
|
|
1046
507
|
|
|
1047
|
-
|
|
508
|
+
User: yes
|
|
1048
509
|
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
3. Confirm: "✅ Created: specs/{feature-name}.md + features/{feature-name}.feature"
|
|
510
|
+
Claude: [Phase 2 진입]
|
|
511
|
+
.last-feature = bean-landing
|
|
512
|
+
[vibe.plan 스킬 로드]
|
|
513
|
+
...
|
|
1054
514
|
```
|
|
1055
515
|
|
|
1056
|
-
|
|
516
|
+
### 예시 6: 여러 feature 중 선택 (Fallback list 모드)
|
|
1057
517
|
```
|
|
1058
|
-
|
|
1059
|
-
2. Write .claude/vibe/specs/{feature-name}/phase-1-setup.md
|
|
1060
|
-
3. Write .claude/vibe/specs/{feature-name}/phase-2-core.md
|
|
1061
|
-
4. Write .claude/vibe/features/{feature-name}/_index.feature
|
|
1062
|
-
5. Write .claude/vibe/features/{feature-name}/phase-1-setup.feature
|
|
1063
|
-
6. Write .claude/vibe/features/{feature-name}/phase-2-core.feature
|
|
1064
|
-
7. Confirm: "✅ Created: {N} SPEC files + {N} Feature files"
|
|
1065
|
-
```
|
|
1066
|
-
|
|
1067
|
-
## Example
|
|
518
|
+
User: /vibe.spec
|
|
1068
519
|
|
|
1069
|
-
|
|
1070
|
-
User: /vibe.spec "brick-game"
|
|
520
|
+
Claude: (.last-feature 없음 → 디렉토리 스캔)
|
|
1071
521
|
|
|
1072
|
-
|
|
1073
|
-
You're making a brick game! What style are you thinking of?
|
|
522
|
+
🔍 진행 중인 작업
|
|
1074
523
|
|
|
1075
|
-
1.
|
|
1076
|
-
2.
|
|
1077
|
-
3.
|
|
524
|
+
1. bean-landing [interview: partial] 2일 전
|
|
525
|
+
2. todo-app [plan: complete] 어제
|
|
526
|
+
3. payment-api [spec: complete] 방금 전
|
|
527
|
+
─────────────────────────────────────────────
|
|
528
|
+
n. ➕ 새로 시작
|
|
529
|
+
a. 종료
|
|
1078
530
|
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
User: 1
|
|
1082
|
-
|
|
1083
|
-
Claude: What platform will it run on?
|
|
1084
|
-
|
|
1085
|
-
1. Web (browser)
|
|
1086
|
-
2. Mobile (iOS/Android)
|
|
1087
|
-
3. Desktop
|
|
1088
|
-
|
|
1089
|
-
User: 1
|
|
1090
|
-
|
|
1091
|
-
Claude:
|
|
1092
|
-
Here are tech stack suggestions for web game development:
|
|
1093
|
-
|
|
1094
|
-
1. **Phaser.js** (Recommended) - Game framework with built-in physics engine
|
|
1095
|
-
2. **Canvas + JavaScript** - Lightweight with fine control
|
|
1096
|
-
3. **PixiJS + Matter.js** - High-performance rendering
|
|
1097
|
-
|
|
1098
|
-
User: 1
|
|
1099
|
-
|
|
1100
|
-
Claude: What design style?
|
|
1101
|
-
|
|
1102
|
-
1. Retro pixel (Atari Breakout)
|
|
1103
|
-
2. Neon graphics (Arkanoid)
|
|
1104
|
-
3. Modern 3D effects
|
|
531
|
+
선택 번호 또는 feature 이름을 입력하세요:
|
|
1105
532
|
|
|
1106
533
|
User: 2
|
|
1107
534
|
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
## 🔍 Ambiguity Scan Results
|
|
1113
|
-
|
|
1114
|
-
### Functional Scope
|
|
1115
|
-
- ⚠️ Game over condition not defined (ball drop vs lives system)
|
|
1116
|
-
- ⚠️ Stage clear condition unclear
|
|
1117
|
-
|
|
1118
|
-
### Edge Cases
|
|
1119
|
-
- ⚠️ Ball reflection angle when hitting paddle edge
|
|
1120
|
-
- ⚠️ Multiple brick collision handling
|
|
1121
|
-
|
|
1122
|
-
Please clarify the above items.
|
|
1123
|
-
|
|
1124
|
-
User: 3 lives, clear when all bricks destroyed, edge reflects at 45 degrees
|
|
1125
|
-
|
|
1126
|
-
Claude: Thank you. SPEC has been refined.
|
|
1127
|
-
|
|
1128
|
-
🔍 Re-check result: 0 ambiguities
|
|
1129
|
-
📊 Quality score: 92/100 (A)
|
|
1130
|
-
|
|
1131
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1132
|
-
🔍 SPEC REVIEW (Gemini)
|
|
1133
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1134
|
-
|
|
1135
|
-
📤 Sending SPEC...
|
|
1136
|
-
📝 Gemini feedback:
|
|
1137
|
-
1. [Edge] Ball speed increase logic undefined
|
|
1138
|
-
2. [Security] Need score manipulation prevention
|
|
1139
|
-
|
|
1140
|
-
✅ 2 improvements auto-applied
|
|
1141
|
-
🔍 Re-verifying... ✅ Passed
|
|
1142
|
-
|
|
1143
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1144
|
-
✅ SPEC Complete!
|
|
1145
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1146
|
-
|
|
1147
|
-
📄 .claude/vibe/specs/brick-game.md (PTCF structure)
|
|
1148
|
-
📄 .claude/vibe/features/brick-game.feature
|
|
1149
|
-
📊 Quality score: 95/100 (A) ← Improved after review
|
|
535
|
+
Claude: Feature: todo-app 선택
|
|
536
|
+
✅ plan 완성 → Phase 3 (vibe.spec) 진입
|
|
537
|
+
.last-feature = todo-app
|
|
538
|
+
...
|
|
1150
539
|
```
|
|
1151
540
|
|
|
1152
|
-
##
|
|
541
|
+
## Rollback / Resume
|
|
1153
542
|
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
### Recommended Tools for SPEC Creation
|
|
1161
|
-
|
|
1162
|
-
| Tool | Purpose | When to Use |
|
|
1163
|
-
|------|---------|-------------|
|
|
1164
|
-
| `findSymbol` | Find symbol definitions | Locate existing implementations to reference |
|
|
1165
|
-
| `findReferences` | Find all references | Understand how existing code is used |
|
|
1166
|
-
| `analyzeComplexity` | Code complexity analysis | Evaluate complexity of code to modify |
|
|
1167
|
-
| `saveMemory` | Save important decisions | Store confirmed requirements, design decisions |
|
|
1168
|
-
| `recallMemory` | Recall saved memory | Retrieve previous project decisions |
|
|
1169
|
-
|
|
1170
|
-
### Example Tool Usage in SPEC Creation
|
|
1171
|
-
|
|
1172
|
-
**1. Find existing auth implementation:**
|
|
1173
|
-
```bash
|
|
1174
|
-
node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index.js').then(t => t.findSymbol({symbolName: 'login', searchPath: 'src/'}).then(r => console.log(r.content[0].text)))"
|
|
1175
|
-
```
|
|
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` 등)
|
|
1176
549
|
|
|
1177
|
-
|
|
1178
|
-
```bash
|
|
1179
|
-
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)))"
|
|
1180
|
-
```
|
|
550
|
+
## Next Step
|
|
1181
551
|
|
|
1182
|
-
**3. Recall previous decisions:**
|
|
1183
|
-
```bash
|
|
1184
|
-
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)))"
|
|
1185
552
|
```
|
|
553
|
+
# 전형적인 사용
|
|
554
|
+
/vibe.spec "프로젝트 아이디어"
|
|
1186
555
|
|
|
1187
|
-
|
|
556
|
+
# 중간 단계 재개
|
|
557
|
+
/vibe.spec "feature-name"
|
|
1188
558
|
|
|
1189
|
-
|
|
1190
|
-
/vibe.
|
|
559
|
+
# ultrawork 자동 완주
|
|
560
|
+
/vibe.spec "feature-name" ultrawork
|
|
1191
561
|
```
|
|
1192
562
|
|
|
1193
563
|
---
|