@su-record/vibe 2.9.40 → 2.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +28 -12
- package/README.en.md +2 -3
- package/README.md +33 -27
- package/agents/{teams/figma → figma}/figma-analyst.md +2 -2
- package/agents/research/{best-practices-agent.md → best-practices.md} +1 -1
- package/agents/research/{codebase-patterns-agent.md → codebase-patterns.md} +1 -1
- package/agents/research/{framework-docs-agent.md → framework-docs.md} +1 -1
- package/agents/research/{security-advisory-agent.md → security-advisory.md} +1 -1
- package/agents/teams/research-team.md +4 -4
- package/agents/teams/review-debate-team.md +2 -2
- package/agents/teams/security-team.md +4 -4
- package/dist/cli/auth.d.ts +0 -1
- package/dist/cli/auth.d.ts.map +1 -1
- package/dist/cli/auth.js +1 -18
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/collaborator.d.ts +3 -3
- package/dist/cli/collaborator.js +4 -4
- package/dist/cli/collaborator.js.map +1 -1
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +0 -1
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/init.d.ts +3 -4
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +15 -20
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/remove.d.ts.map +1 -1
- package/dist/cli/commands/remove.js +2 -7
- package/dist/cli/commands/remove.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +10 -10
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +1 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/postinstall/claude-agents.d.ts +3 -1
- package/dist/cli/postinstall/claude-agents.d.ts.map +1 -1
- package/dist/cli/postinstall/claude-agents.js +47 -9
- package/dist/cli/postinstall/claude-agents.js.map +1 -1
- package/dist/cli/postinstall/constants.d.ts +5 -0
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +165 -23
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/postinstall/cursor-skills.js +2 -2
- package/dist/cli/postinstall/main.d.ts.map +1 -1
- package/dist/cli/postinstall/main.js +26 -24
- package/dist/cli/postinstall/main.js.map +1 -1
- package/dist/cli/setup/LegacyMigration.d.ts +3 -3
- package/dist/cli/setup/LegacyMigration.d.ts.map +1 -1
- package/dist/cli/setup/LegacyMigration.js +3 -5
- package/dist/cli/setup/LegacyMigration.js.map +1 -1
- package/dist/cli/setup/ProjectSetup.d.ts +18 -8
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +70 -19
- 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/dist/cli/utils/cli-detector.d.ts +0 -7
- package/dist/cli/utils/cli-detector.d.ts.map +1 -1
- package/dist/cli/utils/cli-detector.js +0 -95
- package/dist/cli/utils/cli-detector.js.map +1 -1
- package/dist/cli/utils.d.ts +1 -1
- package/dist/cli/utils.d.ts.map +1 -1
- package/dist/cli/utils.js +1 -2
- package/dist/cli/utils.js.map +1 -1
- package/dist/infra/lib/OrchestrateWorkflow.js +1 -1
- package/dist/infra/lib/OrchestrateWorkflow.js.map +1 -1
- package/dist/infra/lib/memory/MemoryStorage.d.ts +1 -1
- package/dist/infra/lib/memory/MemoryStorage.d.ts.map +1 -1
- package/dist/infra/lib/memory/MemoryStorage.js +2 -3
- package/dist/infra/lib/memory/MemoryStorage.js.map +1 -1
- package/dist/infra/lib/telemetry/SkillTelemetry.test.js +4 -4
- package/dist/infra/lib/telemetry/SkillTelemetry.test.js.map +1 -1
- package/dist/infra/orchestrator/parallelResearch.js +4 -4
- package/dist/infra/orchestrator/parallelResearch.js.map +1 -1
- package/hooks/scripts/__tests__/pre-tool-guard.test.js +1 -1
- package/hooks/scripts/clone-extract.js +712 -0
- package/hooks/scripts/clone-refine.js +510 -0
- package/hooks/scripts/clone-to-scss.js +275 -0
- package/hooks/scripts/clone-validate.js +280 -0
- package/hooks/scripts/codex-notify.js +49 -0
- package/hooks/scripts/command-log.js +1 -1
- package/hooks/scripts/lib/dispatcher.js +2 -3
- package/hooks/scripts/lib/scope-from-spec.js +2 -4
- package/hooks/scripts/llm-orchestrate.js +2 -7
- package/hooks/scripts/prompt-dispatcher.js +3 -3
- package/hooks/scripts/step-counter.js +1 -1
- package/hooks/scripts/utils.js +5 -10
- package/package.json +2 -1
- package/skills/agents-md/SKILL.md +2 -0
- package/skills/arch-guard/SKILL.md +2 -0
- package/skills/brand-assets/SKILL.md +1 -0
- package/skills/capability-loop/SKILL.md +2 -0
- package/skills/characterization-test/SKILL.md +2 -0
- package/skills/chub-usage/SKILL.md +1 -0
- package/skills/claude-md-guide/SKILL.md +2 -0
- package/skills/clone/SKILL.md +361 -0
- package/skills/commerce-patterns/SKILL.md +1 -0
- package/skills/commit-push-pr/SKILL.md +1 -0
- package/skills/context7-usage/SKILL.md +1 -0
- package/skills/{vibe-contract → contract}/SKILL.md +7 -8
- package/skills/create-prd/SKILL.md +1 -0
- package/skills/design-audit/SKILL.md +1 -0
- package/skills/design-critique/SKILL.md +1 -0
- package/skills/design-distill/SKILL.md +1 -0
- package/skills/design-normalize/SKILL.md +1 -0
- package/skills/design-polish/SKILL.md +1 -0
- package/skills/design-teach/SKILL.md +2 -0
- package/skills/devlog/SKILL.md +1 -0
- package/skills/{vibe-docs → docs}/SKILL.md +8 -8
- package/skills/e2e-commerce/SKILL.md +1 -0
- package/skills/event-comms/SKILL.md +1 -0
- package/skills/event-ops/SKILL.md +1 -0
- package/skills/event-planning/SKILL.md +1 -0
- package/skills/exec-plan/SKILL.md +2 -0
- package/skills/{vibe-figma → figma}/SKILL.md +4 -3
- package/skills/{vibe-figma-convert → figma-convert}/SKILL.md +4 -3
- package/skills/{vibe-figma-extract → figma-extract}/SKILL.md +4 -3
- package/skills/git-worktree/SKILL.md +1 -0
- package/skills/handoff/SKILL.md +2 -0
- package/skills/{vibe-interview → interview}/SKILL.md +16 -16
- package/skills/parallel-research/SKILL.md +2 -0
- package/skills/{vibe-plan → plan}/SKILL.md +9 -9
- package/skills/prioritization-frameworks/SKILL.md +1 -0
- package/skills/priority-todos/SKILL.md +2 -0
- package/skills/{vibe-regress → regress}/SKILL.md +5 -6
- package/skills/rob-pike/SKILL.md +2 -0
- package/skills/seo-checklist/SKILL.md +1 -0
- package/skills/{vibe-spec → spec}/SKILL.md +14 -14
- package/skills/{vibe-spec-review → spec-review}/SKILL.md +8 -9
- package/skills/systematic-debugging/SKILL.md +2 -0
- package/skills/techdebt/SKILL.md +2 -0
- package/skills/{vibe-test → test}/SKILL.md +19 -19
- package/skills/tool-fallback/SKILL.md +1 -0
- package/skills/typescript-advanced-types/SKILL.md +1 -0
- package/skills/ui-ux-pro-max/SKILL.md +1 -0
- package/skills/user-personas/SKILL.md +1 -0
- package/skills/vercel-react-best-practices/SKILL.md +1 -0
- package/skills/vibe/SKILL.md +288 -0
- package/{commands/vibe.analyze.md → skills/vibe.analyze/SKILL.md} +2 -0
- package/skills/vibe.clone/SKILL.md +117 -0
- package/{commands/vibe.contract.md → skills/vibe.contract/SKILL.md} +3 -1
- package/{commands/vibe.docs.md → skills/vibe.docs/SKILL.md} +3 -1
- package/{commands/vibe.event.md → skills/vibe.event/SKILL.md} +2 -0
- package/{commands/vibe.figma.md → skills/vibe.figma/SKILL.md} +25 -23
- package/{commands/vibe.harness.md → skills/vibe.harness/SKILL.md} +2 -0
- package/{commands/vibe.reason.md → skills/vibe.reason/SKILL.md} +2 -0
- package/{commands/vibe.regress.md → skills/vibe.regress/SKILL.md} +5 -3
- package/{commands/vibe.review.md → skills/vibe.review/SKILL.md} +2 -0
- package/{commands/vibe.run.md → skills/vibe.run/SKILL.md} +5 -1
- package/{commands/vibe.scaffold.md → skills/vibe.scaffold/SKILL.md} +2 -0
- package/{commands/vibe.spec.md → skills/vibe.spec/SKILL.md} +36 -34
- package/{commands/vibe.test.md → skills/vibe.test/SKILL.md} +8 -6
- package/{commands/vibe.trace.md → skills/vibe.trace/SKILL.md} +7 -0
- package/{commands/vibe.utils.md → skills/vibe.utils/SKILL.md} +2 -0
- package/{commands/vibe.verify.md → skills/vibe.verify/SKILL.md} +4 -2
- package/skills/video-production/SKILL.md +1 -0
- package/vibe/rules/principles/dual-harness-doctrine.md +50 -0
- /package/agents/{teams/figma → figma}/figma-architect.md +0 -0
- /package/agents/{teams/figma → figma}/figma-auditor.md +0 -0
- /package/agents/{teams/figma → figma}/figma-builder.md +0 -0
- /package/skills/{vibe-docs → docs}/templates/architecture.md +0 -0
- /package/skills/{vibe-docs → docs}/templates/behavioral-principles.md +0 -0
- /package/skills/{vibe-docs → docs}/templates/readme.md +0 -0
- /package/skills/{vibe-docs → docs}/templates/release-notes.md +0 -0
- /package/skills/{vibe-figma → figma}/rubrics/extraction-checklist.md +0 -0
- /package/skills/{vibe-figma → figma}/templates/component-index.md +0 -0
- /package/skills/{vibe-figma → figma}/templates/component-spec.md +0 -0
- /package/skills/{vibe-figma → figma}/templates/figma-handoff.md +0 -0
- /package/skills/{vibe-figma → figma}/templates/remapped-tree.md +0 -0
- /package/skills/{vibe-figma-convert → figma-convert}/rubrics/conversion-rules.md +0 -0
- /package/skills/{vibe-figma-convert → figma-convert}/templates/component.md +0 -0
- /package/skills/{vibe-figma-extract → figma-extract}/rubrics/image-rules.md +0 -0
- /package/skills/{vibe-interview → interview}/checklists/api.md +0 -0
- /package/skills/{vibe-interview → interview}/checklists/feature.md +0 -0
- /package/skills/{vibe-interview → interview}/checklists/library.md +0 -0
- /package/skills/{vibe-interview → interview}/checklists/mobile.md +0 -0
- /package/skills/{vibe-interview → interview}/checklists/webapp.md +0 -0
- /package/skills/{vibe-interview → interview}/checklists/website.md +0 -0
- /package/skills/{vibe-regress → regress}/templates/bug.md +0 -0
- /package/skills/{vibe-regress → regress}/templates/test-jest.md +0 -0
- /package/skills/{vibe-regress → regress}/templates/test-vitest.md +0 -0
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: vibe.regress
|
|
2
3
|
description: Regression test auto-evolution — register bugs, generate preventive tests, cluster patterns
|
|
3
4
|
argument-hint: "register | generate | list | import | cluster [args]"
|
|
5
|
+
user-invocable: true
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# /vibe.regress
|
|
@@ -26,11 +28,11 @@ argument-hint: "register | generate | list | import | cluster [args]"
|
|
|
26
28
|
|
|
27
29
|
## Process
|
|
28
30
|
|
|
29
|
-
Load skill `
|
|
31
|
+
Load skill `regress` with subcommand: `$ARGUMENTS`
|
|
30
32
|
|
|
31
|
-
The `
|
|
33
|
+
The `regress` skill performs registration, generation, and clustering.
|
|
32
34
|
|
|
33
|
-
**Core steps** (see `skills/
|
|
35
|
+
**Core steps** (see `skills/regress/SKILL.md` for details):
|
|
34
36
|
|
|
35
37
|
1. Parse subcommand
|
|
36
38
|
2. Read/write `.vibe/regressions/<slug>.md` (frontmatter schema enforced)
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: vibe.run
|
|
2
3
|
description: Execute implementation from SPEC
|
|
3
4
|
argument-hint: "feature name" or --phase N
|
|
5
|
+
user-invocable: true
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# /vibe.run
|
|
@@ -57,7 +59,7 @@ Execute **Scenario-Driven Implementation** with automatic quality verification.
|
|
|
57
59
|
Run immediately after start:
|
|
58
60
|
|
|
59
61
|
```
|
|
60
|
-
Load skill `
|
|
62
|
+
Load skill `regress` with: list --feature "{feature-name}"
|
|
61
63
|
```
|
|
62
64
|
|
|
63
65
|
- If any open regressions exist:
|
|
@@ -122,6 +124,8 @@ Scenario 3 → Implement → Verify ❌ → Fix → ✅
|
|
|
122
124
|
All pass = Quality guaranteed
|
|
123
125
|
```
|
|
124
126
|
|
|
127
|
+
> **하네스-안전 증분 (Dual-Harness Doctrine)**: 시나리오는 **가장 작은 검증 단위**다. 한 시나리오 구현 → 즉시 검증 → 다음. 여러 시나리오를 묶어 빅뱅으로 구현하지 않는다 — Codex(직역) 에서 성공률이 급락하고 CC 에서도 디버깅 비용만 늘린다. `ultrawork` 모드라도 이 단위는 무너뜨리지 않는다 (병렬은 시나리오 간, 검증은 시나리오별). 전문: `vibe/rules/principles/dual-harness-doctrine.md`.
|
|
128
|
+
|
|
125
129
|
### Automated Verification (Closed Loop)
|
|
126
130
|
|
|
127
131
|
**자율적 AI 코딩 = 구현 + 검증 + 반복. 검증을 AI에게 맡기는 순간 루프가 닫힌다.**
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: vibe.spec
|
|
2
3
|
description: 프로젝트 명세 통합 진입점 — interview → plan → spec → review → run/figma 전체 워크플로 오케스트레이션
|
|
3
4
|
argument-hint: "(선택) feature name, plan/interview file path, or idea"
|
|
5
|
+
user-invocable: true
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# /vibe.spec
|
|
@@ -25,7 +27,7 @@ argument-hint: "(선택) feature name, plan/interview file path, or idea"
|
|
|
25
27
|
|
|
26
28
|
- **단일 진입점**: `/vibe.spec` 하나로 전체 워크플로 시작. 다른 `/vibe.*` 커맨드 이름 외울 필요 없음.
|
|
27
29
|
- **Smart resume**: 기존 interview/plan/spec 파일 존재 여부로 어느 단계부터 시작할지 자동 판단.
|
|
28
|
-
- **자동 체이닝**: 스킬 `chain-next` 메타데이터 따라
|
|
30
|
+
- **자동 체이닝**: 스킬 `chain-next` 메타데이터 따라 interview → plan → spec → spec-review 진행.
|
|
29
31
|
- **분기 판단**: 기획서의 `type` 필드로 UI 트랙/로직 트랙 여부 결정.
|
|
30
32
|
- **사용자 제어**: 각 단계 사이에 사용자 확인 지점(stop gate) 제공 (ultrawork 모드는 스킵).
|
|
31
33
|
|
|
@@ -41,14 +43,14 @@ Phase 0.5: Input 분석 + Smart resume 결정
|
|
|
41
43
|
- 기존 .vibe/{interviews,plans,specs}/ 확인
|
|
42
44
|
- 시작 단계 결정: interview | plan | spec | review
|
|
43
45
|
↓
|
|
44
|
-
Phase 1: Interview (skill:
|
|
46
|
+
Phase 1: Interview (skill: interview)
|
|
45
47
|
- 조건: interview 파일 없음
|
|
46
48
|
- 사용자 "그만"까지 반복 인터뷰
|
|
47
49
|
- 출력: .vibe/interviews/{feature}.md
|
|
48
50
|
↓
|
|
49
51
|
[Stop Gate 1] — ultrawork 모드에서는 스킵
|
|
50
52
|
↓
|
|
51
|
-
Phase 2: Plan (skill:
|
|
53
|
+
Phase 2: Plan (skill: plan)
|
|
52
54
|
- 조건: plan 파일 없음
|
|
53
55
|
- interview → 마크다운 기획서 정제
|
|
54
56
|
- 출력: .vibe/plans/{feature}.md
|
|
@@ -58,14 +60,14 @@ Phase 2: Plan (skill: vibe-plan)
|
|
|
58
60
|
- website/webapp/mobile → UI + Logic 병렬
|
|
59
61
|
- api/library/feature-data → Logic만
|
|
60
62
|
↓
|
|
61
|
-
Phase 3: SPEC 작성 (skill:
|
|
63
|
+
Phase 3: SPEC 작성 (skill: spec)
|
|
62
64
|
- PTCF 구조 SPEC 문서 + Feature(BDD) 파일
|
|
63
65
|
- Parallel research (GPT/Gemini/Claude agents)
|
|
64
66
|
- Large scope 자동 분할
|
|
65
67
|
- Ambiguity scan + 품질 게이트(100점, 수렴까지 루프)
|
|
66
68
|
- 출력: .vibe/specs/{feature}.md + .vibe/features/{feature}.feature
|
|
67
69
|
↓
|
|
68
|
-
Phase 4: SPEC Review (skill:
|
|
70
|
+
Phase 4: SPEC Review (skill: spec-review)
|
|
69
71
|
- Race Review (GPT + Gemini, 라운드 수 캡 없음, 수렴까지 루프)
|
|
70
72
|
- (옵션) Codex adversarial review
|
|
71
73
|
- 사용자 최종 체크포인트
|
|
@@ -138,7 +140,7 @@ Step 1) .vibe/.last-feature 확인 (pointer 파일)
|
|
|
138
140
|
✅ interview: .vibe/interviews/{feature}.md (status: complete, N일 전)
|
|
139
141
|
✅ plan: .vibe/plans/{feature}.md (N일 전)
|
|
140
142
|
❌ spec: 없음
|
|
141
|
-
→ 다음 단계: Phase 3 (
|
|
143
|
+
→ 다음 단계: Phase 3 (spec 스킬 — SPEC 작성)
|
|
142
144
|
|
|
143
145
|
이어서 진행할까요?
|
|
144
146
|
Enter / yes → 이어서 진행
|
|
@@ -224,7 +226,7 @@ Step 3) 빈 시작 (기존 동작)
|
|
|
224
226
|
분류: 신규 아이디어
|
|
225
227
|
기존 파일: 없음
|
|
226
228
|
|
|
227
|
-
→ 시작 단계: Phase 1 (
|
|
229
|
+
→ 시작 단계: Phase 1 (interview)
|
|
228
230
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
229
231
|
```
|
|
230
232
|
|
|
@@ -235,7 +237,7 @@ Step 3) 빈 시작 (기존 동작)
|
|
|
235
237
|
**진입 방식:**
|
|
236
238
|
|
|
237
239
|
1. **인자 있음** (`/vibe.spec "아이디어"`)
|
|
238
|
-
→ `
|
|
240
|
+
→ `interview` 스킬 로드 + 아이디어 전달
|
|
239
241
|
|
|
240
242
|
2. **인자 없음** (`/vibe.spec`)
|
|
241
243
|
→ **Smart Resume Fallback 먼저** (Phase 0.5 참조):
|
|
@@ -256,19 +258,19 @@ Step 3) 빈 시작 (기존 동작)
|
|
|
256
258
|
|
|
257
259
|
(파일/이미지 첨부도 가능)
|
|
258
260
|
```
|
|
259
|
-
→ 사용자 응답 → `
|
|
261
|
+
→ 사용자 응답 → `interview` 스킬 로드
|
|
260
262
|
|
|
261
263
|
**스킬 로드:**
|
|
262
264
|
|
|
263
265
|
```
|
|
264
|
-
Load skill `
|
|
266
|
+
Load skill `interview` with input: {user_idea}
|
|
265
267
|
```
|
|
266
268
|
|
|
267
|
-
> **`.last-feature` 갱신**:
|
|
269
|
+
> **`.last-feature` 갱신**: interview 스킬이 feature name을 확정하는 즉시 `.vibe/.last-feature` 에 한 줄로 기록. 이후 Phase 2/3/4 진입 시에도 동일 기록 유지 (값이 같으면 no-op).
|
|
268
270
|
|
|
269
|
-
`
|
|
271
|
+
`interview` 스킬이 자체적으로:
|
|
270
272
|
- 프로젝트 타입 감지 (website/webapp/mobile/api/library/feature)
|
|
271
|
-
- 타입별 체크리스트 로드 (`skills/
|
|
273
|
+
- 타입별 체크리스트 로드 (`skills/interview/checklists/{type}.md`)
|
|
272
274
|
- 반복 인터뷰 실행 (사용자 "그만"까지)
|
|
273
275
|
- `.vibe/interviews/{feature-name}.md` 저장
|
|
274
276
|
|
|
@@ -285,7 +287,7 @@ Load skill `vibe-interview` with input: {user_idea}
|
|
|
285
287
|
다음 단계: 기획서 작성
|
|
286
288
|
1. 계속 진행 (기본)
|
|
287
289
|
2. Interview만 저장하고 종료
|
|
288
|
-
3. Interview 수정 후 다시 (
|
|
290
|
+
3. Interview 수정 후 다시 (interview 재실행)
|
|
289
291
|
|
|
290
292
|
Enter → 계속
|
|
291
293
|
```
|
|
@@ -295,10 +297,10 @@ Enter → 계속
|
|
|
295
297
|
**진입 조건:** plan 파일이 아직 없음
|
|
296
298
|
|
|
297
299
|
```
|
|
298
|
-
Load skill `
|
|
300
|
+
Load skill `plan` with input: .vibe/interviews/{feature}.md
|
|
299
301
|
```
|
|
300
302
|
|
|
301
|
-
`
|
|
303
|
+
`plan` 스킬이 자체적으로:
|
|
302
304
|
- 템플릿 로드 (`~/.claude/vibe/templates/plan-template.md`)
|
|
303
305
|
- Interview 섹션별 정제
|
|
304
306
|
- UI 섹션 조건부 포함 (type 기반)
|
|
@@ -334,12 +336,12 @@ Enter → 계속
|
|
|
334
336
|
**진입 조건:** spec 파일이 아직 없음 (또는 재작성 요청)
|
|
335
337
|
|
|
336
338
|
```
|
|
337
|
-
Load skill `
|
|
339
|
+
Load skill `spec` with input: .vibe/plans/{feature}.md
|
|
338
340
|
```
|
|
339
341
|
|
|
340
|
-
`
|
|
342
|
+
`spec` 스킬이 PTCF 구조 SPEC 문서 + Feature(BDD) 파일 생성.
|
|
341
343
|
|
|
342
|
-
**핵심 단계** (상세는 `skills/
|
|
344
|
+
**핵심 단계** (상세는 `skills/spec/SKILL.md` 참조):
|
|
343
345
|
|
|
344
346
|
1. Project analysis (explorer agent)
|
|
345
347
|
2. config.json references 로드
|
|
@@ -358,12 +360,12 @@ Load skill `vibe-spec` with input: .vibe/plans/{feature}.md
|
|
|
358
360
|
### Phase 4: SPEC Review
|
|
359
361
|
|
|
360
362
|
```
|
|
361
|
-
Load skill `
|
|
363
|
+
Load skill `spec-review` with feature: {feature-name}
|
|
362
364
|
```
|
|
363
365
|
|
|
364
|
-
`
|
|
366
|
+
`spec-review` 스킬이 Race Review + 품질 검증 + 사용자 체크포인트 실행.
|
|
365
367
|
|
|
366
|
-
**핵심 단계** (상세는 `skills/
|
|
368
|
+
**핵심 단계** (상세는 `skills/spec-review/SKILL.md` 참조):
|
|
367
369
|
|
|
368
370
|
1. SPEC/Feature 파일 로드 (single/split 자동 감지)
|
|
369
371
|
2. Quality Validation (100점 게이트, 수렴까지 auto-fix 루프)
|
|
@@ -375,7 +377,7 @@ Load skill `vibe-spec-review` with feature: {feature-name}
|
|
|
375
377
|
### Phase 4.5: Contract Extract (auto, only for features with an API)
|
|
376
378
|
|
|
377
379
|
```
|
|
378
|
-
Load skill `
|
|
380
|
+
Load skill `contract` with: extract "{feature-name}"
|
|
379
381
|
```
|
|
380
382
|
|
|
381
383
|
If the SPEC has a `## API` / `## Endpoints` / `## Interface` section, extract the contract to `.vibe/contracts/{feature-name}.md`. If the section is absent, exit cleanly (not every feature has an API).
|
|
@@ -446,9 +448,9 @@ Claude: 🔍 Input 분석
|
|
|
446
448
|
입력: "원두 브랜드 랜딩"
|
|
447
449
|
분류: 신규 아이디어
|
|
448
450
|
기존 파일: 없음
|
|
449
|
-
→ 시작 단계: Phase 1 (
|
|
451
|
+
→ 시작 단계: Phase 1 (interview)
|
|
450
452
|
|
|
451
|
-
[
|
|
453
|
+
[interview 스킬 로드]
|
|
452
454
|
Type: website 감지 → checklists/website.md 로드
|
|
453
455
|
...
|
|
454
456
|
```
|
|
@@ -461,9 +463,9 @@ Claude: 🔍 Input 분석
|
|
|
461
463
|
입력: plan 파일 경로
|
|
462
464
|
분류: 기존 기획서
|
|
463
465
|
Feature: bean-landing
|
|
464
|
-
→ 시작 단계: Phase 3 (
|
|
466
|
+
→ 시작 단계: Phase 3 (spec)
|
|
465
467
|
|
|
466
|
-
[
|
|
468
|
+
[spec 스킬 로드]
|
|
467
469
|
기획서 읽기 → research → PTCF 작성 ...
|
|
468
470
|
```
|
|
469
471
|
|
|
@@ -477,9 +479,9 @@ Claude: 🔍 Input 분석
|
|
|
477
479
|
✅ interview: .vibe/interviews/bean-landing.md
|
|
478
480
|
✅ plan: .vibe/plans/bean-landing.md
|
|
479
481
|
❌ spec: 없음
|
|
480
|
-
→ 시작 단계: Phase 3 (
|
|
482
|
+
→ 시작 단계: Phase 3 (spec)
|
|
481
483
|
|
|
482
|
-
[
|
|
484
|
+
[spec 스킬 로드]
|
|
483
485
|
...
|
|
484
486
|
```
|
|
485
487
|
|
|
@@ -493,7 +495,7 @@ Claude: 🔍 Input 분석
|
|
|
493
495
|
✅ feature: .vibe/features/bean-landing.feature
|
|
494
496
|
|
|
495
497
|
이미 SPEC이 존재합니다. 어떻게 진행할까요?
|
|
496
|
-
1. SPEC 리뷰 (Phase 4:
|
|
498
|
+
1. SPEC 리뷰 (Phase 4: spec-review 스킬 로드)
|
|
497
499
|
2. /vibe.run 실행 (구현)
|
|
498
500
|
3. SPEC 재작성 (기존 백업 후 새로 작성)
|
|
499
501
|
4. 종료
|
|
@@ -509,7 +511,7 @@ Claude: (.last-feature 읽기 → "bean-landing" 발견)
|
|
|
509
511
|
✅ interview: .vibe/interviews/bean-landing.md (status: partial, 2일 전)
|
|
510
512
|
❌ plan: 없음
|
|
511
513
|
❌ spec: 없음
|
|
512
|
-
→ 다음 단계: Phase 2 (
|
|
514
|
+
→ 다음 단계: Phase 2 (plan — 기획서 작성)
|
|
513
515
|
|
|
514
516
|
이어서 진행할까요?
|
|
515
517
|
Enter / yes → 이어서 진행
|
|
@@ -521,7 +523,7 @@ User: yes
|
|
|
521
523
|
|
|
522
524
|
Claude: [Phase 2 진입]
|
|
523
525
|
.last-feature = bean-landing
|
|
524
|
-
[
|
|
526
|
+
[plan 스킬 로드]
|
|
525
527
|
...
|
|
526
528
|
```
|
|
527
529
|
|
|
@@ -545,7 +547,7 @@ Claude: (.last-feature 없음 → 디렉토리 스캔)
|
|
|
545
547
|
User: 2
|
|
546
548
|
|
|
547
549
|
Claude: Feature: todo-app 선택
|
|
548
|
-
✅ plan 완성 → Phase 3 (
|
|
550
|
+
✅ plan 완성 → Phase 3 (spec) 진입
|
|
549
551
|
.last-feature = todo-app
|
|
550
552
|
...
|
|
551
553
|
```
|
|
@@ -557,7 +559,7 @@ Claude: Feature: todo-app 선택
|
|
|
557
559
|
- 중단 시 다시 `/vibe.spec`으로 돌아오면 Smart Resume Fallback 동작:
|
|
558
560
|
- 인자 있음 (`/vibe.spec "feature-name"` 또는 파일 경로) → 해당 feature의 가장 진행된 단계 다음으로 바로 진입
|
|
559
561
|
- 인자 없음 → `.last-feature` 우선 제안 → 거부하면 진행 중 작업 목록 제시 → 또 거부하면 빈 시작
|
|
560
|
-
- 수동 개입 필요시 스킬 직접 호출 가능 (`Load skill
|
|
562
|
+
- 수동 개입 필요시 스킬 직접 호출 가능 (`Load skill interview` 등)
|
|
561
563
|
|
|
562
564
|
## Next Step
|
|
563
565
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: vibe.test
|
|
2
3
|
description: Self-test vibe — probe every command/skill/hook/agent in the target harness install dir and write a pass/fail report
|
|
3
|
-
argument-hint: "[cc|
|
|
4
|
+
argument-hint: "[cc|codex] (empty = current harness)"
|
|
5
|
+
user-invocable: true
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# /vibe.test
|
|
@@ -12,10 +14,10 @@ argument-hint: "[cc|coco] (empty = current harness)"
|
|
|
12
14
|
```
|
|
13
15
|
/vibe.test # Test current harness (auto-detect)
|
|
14
16
|
/vibe.test cc # Force-test ~/.claude/
|
|
15
|
-
/vibe.test
|
|
17
|
+
/vibe.test codex # Force-test ~/.codex/
|
|
16
18
|
```
|
|
17
19
|
|
|
18
|
-
No subcommands. No CC-vs-
|
|
20
|
+
No subcommands. No CC-vs-Codex comparison semantics. One command, one report.
|
|
19
21
|
|
|
20
22
|
## Report
|
|
21
23
|
|
|
@@ -30,12 +32,12 @@ Markdown summary is also printed to the console when the run finishes.
|
|
|
30
32
|
|
|
31
33
|
## Process
|
|
32
34
|
|
|
33
|
-
Load skill `
|
|
35
|
+
Load skill `test` with target harness: `$ARGUMENTS`
|
|
34
36
|
|
|
35
|
-
- If `$ARGUMENTS` is empty, detect the current harness (CC vs
|
|
37
|
+
- If `$ARGUMENTS` is empty, detect the current harness (CC vs Codex) and use that.
|
|
36
38
|
- If the target install dir is missing, exit cleanly with guidance (not an error).
|
|
37
39
|
|
|
38
|
-
See `skills/
|
|
40
|
+
See `skills/test/SKILL.md` for the probe spec and the report template.
|
|
39
41
|
|
|
40
42
|
## Done Criteria
|
|
41
43
|
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vibe.trace
|
|
3
|
+
description: Generate and display Requirements Traceability Matrix (RTM) — REQ → SPEC → Feature → Code 관계 추적
|
|
4
|
+
argument-hint: "feature-name [--html] [--save]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
1
8
|
# /vibe.trace
|
|
2
9
|
|
|
3
10
|
Generate and display Requirements Traceability Matrix (RTM).
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: vibe.verify
|
|
2
3
|
description: Verify implementation against SPEC requirements
|
|
3
4
|
argument-hint: "feature name"
|
|
5
|
+
user-invocable: true
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# /vibe.verify
|
|
@@ -255,7 +257,7 @@ Before printing the failure report, **auto-register each failed scenario as a re
|
|
|
255
257
|
|
|
256
258
|
```
|
|
257
259
|
For each failed scenario:
|
|
258
|
-
Load skill `
|
|
260
|
+
Load skill `regress` with:
|
|
259
261
|
subcommand: register --from-verify
|
|
260
262
|
feature: {feature-name}
|
|
261
263
|
scenario: {scenario-name}
|
|
@@ -435,7 +437,7 @@ node -e "import('{{VIBE_PATH_URL}}/node_modules/@su-record/vibe/dist/tools/index
|
|
|
435
437
|
After all scenarios pass, auto-invoke:
|
|
436
438
|
|
|
437
439
|
```
|
|
438
|
-
Load skill `
|
|
440
|
+
Load skill `contract` with: check "{feature-name}"
|
|
439
441
|
```
|
|
440
442
|
|
|
441
443
|
- Skip if `.vibe/contracts/{feature-name}.md` does not exist
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: video-production
|
|
3
|
+
invocation: [auto]
|
|
3
4
|
tier: standard
|
|
4
5
|
description: "Video processing gotchas — FFmpeg commands, transcoding pipelines, HLS/DASH streaming setup, subtitle embedding (SRT/VTT), and thumbnail extraction. Use when the project involves any video manipulation, media processing, or streaming infrastructure. Covers codec selection, bitrate optimization, and common FFmpeg pitfalls. Must use this skill when user works with video files, mentions FFmpeg, or needs media processing — even for simple tasks like 'generate a thumbnail'."
|
|
5
6
|
triggers: [video, ffmpeg, transcode, encode, stream, media, subtitle, thumbnail, hls, dash]
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Dual-Harness Doctrine
|
|
2
|
+
|
|
3
|
+
> vibe는 여러 하네스(Claude Code, Codex, Gemini) 위에서 동작한다.
|
|
4
|
+
> 차이는 경로·파일명 같은 **인프라**가 아니라 **인지 방식**에 있다.
|
|
5
|
+
|
|
6
|
+
## 비대칭의 본질
|
|
7
|
+
|
|
8
|
+
| | Claude Code | Codex |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| 모호한 요청 | 의도를 **추론**해 알아서 채움 | **직역** — 지시한 그대로만, 예시 텍스트도 실데이터로 |
|
|
11
|
+
| research 트리거 | planning mode를 켜야 시작 | 모드 없이 **자발적** 탐색 |
|
|
12
|
+
| 작업 단위 | 한 번에 working solution → 끝에 QA | **작게 순차** + 단계별 검증이 성공률 높음 |
|
|
13
|
+
| 도메인 지식 | 탐색을 맡겨도 됨 | 직접 주입할수록(라이브러리·함수·위치) 정확도↑ |
|
|
14
|
+
|
|
15
|
+
## Core Principle
|
|
16
|
+
|
|
17
|
+
> **vibe는 어떤 하네스의 *암묵적 동작*에도 의존하지 않는다.**
|
|
18
|
+
> **추론은 `/vibe` 디스패처가 앞단에서 한 번 하고, skill 본문은 모든 것을 명시적으로 쓴다.**
|
|
19
|
+
|
|
20
|
+
= **"명시성 공통분모 + 추론 앞단"** 모델
|
|
21
|
+
|
|
22
|
+
- **skill 본문 = 낮은 공통분모**: 명시적·직역-안전. Codex에서 안전하고 CC에서도 여전히 정확.
|
|
23
|
+
- **`/vibe` 디스패처 = 추론 레이어**: 모호한 자연어를 명시적 지시로 *먼저* 펼쳐, 모든 하네스에서 CC급 편의를 제공.
|
|
24
|
+
|
|
25
|
+
## Operating Rules
|
|
26
|
+
|
|
27
|
+
1. **추론은 앞단에서 단 한 번.** `/vibe`가 모호한 NL → 명시적·직역 가능한 지시로 전개한다. 하위 skill은 모호한 입력을 받지 않는다.
|
|
28
|
+
2. **예시·placeholder는 명시 표기.** 직역 하네스가 실데이터로 넣을 수 있는 예시 텍스트를 무표기로 쓰지 않는다. `<예시>`, `[채워넣을 값]`, `{{placeholder}}` 사용. (Codex는 무표기 예시를 그대로 테스트 데이터에 넣는다.)
|
|
29
|
+
3. **research는 명시적으로 트리거.** "planning mode" 스위치에 의존하지 않는다. 조사·탐색이 필요한 단계는 skill이 말로 지시한다.
|
|
30
|
+
4. **가장 작은 검증 단위로 분해.** 구현 → 검증 → 다음. 여러 단위를 묶지 않는다. (`vibe.run`의 시나리오 루프가 이미 이 방식 — ultrawork가 빅뱅으로 무너뜨리지 않게 유지.)
|
|
31
|
+
5. **도메인 지식은 SPEC에 주입.** SPEC/plan은 구체적 라이브러리명·함수명·파일 위치를 담는다. 선택이 아닌 **의무 출력** — Codex 정확도가 여기에 비례한다.
|
|
32
|
+
|
|
33
|
+
## Hooks Across Harnesses
|
|
34
|
+
|
|
35
|
+
CC의 풍부한 hook 모델(PreToolUse/PostToolUse/UserPromptSubmit/Stop)에는 Codex에 완전한 등가물이 없다. hook의 **의도**별로 하네스에 맞는 메커니즘에 매핑한다.
|
|
36
|
+
|
|
37
|
+
| hook 의도 | Claude Code | Codex |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| 라이프사이클 (turn 완료, 세션 시작/종료) | `Stop` / `SessionStart` hook | `config.toml`의 `notify` 프로그램 (agent-turn-complete 시 JSON 발화) |
|
|
40
|
+
| pre-edit / scope guard | `PreToolUse` (동기 deny) | ❌ 동기 인터셉트 없음 → AGENTS.md 운영 규칙 + notify 기반 사후 검증 |
|
|
41
|
+
| 키워드 디스패치 (ralph/ultrawork) | `UserPromptSubmit` | AGENTS.md 지시 (Codex가 직역 실행) |
|
|
42
|
+
| 금지 패턴 차단 | `PreToolUse` | AGENTS.md 규칙 + 에이전트에게 실행하라 지시한 check 명령 |
|
|
43
|
+
|
|
44
|
+
**핵심 통찰: Codex의 직역 성향이 AGENTS.md "soft hook"을 신뢰성 있게 만든다.** CC는 soft 지시를 가끔 무시해 hard hook이 필요하지만, Codex는 적힌 대로 실행한다. 따라서:
|
|
45
|
+
|
|
46
|
+
- **하드 라이프사이클 이벤트** → Codex `config.toml notify` (실제·결정적). `stop-dispatcher` 로직(auto-commit, devlog, review gate) 재사용 가능.
|
|
47
|
+
- **행동 가드** → AGENTS.md 운영 규칙. 직역이라 *오히려* 신뢰성 있음.
|
|
48
|
+
- **진짜 동기 pre-edit 차단은 Codex에서 불가** — 사후 검증을 완화책으로 수용한다.
|
|
49
|
+
|
|
50
|
+
> **Action item (미구현):** `.codex/settings.local.json`에 죽은 hook을 쓰는 것을 중단하고, 대신 `.codex/config.toml`에 `notify` 핸들러를 생성해 `stop-dispatcher` 로직을 재사용하며, 가드 규칙은 AGENTS.md로 방출한다.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|