Install any skill in seconds. Free to start, no credit card required.
Get Started Free →DESIGN.md 변경분을 CLAUDE.md / AGENTS.md / .cursor/rules/omd-design.mdc shim 3종에 전파. 'shim 갱신', 'drift 확인', 'ship', 'publish', 「shimを更新」, 「同步 CLAUDE.md」류의 요청에 트리거. DESIGN.md가 수정됐는데 shim이 오래됐을 때 자동 감지해 제안하기도 함.
.claude/skills/kwakseongjae-omd-sync/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 11% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -23% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 58% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 20% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 38% | 0% |
<!-- omd:installed-skill — managed by omd install-skills. Do not edit; rerun the command to refresh. -->
DESIGN.md가 모든 주요 AI 코딩 에이전트(Claude Code, Codex, OpenCode, Cursor)에게 보이도록 shim 파일 3종을 관리한다. CLI 호출 없음 — Read/Write/Edit 툴로 직접 처리.
| ID | 경로 | 모드 | |---|---|---| | claude | CLAUDE.md | block (managed marker만) | | agents | AGENTS.md | block (managed marker만) | | cursor | .cursor/rules/omd-design.mdc | whole (전체 파일이 omd 전용) |
block 모드는 <!-- omd:start v=1 hash=<sha256:12> --> ~ <!-- omd:end --> 마커 안만 관리, 나머지 사용자 콘텐츠 보존. whole 모드는 frontmatter 포함 전체 파일이 관리 단위.
markdown# Design System (oh-my-design) Read the standalone design contract at **@./DESIGN.md** before any UI, styling, microcopy, or motion work. When a valid adopted Core v2 `.omd/system/manifest.json` declares `profile: portable-core` and binds exact graph/projection hashes, the System Graph is machine authority and DESIGN.md is its standalone projection. A migration candidate is never adopted authority. Preference log (pending corrections): @./.omd/preferences.md Precedence: pending explicit preference corrections > adopted Bound System graph/standalone DESIGN.md > your defaults. Fold pending corrections into the graph and regenerate the projection before clearing them.
markdown## Design System (oh-my-design) **Before any UI, styling, copy, or motion change, open and read `./DESIGN.md` in full.** It is the standalone design contract. If an exact valid adopted Core v2 manifest exists, its hash-bound System Graph is machine authority and DESIGN.md is the projection. A migration candidate remains non-authoritative. If present, read `./.omd/preferences.md` — pending explicit corrections override the current contract until atomically folded into the graph/projection. Apply them and flag conflicts.
mdc--- description: Authoritative brand & UI design system. Read DESIGN.md before UI work. globs: - "**/*.tsx" - "**/*.jsx" - "**/*.vue" - "**/*.svelte" - "**/*.css" - "**/*.scss" - "**/tailwind.config.*" - "**/components/**" - "**/app/**/page.*" alwaysApply: true --- <!-- omd:start v=1 hash=<HASH> --> <!-- omd:cursor-channel=skills --> Read the standalone design contract at `@DESIGN.md` before generating/modifying UI. With an exact valid adopted `profile: portable-core` manifest, its hash-bound System Graph is machine authority and DESIGN.md is the projection. A migration candidate is non-authoritative. Pending preference corrections: `@.omd/preferences.md`. Precedence: pending explicit preference corrections > adopted Bound System graph/standalone DESIGN.md > framework defaults. Fold pending corrections into the graph and regenerate DESIGN.md before clearing them. OmD Agent Skills live under `.cursor/skills/`. Use the smallest relevant `omd-*` skill automatically, or invoke it from Cursor with `/omd-<name>`. Unknown fields stay absent. Never substitute a system font, generic component, guessed token, or adjacent surface as a product fact. <!-- omd:end -->
<HASH> = sha256 of the body content (마커 제외, body 텍스트만), 12자 hex prefix:
bashnode -e "console.log(require('crypto').createHash('sha256').update(process.argv[1]).digest('hex').slice(0,12))" "<body 텍스트>"
block 모드 마커 형식 정확히:
<!-- omd:start v=1 hash=ab12cd34ef56 -->
<body>
<!-- omd:end -->사용자가 어떤 모드를 요청하는지 분기:
각 shim별로:
파일 없으면 → status: missing, 새로 write 진행 파일 있으면 → 내용 파싱
<!-- omd:start v=N hash=H --> 라인 찾기:
missing (block 부재, 사용자 content 외에 새로 추가 필요)hash=H와 비교drifted (사용자가 수동 편집함)cleanout-of-date (omd 템플릿이 갱신됨)existing 전체 content와 rendered 템플릿 비교:
cleandrifted.cursor/rules/) 없으면 mkdir.omd/sync.lock.json 기록 (없으면 만든다):
json{ "design_md_hash": "<DESIGN.md sha256:12>", "targets": { "CLAUDE.md": "<hash>", "AGENTS.md": "<hash>", ".cursor/rules/omd-design.mdc": "<hash>" }, "updated_at": "<ISO timestamp>" }
DESIGN.md 해시:
bash[ -f DESIGN.md ] && node -e "console.log(require('crypto').createHash('sha256').update(require('fs').readFileSync('DESIGN.md')).digest('hex').slice(0,12))"
CLAUDE.md (block) — updated
AGENTS.md (block) — unchanged
.cursor/rules/omd-design.mdc — created
DESIGN.md hash: ab12cd34ef56.claude / .cursor 디렉토리 추가 후.omd/sync.lock.json 무시 금지 — 항상 갱신| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 7,291 | 10,338 | +42% | 1 | 1 | 0% | 217 | 2,259 | +941% | 0 | 0 | — |
case-02 | fail→fail | 4,148 | 11,719 | +183% | 1 | 1 | 0% | 306 | 2,248 | +635% | 0 | 0 | — |
case-03 | fail→fail | 13,381 | 4,563 | -66% | 1 | 1 | 0% | 2,432 | 2,832 | +16% | 0 | 0 | — |
case-20 | fail→fail | 2,858 | 3,546 | +24% | 1 | 1 | 0% | 269 | 2,121 | +688% | 0 | 0 | — |
case-04 | fail→pass | 14,509 | 31,725 | +119% | 1 | 1 | 0% | 2,600 | 2,893 | +11% | 0 | 0 | — |
case-05 | pass→pass | 9,375 | 2,766 | -70% | 1 | 1 | 0% | 1,721 | 2,380 | +38% | 0 | 0 | — |
case-06 | pass→pass | 12,346 | 5,193 | -58% | 1 | 1 | 0% | 2,203 | 2,957 | +34% | 0 | 0 | — |
case-07 | fail→pass | 20,207 | 4,088 | -80% | 1 | 1 | 0% | 3,619 | 2,786 | -23% | 0 | 0 | — |
case-08 | fail→pass | 11,920 | 5,452 | -54% | 1 | 1 | 0% | 1,923 | 3,033 | +58% | 0 | 0 | — |
case-09 | pass→pass | 7,602 | 3,091 | -59% | 1 | 1 | 0% | 1,352 | 2,519 | +86% | 0 | 0 | — |
case-10 | pass→pass | 18,061 | 2,910 | -84% | 1 | 1 | 0% | 1,094 | 2,418 | +121% | 0 | 0 | — |
case-11 | pass→pass | 10,174 | 4,768 | -53% | 1 | 1 | 0% | 1,582 | 2,788 | +76% | 0 | 0 | — |
case-12 | pass→pass | 13,265 | 6,036 | -54% | 1 | 1 | 0% | 2,226 | 2,889 | +30% | 0 | 0 | — |
case-13 | pass→pass | 6,589 | 4,030 | -39% | 1 | 1 | 0% | 899 | 2,709 | +201% | 0 | 0 | — |
case-14 | pass→pass | 6,207 | 3,330 | -46% | 1 | 1 | 0% | 1,113 | 2,508 | +125% | 0 | 0 | — |
case-15 | fail→fail | 8,450 | 2,455 | -71% | 1 | 1 | 0% | 1,531 | 2,303 | +50% | 0 | 0 | — |
case-16 | fail→fail | 10,252 | 4,108 | -60% | 1 | 1 | 0% | 1,813 | 2,582 | +42% | 0 | 0 | — |
case-17 | fail→fail | 9,053 | 10,852 | +20% | 1 | 1 | 0% | 1,554 | 3,880 | +150% | 0 | 0 | — |
case-18 | pass→pass | 10,043 | 2,633 | -74% | 1 | 1 | 0% | 1,722 | 2,404 | +40% | 0 | 0 | — |
case-19 | fail→pass | 11,053 | 3,593 | -67% | 1 | 1 | 0% | 2,090 | 2,518 | +20% | 0 | 0 | — |
case-21 | fail→fail | 4,567 | 4,973 | +9% | 1 | 1 | 0% | 920 | 2,220 | +141% | 0 | 0 | — |
case-22 | pass→pass | 16,231 | 10,299 | -37% | 1 | 1 | 0% | 3,378 | 4,109 | +22% | 0 | 0 | — |
case-23 | pass→pass | 11,894 | 1,960 | -84% | 1 | 1 | 0% | 2,245 | 2,256 | +0% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 19 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +17 percentage points is the difference between those two pass rates over the 19 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/21/2026 | +23% |
Other measured skills in the registry, with their headline benchmark lift.