$npx -y skills add kwakseongjae/oh-my-design --skill omd-init프로젝트 루트에 DESIGN.md를 부트스트랩 — 실제 기업 레퍼런스 중 컨텍스트 매칭으로 추천하고 선택된 레퍼런스의 톤&매너를 보존한 variation을 생성. DESIGN.md 부재 상태에서의 UI 작업 또는 '디자인 시스템 세팅', 'set up our design system', 「デザインシステムを作って」, 「建立設計系統」류의 요청에 트리거. CLAUDE.md / AGENTS.md / Cursor rule shim도 함께 설치.
| 1 | <!-- omd:installed-skill — managed by `omd install-skills`. Do not edit; rerun the command to refresh. --> |
| 2 | |
| 3 | |
| 4 | # omd:init — DESIGN.md Bootstrap |
| 5 | |
| 6 | 프로젝트에 DESIGN.md + AI 코딩 에이전트용 shim 3종을 한 번에 세팅. 레퍼런스 톤&매너는 **preserve**하고, 사용자 프로젝트 맥락은 controlled-vocabulary delta_set으로만 반영. |
| 7 | |
| 8 | **런타임 CLI subcommand 호출 없음** — Read/Write/Bash(파일 작업만) 툴로 직접 처리한다. CLI의 사용자 표면은 bare `npx oh-my-design-cli`(대화형 installer)와 `npx oh-my-design-cli doctor`(설치 진단)이며, `omd init recommend` 같은 init subcommand는 제공하지 않는다. 이 skill은 설치 뒤 host agent 안에서 self-contained하게 동작한다. |
| 9 | |
| 10 | ## 전체 플로우 |
| 11 | |
| 12 | ``` |
| 13 | Phase 1: 사용자 맥락 파악 (1-2 질문) |
| 14 | Phase 2: 레퍼런스 추천 (fingerprint 기반 in-head 점수) |
| 15 | Phase 3: 사용자가 1개 선택 |
| 16 | Phase 3.5: 적용 형태 확인 (루트 부트스트랩 / 참고용 저장 / 기존 파일 교체 여부) |
| 17 | Phase 4: 레퍼런스 DESIGN.md Read + delta_set 추출 |
| 18 | Phase 4.5: Philosophy Layer 입력 수집 |
| 19 | Phase 5: Hybrid variation으로 DESIGN.md 작성 |
| 20 | Phase 6: Shim 3종 설치 (omd:sync skill 위임) |
| 21 | Phase 7: 요약 출력 |
| 22 | ``` |
| 23 | |
| 24 | ## Phase 1 — 맥락 파악 |
| 25 | |
| 26 | 이미 충분한 description이 있으면 skip. 부족하면 **최대 2개** 질문: |
| 27 | |
| 28 | 1. 프로젝트 유형/도메인 (SaaS / 랜딩 / 대시보드 / 이커머스 / 커뮤니티 등) |
| 29 | 2. 분위기 키워드 (warm, minimal, premium, playful, dense, airy 등) |
| 30 | |
| 31 | 한 번에 하나씩, 또는 통합해서 한 번에. 질문 쌓지 말 것. |
| 32 | |
| 33 | ## Phase 2 — 레퍼런스 추천 (file-based, no CLI) |
| 34 | |
| 35 | ### 2.1 카탈로그 로드 |
| 36 | |
| 37 | 다음 파일을 Read 툴로 전체 로드 (있는 순서대로 fallback): |
| 38 | |
| 39 | 1. `.codex/data/reference-fingerprints.json` (Codex 설치 카탈로그) |
| 40 | 2. `.claude/data/reference-fingerprints.json` (Claude Code / Cursor 설치 카탈로그) |
| 41 | 3. `.opencode/data/reference-fingerprints.json` (OpenCode 설치 카탈로그) |
| 42 | 4. `node_modules/oh-my-design-cli/data/reference-fingerprints.json` (npm 설치 직접 경로) |
| 43 | 5. `data/reference-fingerprints.json` (개발 환경) |
| 44 | |
| 45 | 스키마: `{ count, items: [{ id, primary_color_hex, category, visual_theme, voice_fingerprint, tone_keywords, antipatterns, signature_motion, has_personas, category_raw }] }`. |
| 46 | |
| 47 | 추가 보조 파일 (있으면 같이 로드): |
| 48 | - 위에서 실제 선택된 data dir의 `vocabulary.json` — controlled vocab axes/keywords |
| 49 | - 같은 data dir의 `reference-tags.md` — human-readable keyword matrix |
| 50 | |
| 51 | 채널을 알 수 있으면 해당 채널 data dir을 우선 사용하되, 파일이 없으면 위 1→5 순서로 fallback한다. 서로 다른 설치 채널의 fingerprint와 보조 파일을 섞지 말 것. |
| 52 | |
| 53 | ### 2.2 task 분석 (silent, in-head) |
| 54 | |
| 55 | 사용자의 description에서 다음 추출: |
| 56 | - **명시 brand hint**: 한글/영문 brand 이름 직접 언급 (예: "토스 같은" → `toss`, "뱅크샐러드 톤" → `banksalad`, "Linear-clone" → `linear.app`). brand 이름과 id 매핑은 일반 지식 사용 + `items[].id` 또는 `items[].category_raw`에서 cross-check. |
| 57 | - **vocab 키워드**: warm / minimal / dense / playful / formal / editorial / clinical 등 (vocabulary.json 참조) |
| 58 | - **카테고리 추측**: Consumer Tech / Fintech / Productivity / E-commerce / Design Tools / Developer Tools / AI & LLM / Mobility / HR / Real Estate / Healthcare / Government |
| 59 | |
| 60 | ### 2.3 점수 계산 (in-head, deterministic) |
| 61 | |
| 62 | 각 item에 대해: |
| 63 | - brand hint match → **+5점** |
| 64 | - `tone_keywords` ∩ task vocab 키워드 → 매칭당 **+1점** |
| 65 | - `category` 일치 → **+1점** |
| 66 | |
| 67 | Top 5 정렬. 모든 추천 id는 `items[].id`에 **반드시** 존재 — hallucination 금지. |
| 68 | |
| 69 | ### 2.4 사용자에게 제시 |
| 70 | |
| 71 | prose로: |
| 72 | |
| 73 | ``` |
| 74 | "<task 핵심 한 줄>"을 보니 <top1.id>가 가장 잘 맞을 것 같아요 — <visual_theme 핵심 한 줄 + 매칭 키워드 1-2개>. |
| 75 | |
| 76 | 이대로 가시려면 go (또는 <top1.id>). |
| 77 | 다른 후보: <top2.id> (한 줄 이유) · <top3.id> (...) · <top4.id> (...) · <top5.id> (...) |
| 78 | 본인이 아는 다른 reference 있으면 id로 알려주세요 (예: vercel) — 카탈로그에 없으면 알려드립니다. |
| 79 | ``` |
| 80 | |
| 81 | vocab axis conflict 있으면 (예: formal ↔ playful) 먼저 알리고 우선시할 축을 묻기. |
| 82 | |
| 83 | **Claude Code 채널이면 위 prose 대신 AskUserQuestion 툴 1개로 제시** (사용자가 화살표로 고르는 selectable UI — #21). question 1개에 top-5 후보 id 5개를 option으로: |
| 84 | |
| 85 | ``` |
| 86 | question: ""<task 핵심 한 줄>"에 맞는 레퍼런스를 골라주세요" |
| 87 | header: "Reference" |
| 88 | options: top1~top5 각각 → label = <id>, description = fingerprint 기반 1줄 (<category> · <tone_keywords 1-2개>) |
| 89 | - top1에는 label에 "(추천)" 표시 |
| 90 | ``` |
| 91 | |
| 92 | (AskUserQuestion이 자동 "Other"를 추가하므로 카탈로그의 다른 id를 자유 입력으로 답하는 것도 그대로 가능.) Codex / OpenCode 등 AskUserQuestion이 없는 채널은 위 prose 포맷 유지. 점수 계산·채택 로직(Phase 3)은 어느 쪽이든 동일. |
| 93 | |
| 94 | ## Phase 3 — 사용자 선택 |
| 95 | |
| 96 | - `go` 또는 top-5 안 id → 그 id 채택 |
| 97 | - top-5 밖이지만 카탈로그 안 id → 그대로 채택 |
| 98 | - 카탈로그에 없는 id → "해당 id는 카탈로그에 없어요. top-5 중에서 골라주세요." |
| 99 | - "중단" → 종료 |
| 100 | |
| 101 | ## Phase 3.5 — 적용 형태 확인 |
| 102 | |
| 103 | 레퍼런스 확정 직후, 어떻게 적용할지 묻는다. 먼저 프로젝트 루트에 `DESIGN.md`가 |
| 104 | 이미 있는지 확인하고, **Claude Code 채널이면 AskUserQuestion 1개** (타 채널은 |
| 105 | prose)로: |
| 106 | |
| 107 | - 루트에 DESIGN.md **없음**: |
| 108 | 1. **프로젝트 디자인 시스템으로 설정 (추천)** — `<id>` 톤을 보존한 변형본을 |
| 109 | 루트 `DESIGN.md`로 부트스트랩 (Phase 4~7 전체 진행) |
| 110 | 2. **참고용으로만 저장** — 루트 변경 없음. `<id>` 원본을 |
| 111 | `design-references/<id>.md`로 복사하고 종료. "나중에 프로젝트에 적용하려면 |
| 112 | 다시 omd:init을 불러주세요" 안내. (변형 생성·셤 설치 안 함) |
| 113 | - 루트에 DESIGN.md **이미 있음** (option description에 그 파일의 §0/§1 요약 |
| 114 | 한 줄을 보여줄 것): |
| 115 | 1. **교체 (추천)** — 기존 파일은 `DESIGN_DEPRECATED.md`로 보존됨을 명시 |
| 116 | 2. **참고용으로만 저장** — 위와 동일 |
| 117 | 3. **중단** |
| 118 | |
| 119 | ②(참고용) 선택 시: Phase 4.1로 원문만 확보해 `design-references/<id>.md`에 |
| 120 | attribution 1줄(소스 URL + 날짜)과 함께 저장 → Phase 7 요약만 출력하고 종료. |
| 121 | Phase 4.2~6은 건너뛴다. |
| 122 | |
| 123 | ## Phase 4 — 레퍼런스 DESIGN.md 로드 |
| 124 | |
| 125 | ### 4.1 경로 결정 |
| 126 | |
| 127 | 선택된 id를 `<id>`로 하고, 다음 순서로 Read (먼저 존재하는 것 사용): |
| 128 | |
| 129 | <!-- omd:catalog-resolution-order — omd-harness/omd-reference-capture SKILL.md + agents/omd-master.md 와 동일 순서 강제. drift guard: test/u |