oh-my-design-cli 1.2.0 → 1.3.8

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.
@@ -5,157 +5,257 @@ description: "프로젝트 루트에 DESIGN.md를 부트스트랩 — 실제 기
5
5
 
6
6
  # omd:init — DESIGN.md Bootstrap
7
7
 
8
- 프로젝트에 DESIGN.md + 4개 AI 코딩 에이전트용 shim 한 번에 세팅한다. 레퍼런스 톤&매너는 **preserve**하고, 사용자 프로젝트 맥락은 controlled-vocabulary delta_set으로만 반영.
8
+ 프로젝트에 DESIGN.md + AI 코딩 에이전트용 shim 3종을 한 번에 세팅. 레퍼런스 톤&매너는 **preserve**하고, 사용자 프로젝트 맥락은 controlled-vocabulary delta_set으로만 반영.
9
+
10
+ **CLI 호출 없음** — Read/Write/Bash(파일 작업만) 툴로 직접 처리. (이전 버전은 `omd init recommend` 등 CLI subcommand를 호출했으나 현재 CLI binary는 `install-skills`만 노출. 이 skill은 self-contained하게 동작.)
9
11
 
10
12
  ## 전체 플로우
11
13
 
12
14
  ```
13
15
  Phase 1: 사용자 맥락 파악 (1-2 질문)
14
- Phase 2: 레퍼런스 추천 (omd init recommend)
16
+ Phase 2: 레퍼런스 추천 (fingerprint 기반 in-head 점수)
15
17
  Phase 3: 사용자가 1개 선택
16
- Phase 4: omd init prepare — context + delta_set 준비
17
- Phase 5: Hybrid variation으로 DESIGN.md 생성 (이 스킬의 핵심)
18
- Phase 6: omd sync --force로 shim 3종 설치
18
+ Phase 4: 레퍼런스 DESIGN.md Read + delta_set 추출
19
+ Phase 4.5: Philosophy Layer 입력 수집
20
+ Phase 5: Hybrid variation으로 DESIGN.md 작성
21
+ Phase 6: Shim 3종 설치 (omd:sync skill 위임)
19
22
  Phase 7: 요약 출력
20
23
  ```
21
24
 
22
25
  ## Phase 1 — 맥락 파악
23
26
 
24
- 사용자가 이미 충분한 description 줬으면 skip. 부족하면 **최대 2개** 질문:
27
+ 이미 충분한 description 있으면 skip. 부족하면 **최대 2개** 질문:
25
28
 
26
29
  1. 프로젝트 유형/도메인 (SaaS / 랜딩 / 대시보드 / 이커머스 / 커뮤니티 등)
27
- 2. 분위기 키워드 (warm, minimal, premium, playful, dense, airy 등) — controlled vocab 참조 유도
30
+ 2. 분위기 키워드 (warm, minimal, premium, playful, dense, airy 등)
28
31
 
29
- 여러 질문을 한꺼번에 쌓지 말 것. 한 번에 하나씩, 또는 통합해서 한 번에.
32
+ 한 번에 하나씩, 또는 통합해서 한 번에. 질문 쌓지 말 것.
30
33
 
31
- ## Phase 2 — 레퍼런스 추천
34
+ ## Phase 2 — 레퍼런스 추천 (file-based, no CLI)
32
35
 
33
- Bash:
34
- ```bash
35
- omd init recommend "<사용자 description 전체>" --json
36
- ```
36
+ ### 2.1 카탈로그 로드
37
+
38
+ 다음 파일을 Read 툴로 전체 로드 (있는 순서대로 fallback):
39
+
40
+ 1. `.claude/data/reference-fingerprints.json` (사용자 프로젝트에 설치된 카탈로그 — 표준 경로)
41
+ 2. `node_modules/oh-my-design-cli/data/reference-fingerprints.json` (npm 설치 직접 경로)
42
+ 3. `data/reference-fingerprints.json` (개발 환경)
43
+
44
+ 스키마: `{ count, items: [{ id, primary_color_hex, category, visual_theme, voice_fingerprint, tone_keywords, antipatterns, signature_motion, has_personas, category_raw }] }`.
45
+
46
+ 추가 보조 파일 (있으면 같이 로드):
47
+ - `.claude/data/vocabulary.json` — controlled vocab axes/keywords
48
+ - `.claude/data/reference-tags.md` — human-readable keyword matrix
49
+
50
+ ### 2.2 task 분석 (silent, in-head)
51
+
52
+ 사용자의 description에서 다음 추출:
53
+ - **명시 brand hint**: 한글/영문 brand 이름 직접 언급 (예: "토스 같은" → `toss`, "뱅크샐러드 톤" → `banksalad`, "Linear-clone" → `linear.app`). brand 이름과 id 매핑은 일반 지식 사용 + `items[].id` 또는 `items[].category_raw`에서 cross-check.
54
+ - **vocab 키워드**: warm / minimal / dense / playful / formal / editorial / clinical 등 (vocabulary.json 참조)
55
+ - **카테고리 추측**: Consumer Tech / Fintech / Productivity / E-commerce / Design Tools / Developer Tools / AI & LLM / Mobility / HR / Real Estate / Healthcare / Government
37
56
 
38
- JSON 출력에서:
39
- - `recommendations` — top 5 references (id, category, score, matchedKeywords)
40
- - `delta_set` — description에서 추출된 controlled vocab 기반 축 이동
41
- - `delta_set.warnings` — conflict (e.g. "formal ↔ playful")
42
- - `delta_set.matchedKeywords` — 실제 매칭된 vocabulary 키워드
57
+ ### 2.3 점수 계산 (in-head, deterministic)
43
58
 
44
- 사용자에게 제시할 때:
45
- - 5개 레퍼런스를 번호 + 한 줄 설명으로 나열 (description에 매칭된 keyword 1-2개 강조)
46
- - warnings 있으면 먼저 알린다: "formal과 playful이 충돌해요. 'primarily playful'처럼 한쪽을 우선시하면 변형에 더 잘 반영됩니다."
59
+ item에 대해:
60
+ - brand hint match **+5점**
61
+ - `tone_keywords` task vocab 키워드 매칭당 **+1점**
62
+ - `category` 일치 → **+1점**
47
63
 
48
- ## Phase 3레퍼런스 선택
64
+ Top 5 정렬. 모든 추천 id는 `items[].id`에 **반드시** 존재 hallucination 금지.
49
65
 
50
- 사용자가 레퍼런스를 고르면 Phase 4로. `omd init recommend`의 출력에 없는 레퍼런스를 요청하면 그대로 사용 (e.g. "stripe로 해줘").
66
+ ### 2.4 사용자에게 제시
51
67
 
52
- ## Phase 4 — Prepare
68
+ prose로:
53
69
 
54
- ```bash
55
- omd init prepare --ref <id> --description "<원본 description>" --json
56
70
  ```
71
+ "<task 핵심 한 줄>"을 보니 <top1.id>가 가장 잘 맞을 것 같아요 — <visual_theme 핵심 한 줄 + 매칭 키워드 1-2개>.
57
72
 
58
- 이게 하는 일:
59
- - `web/references/<id>/DESIGN.md` 경로 확정 (JSON에 `reference_md` 필드로 전체 내용 포함)
60
- - 기존 `DESIGN.md`가 있으면 `DESIGN_DEPRECATED.md`로 rename (메타 헤더 자동 삽입)
61
- - `.omd/init-context.json` 작성 (`delta_set`, `description` 담김)
73
+ 이대로 가시려면 go (또는 <top1.id>).
74
+ 다른 후보: <top2.id> (한 이유) · <top3.id> (...) · <top4.id> (...) · <top5.id> (...)
75
+ 본인이 아는 다른 reference 있으면 id로 알려주세요 (예: vercel) 카탈로그에 없으면 알려드립니다.
76
+ ```
77
+
78
+ vocab axis conflict 있으면 (예: formal ↔ playful) 먼저 알리고 우선시할 축을 묻기.
79
+
80
+ ## Phase 3 — 사용자 선택
81
+
82
+ - `go` 또는 top-5 안 id → 그 id 채택
83
+ - top-5 밖이지만 카탈로그 안 id → 그대로 채택
84
+ - 카탈로그에 없는 id → "해당 id는 카탈로그에 없어요. top-5 중에서 골라주세요."
85
+ - "중단" → 종료
86
+
87
+ ## Phase 4 — 레퍼런스 DESIGN.md 로드
88
+
89
+ ### 4.1 경로 결정
90
+
91
+ 선택된 id를 `<id>`로 하고, 다음 순서로 Read:
92
+
93
+ 1. `.claude/data/references/<id>/DESIGN.md`
94
+ 2. `node_modules/oh-my-design-cli/web/references/<id>/DESIGN.md`
95
+ 3. `web/references/<id>/DESIGN.md` (개발 환경)
96
+
97
+ 전체 내용을 `reference_md` 변수로 보관 (Phase 5의 입력).
98
+
99
+ ### 4.2 기존 DESIGN.md 처리
100
+
101
+ 프로젝트 루트에 이미 `DESIGN.md`가 있으면:
102
+ 1. Read로 내용 확인
103
+ 2. Bash로 `mv DESIGN.md DESIGN_DEPRECATED.md`
104
+ 3. `DESIGN_DEPRECATED.md` 최상단에 다음 헤더 prepend (Edit 툴):
105
+ ```html
106
+ <!-- omd:deprecated
107
+ replaced_at: <ISO-8601 today>
108
+ replaced_by: ./DESIGN.md (bootstrapped from <id>)
109
+ reason: omd:init bootstrap
110
+ -->
111
+ ```
112
+
113
+ ### 4.3 init-context 기록
114
+
115
+ `.omd/init-context.json` 작성 (없으면 mkdir):
116
+ ```json
117
+ {
118
+ "reference_id": "<id>",
119
+ "description": "<원본 사용자 description>",
120
+ "mode": "clone | inspired",
121
+ "delta_set": {
122
+ "axes": { /* description에서 추출한 vocab axis ↦ shift 값 */ },
123
+ "voiceHints": [ /* 추출된 voice 힌트 */ ],
124
+ "matchedKeywords": [ /* 매칭된 vocab 키워드 */ ],
125
+ "warnings": [ /* axis conflict 등 */ ]
126
+ },
127
+ "bootstrapped_at": "<ISO-8601>"
128
+ }
129
+ ```
130
+
131
+ `mode` 값 결정:
132
+ - omd:reference-capture가 먼저 돌았으면 그 결과 사용 (`.omd/init-context.json` 기존값)
133
+ - 아직 정해지지 않았으면 사용자에게 묻기 (omd:reference-capture Phase 0과 동일한 prompt). 라이브 캡쳐 없이 omd:init만 단독으로 도는 경우는 사실상 inspired 외엔 의미 없으므로 기본 `inspired`.
62
134
 
63
- JSON 출력의 `reference_md`는 variation의 input이다. Read.
135
+ `axes` 표준 키: `color.hue_deg` (도), `color.saturation_pct` (%p), `color.lightness_pct` (%p), `radius.delta_px` (px), `density.shift` (-2 ~ +2), `tracking.shift` (-0.01em ~ +0.01em).
64
136
 
65
137
  ## Phase 4.5 — Philosophy Layer 입력 수집 (CRITICAL)
66
138
 
67
- §11 (Brand Narrative), §12 (Principles), §13 (Personas)는 **레퍼런스의 검증된 historical facts에 기반**한다 — 창립년도, founder 이름, verbatim 인용, 공식 tagline 등. 이걸 단순 domain swap하면 **사용자 프로젝트에 거짓 brand claim을 ship**하는 사고가 난다.
139
+ §11 (Brand Narrative), §12 (Principles), §13 (Personas)는 레퍼런스의 검증된 historical facts에 기반. 단순 domain swap하면 거짓 brand claim을 ship하는 사고가 난다.
68
140
 
69
- 따라서 Phase 5B 진입 전에 사용자에게 다음 정보를 묻는다 (한 번에):
141
+ Phase 5B 진입 사용자에게 한 번에 묻기:
70
142
 
71
143
  ```
72
144
  DESIGN.md의 §11-13 (Brand Narrative / Principles / Personas)에는 사실 정보가 들어갑니다. 다음을 알려주시거나 "skip"이라고 답해주세요:
73
145
 
74
146
  1. 프로젝트 이름 / 창립 시점 (대략)
75
147
  2. 핵심 thesis 한 문장 (e.g. Airbnb의 "Belong Anywhere")
76
- 3. 공식 tagline 또는 거부하는 카테고리 default (e.g. "혼밥 시대의 가족 식사")
77
- 4. 타겟 사용자 segment 2-4개 (e.g. "맞벌이 부부", "Chef Partner", "재구매 가족")
148
+ 3. 공식 tagline 또는 거부하는 카테고리 default
149
+ 4. 타겟 사용자 segment 2-4개
78
150
 
79
- 답변 받으면 → Phase 5B에서 §11-13에 반영
80
- "skip" → §11-13은 [FILL IN: ...] placeholder + omd:limitation 코멘트로 처리
151
+ 답변 받으면 → §11-13에 반영
152
+ "skip" → §11-13은 [FILL IN: ...] placeholder + omd:limitation 코멘트
81
153
  ```
82
154
 
83
- 사용자가 부분 답변(예: 1만, 4만)을 주면 받은 부분만 사용하고 나머지는 skip 처리.
155
+ 부분 답변은 받은 부분만 사용, 나머지 skip.
84
156
 
85
157
  ## Phase 5 — Hybrid Variation 생성 (핵심)
86
158
 
87
- `.omd/init-context.json`의 `delta_set`과 Phase 4 JSON의 `reference_md`를 입력으로, **새 DESIGN.md 작성**한다.
159
+ `reference_md` + `.omd/init-context.json` `delta_set`을 입력으로 `DESIGN.md` 작성.
88
160
 
89
161
  ### Phase 5A — Voice Fingerprint 내부 추출 (silent)
90
162
 
91
- 출력하지 것. 작성 전, 레퍼런스 DESIGN.md에서 다음을 머릿속으로 파악:
92
- - 평균 문장 길이 밴드 (짧음/중간/긺)
163
+ 출력 금지. 작성 머릿속으로 파악:
164
+ - 평균 문장 길이 밴드
93
165
  - 어휘 register (engineering-terse / editorial-warm / clinical / playful 중)
94
- - 은유 밀도 (없음/희소/빈번)
166
+ - 은유 밀도
95
167
  - 기술 밀도 (token-heavy / prose-heavy / balanced)
96
168
  - 문단 리듬 (list-forward / paragraph-forward)
97
169
 
98
- Phase 5B에서 emit하는 모든 내러티브 문단은 이 fingerprint에 **정확히** 맞춰야 한다.
170
+ Phase 5B emit하는 모든 내러티브를 이 fingerprint에 정확히 맞춰야 한다.
99
171
 
100
172
  ### Phase 5B — 새 DESIGN.md emit
101
173
 
102
174
  **엄격 규칙 (위반 = regression)**:
103
175
 
104
- 1. **Section 구조 frozen.** 레퍼런스의 H2/H3 heading을 같은 순서로 그대로. 섹션 추가 금지. 삭제 금지. 이름 변경 금지.
176
+ 1. **Section 구조 frozen**: 레퍼런스의 H2/H3 heading을 같은 순서로 그대로. 추가/삭제/이름 변경 금지.
105
177
 
106
- 2. **Token 값은 `delta_set`가 허가한 것만 변경.** `delta_set.axes`에 없는 토큰은 레퍼런스와 **byte-for-byte 동일**하게. "개선"하지 말 것. 색상 hex는 `delta_set.axes["color.hue_deg"]` / `["color.saturation_pct"]` / `["color.lightness_pct"]` 에 따라 **HSL** 변환으로 shift ( 단위 hue rotation, % 단위 saturation/lightness 가산). 정확한 hex 계산이 필요하면 `omd init prepare --json` 의 출력에 이미 적용된 stub-shifted DESIGN.md를 활용 가능 (단 stub은 narrative를 손대지 않으므로 token-only baseline일 뿐임 — voice 작업은 직접 수행).
178
+ 2. **Token 해석 우선순위** (위에서 아래로):
179
+ 1. `assets/_reference/<id>/tokens.json` `live_overrides` 블록 — **현재 라이브 사이트의 토큰** (omd:reference-capture가 라이브 inspect로 얻은 값). 있으면 이걸 base로.
180
+ 2. `web/references/<id>/DESIGN.md` (또는 `node_modules/.../web/references/<id>/DESIGN.md`) — **DESIGN.md가 brand intent로 기록한 canonical 값**. live_overrides 없으면 이걸 base로.
181
+ 3. `delta_set.axes` — 사용자 customization. base 위에 가산.
182
+ - 색상: HSL 변환 후 `color.hue_deg` / `saturation_pct` / `lightness_pct` 적용.
183
+ - radius: `radius.delta_px`만큼 가산 (음수도 가능).
184
+ - 그 외 토큰은 손대지 말 것. "개선" 금지.
185
+ - **canonical과 live가 충돌하면** 사용자에게 한 줄로 알림 + 라이브 사용 (예: "Banksalad canonical은 `#04c584` 2px radius, 라이브는 `#13bd7e` 41px pill — 라이브 기준으로 진행합니다. canonical로 가시려면 'use canonical'이라고 알려주세요.").
186
+ - **단 brand essence (voice·principles·motion philosophy·voice samples)는 canonical 절대 권위.** live는 visual surface(토큰·컴포넌트 shape)에만 적용.
107
187
 
108
- 3. **내러티브 프로즈는 Phase 5A fingerprint에 매칭.** 도메인 예시를 프로젝트 맥락으로 교체할 때, 레퍼런스의 문장 길이/register/은유 밀도 그대로 유지. Vercel의 "Ship a deploy preview in seconds"를 "Ship a meal plan in seconds"로 바꾸는 건 OK. "Help families discover joyful dinners fast"로 바꾸는 건 voice violation.
188
+ 3. **내러티브는 Phase 5A fingerprint에 매칭**: 도메인 예시 교체 문장 길이/register/은유 밀도 그대로. 명사만 swap, 동사/형용사/framing 손대지 것.
109
189
 
110
- 4. **Domain swap은 구체 명사만.** 동사 / 형용사 / framing 건드리지 것.
190
+ 4. **새 philosophy 도입 금지**: OmD v0.1 layer, 없던 원칙 추가 금지. delta-derived 노트는 새 bullet으로 넣지 말고 기존 bullet에 자연스럽게 통합.
111
191
 
112
- 5. **새 philosophy 도입 금지.** OmD v0.1 레이어, 없던 원칙을 추가하지 말 것. **Delta-derived 노트(예: "+0.005em casual tracking")도 bullet으로 넣지 것.** 기존 bullet에 자연스럽게 통합 (e.g. "Negative tracking on headings; light positive tracking on body for casual register").
192
+ 5. **해결 불가능 delta는 top-of-file HTML comment**: `<!-- omd:unresolved: <axis> -->` 상단 추가, 해당 token은 건드리지 않음.
113
193
 
114
- 6. **해결 불가능한 delta는 top-of-file HTML comment로 표시.** `delta_set.axes`가 참조하는 token이 레퍼런스 DESIGN.md에 없으면 `<!-- omd:unresolved: <axis> -->` 상단 추가하고 해당 token은 건드리지 않는다.
194
+ 6. **Voice hints 반영**: `delta_set.voiceHints`는 Voice 섹션 내러티브에 반영하되 레퍼런스 voice 스타일 안에서만. "contractions ok" Voice 원칙 bullet에 추가.
115
195
 
116
- 7. **Voice hints 반영.** `delta_set.voiceHints`는 Voice 섹션의 내러티브 문장에 반영하되, 레퍼런스 voice의 문장 스타일 안에서만 적용. "contractions ok"를 Voice 섹션의 원칙 bullet에 한 줄 추가하는 식.
196
+ 7. **§11-13 처리 분기**:
197
+ - Phase 4.5에서 정보 제공: 그 정보로 §11/12/13 작성. verbatim 인용은 사용자가 직접 준 표현만. 레퍼런스의 시간 표현·공식 인용 모두 사용자 맥락으로 대체.
198
+ - Phase 4.5에서 skip: §11-13 본문을 `[FILL IN: <섹션 목적 한 줄>]` placeholder + 각 섹션 상단 `<!-- omd:limitation Reference §X requires project-specific facts. Replace before shipping; do not fabricate. -->`.
199
+ - §14 (States), §15 (Motion): 일반 Hybrid 적용 (구체 명사만 swap).
117
200
 
118
- 8. **§11-13 (Brand Narrative / Principles / Personas) 처리 분기.**
119
- - **Phase 4.5에서 사용자가 정보를 제공한 경우**: 그 정보로 §11/12/13 작성. 단 verbatim 인용은 사용자가 직접 준 표현만 인용 부호로 감싸고, 그 외는 일반 prose. 레퍼런스의 시간 표현("In July 2014..."), 공식 인용 등은 모두 사용자 프로젝트 맥락으로 대체.
120
- - **Phase 4.5에서 skip한 경우**: §11-13 본문을 `[FILL IN: <섹션 목적 한 줄>]` placeholder로 emit + 각 섹션 상단에 `<!-- omd:limitation Reference §X requires project-specific facts. Replace before shipping; do not fabricate. -->` 코멘트.
121
- - **§14 (States), §15 (Motion)**: 일반 Hybrid 적용 (구체 명사만 swap).
201
+ 8. **Frontmatter**:
202
+ ```yaml
203
+ ---
204
+ omd: 0.1
205
+ brand: <Project Name or "Project">
206
+ bootstrapped_from: <id>
207
+ bootstrapped_at: <ISO-8601>
208
+ ---
209
+ ```
122
210
 
123
211
  ### Phase 5C — 파일 작성
124
212
 
125
- Write 툴로 `DESIGN.md`에 emit.
213
+ Write 툴로 `DESIGN.md` emit.
126
214
 
127
215
  ## Phase 6 — Shim 설치
128
216
 
129
- ```bash
130
- omd sync --force
217
+ CLI subcommand 없음. 두 가지 옵션:
218
+
219
+ **옵션 A (권장)**: omd:sync skill 위임. 같은 conversation에서 Skill 툴로:
220
+ ```
221
+ Skill: omd:sync
222
+ args: --force
131
223
  ```
132
224
 
133
- 이게 `CLAUDE.md`, `AGENTS.md`, `.cursor/rules/omd-design.mdc`를 생성/갱신하고 `.omd/sync.lock.json`을 업데이트한다.
225
+ omd:sync skill이 `CLAUDE.md`, `AGENTS.md`, `.cursor/rules/omd-design.mdc` shim 3종을 생성/갱신하고 `.omd/sync.lock.json` 업데이트.
226
+
227
+ **옵션 B**: omd:sync skill을 호출할 수 없는 환경이면 직접 Write로 shim 작성. 템플릿은 `skills/omd-sync/SKILL.md` §"shim body" 참조. 최소한:
228
+ - `CLAUDE.md`: managed block ("<!-- omd:managed:start --> ... <!-- omd:managed:end -->") 안에 DESIGN.md 참조 + 핵심 token 요약
229
+ - `AGENTS.md`: 동일 패턴
230
+ - `.cursor/rules/omd-design.mdc`: 전체 파일 omd 전용 — frontmatter + DESIGN.md 인용
231
+
232
+ 이후 `.omd/sync.lock.json`에 각 shim의 hash 기록.
134
233
 
135
234
  ## Phase 7 — 요약 출력
136
235
 
137
236
  한 문단으로:
138
237
  - Base reference + 프로젝트 context 한 줄 요약
139
- - 적용된 주요 delta 2-3개 (e.g. "primary hex shifted warm by +12°, radius +4px")
238
+ - 적용된 주요 delta 2-3개 (e.g. "primary hue shifted warm by +12°, radius +4px")
140
239
  - 생성된 파일 목록 (DESIGN.md + shims)
141
240
  - DESIGN_DEPRECATED.md 있으면 언급
142
- - 다음 스텝: `omd:apply`로 UI 작업 시작하거나, `/omd:remember`로 선호 추가 로깅
241
+ - 다음 스텝: `omd:apply`로 UI 작업 시작 또는 `omd:harness`로 전체 surface 디자인 또는 `omd:remember`로 선호 추가 로깅
143
242
 
144
243
  예시:
145
244
  ```
146
- ✓ DESIGN.md created (based on Airbnb, warm B2C marketplace context)
147
- - primary hue shifted +12° (warmer coral)
148
- - radius +6px (softer approach)
149
- - voice hints: contractions ok, second person
245
+ ✓ DESIGN.md created (based on banksalad, 한국 핀테크 랜딩 맥락)
246
+ - primary hue 유지 (#04c584 그대로)
247
+ - radius 유지 (2px 시스템)
248
+ - voice hints: 데이터 어드바이저
150
249
 
151
250
  Shim files:
152
- ✓ CLAUDE.md
153
- ✓ AGENTS.md
251
+ ✓ CLAUDE.md (managed block)
252
+ ✓ AGENTS.md (managed block)
154
253
  ✓ .cursor/rules/omd-design.mdc
155
254
 
156
255
  Next:
157
- - Start UI work the omd:apply skill will inject DESIGN.md automatically
158
- - Use `/omd:remember <note>` anytime you want to log a design preference
256
+ - UI 작업 시작 omd:apply 자동 라우팅됨
257
+ - 전체 surface 디자인 (랜딩, 대시보드 등) omd:harness
258
+ - 디자인 선호 로깅 → /omd:remember <note>
159
259
  ```
160
260
 
161
261
  ## 금지
@@ -163,5 +263,6 @@ Next:
163
263
  - Phase 5A fingerprint를 출력하지 말 것 (내부 전용).
164
264
  - `delta_set.axes`에 없는 token을 마음대로 바꾸지 말 것.
165
265
  - 레퍼런스에 없는 section/heading을 추가하지 말 것.
166
- - `.omd/init-context.json`을 직접 편집하지 (CLI가 관리).
167
- - DESIGN.md가 이미 있는데 백업 없이 덮어쓰지 말 것 `omd init prepare`가 자동 rename하니 스킬이 별도 처리 불필요.
266
+ - `.omd/init-context.json`을 직접 편집할 schema 어기지 말 것.
267
+ - DESIGN.md가 이미 있는데 백업 없이 덮어쓰지 말 것 (Phase 4.2 rename 절차 준수).
268
+ - **존재하지 않는 CLI subcommand (`omd init recommend`, `omd init prepare`, `omd sync`)를 호출하지 말 것** — 현 CLI binary는 `install-skills`만 제공.