User-facing changes to oh-my-design-cli and the bundled skill / agent files. Upgrade with npx oh-my-design-cli@latest install-skills.
A larger, better-evidenced reference catalog and a more honest DESIGN.md Core v2. Patch release — no change to the installer's file ownership rules. 2.0.1 was never published to npm; this release includes everything list
A larger, better-evidenced reference catalog and a more honest DESIGN.md Core v2. Patch release — no change to the installer's file ownership rules. 2.0.1 was never published to npm; this release includes everything listed under 2.0.1.
verified_v2 (npm 2.0.0 shipped the earlier catalog). New verified references span Japan, the UK and a first European push — Germany, France, the Netherlands, the Nordics, Spain, Italy, Austria, the Baltics — each measured live (computed tokens, component states under a real Tab key, pseudo-element and background-image hover layers) and grounded in the company's own legal and about pages. Country codes LT, NO, DK, AT, EE, CZ, RO, BE and CH are now accepted.omitted claim — a Core file can now say what it left out and why (verified-absent, unresolved, out-of-scope), so an agent can tell "the brand publishes nothing" from "nobody looked".omd-reference-capture — the shipped capture bundle now reads the Core package instead of raw DESIGN.md bytes, and fails loudly when a Core body has no .omd/ package.llms.txt now read "500+" references and 28 skills / 27 Cursor Agent Skills.npm run gate:quality:strict) moved from prepublishOnly to a local pre-tag step, because CI cannot see its gitignored fixture outputs, and it is not green: landing/stripe, landing/toss and landing/karrot fail landing integrity (recorded as the D4 exclusion), autopilot/stripe and autopilot/toss are unverified (no generation receipt), and autopilot/karrot is review-pending. Receipts will be regenerated before the next release.Landing craft as a shipped workflow: five new skills, an art-director role, and the machine checks that keep a one-page landing honest. Patch release — no change to the DESIGN.md Core v2 contract or the installer's file
Landing craft as a shipped workflow: five new skills, an art-director role, and the machine checks that keep a one-page landing honest. Patch release — no change to the DESIGN.md Core v2 contract or the installer's file ownership rules.
New skills (the bundle is now 27 product skills for Claude Code, Codex, and OpenCode, and 26 compatible Agent Skills for Cursor):
omd:landing — scroll-native one-page landing derived from DESIGN.md plus the measured landing-craft codex (LC-n rules): concept, per-section storyboard, asset plan, standalone render.html, and a capped self-review loop. Triggers on "랜딩 페이지", "원페이지", "landing page", "one-pager", "hero to footer".omd:setup — finds the image/video generation channels, browser, and encoders this machine already has, explains the trade-offs and cost of each, and records the choice in .omd/config.json for later design tasks. It never tells you to go get an API key. Triggers on "omd setup", "도구 셋업", "configure media", "what can you generate".omd:media — brand-consistent asset sets (hero, section illustrations, icon sets, OG image) through whichever channel omd:setup recorded, with a provenance and cost ledger. No channel available means a prompt pack and a manual queue, never stock imagery. Triggers on "이미지 세트 만들어", "generate assets", "hero image", "OG 이미지".omd:showcase — turns a rendered page, or several side by side, into a deterministic scroll demo video (frame capture → ffmpeg H.264/GIF, one label per arm). Triggers on "시연 영상", "스크롤 영상 만들어", "showcase", "demo video", "비교 영상".omd:issue (added 2026-09-01) — files usage complaints and dogfood defects as structured GitHub issues, and drains the queue with a batch process verb. Triggers on "이슈 등록해줘", "버그 리포트", "file an issue", "이슈 처리해줘".Also in this release:
omd-art-director sub-agent (20 specialist roles, up from 19) — turns DESIGN.md brand facts plus a brief into one visual concept, mood, asset direction, and a per-section composition storyboard grounded in the LC-n rules. It writes concept.md and storyboard.md only: never tokens, never HTML.docs/design-excellence/landing-craft-codex.md (the LC-n rule table), test-v2/tools/landing-integrity.mjs (LI-n machine verdicts on page height, section ratios, fold coverage, type ratio, gutter, motion duration and easing, scroll snap, video attributes, stock hosts, uniform card grids, h1), test-v2/tools/render-integrity.mjs, test-v2/tools/showcase.mjs, and scripts/omd-setup-detect.mjs are in the npm files allowlist so the new skills resolve their tools in an installed project instead of pointing at repo-only paths.omd:landing now requires a token-colored scrim behind text over imagery and forbids muted tokens for body copy, after a first run shipped a hero with nav at 1.05:1. Scroll reveals must stay visible under <noscript> and @media (scripting: none)./design.md public convention — this project's own root DESIGN.md is served at oh-my-design.kr/design.md, following the vercel.com/design.md convention, and scripts/check-mirror-drift.mjs now guards that pair alongside the reference trees.omd:issue from real runs of the new skills, covering unattended mode, self-feedback wiring, UA-default reset, per-project brand CSS, and a pixel-sampled contrast check for landing-integrity.Repo tooling (not shipped to npm):
scripts/wave-run.mjs — per-brand migration pipeline runner with a shared concurrency budget, so worker, gate, measurement, review, and revision for one brand can never overlap and prompts are assembled only from prompts/ files.scripts/wave-marathon.mjs — unattended multi-wave driver on top of the runner: queue, resume-after-block, deferral ledger, close-out, and journal line per wave, with a STOP file honored at wave boundaries.test-v2/tools/transcribe-verify.mjs — two conformance defects fixed. The §7.1.8 blinding detectors missed the real decision-ID shape (D-P2-1) and the hyphenated arm name, and §7.1.6 byte-compared fenced blocks in a way that made the deletions §4.1 mandates impossible to declare. Three self-tests added (10/10); the 23 existing transcripts were re-verified (20 pass, 3 blocked and re-transcribed).Design-excellence harness: a design system the model derives from a declared philosophy, floored by a validated preset catalog — measured against rendered screens, not source code. The 2.0 promise: visibly better product
Design-excellence harness: a design system the model derives from a declared philosophy, floored by a validated preset catalog — measured against rendered screens, not source code. The 2.0 promise: visibly better product than prompt-only or component-kit assembly, portable via DESIGN.md.
omd:autopilot): PHILOSOPHY (stance + principles with explicit sacrifices) → decision table (D-ids with rationales) → tokens with D-id back-references → component specs → per-page layout grammar with content back-calculation → build → render critique → DESIGN.md that answers "why this value". Improvised token values are a gate failure (GS7).omd book — browse the adopted design system on a local port (npx oh-my-design-cli@latest book, or --static for a standalone handoff file). Storybook renders stories; this renders the contract: every token beside the decision that produced it, component state matrices including the states that deliberately do not apply and why, contrast measured live against the pairs the system promised, and preset lineage. Reads the compiled graph when present and falls back to parsing DESIGN.md.:focus-visible-only rings with programmatic-heading-focus suppression, custom listbox over native selects, disabled states via tokens (never opacity alone), dark-surface token inversion, and layout-grammar minimum-content rules. Mechanically checkable gates must be grep-verified in the self-critique.docs/design-excellence/.omd:harness checkpoint #1): the master digs the complete screen list — including screens the user did not name — into a per-screen table (purpose, key elements, layout grammar, states, preset candidates) that the user approves before any wireframe; unapproved screens are never built.npm run dev-ready React app with its DESIGN.md.Also in this release (1.9.1 candidate line): natural-language workflow routing, one implementation owner, and same-surface verification for UI delivery.
npx oh-my-design-cli@latest update now refreshes an existing installation without changing project/global scope, installed channels, Cursor rule-only mode, optional policies, or user-owned files. It refuses fresh-install and unsafe/manual-review cases, never implies --force, and runs a post-update doctor check.omd:update skill lets users ask their coding agent to perform that same fail-closed refresh. The shipped bundle is now 22 product skills for Claude Code, Codex, and OpenCode, and 21 compatible Agent Skills for Cursor.omd workflows [task] (alias omd route) now turns a rough product request into the smallest capable OmD workflow and a ready-to-paste coding-agent prompt. The command explicitly separates terminal steps (install and doctor) from agent-chat work.omd:apply, omd:harness, and omd:orchestrator now share one work-packet contract. Specialists return evidence and advice to a single implementation owner; completion requires the real consumer route, viewport, and state to be reverified after the product edit.CLI re-onboarding: one guided entrypoint, an exact repair doctor, safer managed upgrades, and outcome-first documentation in five languages.
CLI re-onboarding: one guided entrypoint, an exact repair doctor, safer managed upgrades, and outcome-first documentation in five languages.
npx oh-my-design-cli@latest now opens the guided installer. doctor checks the complete 18-skill product bundle, 16 specialist roles, channel-local catalog, hooks, fingerprint coverage, and DESIGN.md, then prints a repair command scoped only to the broken channels.DESIGN.md files, preserves same-ID user edits and private references, and removes retired managed files without deleting user sidecars in their directories. Existing non-OmD hooks remain untouched. Reinstalling Codex also removes OmD-owned legacy .codex/skills entrypoints automatically while preserving private skills.doctor now validates exact Claude hook event/command mappings, distinguishes Cursor's shared catalog from a Claude installation, detects stale or locally modified hooks, and can execute a scoped --repair-hooks recovery. Unmarked OmD-reserved conflicts use an explicit --force; symlinked managed paths and unmanaged legacy Codex entries fail closed for manual review. Installer drift exits non-zero instead of reporting a false success.docs/CLI_QUICKSTART.md. The website adds 40 static CLI docs routes across English, Korean, Japanese, Simplified Chinese, and Traditional Chinese (Taiwan), including an outcome-first live-demo runbook, plus localized human and agent-readable llms guides.44 new Korean company references added (catalog 356 → 400; KR refs 149 → 193) via the full 추천→선발→수집→검수 pipeline — every ref Tier-1 brand-owned proof-gated. Milestone: catalog hits 400.
44 new Korean company references added (catalog 356 → 400; KR refs 149 → 193) via the full 추천→선발→수집→검수 pipeline — every ref Tier-1 brand-owned proof-gated. Milestone: catalog hits 400.
references/. User excluded 6 母-brand sub-products (tosspayments/kakaopaysec/kakaowebtoon/brunch/kakaowork/watchapedia) + tistory. Build ran one CREATE subagent per brand in demand-driven waves of 5, stopping at 44 green.urbanbase dropped as INFEASIBLE (brand defunct — domain now a GoDaddy parking lander; agent correctly refused to fabricate). peoplefund captured through its 크플(Cple) rebrand redirect.verify-reference 27/27 + catalog-integrity (16 files / 638 tests). KR proof gate met for every ref (≥2 brand-owned Tier-1 sources + ## Proof block). Tier 2 (getdesign / refero) empty for all 44, as spec/regional-sources.yaml anticipates.data/reference-audits/2026-07-02-kr44.md (13 High / 29 Medium / 2 Low). Counts propagated by sync-catalog.mjs (README, llms.txt, SEO layouts ×3, fingerprints ×3, design-md mirror).30 new Korean company references added (catalog 326 → 356; KR refs 119 → 149) via the full 탐색→선발→수집→검수→배포 pipeline — every ref Tier-1 brand-owned proof-gated.
30 new Korean company references added (catalog 326 → 356; KR refs 119 → 149) via the full 탐색→선발→수집→검수→배포 pipeline — every ref Tier-1 brand-owned proof-gated.
wadiz, yeogi==yeogiotte) and swapped for clean alternates. Build ran one CREATE subagent per brand in waves of 5 (Tier-1 live Playwright getComputedStyle over ≥2 brand-owned surfaces each).verify-reference 27/27 + catalog-integrity (16 files / 594 tests). KR proof gate met for every ref: ≥2 brand-owned Tier-1 sources + ## Proof block (≥80 raw computed-style samples). Tier 2 (getdesign / refero) empty for all 30, as spec/regional-sources.yaml anticipates.data/reference-audits/2026-06-26-kr30.md (23 High / 7 Medium / 0 Low). Counts propagated by sync-catalog.mjs (README ×4, llms.txt, SEO layouts, fingerprints ×3, design-md mirror).New skill `omd:feel` — quantifies the design / frontend industry's "gut-feel" into 113 provenance-graded, machine-checkable interface rules an AI can APPLY (inject motion / spacing / type / a11y defaults during UI work)
New skill omd:feel — quantifies the design / frontend industry's "gut-feel" into 113 provenance-graded, machine-checkable interface rules an AI can APPLY (inject motion / spacing / type / a11y defaults during UI work) and AUDIT (BLOCK / WARN / FYI). Inherits Jakub Krehel's make-interfaces-feel-better and extends it with Apple HIG / Material 3 / WCAG / design-system tokens + practitioner research.
DESIGN.md tokens always win. Files: skills/omd-feel/{SKILL.md, reference.md, provenance.md} — auto-installs via install-skills. Skill bundle 17 → 18.prefers-reduced-motion a11y gap (framer-motion + animate-ping + smooth-scroll were ungated) via a global CSS net + <MotionConfig reducedMotion="user">, swept transition: all → named props on the landing / docs surfaces, and added text-wrap: balance / pretty. tsc + 553 tests green.QA pass on the 2026-06-22 batch: 40 refs re-inspected vs live + benchmarked against the `designlang` deterministic extractor. 35/40 PASS, mean accuracy 98.3/100, 5 MINOR token-value fixes applied.
QA pass on the 2026-06-22 batch: 40 refs re-inspected vs live + benchmarked against the designlang deterministic extractor. 35/40 PASS, mean accuracy 98.3/100, 5 MINOR token-value fixes applied.
designlang independently corroborated ~5.4/6 of our key tokens per ref.0.1/4px/12px → 0.08/24px/48px (live layered-card); chunghwa radius scale +20px (dominant modal/card default, ~46%); hyundai chatbot FAB box-shadow rgba(0,0,0,0.15) 0 0 20px added (CREATE sampled the wrapper, not the button); snapchat §6 "none across nav" softened — components flat but marketing nav wrapper carries one shadow; octopusenergy postcode input split into hero (white/Arial-600) vs tariffs (transparent/Chromatophore) surfaces. All 5 verify-reference green; 553 tests pass.data/reference-audits/2026-06-23-qa-designlang-benchmark.md. Finding: our LLM pipeline is 39–0 (1 tie) more brand-accurate than designlang (which picks most-frequent color as "primary", ~35% brand-correct); recommendation = fold designlang in as a free deterministic Stage 0 (palette histograms + DTCG) feeding our brand-judgment pass.Catalog +30: TW·US·UK 메가브랜드 — 카탈로그가 296 → 326개로. 4개국 확장 라운드 2의 배치 2~4/4 (KR은 1.8.3). Phase 4 프로모는 이 라운드에서 생략.
Catalog +30: TW·US·UK 메가브랜드 — 카탈로그가 296 → 326개로. 4개국 확장 라운드 2의 배치 2~4/4 (KR은 1.8.3). Phase 4 프로모는 이 라운드에서 생략.
data/reference-audits/2026-06-22-{tw,us,uk}10.md.Catalog +10: KR 메가브랜드 — 카탈로그가 286 → 296개로. 4개국 확장 라운드 2의 배치 1/4 (KR→TW→US→UK).
Catalog +10: KR 메가브랜드 — 카탈로그가 286 → 296개로. 4개국 확장 라운드 2의 배치 1/4 (KR→TW→US→UK).
data/reference-audits/2026-06-22-kr10.md.Catalog +40: KR/US/TW/JP IT 확장 — 카탈로그가 246 → 286개로. 4개국 × 10개, 전 항목 Proof Gate + live-inspect.
Catalog +40: KR/US/TW/JP IT 확장 — 카탈로그가 246 → 286개로. 4개국 × 10개, 전 항목 Proof Gate + live-inspect.
data/reference-audits/2026-06-17-{kr,us,tw,jp}10.md + 큐레이션 문서 research/2026-06-17_reference-candidates-kr-us-tw-jp.md.Catalog +25: KR/JP/TW/US 배치 — 카탈로그가 221 → 246개로. 수집→검수→배포 파이프라인 스크립트화.
Catalog +25: KR/JP/TW/US 배치 — 카탈로그가 221 → 246개로. 수집→검수→배포 파이프라인 스크립트화.
web/scripts/verify-reference.mjs(레퍼런스 단독 게이트: catalog-integrity per-ref 항목 + strict-YAML + 로고 liveness, registry 빌드 불필요) + web/scripts/sync-catalog.mjs(fingerprints ×3 / design-md mirror / 카운트 문자열 / llms.txt Examples / npm test 일괄). omd:add-reference 스킬에 batch 서브에이전트 프로토콜 명문화.The taste loop closes: your corrections become preferences, preferences become proposals, and one click folds them into DESIGN.md. Plus a taste dashboard and a scripted release bench.
The taste loop closes: your corrections become preferences, preferences become proposals, and one click folds them into DESIGN.md. Plus a taste dashboard and a scripted release bench.
session-end-foldin writes a structured proposal and your next session opens by asking — one selectable-option question ("이 취향, DESIGN.md에 반영할까요?"). Approve → omd:learn folds it; decline → snoozed until it recurs again. The old remember → wait → manually-run-learn dance is gone.post-edit-watch no longer just warns: off-system drift is recorded to .omd/preferences.md as confidence: inferred (24h dedup, never while editing DESIGN.md/.omd). Detection grew from hex colors to radius and motion-duration — including Tailwind classes, kebab-case CSS, camelCase JSX inline styles, and .html outputs (what omd:harness actually emits).omd:taste — see what the system thinks you like. One command renders applied / pending (with recurrence counts and how far from the fold threshold) / snoozed / not-yet-known axes, with inline actions (fold now · forget · refine). Skill count: 16 → 17.omd:designer-review and omd:final-qa now end recurring findings with a single opt-in question — "이 패턴, 취향으로 기록할까요?" — recording with signal: review on consent. Never auto-recorded, never auto-folded.scripts/bench/score-init.mjs (first-60s) and the new scripts/bench/score-taste.mjs (capture → reflect → propose) score real headless runs deterministically; both at 10/10 on this release.session-state-loader output envelope corrected (its session-start context was silently dropped); catalog resolution order normalized across all 4 documents with a CI drift guard; installer channel mapping unified into one table (cursor dedup behavior preserved, tested); omd:kr-writer presets now self-contained for npx installs; dangling dev-only references cleaned; docs/JSON-LD FAQ generated from one source; release workflow actions bumped for Node 24 runners.First-run fixes for npx installs (skill triggering, local catalog, dead hooks), a first-class Cursor install channel, and a safer `omd:init`.
First-run fixes for npx installs (skill triggering, local catalog, dead hooks), a first-class Cursor install channel, and a safer omd:init.
<!-- omd:installed-skill --> marker was written above the YAML frontmatter, which broke frontmatter parsing in some hosts and stopped skills from triggering on natural language. Managed files are rewritten with the marker after the frontmatter block; re-run install-skills to pick it up.install-skills now copies the reference catalog and ctx-prime data into .claude/data/, so omd:init works on the very first run of an npx install — no more empty-catalog dead end. As a safety net, omd:init also falls back to the website's raw .md endpoints when the local catalog can't be resolved.install-skills --agent cursor (also offered in the channel multiselect, auto-detected when .cursor/ exists) writes the .cursor/rules/omd-design.mdc shim — identical to the omd:sync template, body-hash marker included — plus the shared .claude/data catalog. No skills, hooks, or settings are written for Cursor.post-edit-watch, foldin, state-loader, and skill-activation shipped in states that left them dead on a fresh install; all four now register and fire correctly.omd:init apply-mode confirmation. Before writing, omd:init now distinguishes root bootstrap vs reference-only mode and asks before replacing an existing DESIGN.md — on Claude Code via the selectable-option (AskUserQuestion) UI.omd:init bootstraps.Site-only (no npm impact, deploys with the site): raw DESIGN.md twin endpoints at
/design-systems/<id>.md(agents can fetch references over HTTP), 8 curated collection pages at/collections/[slug], builder floating install CTA + neutral logo nameplates, GA4 install-funnel events (install_copy/prompt_copy), The Wall card-expand interaction removed (static tiles, hover kept), and a four-README restructure around the install→activate path.
Codex / OpenCode skills now install to their real discovery paths — and `claude-design` runs on all three channels.
Codex / OpenCode skills now install to their real discovery paths — and claude-design runs on all three channels.
install-skills installed Codex skills to .codex/skills/ and OpenCode skills to a flat .opencode/agents/<name>.md. Neither matches the agents' actual discovery rules, so those skills were effectively invisible. Now:
.agents/skills/<name>/SKILL.md (official path per developers.openai.com/codex/skills)..opencode/skills/<name>/SKILL.md (folder skills per opencode.ai/docs/skills).scripts/ and references/ intact.claude-design is no longer Claude-Code-only. Its primary backend is Playwright (a node-only, agent-agnostic Chrome driver), so it works from Codex and OpenCode too. x-omd-channels now lists all three. The claude-in-chrome path remains a Claude-Code-only fallback..codex/skills/ and .opencode/agents/ files are now stale — re-run install-skills and delete the old copies. OpenCode also reads ~/.claude/skills/, so a --global install already surfaces skills there.Project / global install scope for `install-skills`.
Project / global install scope for install-skills.
install-skills now asks where to install (or pass --global): Project (./.claude/skills, the default) or Global (~/.claude/skills, available in every project). Global writes skills + sub-agents (+ data) to the user-level dir and deliberately leaves your global hooks/settings.json untouched — ideal for using claude-design everywhere without per-project installs.New bundled skill `claude-design` (terminal → claude.ai/design), single-skill install via `--skills-only`, and channel-restricted skills.
New bundled skill claude-design (terminal → claude.ai/design), single-skill install via --skills-only, and channel-restricted skills.
claude-design skill (Claude Code only) — analyzes your codebase (stack, tokens, components, real UI copy, brand assets) and drives claude.ai/design end-to-end to generate a code-grounded design, returning a shareable link. If claude.ai/design interjects a "Quick questions" clarifying panel before generating, the skill detects it (it appears late, in a closed Questions tab, in varying layouts) and — by default — the agent reads the questions and picks the appropriate option per your codebase, with a "Decide for me" autonomous fallback for headless runs. Install standalone: npx oh-my-design-cli install-skills --skills claude-design --agent claude-code --skills-only.--skills-only install flag — install a single skill with no agents / hooks / omd onboarding (clean standalone install).x-omd-channels skill frontmatter — a skill can declare its compatible agent channels; incompatible targets are skipped (claude-design is claude-code-only — needs Chrome automation + python3 + a global playwright).install-skills now copies a skill's full tree (scripts/, references/), not just SKILL.md.Site-only (no npm impact, deploys with the site): builder UX (registry-wide curation, scroll-to-top, mobile DESIGN.md toggle), landing mobile polish (Live Proof carousel, The Wall show-more, 2-col footer), and footer version sync to
package.json.
Catalog grows to 150 brands (+13), the bundled DESIGN.md mirror is fixed, and the reference pipeline gains deterministic proof/format gates.
Catalog grows to 150 brands (+13), the bundled DESIGN.md mirror is fixed, and the reference pipeline gains deterministic proof/format gates.
design-md/ mirror — 110 DESIGN.md files carried stale pre-migration frontmatter/bodies (one shipped a broken ## 1. Overview header). Re-synced to the canonical references.spec/regional-sources.yaml for KR/TW source coverage.Conversational deepening — harness skill now reads your codebase before asking, then runs a single-batch picker interview matching the Ouroboros/donguri feel — zero external plugin dependencies.
Conversational deepening — harness skill now reads your codebase before asking, then runs a single-batch picker interview matching the Ouroboros/donguri feel — zero external plugin dependencies.
2026-05-29 post-release AEO addendum (no version bump — npm bundle unchanged):
Marketing/docs site (
oh-my-design.kr) and LLM-facing content deepened so LLMs cite oh-my-design when asked about design.md / vibe coding / design systems for AI coding agents. CLI behavior unchanged; nonpm publishneeded.Added — LLM-facing content:
web/public/llms-full.txt— full concatenated context (README + entire CHANGELOG + primary SKILL.md files + omd-master agent + spec/omd-v0.1 + 100+ brand catalog one-liners). 173 KB / 2,653 lines. Pair with the curated TOC at/llms.txt. Generated byscripts/gen-llms-full.cjs; regenerated automatically onwebdev / build / publish.web/public/llms.ko.txt— Korean mirror ofllms.txtfor KR-first LLM queries with inline Korean mini-FAQ.scripts/gen-llms-full.cjs— deterministic concatenation helper. Reads canonical sources, never invents content.Added — Next.js routes (5 new, 24 dynamic):
/faq— 18 Q&A in 4 sections;FAQPageJSON-LD with 18 Question/Answer entities./what-is-design-md— definitional page claiming the term;DefinedTerm+ArticleJSON-LD./alternatives/[slug]forshadcn,v0,anima,locofy— 7-row comparison + when-to-use;Article+ 2×SoftwareApplicationJSON-LD./changelog+/changelog/[version]— 24 SSG pages parsed from this file viaweb/src/lib/changelog.ts; per-versionArticleJSON-LD withdatePublished.Changed — AEO hygiene:
web/src/app/layout.tsx—softwareVersionin schema.org now imports frompackage.json(was hardcoded"1.5.0"). Three v1.6 entries appended tofeatureList.web/public/llms.txt— new section describing CTX-PRIME, Interview-lite, sub-agent auto-recovery, and the natural-language auto-trigger phrasings.web/src/app/sitemap.ts— 7 new static routes + 24 dynamic changelog routes.web/package.json—dev/buildregeneratellms-full.txtfirst so the deployed copy never drifts from canonical sources.
Closes the gap where natural-language design requests ("그럴싸한 랜딩 만들어줘", "프로토타입이라도 구색 갖춰서") fell through omd-harness and landed in plain-coding mode. Five entry-side defects fixed in one release. Full RFC: research/harness-design/20-harness-1.6-conversational-deepening.md.
scripts/ctx-prime.cjs — deterministic, sub-50ms codebase analyzer. Emits <RUN_DIR>/ctx-prime.json with stack detection, dominant brand color, font families, voice keywords, language, surface inventory, audience hypothesis (with confidence + evidence), and wow-moment candidates. Pure node, no deps.omd-harness Step 2.5 — CTX-PRIME phase. Runs ctx-prime.cjs before reference selection, surfaces analysis as the opening move ("이 레포 분석했어요 — Next.js + #0064FF 베이스 + 11개 surface"), and asks one AskUserQuestion picker for audience confirmation with confidence-ranked options + free-text "Other".omd-harness Interview-lite — a single batched AskUserQuestion covering exit_scope / wow_moment / cta_primary / visual_grounding. Options derived from ctx-prime.json (e.g., wow-moment options use detected wow_moment_candidates). Answers written to <RUN_DIR>/handoff/.handoff.json as prefilled_slots.omd-master INTAKE — prefilled-slots fast path. When .handoff.json has prefilled_slots, skip SLOT_GATE entirely and jump straight to PROPOSE_PLAN. Never re-asks audience / wow_moment that the harness already collected.omd-harness trigger description broadened — now matches "랜딩페이지", "프로토타입", "그럴싸한", "구색", "first screen", "MVP UI", "landing", "prototype", etc. Generic natural-language requests now activate the harness reliably.omd-harness Step 1 — subagent registration auto-recovery. Was a hard gate that stopped on missing omd-master; now copies the agent file from npm root -g/local to .claude/agents/ (or detected agent flavor) and continues. Restart-Claude-Code message demoted to last-resort fallback.Real-session failure trace where a user requested a landing-page prototype, expected an Ouroboros-style multi-turn brainstorm, and got a single-shot DESIGN.md emit instead. Diagnosis traced five concrete entry-side defects in skills/omd-harness/SKILL.md. All five fixed without breaking the run-dir / handoff contract — legacy runs (without prefilled_slots) follow the unchanged path.
npx oh-my-design-cli@latest install-skills --all picks up the new harness skill + master agent. No config changes required.
scripts/ctx-prime.cjs added to package files: array.v0.2 agent layer ships in the bundle. Blog feature removed. Release-hygiene routine added.
v0.2 agent layer ships in the bundle. Blog feature removed. Release-hygiene routine added.
Bundle is now 15 skills + 16 sub-agents (was 9 + 11). Re-run npx oh-my-design-cli@latest install-skills to pick it up.
A supervisor + specialist topology for multi-step authoring, all channel-aware (Claude Code / Codex / OpenCode):
data/research/2026-05-18-kr-style-presets.md. Anti translation-ese.<!-- omd:gen-image --> spec, three downstream paths: Codex native generation / omd-asset-curator free-license fallback (Claude Code) / OpenCode user-queue. Idempotent, IP-safe (no logo/face synthesis).scripts/check-release-hygiene.sh + husky pre-commit gate. Blocks experiment byproducts (v1/v2 .bak, _source-*, contact sheets, logs, scratch dirs) from entering a commit. Codifies the docs-sync + npm-packaging checklist for new skills./blog route and the blog feature (was dev-only behind NODE_ENV). Routes, components, @/lib/blog*, and the blog views/likes KV endpoints removed. omd-kr-writer is kept — KR voice synthesis is useful beyond the blog.omd-final-qa dropped its rubric item 9 accordingly.)install-skills TUI — interactive multiselect order is now skill → sub-agent → channel. Agent channels default to none-selected (you pick); "detected" hints read real .claude//.codex//.opencode/ presence instead of the all-3 fallback. Added enter = 확인 hints.experiments/ is now gitignored (local scratch, like .promo/ and .experiments/).Architectural refactor — single-source registry replaces 5 hand-maintained maps.
Architectural refactor — single-source registry replaces 5 hand-maintained maps.
Three consecutive KR-10 batches (78→88, 88→98, 98→108) lost data because the sub-agent missed one of 5 hand-maintained data maps (route.ts, logos.ts, tokens.ts, homepage-urls.ts, design-systems.ts). homepage-urls.ts was missed in 2 batches in a row, requiring a 20-brand backfill. Prose checklists in omd-add-reference Phase 5 failed to enforce parity.
Option C — single source of truth + machine gate:
references/<id>/DESIGN.md carries id, name, country (ISO), category (slug), homepage, primary_color, logo.{type,slug}, verified, and optional display_name_kr + ds block. All 108 existing references migrated via web/scripts/migrate-frontmatters.mjs (preserves any existing fm; merges from the 5 source maps; emits canonical block).web/src/data/registry.generated.ts (autogenerated, ~41 KB, 108 entries, sorted by id for stable diff). Built by web/scripts/build-registry.mjs, which validates the schema and fails fast pointing at the offending file. Auto-runs on npm run dev and npm run build.REGISTRY / REGISTRY_BY_ID. route.ts, logos.ts, tokens.ts (BRAND_COLORS), design-systems.ts (getDesignSystem / getAllDesignSystems). web/src/lib/homepage-urls.ts deleted — getHomepageUrl now lives in registry.generated.ts. preview-export-view.tsx import updated.web/__tests__/catalog-integrity.test.ts: 108 parametrized per-id assertions (schema, §1 canonical header, prose-first paragraph, fingerprint cross-check, design-md mirror) plus 5 cross-cutting invariants (registry sort, triple-fingerprint byte identity, mirror coverage, llms.txt advisory check). 328 tests, all green..husky/pre-commit runs build-registry + catalog-integrity only when data-plane paths change (references/, data/reference-fingerprints.json, mirror copies, registry.generated.ts, scripts, the test itself). Other commits stay fast. Hook wired via core.hooksPath = .husky..claude/skills/omd-add-reference/SKILL.md Phase 5: 80 lines → 32 lines. Prose checklist replaced with the canonical frontmatter schema + a single npm run build-registry && npm test gate. Sub-agent self-verification step required..claude/skills/omd-batch-launch/SKILL.md Phase 3: 58 lines → 22 lines. Same pattern.cd web && npm run build passes type-check and prerenders all 247 routes (incl. all 108 /design-systems/<id> pages). No regression in API, builder, playground, or browse modal — every surface reads the same registry.Migration is one-way and irreversible: any new reference must follow the canonical frontmatter schema. The vitest gate (and husky) will refuse to merge a DESIGN.md missing a required field.
- **+10 KR references** (98 → 108): `toss-securities`, `oliveyoung`, `gmarket`, `tving`, `catchtable`, `upstage`, `chai`, `dabang`, `jumpit`, `fastcampus`. Each ships full DESIGN.md + `assets/_reference/{tokens,structure
toss-securities, oliveyoung, gmarket, tving, catchtable, upstage, chai, dabang, jumpit, fastcampus. Each ships full DESIGN.md + assets/_reference/{tokens,structure,fonts}.json + .live-inspect-proof.json (≥ 5 raw_samples) with canonical §1 Visual Theme & Atmosphere (regression guard verified).NEW badge on the latest batch (toss-securities/oliveyoung/gmarket/tving/catchtable/upstage/chai/dabang/jumpit/fastcampus) when NODE_ENV=development. Production rendering unaffected.98 → 108.route.ts CATEGORIES/COUNTRIES/DISPLAY_NAMES + logos.ts LOGO_MAP/DOMAIN_OVERRIDES + BRAND_COLORS + design-md/ mirror sync. Fingerprints × 3 byte-identical at count=108.data/reference-audits/2026-05-15-kr10.md.- **+10 KR references** (88 → 98): `kream`, `upbit`, `kbank`, `inflearn`, `wadiz`, `channeltalk`, `lunit`, `bunjang`, `flex`, `classum`. Each ships full DESIGN.md + `assets/_reference/{tokens,structure,fonts}.json` + `.l
kream, upbit, kbank, inflearn, wadiz, channeltalk, lunit, bunjang, flex, classum. Each ships full DESIGN.md + assets/_reference/{tokens,structure,fonts}.json + .live-inspect-proof.json (≥ 5 raw_samples) per omd:add-reference skill.web/public/llms.txt, landing copy, root SEO metadata.web/src/app/api/references/route.ts + web/src/lib/logos.ts register the 10 new brands (categories / country / display name / logo / domain fallback).data/reference-audits/2026-05-14-kr10.md.- Docs only. `README.md` and `README.ko.md` gain an **Upgrading** section. `CHANGELOG.md` (this file) extended to cover the 1.2.x → 1.3.x line.
README.md and README.ko.md gain an Upgrading section. CHANGELOG.md (this file) extended to cover the 1.2.x → 1.3.x line.oh-my-design.kr/docs) gains an Upgrading card.- **`omd:harness` rule 9** (new): hero archetype catalog with 7 variants — `left-character`, `center-text`, `carousel`, `split-screen`, `editorial-magazine`, `dashboard-preview`, `quote-led`. Brand-vibe → archetype match
omd:harness rule 9 (new): hero archetype catalog with 7 variants — left-character, center-text, carousel, split-screen, editorial-magazine, dashboard-preview, quote-led. Brand-vibe → archetype matching table. Same brand re-run → 2nd-rank archetype, so visual variation is automatic.experiment-meta.json gains a hero_archetype field.center-text mandates position:absolute = 0 in the hero block; dashboard-preview mandates <img> = 0 + mock ≥ 50% of viewport).- **`omd:harness` rule 5** rewritten — header logo is a wordmark in a display font, not a separate icon mark. Anti-pattern list: DiceBear `shapes`+wordmark pairs, DiceBear `initials` chips, hand-drawn inline-svg logos, a
omd:harness rule 5 rewritten — header logo is a wordmark in a display font, not a separate icon mark. Anti-pattern list: DiceBear shapes+wordmark pairs, DiceBear initials chips, hand-drawn inline-svg logos, and dashed-box [YOUR LOGO] placeholders are all forbidden.omd:asset-fetch §1 rewritten to match.- **New skill `omd:experiment-gallery`** — builds a single `index.html` that previews every brand experiment under a folder as iframe-scaled cards with archetype badges, wow ratings, multi-turn deltas, and per-brand IP a
omd:experiment-gallery — builds a single index.html that previews every brand experiment under a folder as iframe-scaled cards with archetype badges, wow ratings, multi-turn deltas, and per-brand IP audit. Reusable across batches.omd:reference-capture Phase 3.9 (new): browser-harness fast-path auto-detect. When the user has browser-harness (https://github.com/browser-use/browser-harness) installed and Chrome with --remote-debugging-port=9222, the skill drives live computed-style capture via CDP — measured 3-5× faster than playwright MCP. Falls back to playwright MCP otherwise.omd:harness rule 10 (new): IntersectionObserver reveal safety net mandatory. @keyframes failsafeReveal + html.js-ready gate + reduced-motion guard. Stops the recurring "fullpage screenshot has blank sections below the fold" regression.- **New skill `omd:asset-fetch`** — free-license asset catalog with verified-200 CDN URLs. DiceBear (CC0 avatars: notionists / lorelei / personas / adventurer / fun-emoji), Lucide (ISC icons), Heroicons (MIT), Tabler (MI
omd:asset-fetch — free-license asset catalog with verified-200 CDN URLs. DiceBear (CC0 avatars: notionists / lorelei / personas / adventurer / fun-emoji), Lucide (ISC icons), Heroicons (MIT), Tabler (MIT), Picsum (CC0 photos with deterministic seeds), Loremflickr (Flickr-CC photos with deterministic locks), and SIL OFL display fonts (Bricolage Grotesque, Space Grotesk, DM Serif Display, Fraunces, Pretendard, Wanted Sans, Noto Sans KR).omd:harness rule 6 tightened — generator must read from omd:asset-fetch. Handcraft inline-svg characters / icons / logos forbidden. CDN call fails → fall back to a brand-color CSS gradient placeholder. Provenance comment <!-- omd-asset: source=<url>, license=<license>, fetched=<ISO> --> mandatory on any saved asset file (e.g. assets/illustrations/hero-character.svg).- **`omd:harness` rule 7**: single shared `.container-inner` class enforces consistent horizontal padding across `<header>`, `.hero`, sections, `<footer>`. Stops the "header offset 24px from hero" class of bugs on wide v
omd:harness rule 7: single shared .container-inner class enforces consistent horizontal padding across <header>, .hero, sections, <footer>. Stops the "header offset 24px from hero" class of bugs on wide viewports.omd:harness rule 8: hero composition decomposed into separate elements (.hero-character, .hero-chart, .hero-stat-card, .hero-ornament). Single-SVG-with-everything forbidden — asset swap no longer destroys the scene.omd:reference-capture Phase 4.0 (new): .live-inspect-proof.json mandatory with ≥ 5 raw samples from playwright browser_evaluate. If tokens.json#live_overrides ends up byte-equal to canonical, the block is deleted (drift-detection: live inspect didn't really run).- Wordmark-only logo pattern introduced in `omd:asset-fetch` §1 (rewritten further in 1.3.7).
omd:asset-fetch §1 (rewritten further in 1.3.7).omd:asset-fetch becomes the single source of truth for which CDN URLs the generator may use.- Deferred experiment: a `clone` / `inspired` mode toggle that turned out to be the wrong split. Removed in 1.3.3 in favor of a single-mode flow.
clone / inspired mode toggle that turned out to be the wrong split. Removed in 1.3.3 in favor of a single-mode flow.- Skill descriptions made count-agnostic. Replaced hard-coded `"67개 / 78개 / 88개 reference"` strings with `"실제 기업 reference"` so the description never drifts with the reference count. `omd:init` and `omd:harness` SKILL.md
"67개 / 78개 / 88개 reference" strings with "실제 기업 reference" so the description never drifts with the reference count. omd:init and omd:harness SKILL.md descriptions updated.- **New skill `omd:reference-capture`** — live brand-site CDP / playwright inspect. Writes `assets/_reference/<id>/` with `tokens.json`, `structure.json`, `fonts.json`, `screenshots/{hero-desktop,hero-mobile}.png`, `LICE
omd:reference-capture — live brand-site CDP / playwright inspect. Writes assets/_reference/<id>/ with tokens.json, structure.json, fonts.json, screenshots/{hero-desktop,hero-mobile}.png, LICENSE-NOTE.md, and attribution.md. The captured material is reference-only and never embedded in user product DOM.omd:init CLI drift fix: the skill body referenced omd init recommend and omd init prepare subcommands the CLI never actually exposed. Rewritten to use the bundled fingerprints + Bash directly. Skill is now self-contained.- 10 new Korean references (78 → 88 total). Fingerprints + DESIGN.md files now ship in the npm tarball: `socar`, `gangnamunni`, `kakaopay`, `zigzag`, `29cm`, `ably`, `banksalad`, `zigbang`, `wanted`, `remember`.
socar, gangnamunni, kakaopay, zigzag, 29cm, ably, banksalad, zigbang, wanted, remember.api/references/route.ts, lib/logos.ts, lib/homepage-urls.ts mappings extended for the new IDs. tokens.ts BRAND_COLORS const extended.78 references (+11 Korean cluster including KRDS)
The reference bundle expanded from 67 → 78 and the npm tarball now actually carries them.
yeogiotte (여기어때) · musinsa · kurly (마켓컬리) · ohouse (오늘의집) · naver · yanolja (야놀자) · coupang · kakaobank · ridi · qanda · krds (Korea Republic Design System, 행정안전부 주관 — the first government DS in the bundle)..verification.md alongside its DESIGN.md documenting Tier 1 live DOM measurements, Tier 2 cross-check status, conflict matrix, and cited philosophy sources.data/reference-fingerprints.json regenerated → count 67 → 78, all 11 new entries added.data/reference-tags.md: 11 new rows + Korean shortcut buckets (한국 이커머스 · 한국 여행 · 공공·행정·정부).package.json files[] pointed at references/**/DESIGN.md which is now a local-dev symlink — npm doesn't follow symlinks in the whitelist, so 1.0.x shipped 0 reference files. Updated to web/references/*/DESIGN.md (the canonical path); tarball now contains all 78 DESIGN.md files.omd-init skill references the canonical web/references/<id>/DESIGN.md path inside the package..verification.md with conflict matrix). Skill behavior unchanged — this only deepens the source-of-truth.Onboarding banner correction
The install-skills "Next" panel still claimed "Hook이 자동으로 라우팅 — 디자인 의도 감지해서 하네스/스킬 호출" and described /omd-harness as "hook 우회". That language described the 1.0.0 forced-eval hook which was retired in 1.0.1 — auto-routing now happens via Claude's standard description matching, and the hook only gates on DESIGN.md existence. The banner is the first thing users see after install, so it's worth getting right even for a single panel.
install-skills Next panel:
/omd-harness <task> description: "hook 우회, 즉시 진입" → "즉시 진입"Trigger surface cleanup
Patch release focused on skill triggering — descriptions, hook behavior, and a stale dependency in the package manifest. No public API change.
description) as the single source of truth. Descriptions trimmed to ~230 chars on average (down from ~700) and rewritten in the canonical "what it does + use-when + chain hints" pattern that the rest of the Claude Code skill ecosystem uses. Modern models generalize from one phrase per language, so the keyword-inflated form was paying maintenance cost without measurable trigger gain.omd-apply, omd-init, omd-harness, omd-remember, omd-learn, omd-sync, omd-add-reference). About half of OmD users work in JP / TW, so they previously fell back to weaker description-only matching with English/Korean phrases..claude/hooks/skill-activation.cjs simplified from a keyword/regex forced-eval injector to a DESIGN.md existence gate. The "OMD SKILL ACTIVATION CHECK" block no longer appears on every UI prompt — the hook is silent unless DESIGN.md is missing and the prompt looks like UI work, in which case it surfaces a single one-line nudge to run omd:init first. The forced-eval layer was a custom belt-and-suspenders pattern from the 3.x model era; with 4.x description matching it became overlap and a second source of truth that drifted..claude/skills/skill-rules.json (dual source-of-truth for the forced-eval matcher).package.json files[].Skill-first
Breaking release. The CLI surface collapsed from 9 user-facing commands down to 1 (install-skills). All operational logic moved to skill markdown + agent prose. See MIGRATION.md.
generate, init recommend, init prepare, learn, remember, sync, context, harness, setup-blender, reference list/show, preview.src/index.ts): detectContext, extractUrl, renderPlan, applyOverrides, loadReference, appendEntry, writeAllShims, all v4 modules. The package no longer ships a programmatic API; use the skill markdown directly.omd-asset-curator agent: stack-aware asset medium selection. Detects framework (Next/Vue/Svelte/etc.), CSS framework, icon libs (lucide/heroicons), chart libs (recharts/chartjs/nivo/etc.), animation libs (framer-motion/lottie/rive). Recommends the best matching medium per asset (inline SVG / chart library / Lottie / Rive / Unsplash / 3D dispatch). Inline SVG recipes for liquid fills, progress indicators, simple icons, empty-state illustrations.omd-apply skill: explicit dispatch decision tree. Complex requests (assets, charts, screens, a11y, microcopy, persona) now route to specialized sub-agents instead of being handled inline.scripts/context.cjs: 80-line deterministic project scan helper invoked by master Phase A as a fast cache, optional but preserved for repeatability.omd-3d-blender agent: just-in-time install walkthrough (uv check → brew install / brew --cask blender → claude mcp add → addon prompt). No longer bundled into install-skills.MIGRATION.md, this CHANGELOG.md.@clack/prompts, commander, picocolors).package.json: removed main, types, exports fields. Bin-only package.omd-apply triggers tightened (39 → 23) so high-intent requests like "에셋 / 차트 / 아이콘" route to omd-asset-curator instead of being absorbed by omd-apply inline. Orphan omd-add-reference rule removed.cd my-project
npx oh-my-design-cli@latest install-skills
Then restart your agent (Cmd+Q + relaunch for Claude Code).
- Drop unused dependencies (shadcn, tw-animate-css).
- Trim 90% of npm tarball (drop research / preview / per-reference READMEs).
- Five usability fixes from npm-publish verification.
- First publish under the `oh-my-design-cli` npm name.
oh-my-design-cli npm name.