Install any skill in seconds. Free to start, no credit card required.
Get Started Free →.omd/preferences.md의 status:pending 항목을 DESIGN.md에 정식 merge하고 status를 applied로 플립. '프리퍼런스 정리해줘', 'fold preferences', 'apply all corrections', 「好みをDESIGN.mdに反映」, 「套用偏好」류의 요청에 트리거. 단발성 교정 기록은 omd:remember.
.claude/skills/kwakseongjae-omd-learn/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 106% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 97% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 154% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 101% | 0% |
<!-- omd:installed-skill — managed by omd install-skills. Do not edit; rerun the command to refresh. -->
.omd/preferences.md에 누적된 status: pending 교정사항을 Core v2 System Graph에 반영하고, 그 graph에서 중립적인 root DESIGN.md를 재생성한 뒤 반영된 엔트리의 상태를 applied로 플립한다. DESIGN.md를 직접 섹션 편집하는 스킬이 아니다.
Read .omd/preferences.md → frontmatter + 엔트리들 파싱:
## heading 기준 splitomd-meta 코드블록에서 id, scope, status 추출status: pending만 필터scope별로 그룹화해서 사용자에게 요약:
components.button (3 pending):
- CTAs never uppercase (pref_xxx, pref_yyy)
- primary fill should be brand-500 not 600 (pref_zzz)
spacing (1 pending):
- 8pt grid, not 4pt (pref_aaa)엔트리당 한 줄이 아니라 scope당 2-3줄로 의도 정리.
"이 교정들을 디자인 시스템에 반영할까요?" 묻기. 동의 → Phase 3.
거부 → 어떤 scope를 reject할지 묻고 Phase 4 reject 분기로.
DESIGN.md를 읽고 .omd/system/manifest.json + graph.json의존재와 exact hash binding을 확인한다.
profile: portable-core Bound Core v2이면 graph.json이canonical이다. migration-candidate는 source DESIGN.md authority를 유지한다. visible Markdown의 heading이나 표를 직접 편집하지 않는다.
provider-free migrator로 별도 fresh staging directory에 migration을 실행한다. public CLI가 있으면 omd design-md migrate DESIGN.md --out-dir <fresh-migration-dir>를 사용한다. helper가 없으면 직접 편집으로 우회하지 말고 stale install을 보고한다.
dropped_segments=0, synthetic_product_values_added=0,projection_roundtrip_equal=true, source_reconstruction_equal=true, opaque_extension_preserved=true가 모두 확인되어야 계속한다. unsupported_claims_review_required=true이므로 staging 결과는 migration-candidate인 non-authoritative observation이다. 곧바로 canonical authority로 승격하지 않는다. 이해하지 못한 원본은 extensions["dev.oh-my-design.migration"]에 보존한다.
content-addressed rollback artifact로 남긴다. 실패 시 root 파일을 건드리지 않는다.
scope별 pending을 묶어 하나의 coherent graph edit로 합친다. 엔트리당 개별 diff를 만들지 않는다.
| preference scope | canonical graph/portable anchor | |---|---| | visualTheme, product direction | experience / stable anchor id experience | | color, spacing, radius, elevation, motion | foundations / foundations | | typography, font, asset, icon, logo | typography_assets / typography-assets | | components.*, states.* | components_states / components-states | | layout, responsive, platform | layout_platforms / layout-platforms | | voice, copy, locale | content_locales / content-locales | | governance, exception | governance / governance |
prompt-fact로 provenance에 연결하되, 사용자가 말하지않은 수치·font·persona·platform 규칙을 보완하지 않는다.
교정만 content_locales 또는 experience에 반영한다.
graph.draft.json으로 복사해 draft만수정하고 기존 projection binding은 제거한다. compiler가 projection.sha256 placeholder/precompute/zero seed를 요구하면 fail-close한다. Never hand-write or patch DESIGN.md, section anchors, claim markers, claim-end delimiters, manifest, or binding hashes. 일곱 design-md:claim 선언과 각 design-md:claim-end는 canonical compiler-owned output이다.
밖 fresh review directory에 exact preview를 먼저 만든다.
bash omd design-md prepare-review <graph> --provenance <provenance> --coverage <coverage> --out-dir <review> [--migration-report <report>]
<review>/DESIGN.md와 request hash에 대한 Phase 2 실제 사용자 승인을 받은 뒤 provider-free tool로 승인 영수증과 final package를 만든다. agent가 승인하지 않는다.
bash omd design-md approve-review <review>/review-request.json --reviewer <project-owner-id> --out <approval> --authority-transition-approved omd design-md compile <review>/input-graph.json --provenance <review>/provenance.json --coverage <review>/coverage.json --review-receipt <approval> [--migration-report <review>/migration-report.json] --out-dir <fresh> --adopt
public CLI가 없으면 설치 bundle의 exact-equivalent prepare-design-md-core-review.cjs, compile-design-md-core.cjs, adopt-design-md-core.cjs helpers만 허용한다. renderer나 hash 계산을 재구현하지 않는다.
다시 검사한다. compiler PASS는 factual accuracy, provenance truth, font/asset license, locale behavior, accessibility, visual quality proof가 아니다. 기존 opaque extension 보존, provenance/coverage의 resolvable evidence, installed final project-system validator까지 모두 통과해야 한다. 필요한 binding을 helper가 만들 수 없으면 수동 hash patch 대신 fail-close한다.
채택한다.
bash omd design-md prepare-checkpoint <fresh> --reviewer <project-owner-id> --out <checkpoint> --authority-transition-approved omd design-md adopt <fresh> --project-root <project-root> --checkpoint-receipt <checkpoint>
atomic package adopter가 없으면 stage를 보존하고 fail-close하며 파일별 복사로 우회하지 않는다.
반영한 엔트리: Phase 3 atomic project adoption이 성공한 뒤에만 해당 엔트리의 omd-meta 블록을 Edit 툴로:
status: pending → status: appliedapplied_at: <ISO timestamp> 라인 추가applied_design_md_hash가 기존 schema에서 필요하면 새 계산을 하지 않고,성공한 adopted package manifest의 artifacts.design_md.sha256 exact value만 복사한다.
거부한 엔트리:
status: pending → status: rejectedrejected_reason: "<짧은 이유>" 라인 추가상위 엔트리가 누적된 작은 교정을 통합·대체했으면:
status: supersededsuperseded_by: <상위 pref_id> 추가한 문단:
.omd/preferences.md 직접 확인 안내4 preferences applied to the Core v2 design system
- components.button: CTAs never uppercase, primary brand-500
- spacing: 8pt grid
1 rejected (conflicts with base reference radius)
Review .omd/preferences.md for details..omd/foldin-proposal.json)SessionStart 컨텍스트의 OMD FOLD-IN PROPOSAL → AskUserQuestion 승인 경로로 호출되었으면 Phase 2 확인은 이미 끝난 것 — 다시 묻지 말 것.
제안 없이 사용자가 직접 omd:learn을 부른 경우에도 .omd/foldin-proposal.json이 "status": "proposed"로 존재하면: 그 scopes를 이번 폴드 대상에 포함할지 Phase 2에서 함께 확인하고, 처리 후 아래와 동일하게 status를 갱신한다 (proposed인 채로 방치 금지 — 다음 세션이 또 물어본다).
.omd/foldin-proposal.json의 status를 Edit 툴로 갱신:"status": "applied" + "applied_at": "<ISO timestamp>" 필드 추가"status": "partial" + scopes 배열을 남은(미승인) scope만으로 갱신"status": "snoozed" + "snoozed_at": "<ISO timestamp>" 필드 추가proposed/applied/partial/snoozed) —번역·한글화 금지 (훅이 문자열 비교로 읽는다)
사용자가 특정 작업만 요청하는 경우:
superseded/rejected → applied 전환은 금지 (이력 오염 — 사용자에게 "이 항목은 X 상태예요. 되살리려면 omd:remember로 재캡처하세요"라고 안내)
DESIGN.md를 직접 편집하지 말 것. canonical graph draft + compiler만 사용한다gate를 거친다
DESIGN.md에 frontmatter, generator, verification, preference 이력을넣지 말 것
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 2,506 | 3,637 | +45% | 1 | 1 | 0% | 336 | 3,078 | +816% | 0 | 0 | — |
case-02 | fail→fail | 3,391 | 5,675 | +67% | 1 | 1 | 0% | 286 | 3,260 | +1040% | 0 | 0 | — |
case-03 | fail→fail | 4,123 | 6,504 | +58% | 1 | 1 | 0% | 239 | 3,143 | +1215% | 0 | 0 | — |
case-04 | fail→fail | 13,774 | 5,785 | -58% | 1 | 1 | 0% | 1,736 | 3,251 | +87% | 0 | 0 | — |
case-05 | fail→fail | 3,471 | 4,296 | +24% | 1 | 1 | 0% | 219 | 3,405 | +1455% | 0 | 0 | — |
case-06 | fail→pass | 11,573 | 5,773 | -50% | 1 | 1 | 0% | 1,897 | 3,901 | +106% | 0 | 0 | — |
case-07 | pass→pass | 7,445 | 2,336 | -69% | 1 | 1 | 0% | 1,075 | 3,183 | +196% | 0 | 0 | — |
case-08 | fail→pass | 9,446 | 2,616 | -72% | 1 | 1 | 0% | 1,641 | 3,231 | +97% | 0 | 0 | — |
case-09 | fail→pass | 13,331 | 2,788 | -79% | 1 | 1 | 0% | 2,240 | 3,339 | +49% | 0 | 0 | — |
case-10 | fail→pass | 27,875 | 3,150 | -89% | 1 | 1 | 0% | 1,350 | 3,432 | +154% | 0 | 0 | — |
case-11 | pass→pass | 9,241 | 2,627 | -72% | 1 | 1 | 0% | 1,460 | 3,210 | +120% | 0 | 0 | — |
case-12 | pass→pass | 10,828 | 4,104 | -62% | 1 | 1 | 0% | 1,723 | 3,518 | +104% | 0 | 0 | — |
case-13 | pass→pass | 10,524 | 12,141 | +15% | 1 | 1 | 0% | 1,748 | 3,599 | +106% | 0 | 0 | — |
case-14 | fail→pass | 10,650 | 5,075 | -52% | 1 | 1 | 0% | 1,860 | 3,737 | +101% | 0 | 0 | — |
case-15 | fail→pass | 5,893 | 2,302 | -61% | 1 | 1 | 0% | 1,023 | 3,209 | +214% | 0 | 0 | — |
case-16 | fail→pass | 7,951 | 4,298 | -46% | 1 | 1 | 0% | 1,546 | 3,596 | +133% | 0 | 0 | — |
case-17 | fail→fail | 10,827 | 5,644 | -48% | 1 | 1 | 0% | 1,289 | 3,148 | +144% | 0 | 0 | — |
case-18 | fail→fail | 4,853 | 5,313 | +9% | 1 | 1 | 0% | 915 | 3,152 | +244% | 0 | 0 | — |
case-19 | pass→fail | 8,728 | 5,830 | -33% | 1 | 1 | 0% | 1,684 | 3,156 | +87% | 0 | 0 | — |
case-20 | fail→pass | 8,056 | 3,023 | -62% | 1 | 1 | 0% | 1,470 | 3,395 | +131% | 0 | 0 | — |
case-21 | pass→pass | 20,583 | 3,998 | -81% | 1 | 1 | 0% | 2,178 | 3,643 | +67% | 0 | 0 | — |
case-22 | fail→pass | 8,367 | 4,796 | -43% | 1 | 1 | 0% | 1,227 | 3,767 | +207% | 0 | 0 | — |
case-23 | fail→pass | 11,582 | 3,238 | -72% | 1 | 1 | 0% | 1,960 | 3,385 | +73% | 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 15 counted toward the lift figure. The other 8 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 +39 percentage points is the difference between those two pass rates over the 15 comparable cases. 3 cases got worse with the skill loaded, and they are 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/20/2026 | +45% |
Other measured skills in the registry, with their headline benchmark lift.