@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,5 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: typescript-advanced-types
|
|
3
|
+
invocation: [auto]
|
|
3
4
|
tier: core
|
|
4
5
|
description: "TypeScript advanced type system master guide. Covers Generics, Conditional Types, Mapped Types, Template Literals, Utility Types. Activates for complex type logic, reusable type utilities, and compile-time type safety."
|
|
5
6
|
sections:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ui-ux-pro-max
|
|
3
|
+
invocation: [command]
|
|
3
4
|
tier: standard
|
|
4
5
|
description: "UI/UX design intelligence with bold aesthetic direction. Searchable database: 50+ styles, 97 color palettes, 57 font pairings, 99 UX guidelines, 25 chart types across 9 stacks (React, Vue, Svelte, Angular, Astro, Next.js, Flutter, Swift, Kotlin). Use when building any UI component, choosing color schemes, selecting typography, applying design patterns, or reviewing UX compliance. Must use this skill when user builds frontend — pages, components, dashboards, or landing pages — to ensure design quality beyond generic AI output."
|
|
5
6
|
---
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: user-personas
|
|
3
|
+
invocation: [auto, chain]
|
|
3
4
|
tier: standard
|
|
4
5
|
description: "Create refined user personas from research data — 3 personas with JTBD, pains, gains, and unexpected insights."
|
|
5
6
|
triggers: [persona, user persona, user profile, user segment, user research]
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vercel-react-best-practices
|
|
3
|
+
invocation: [auto]
|
|
3
4
|
tier: core
|
|
4
5
|
description: "React/Next.js performance gotchas from Vercel engineering. Non-intuitive pitfalls that LLMs commonly miss."
|
|
5
6
|
triggers: [react, next.js, performance, optimization, vercel, component, rendering]
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vibe
|
|
3
|
+
description: Dynamic dispatcher — 자연어 요구사항 + 첨부(URL/이미지/PDF/파일)를 받아 적합한 vibe.* 파이프라인을 동적 설계하고 1회 승인 후 체인 실행
|
|
4
|
+
argument-hint: "<자연어 요구사항> [+ URL/이미지/PDF/파일 첨부]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /vibe
|
|
9
|
+
|
|
10
|
+
**vibe의 메인 진입점.** 사용자는 "무엇을 만들지 / 무엇을 할지"만 자연어로 말한다. vibe가 의도를 분석해 어떤 `/vibe.*` 스킬을 어떤 순서로 호출할지 파이프라인을 동적으로 설계하고, **1회 승인 후 실행**한다.
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
/vibe "패럴랙스 웹사이트 만들어줘"
|
|
16
|
+
/vibe "여기 figma 링크 https://figma.com/file/abc 로 로그인 페이지"
|
|
17
|
+
/vibe "로그인 회귀 테스트 다시 돌려서 통과시켜줘"
|
|
18
|
+
/vibe "이 SPEC 리뷰만 한번 봐줘" + 📎 .vibe/specs/login.md
|
|
19
|
+
/vibe "PRD 문서 기반으로 진행" + 📎 docs/prd.pdf
|
|
20
|
+
/vibe "..." ultrawork # 승인 게이트 없이 자동 전 흐름 실행
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Philosophy
|
|
24
|
+
|
|
25
|
+
> 사용자는 "무엇"만 말한다. "어떤 스킬을 어떻게" 는 vibe가 결정한다.
|
|
26
|
+
|
|
27
|
+
- **단일 슬래시 진입점**: `/vibe` 하나로 모든 워크플로 시작. 다른 `/vibe.*` 도 그대로 존재하지만 power user 가 명시적으로 phase 호출하고 싶을 때 쓰는 advanced 경로.
|
|
28
|
+
- **동적 파이프라인**: 의도/입력 종류에 따라 매번 다른 스킬 체인 구성. 미리 정해진 고정 흐름 아님.
|
|
29
|
+
- **무제한 라우팅**: 라우팅 표는 빠른 경로일 뿐 닫힌 화이트리스트가 아니다. 설치된 모든 `vibe.*` 스킬이 라우팅 후보이며, 표에 없는 요구사항도 description 기반 의미 매칭으로 처리한다 (Catch-all).
|
|
30
|
+
- **하네스 정규화 (추론 앞단)**: vibe는 CC(추론)·Codex(직역) 어느 하네스의 암묵적 동작에도 의존하지 않는다. `/vibe`가 모호한 NL을 **명시적·직역 가능한 지시로 먼저 전개**하고, 하위 skill은 모호한 입력을 받지 않는다. 이로써 모든 하네스에서 동일 결과 + CC급 편의를 제공한다. 전문: `vibe/rules/principles/dual-harness-doctrine.md`.
|
|
31
|
+
- **Smart Resume**: `.vibe/{interviews,plans,specs,features}/` 감지하여 "이어서 진행?" 자동 제안.
|
|
32
|
+
- **1회 승인 게이트**: 파이프라인을 설계해서 사용자에게 보여주고 OK 받은 뒤 실행. `ultrawork` 키워드 있으면 skip.
|
|
33
|
+
- **위임자 역할**: `/vibe` 본인은 코드를 직접 쓰지 않는다. 라우팅·설계·실행 위임만 한다.
|
|
34
|
+
|
|
35
|
+
## Process
|
|
36
|
+
|
|
37
|
+
> **⏱️ Timer**: 시작 시 `getCurrentTime` 호출하고 결과를 `{start_time}` 으로 기록한다.
|
|
38
|
+
|
|
39
|
+
### Phase 0: Input 수집
|
|
40
|
+
|
|
41
|
+
다음을 모두 파싱한다:
|
|
42
|
+
|
|
43
|
+
| 입력원 | 처리 |
|
|
44
|
+
|---|---|
|
|
45
|
+
| 자연어 텍스트 | 의도 추출 (요구 종류, 도메인, 키워드) |
|
|
46
|
+
| 첨부 파일 (`📎 path`) | 확장자로 분류 (md/feature/pdf/png/jpg/...) |
|
|
47
|
+
| URL | 도메인으로 분류 (figma.com / github.com / 기타) |
|
|
48
|
+
| 키워드 | `ultrawork`, `ralph`, `quick`, `verify` 등 magic keyword 추출 |
|
|
49
|
+
|
|
50
|
+
### Phase 1: Intent 분류
|
|
51
|
+
|
|
52
|
+
입력을 다음 의도 중 하나(또는 복수)로 분류:
|
|
53
|
+
|
|
54
|
+
| 의도 | 신호 | 기본 파이프라인 |
|
|
55
|
+
|---|---|---|
|
|
56
|
+
| **new feature** | "만들어줘", "추가", 신규 아이디어, 입력 없이 빈 호출 | interview → plan → spec → review → run → verify → contract → trace |
|
|
57
|
+
| **figma-driven UI** | figma.com URL, "디자인", 이미지/PDF + UI 단어 | figma-extract → figma-convert → run → verify |
|
|
58
|
+
| **clone existing UI** | 일반 웹사이트 URL + "비슷한", "클론", "이런 느낌" | clone → run → verify |
|
|
59
|
+
| **resume in-progress** | feature name + `.vibe/specs/{name}.md` 존재 | (resume 지점부터) |
|
|
60
|
+
| **review only** | "리뷰", "검토만", 코드/SPEC 첨부 + "확인" | review |
|
|
61
|
+
| **regression fix** | "회귀", "테스트 깨졌", "다시 통과" | regress → run → verify |
|
|
62
|
+
| **contract drift** | "API 변경", "계약 깨졌", "스펙 불일치" | contract → regress (P1만) |
|
|
63
|
+
| **scaffold** | "프로젝트 만들기", "셋업", "초기 구조" | scaffold |
|
|
64
|
+
| **docs sync** | "문서 갱신", "README", "AGENTS.md" | docs |
|
|
65
|
+
| **analyze** | "분석", "조사", "이건 뭐야" + 파일/URL | analyze |
|
|
66
|
+
| **reason** | "추론", "깊게 생각", "트레이드오프", "어떻게 접근" 등 복잡한 사고 요청 | reason |
|
|
67
|
+
| **event** | "이벤트", "커뮤니티", "D-Day", "행사 자동화" | event |
|
|
68
|
+
| **harness check** | "하네스", "환경 점검" | harness |
|
|
69
|
+
| **test self** | "vibe 테스트", "CC ↔ Codex 비교" | test |
|
|
70
|
+
| **utils** | "이어서", "메모리", "체크포인트" | utils |
|
|
71
|
+
|
|
72
|
+
복수 의도면 우선순위: resume > figma-driven > new feature > 기타.
|
|
73
|
+
|
|
74
|
+
> **⚠️ 위 표는 닫힌 화이트리스트가 아니라 "흔한 케이스 빠른 경로"다.** 표에 없는 요구사항이라도 막지 말고 **Catch-all 라우팅**(아래)으로 처리한다.
|
|
75
|
+
|
|
76
|
+
### Catch-all 라우팅 (표에 없는 의도)
|
|
77
|
+
|
|
78
|
+
입력이 위 표 어느 행과도 명확히 매칭되지 않으면:
|
|
79
|
+
|
|
80
|
+
1. **의미 매칭**: 사용 가능한 모든 `vibe.*` 스킬의 `description` 을 읽어 요구사항과 의미적으로 가장 가까운 스킬을 고른다. (표는 참고용일 뿐, 실제 라우팅 후보는 설치된 전체 `vibe.*`)
|
|
81
|
+
2. **복합 설계**: 단일 스킬로 안 되면 여러 스킬을 조합한 파이프라인을 동적으로 설계한다.
|
|
82
|
+
3. **되묻기는 최후**: 어떤 스킬과도 매칭이 안 될 때만 사용자에게 "어떤 작업인지" 명확화 질문을 한다.
|
|
83
|
+
|
|
84
|
+
> 새 `vibe.*` 스킬이 추가되어 위 표에 행이 없더라도, Catch-all 이 description 기반으로 자동 라우팅하므로 기능이 막히지 않는다. 표 누락 = 기능 제한이 되어선 안 된다.
|
|
85
|
+
|
|
86
|
+
### Phase 2: Smart Resume 감지
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
.vibe/.last-feature 존재 → 직전 feature 이름 추출
|
|
90
|
+
.vibe/specs/{feature}/ 또는 .vibe/specs/{feature}.md 존재 → spec 단계 완료
|
|
91
|
+
.vibe/features/{feature}/ 또는 .vibe/features/{feature}.feature 존재 → feature 단계 완료
|
|
92
|
+
.vibe/plans/{feature}.md 존재 → plan 단계 완료
|
|
93
|
+
.vibe/interviews/{feature}.md 존재 → interview 단계 완료
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
감지된 진행 상태가 있으면 사용자에게 명시:
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
🔍 진행 중인 작업 감지: "login"
|
|
100
|
+
✅ interview · ✅ plan · ✅ spec · ⏳ review
|
|
101
|
+
|
|
102
|
+
이어서 review 부터 진행할까요? 아니면 새 작업?
|
|
103
|
+
[1] 이어서 review
|
|
104
|
+
[2] 새 작업 (위 요구사항으로)
|
|
105
|
+
[3] 취소
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Phase 3: 파이프라인 설계
|
|
109
|
+
|
|
110
|
+
**먼저 입력을 정규화한다 (하네스 무관 명시화):**
|
|
111
|
+
|
|
112
|
+
- **예시·placeholder 표기**: 사용자가 설명용으로 던진 예시 텍스트를 실데이터로 넘기지 않는다. `<예시>`, `[채워넣을 값]` 로 명시. (직역 하네스가 그대로 데이터로 쓰는 것 방지)
|
|
113
|
+
- **research 명시**: 조사가 필요하면 파이프라인에 명시적 탐색 단계를 넣는다. planning mode 같은 하네스 스위치에 의존하지 않는다.
|
|
114
|
+
- **도메인 지식 흡수**: 사용자가 준 라이브러리·함수·파일 위치를 SPEC 입력으로 전달한다.
|
|
115
|
+
|
|
116
|
+
이어서 분류된 의도 + resume 상태 + magic keyword 를 종합해 실행 계획 작성:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
📋 Pipeline Plan
|
|
120
|
+
|
|
121
|
+
목표: 패럴랙스 웹사이트 신규 개발
|
|
122
|
+
Input: 자연어 ("패럴랙스 웹사이트 만들어줘")
|
|
123
|
+
Resume: 없음 (신규)
|
|
124
|
+
Keywords: 없음
|
|
125
|
+
|
|
126
|
+
Phase 1: /vibe.spec → interview → plan → spec → review
|
|
127
|
+
Phase 2: /vibe.figma → UI 디자인 트랙 (type=website 감지)
|
|
128
|
+
Phase 3: /vibe.run → 구현
|
|
129
|
+
Phase 4: /vibe.verify → 검증
|
|
130
|
+
Phase 5: /vibe.contract → API 계약 검증
|
|
131
|
+
Phase 6: /vibe.trace → RTM 출력
|
|
132
|
+
|
|
133
|
+
예상: 6 phase, 중단 게이트 2회 (interview 후, plan 후)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Phase 4: 승인 게이트
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
위 파이프라인으로 진행할까요?
|
|
140
|
+
[1] 진행
|
|
141
|
+
[2] 수정 (어느 phase 빼거나 추가)
|
|
142
|
+
[3] 취소
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Skip 조건:**
|
|
146
|
+
- 입력에 `ultrawork` 또는 `ulw` 키워드 → 자동 진행
|
|
147
|
+
- `ralph` 키워드 → 자동 진행 + 100% 수렴까지 반복
|
|
148
|
+
- `quick` 키워드 → 최소 phase 만 자동 진행 (review/verify/contract/trace skip)
|
|
149
|
+
|
|
150
|
+
### Phase 5: 체인 실행
|
|
151
|
+
|
|
152
|
+
승인된 파이프라인을 순차 호출:
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
호출 형식: SlashCommand({command: "/vibe.{name} <args>"})
|
|
156
|
+
|
|
157
|
+
예:
|
|
158
|
+
1. SlashCommand({command: "/vibe.spec \"패럴랙스 웹사이트\""})
|
|
159
|
+
2. SlashCommand({command: "/vibe.figma"})
|
|
160
|
+
3. SlashCommand({command: "/vibe.run"})
|
|
161
|
+
...
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
각 phase 종료 시:
|
|
165
|
+
- 성공 → 다음 phase
|
|
166
|
+
- 실패 → 중단하고 사용자에게 보고 (재시도 / skip / abort 선택)
|
|
167
|
+
- `ultrawork` 모드 → 실패도 TODO로 기록하고 계속 진행 (non-interactive)
|
|
168
|
+
|
|
169
|
+
### Phase 6: 종료 보고
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
✅ /vibe 완료
|
|
173
|
+
|
|
174
|
+
실행 파이프라인:
|
|
175
|
+
✅ /vibe.spec (interview + plan + spec + review)
|
|
176
|
+
✅ /vibe.figma (UI 디자인 트랙)
|
|
177
|
+
✅ /vibe.run (구현)
|
|
178
|
+
✅ /vibe.verify (검증 — 9/9 통과)
|
|
179
|
+
✅ /vibe.trace (RTM 100%)
|
|
180
|
+
|
|
181
|
+
생성물:
|
|
182
|
+
📄 .vibe/specs/parallax-site.md
|
|
183
|
+
📄 .vibe/features/parallax-site.feature
|
|
184
|
+
📁 src/pages/parallax/
|
|
185
|
+
📄 .vibe/reports/parallax-site-rtm.md
|
|
186
|
+
|
|
187
|
+
⏱️ 시작: {start_time}
|
|
188
|
+
⏱️ 완료: {getCurrentTime 결과}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Routing Examples
|
|
192
|
+
|
|
193
|
+
### 예시 1: 신규 + figma
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
입력: /vibe "https://www.figma.com/design/abc/login 로 로그인 페이지"
|
|
197
|
+
|
|
198
|
+
→ Intent: figma-driven UI
|
|
199
|
+
→ Resume: 없음
|
|
200
|
+
→ Pipeline:
|
|
201
|
+
1. /vibe.figma (figma-extract + figma-convert)
|
|
202
|
+
2. /vibe.spec (생성된 SPEC 자동 보정)
|
|
203
|
+
3. /vibe.run
|
|
204
|
+
4. /vibe.verify
|
|
205
|
+
5. /vibe.trace
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### 예시 2: Resume
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
입력: /vibe "이어서" (혹은 빈 호출)
|
|
212
|
+
|
|
213
|
+
→ Resume: .vibe/specs/login/ 발견 (3개 phase 파일)
|
|
214
|
+
→ .vibe/features/login/ 없음
|
|
215
|
+
→ Pipeline:
|
|
216
|
+
1. /vibe.run (구현부터)
|
|
217
|
+
2. /vibe.verify
|
|
218
|
+
3. /vibe.trace
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### 예시 3: Review only
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
입력: /vibe "이 코드 리뷰만" + 📎 src/auth/login.ts
|
|
225
|
+
|
|
226
|
+
→ Intent: review only
|
|
227
|
+
→ Pipeline:
|
|
228
|
+
1. /vibe.review (단일 phase)
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### 예시 4: ultrawork
|
|
232
|
+
|
|
233
|
+
```
|
|
234
|
+
입력: /vibe "결제 API 만들어줘" ultrawork
|
|
235
|
+
|
|
236
|
+
→ Approval gate SKIP
|
|
237
|
+
→ 자동 전 phase 실행
|
|
238
|
+
→ 실패는 TODO 기록만 하고 계속
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## ⛔ 하지 않는 것
|
|
242
|
+
|
|
243
|
+
- 직접 코드 작성 / 파일 수정 (위임만)
|
|
244
|
+
- 파이프라인 미리보기 없이 즉시 실행 (`ultrawork` 외)
|
|
245
|
+
- 사용자가 명시한 phase 를 임의로 추가/제거
|
|
246
|
+
- Resume 상태를 무시하고 처음부터 다시 시작
|
|
247
|
+
|
|
248
|
+
## Magic Keywords (재정의)
|
|
249
|
+
|
|
250
|
+
| Keyword | Effect |
|
|
251
|
+
|---|---|
|
|
252
|
+
| `ultrawork` / `ulw` | 승인 게이트 skip + non-interactive |
|
|
253
|
+
| `ralph` | 100% 수렴까지 자동 반복 |
|
|
254
|
+
| `quick` | 최소 phase 만 (review/verify/contract/trace skip) |
|
|
255
|
+
| `verify` | 강한 검증 (verify + contract + trace 강제 포함) |
|
|
256
|
+
|
|
257
|
+
## Output
|
|
258
|
+
|
|
259
|
+
```
|
|
260
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
261
|
+
🎯 /vibe Dynamic Dispatcher
|
|
262
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
263
|
+
|
|
264
|
+
[Phase 0: Input 분석]
|
|
265
|
+
...
|
|
266
|
+
|
|
267
|
+
[Phase 1: Intent 분류]
|
|
268
|
+
→ new feature + figma-driven UI
|
|
269
|
+
|
|
270
|
+
[Phase 2: Resume 감지]
|
|
271
|
+
→ 진행 중인 작업 없음
|
|
272
|
+
|
|
273
|
+
[Phase 3: 파이프라인 설계]
|
|
274
|
+
...
|
|
275
|
+
|
|
276
|
+
[Phase 4: 승인 게이트]
|
|
277
|
+
사용자 응답 대기...
|
|
278
|
+
|
|
279
|
+
[Phase 5: 실행]
|
|
280
|
+
...
|
|
281
|
+
|
|
282
|
+
[Phase 6: 종료 보고]
|
|
283
|
+
...
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
ARGUMENTS: {자연어 요구사항 + 첨부}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vibe.clone
|
|
3
|
+
description: URL → 마크업 레벨 픽셀 완벽 클론 — 헤드리스 브라우저로 라이브 사이트 캡처 후 현재 프로젝트 스택에 맞게 스캐폴딩
|
|
4
|
+
argument-hint: "<url> [<url2>...] [--name=<feature>] [--mo-only] [--pc-only] [--ignore-robots]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /vibe.clone
|
|
9
|
+
|
|
10
|
+
URL을 받아 **마크업 수준으로 정밀 복제**하고 현재 프로젝트 스택에 맞춰 컴포넌트/스타일을 스캐폴딩한다.
|
|
11
|
+
|
|
12
|
+
→ 모든 동작은 **`clone` 스킬**의 규칙을 따른다. 이 커맨드는 라우터일 뿐, 휴리스틱·추정·생략은 금지.
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/vibe.clone <url> # 인터랙티브: MO+PC 양쪽 캡처 (기본)
|
|
18
|
+
/vibe.clone <url> --mo-only # 모바일(375×812)만 캡처
|
|
19
|
+
/vibe.clone <url> --pc-only # 데스크탑(1440×900)만 캡처
|
|
20
|
+
/vibe.clone <url> --name=stripe-clone # 기능 이름 지정 (기본: 호스트명 kebab-case)
|
|
21
|
+
/vibe.clone <url1> <url2> <url3> # 다중 페이지 클론 (같은 사이트의 여러 경로)
|
|
22
|
+
/vibe.clone <url> --ignore-robots # robots.txt 무시 (사이트 소유자 허가 있을 때만)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Argument Routing
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Step 1) 인자 수집
|
|
29
|
+
urls = http(s):// 로 시작하는 모든 인자
|
|
30
|
+
feature = --name=<value> | URL host → kebab-case
|
|
31
|
+
scope = --mo-only | --pc-only | (기본: both)
|
|
32
|
+
ignoreRobots = --ignore-robots 플래그 유무
|
|
33
|
+
|
|
34
|
+
Step 2) 인자 검증
|
|
35
|
+
urls.length === 0 → 사용자에게 URL 입력 요청, 중단
|
|
36
|
+
! /^https?:\/\//.test(url) → "유효한 URL이 아닙니다" 에러, 중단
|
|
37
|
+
|
|
38
|
+
Step 3) 스킬 진입
|
|
39
|
+
→ clone 스킬 Phase 0부터 순차 실행
|
|
40
|
+
→ URL 다중 입력 시 각 URL마다 별도 feature 디렉토리 (URL path 기반 suffix)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Execution Plan
|
|
44
|
+
|
|
45
|
+
`clone` 스킬을 로드한 뒤 다음을 순차 실행한다. **Phase 단계 건너뛰기 금지**.
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
Phase 0: Setup
|
|
49
|
+
- .vibe/config.json + package.json → 스택 감지
|
|
50
|
+
- feature 이름 결정, 디렉토리 생성
|
|
51
|
+
|
|
52
|
+
Phase 1: Capture (병렬 — scope에 따라 MO/PC 동시)
|
|
53
|
+
- node {{VIBE_PATH}}/hooks/scripts/clone-extract.js capture <url> \
|
|
54
|
+
--out=/tmp/{feature}/{bp}/ --viewport={WxH} --bp={mo|pc}
|
|
55
|
+
- 출력: rendered.html, computed.json, screenshot.png, asset-map.json, assets/
|
|
56
|
+
|
|
57
|
+
Phase 2: Refine (BP마다 독립)
|
|
58
|
+
- node {{VIBE_PATH}}/hooks/scripts/clone-refine.js \
|
|
59
|
+
/tmp/{feature}/{bp}/rendered.html /tmp/{feature}/{bp}/computed.json \
|
|
60
|
+
--out=/tmp/{feature}/{bp}/sections.json --bp={mo|pc}
|
|
61
|
+
|
|
62
|
+
Phase 3: Scaffold (BP 순차 — MO 완료 후 PC)
|
|
63
|
+
- Step A: node {{VIBE_PATH}}/hooks/scripts/clone-to-scss.js \
|
|
64
|
+
/tmp/{feature}/{bp}/sections.json \
|
|
65
|
+
--out=./styles/{feature}/ --feature={feature}
|
|
66
|
+
- Claude: 섹션별로 HTML/컴포넌트 작성 (스택별 .tsx/.vue/.svelte/.html)
|
|
67
|
+
- Step B: node {{VIBE_PATH}}/hooks/scripts/clone-validate.js \
|
|
68
|
+
./styles/{feature}/ /tmp/{feature}/{bp}/sections.json --section={Name}
|
|
69
|
+
- 섹션마다 PASS 받고 다음 섹션 진행
|
|
70
|
+
|
|
71
|
+
Phase 4: Compile Gate (clone SKILL.md 규칙)
|
|
72
|
+
Phase 5: Pixel Verification (P1=0까지 루프 — clone SKILL.md 규칙)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Prerequisites
|
|
76
|
+
|
|
77
|
+
- **puppeteer**: optional peer dependency. 미설치 시 Phase 1에서 `npm install puppeteer` 안내 후 중단
|
|
78
|
+
- **Chromium**: puppeteer 자동 다운로드 (`npx puppeteer browsers install chrome`)
|
|
79
|
+
- **dev 서버**: Phase 4-5에서 `npm run dev` 호출. 스크립트가 미정의면 사용자에게 명시
|
|
80
|
+
- **robots.txt 준수**: 기본 차단. `--ignore-robots` 는 사이트 소유자/CTF/학습 명시일 때만
|
|
81
|
+
|
|
82
|
+
## Output Locations
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
/tmp/{feature}/ # 작업 디렉토리 (산출물 원본)
|
|
86
|
+
├── mo/, pc/ # rendered.html, computed.json, screenshot.png, sections.json, assets/
|
|
87
|
+
└── project-tokens.json # 기존 프로젝트 토큰 인덱스
|
|
88
|
+
|
|
89
|
+
./components/{feature}/ # Claude가 작성한 컴포넌트 (.tsx/.vue/.svelte/.html)
|
|
90
|
+
./styles/{feature}/ # clone-to-scss.js가 생성한 SCSS 파일
|
|
91
|
+
├── _tokens.scss # CSS 변수
|
|
92
|
+
├── _base.scss # @font-face
|
|
93
|
+
├── _shared.scss # 유틸
|
|
94
|
+
├── sections/_<name>.scss # 섹션별 partial
|
|
95
|
+
├── index.scss # 마스터 orchestrator
|
|
96
|
+
└── class-plan.json # 노드 id → BEM 클래스
|
|
97
|
+
./public/images/{feature}/ # 다운로드된 이미지/폰트
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Legal Notes
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
이 커맨드는 다음 용도에만 사용:
|
|
104
|
+
✅ 클론 코딩 학습 (마크업/레이아웃 연구)
|
|
105
|
+
✅ 본인 소유 사이트 재구축
|
|
106
|
+
✅ 명시적 허가 받은 리디자인
|
|
107
|
+
|
|
108
|
+
금지:
|
|
109
|
+
❌ 저작권 콘텐츠(텍스트/이미지/로고) 무단 재게시
|
|
110
|
+
❌ 피싱/브랜드 사칭 룩어라이크 사이트
|
|
111
|
+
❌ robots.txt 우회 (소유자 허가 없는 --ignore-robots)
|
|
112
|
+
|
|
113
|
+
Claude 기본 행동:
|
|
114
|
+
- 저작권 텍스트 → 플레이스홀더("[Lorem ipsum]") 교체
|
|
115
|
+
- robots.txt 차단 경로 → 명시적 --ignore-robots 없으면 거부
|
|
116
|
+
- 사용자 의도가 사칭/기만이면 즉시 거부
|
|
117
|
+
```
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: vibe.contract
|
|
2
3
|
description: API contract drift detection — extract contracts from SPEC, compare to implementation, fail on drift
|
|
3
4
|
argument-hint: "extract | check | diff [feature-name]"
|
|
5
|
+
user-invocable: true
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# /vibe.contract
|
|
@@ -28,7 +30,7 @@ A contract = any **interface shape** that external consumers (clients, other ser
|
|
|
28
30
|
|
|
29
31
|
## Process
|
|
30
32
|
|
|
31
|
-
Load skill `
|
|
33
|
+
Load skill `contract` with subcommand: `$ARGUMENTS`
|
|
32
34
|
|
|
33
35
|
**Core steps**:
|
|
34
36
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: vibe.docs
|
|
2
3
|
description: Generate project documentation — README, architecture docs, user guide, release notes, agent instructions
|
|
3
4
|
argument-hint: "readme, guide, arch, release, or agent"
|
|
5
|
+
user-invocable: true
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# /vibe.docs
|
|
@@ -28,6 +30,6 @@ Generate or update project documentation by analyzing the actual codebase.
|
|
|
28
30
|
|
|
29
31
|
---
|
|
30
32
|
|
|
31
|
-
Load skill `
|
|
33
|
+
Load skill `docs` — subcommand에 따라 해당 섹션 실행
|
|
32
34
|
|
|
33
35
|
ARGUMENTS: $ARGUMENTS
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: vibe.figma
|
|
2
3
|
description: Figma ↔ Code 양방향 라우터 — READ(Figma→Code) / WRITE(plan→Figma)
|
|
3
4
|
argument-hint: "[<figma-url>... | <plan.md>] [--new] [--create | --create-storyboard | --create-design] [--teach]"
|
|
5
|
+
user-invocable: true
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# /vibe.figma
|
|
@@ -29,7 +31,7 @@ Figma와 코드 사이의 **양방향 라우터**. 인자 조합으로 분기를
|
|
|
29
31
|
/vibe.figma --teach # 어느 branch든 design-teach를 인터랙티브로 강제
|
|
30
32
|
```
|
|
31
33
|
|
|
32
|
-
> **URL 분류는 `
|
|
34
|
+
> **URL 분류는 `figma` 스킬이 자동 처리합니다** — fileKey가 다른 URL은 스토리보드 vs 디자인으로, ROOT 노드 name의 "MO"/"PC"로 디바이스를 구분합니다. 사용자는 URL 종류를 신경 쓰지 않고 한 번에 던지면 됩니다.
|
|
33
35
|
|
|
34
36
|
## Branch Routing (필수: 첫 단계에서 결정)
|
|
35
37
|
|
|
@@ -117,13 +119,13 @@ AskUserQuestion 사용 시 절대 선택지(options) 제공 금지. 자유 텍
|
|
|
117
119
|
|
|
118
120
|
```
|
|
119
121
|
1. URL 수집 (스킬 진입 전)
|
|
120
|
-
- urlArgs.length > 0 → 그대로
|
|
121
|
-
- urlArgs.length == 0 →
|
|
122
|
+
- urlArgs.length > 0 → 그대로 figma 스킬에 전달 (인터랙티브 질문 생략)
|
|
123
|
+
- urlArgs.length == 0 → figma 스킬이 인터랙티브로 줄바꿈 입력 받음
|
|
122
124
|
⚠ URL 분류(storyboard vs design, MO vs PC)는 스킬이 자동 처리 — router는 개입하지 않음
|
|
123
125
|
· fileKey 다름 → storyboard vs design
|
|
124
126
|
· ROOT 노드 name에 "MO"/"PC" → 디바이스 구분
|
|
125
127
|
|
|
126
|
-
2. Load skill `
|
|
128
|
+
2. Load skill `figma` — Phase 0 Setup
|
|
127
129
|
→ 스택 감지, 디렉토리, 피처명, component-index.json, project-tokens.json
|
|
128
130
|
|
|
129
131
|
3. Design context 로드 (non-interactive 기본)
|
|
@@ -142,7 +144,7 @@ AskUserQuestion 사용 시 절대 선택지(options) 제공 금지. 자유 텍
|
|
|
142
144
|
### Phase 1 — Storyboard 분석 (선택)
|
|
143
145
|
|
|
144
146
|
```
|
|
145
|
-
Load skill `
|
|
147
|
+
Load skill `figma` — Phase 1 Storyboard
|
|
146
148
|
|
|
147
149
|
Phase 0에서 수집한 URL 중 "storyboard"로 자동 분류된 항목이 있으면 분석.
|
|
148
150
|
없으면 이 Phase는 자동 SKIP (스킬 내부 처리).
|
|
@@ -154,8 +156,8 @@ Load skill `vibe-figma` — Phase 1 Storyboard
|
|
|
154
156
|
### Phase 2 — 재료 확보
|
|
155
157
|
|
|
156
158
|
```
|
|
157
|
-
Load skill `
|
|
158
|
-
Load skill `
|
|
159
|
+
Load skill `figma-extract`
|
|
160
|
+
Load skill `figma` — Phase 2 (코디네이터: MO/PC 병렬 워커)
|
|
159
161
|
|
|
160
162
|
Phase 0에서 수집한 URL 중 "design"으로 자동 분류된 항목 (MO/PC)을 사용.
|
|
161
163
|
→ tree.json + bg/ + content/ + sections/ (검증용)
|
|
@@ -169,7 +171,7 @@ Load skill `vibe-figma` — Phase 2 (코디네이터: MO/PC 병렬 워커)
|
|
|
169
171
|
### Phase 3 — 데이터 정제
|
|
170
172
|
|
|
171
173
|
```
|
|
172
|
-
Load skill `
|
|
174
|
+
Load skill `figma` — Phase 3
|
|
173
175
|
⛔ figma-refine.js 강제 (자체 정제 스크립트 금지)
|
|
174
176
|
→ /tmp/{feature}/{bp}-main/sections.json
|
|
175
177
|
```
|
|
@@ -177,8 +179,8 @@ Load skill `vibe-figma` — Phase 3
|
|
|
177
179
|
### Phase 4 — BP별 스태틱 구현 (컨벤션 준수)
|
|
178
180
|
|
|
179
181
|
```
|
|
180
|
-
Load skill `
|
|
181
|
-
Load skill `
|
|
182
|
+
Load skill `figma-convert`
|
|
183
|
+
Load skill `figma` — Phase 4
|
|
182
184
|
|
|
183
185
|
재사용 매칭 (BLOCKING):
|
|
184
186
|
① component-index.json 매칭 → import (새로 만들지 않음)
|
|
@@ -195,14 +197,14 @@ Load skill `design-normalize`
|
|
|
195
197
|
### Phase 5 — 컴파일 게이트
|
|
196
198
|
|
|
197
199
|
```
|
|
198
|
-
Load skill `
|
|
200
|
+
Load skill `figma` — Phase 5
|
|
199
201
|
→ tsc/build/dev 서버. P1=0까지 루프. Stuck → 사용자 질문.
|
|
200
202
|
```
|
|
201
203
|
|
|
202
204
|
### Phase 6 — 시각 검증 + 품질 점검 (MANDATORY)
|
|
203
205
|
|
|
204
206
|
```
|
|
205
|
-
Load skill `
|
|
207
|
+
Load skill `figma` — Phase 6 (시각 검증 루프, P1=0까지)
|
|
206
208
|
|
|
207
209
|
Raw-vs-computed 재조정:
|
|
208
210
|
- tree.json 각 노드의 `raw` 필드(itemSpacing, padding*, fontSize, lineHeightPx,
|
|
@@ -233,7 +235,7 @@ Load skill `design-audit`
|
|
|
233
235
|
```
|
|
234
236
|
1. URL 수집 — Branch 1 Phase 0와 동일 (urlArgs 있으면 전달, 없으면 인터랙티브)
|
|
235
237
|
|
|
236
|
-
2. Load skill `
|
|
238
|
+
2. Load skill `figma` — Phase 0 Setup
|
|
237
239
|
→ 스택만 감지. 디렉토리 생성.
|
|
238
240
|
⛔ component-index.json 인덱싱 SKIP
|
|
239
241
|
⛔ project-tokens.json 스캔 SKIP
|
|
@@ -243,15 +245,15 @@ Load skill `design-audit`
|
|
|
243
245
|
### Phase 1 — Storyboard 분석 (선택)
|
|
244
246
|
|
|
245
247
|
```
|
|
246
|
-
Load skill `
|
|
248
|
+
Load skill `figma` — Phase 1
|
|
247
249
|
→ Branch 1 Phase 1과 동일 (storyboard URL이 있으면 분석, 없으면 SKIP)
|
|
248
250
|
```
|
|
249
251
|
|
|
250
252
|
### Phase 2 — 재료 확보
|
|
251
253
|
|
|
252
254
|
```
|
|
253
|
-
Load skill `
|
|
254
|
-
Load skill `
|
|
255
|
+
Load skill `figma-extract`
|
|
256
|
+
Load skill `figma` — Phase 2
|
|
255
257
|
→ Branch 1 Phase 2와 동일 (design URL로 추출)
|
|
256
258
|
|
|
257
259
|
🚦 Audit gate: Branch 1과 동일하게 `auditSummary.p1 > 0` 이면 Phase 3 진입 금지.
|
|
@@ -260,14 +262,14 @@ Load skill `vibe-figma` — Phase 2
|
|
|
260
262
|
### Phase 3 — 데이터 정제
|
|
261
263
|
|
|
262
264
|
```
|
|
263
|
-
Load skill `
|
|
265
|
+
Load skill `figma` — Phase 3 (figma-refine.js 강제)
|
|
264
266
|
```
|
|
265
267
|
|
|
266
268
|
### Phase 4 — BP별 스태틱 구현 (Standalone 모드)
|
|
267
269
|
|
|
268
270
|
```
|
|
269
|
-
Load skill `
|
|
270
|
-
Load skill `
|
|
271
|
+
Load skill `figma-convert`
|
|
272
|
+
Load skill `figma` — Phase 4
|
|
271
273
|
|
|
272
274
|
⛔ 재사용 매칭 SKIP — 새 컴포넌트 자유 생성
|
|
273
275
|
✅ 새 토큰 자유 생성 (피처 스코프 네이밍: $feature-color-xxx)
|
|
@@ -279,13 +281,13 @@ Load skill `vibe-figma` — Phase 4
|
|
|
279
281
|
### Phase 5 — 컴파일 게이트
|
|
280
282
|
|
|
281
283
|
```
|
|
282
|
-
Load skill `
|
|
284
|
+
Load skill `figma` — Phase 5
|
|
283
285
|
```
|
|
284
286
|
|
|
285
287
|
### Phase 6 — 시각 검증 + a11y (MANDATORY)
|
|
286
288
|
|
|
287
289
|
```
|
|
288
|
-
Load skill `
|
|
290
|
+
Load skill `figma` — Phase 6 (시각 검증 루프, P1=0까지)
|
|
289
291
|
|
|
290
292
|
Raw-vs-computed 재조정: Branch 1과 동일 — tree.json `raw` ↔ getComputedStyle 비교.
|
|
291
293
|
|
|
@@ -309,7 +311,7 @@ Load skill `design-audit`
|
|
|
309
311
|
|
|
310
312
|
**출력**: 지정된 Figma 파일 내 새 페이지/프레임/섹션
|
|
311
313
|
|
|
312
|
-
> **Phase 명명 주의**: Branch 3은 `
|
|
314
|
+
> **Phase 명명 주의**: Branch 3은 `figma` 스킬의 Phase 0~6과 충돌을 피하기 위해 **Step A~F**로 표기한다.
|
|
313
315
|
> **2단계 생성 원칙**: `createMode == full`이면 본 디자인 직진 금지. 반드시 **와이어프레임(Step D) → 사용자 검토 → 본 디자인(Step E)** 순서.
|
|
314
316
|
|
|
315
317
|
### createMode별 실행 매트릭스
|
|
@@ -595,6 +597,6 @@ Load skill `figma:figma-generate-design` — Step 3+: Assemble Sections (디자
|
|
|
595
597
|
```
|
|
596
598
|
❌ Branch 1 도중 figma:figma-use / figma:figma-generate-design 호출 금지 (READ 모드)
|
|
597
599
|
❌ Branch 2 도중 design-normalize 호출 금지 (독립 모드)
|
|
598
|
-
❌ Branch 3 도중
|
|
600
|
+
❌ Branch 3 도중 figma-extract / figma-convert / figma-refine.js 호출 금지 (WRITE 모드)
|
|
599
601
|
❌ Branch 결정 후 다른 Branch의 Phase로 점프 금지
|
|
600
602
|
```
|