agentsclimarketplace

Design lint

Skill cubha/claude-workflow-plugins/plugins/design-lint/skills/design-lint

Curated marketplace of production-grade Claude Code skills & plugins — planning, parallel dev, debugging, design linting, adversarial review

Install
npx -y skills add cubha/claude-workflow-plugins --skill design-lint

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

결정론적(no-LLM) 디자인 안티패턴 린터. 렌더된 HTML/CSS(또는 standalone 프로토타입 HTML, 라이브 URL)를 DESIGN-TOKENS.md Ground Truth 대비 검사해 토큰 위생·색/폰트/스페이싱 일관성·AI-default 클리셰(beige 배경·text gradient·uppercase eyebrow 등)를 pass/fail로 판정한다. LLM 디자인 리뷰는 비재현적이라 게이트로 못 쓰지만 이 스킬은 동일 입력→동일 판정·0토큰이라 CI/파이프라인 게이트로 쓸 수 있다. '/design-lint', '디자인 린트', '디자인 검사', '토큰 위생 검사', 'design-lint', '안티패턴 검사', 'AI-default 검사', '디자인 일관성 검사' 언급 시, 그리고 리팩토링/리디자인 파이프라인이 시각 산출물을 검증할 때 호출한다.

SKILL.md

9.0 KB, as published. Nobody here has run it

DESIGN-LINT — 결정론적 디자인 안티패턴 린터

요구사항: detector 스크립트는 Node.js 18+ 로 실행한다(ESM .mjs, realpathSync/fileURLToPath 사용). 외부 npm 의존은 0개. 라이브 URL 검사 경로는 동봉된 playwright MCP(.mcp.json)를 사용한다.

RESOLVE INPUT → RUN DETECTORS(script) → REPORT → [GATE VERDICT]

존재 이유: "내 디자인 리뷰해줘"는 LLM이 매번 다르게 답해 게이트로 쓸 수 없다. 같은 안티패턴 목록을 순수 함수로 강제하면 동일 입력→동일 판정·0토큰·CI 실행 가능한 진짜 게이트가 된다. 이건 impeccable "anti-pattern ban list"의 고레버 절반(목록을 프롬프트가 아니라 탐지기로). LLM 판단 critic의 결정론 버전이라 보면 된다 — 코드/디자인 수정은 하지 않고 판정만 한다.

경계

LLM 디자인 리뷰design-lint
재현성매번 다름동일 입력→동일 출력
비용토큰 소모0토큰(스크립트)
게이트 적합부적합exit code로 CI 게이트
잡는 것주관적 미감객관적 안티패턴·토큰 위생

design-lint는 객관적으로 검증 가능한 것만 잡는다. "이 레이아웃이 우아한가" 같은 주관 판단은 범위 밖 — 그건 사람/디자인 리뷰 몫이다. 둘은 상보적이다. (frontend-design 스킬이 함께 설치돼 있으면 주관적 미감 방향은 그쪽에 맡기고 이 스킬은 객관 게이트만 담당한다.)


Phase 0: PARSE

인자기본값설명
입력 (첫 비플래그)docs/design/prototype/*.html검사할 HTML 글롭, 또는 http(s):// URL
--tokens {경로}docs/design/DESIGN-TOKENS.md 자동탐색토큰 위생 검사 기준. 없으면 hygiene 스킵(false positive 방지)
--gateOFFerror 발견 시 비-제로 종료로 호출 파이프라인을 막는다
--max-colors Nreferences 참조임계값 오버라이드

Phase 1: RESOLVE INPUT

  1. 입력이 http(s)://이면 → Playwright로 렌더 후 정규화한다. (라이브 사이트·배포본 검사 경로)
    • 뷰포트 고정 필수 — box 측정(w/h/maxWidth)은 뷰포트 의존이라 고정 안 하면 결정론이 깨진다. browser_resize1280×800을 먼저 박는다(반응형 판정이 필요하면 데스크탑+모바일 2개 고정 뷰포트로).
    • browser_navigate → 임시 HTML: browser_evaluatedocument.documentElement.outerHTML 덤프를 <style> 인라인 형태로 저장(정규식 detector 입력).
    • computed-style 관측(Group A: 대비비·box-model·구조): node scripts/design-lint.mjs --observe-snippet로 수집 스니펫 문자열을 얻어 그대로 browser_evaluate에 주입 → 반환된 관측 배열(JSON)을 obs.json으로 저장 → 본 실행에 --observed obs.json으로 전달한다. (playwright npm 의존 0 — computed-style COLLECT_SNIPPET 패턴)
    • --observed 없이 실행하면 Group A detector는 skip(report observed: skipped)되고 정규식 detector만 돈다. 라이브URL 경로에서만 대비비/box-model이 활성된다.
  2. 입력이 글롭이면 → Glob으로 파일 목록 확정. 0개면 사용자에게 경로 확인.
  3. --tokens 미지정 시 docs/design/DESIGN-TOKENS.md를 Glob으로 자동탐색. 있으면 토큰 위생 ON, 없으면 OFF(경고만).

왜 standalone HTML이 1차 입력인가: framework-neutral standalone HTML(예: 프로토타입 산출물)을 Ground Truth로 삼으면 프레임워크 빌드 없이 즉시 검사 가능하다. 인라인 <style> 기반 프로토타입이면 정규식 detector가 바로 돈다.


Phase 2: RUN DETECTORS

번들 스크립트를 실행한다 (LLM 호출 없음):

node ${SKILL_DIR}/scripts/design-lint.mjs <파일들> [--tokens <경로>] [--md]

스크립트는 각 detector를 (harvest, ctx) => Finding[] 순수 함수로 돌려 {id, severity, msg, evidence, file}를 모은다. severity=error는 게이트를 막고, warn은 보고만 한다. 현재 47개 전부 구현, 전체 분류는 references/detectors.md 참조. 정규식 detector는 standalone HTML에서 바로 돌고, Group A(대비비 D-COLOR-05/06·box-model D-A11Y-02/D-SPACE-03·구조 D-LAYOUT-03/04·런타임 오버플로우 D-LAYOUT-08~11)는 --observed(라이브 URL computed-style 수집, Phase 1 참조) 있을 때만 활성·없으면 skip. 색만으로 상태 구분(구 D-A11Y-03)은 DOM 자식 콘텐츠가 필요해 폐기했다(재구현 금지 — detectors.md).

스크립트 출력(JSON)을 받아 그대로 신뢰한다. 임의로 detector를 추가 판단하지 말 것 — 결정론성이 이 스킬의 전부다. 새 규칙이 필요하면 detectors.md에 정의하고 스크립트에 함수로 추가한 뒤 정량 케이스(양성/음성 HTML)로 precision/recall을 검증한다(프롬프트로 때우지 않는다).


Phase 3: REPORT

🔎 design-lint — {PASS|FAIL}
─────────────────────────────
검사 파일:   {N}개
토큰 위생:   {checked|skipped}
detector:    47종 구현 ({run} 함수 실행)
판정:        error {E} · warn {W}
─────────────────────────────
[error] D-COLOR-02  토큰 외 하드코딩 색 7종 — prototype/02.html
        #d94f3a #2ecc71 ...
[warn]  D-AIDEFAULT-01  beige 배경 — prototype/01.html
...
  • error 0 → PASS. error ≥1 → FAIL.
  • error는 "토큰 위생 위반"처럼 객관적 계약 위반만. 클리셰(beige·gradient text 등)는 warn(맥락상 의도일 수 있음).

Phase 4: GATE (호출 파이프라인용)

exit code 계약--gate가 있을 때만 error 발견 시 비-제로(1) 종료한다. --gate 없이 실행하면 error가 있어도 항상 exit 0(순수 리포터) — 판정은 JSON verdict/summary.error에 담긴다. 그래서 standalone /design-lint는 보고만 하고, 파이프라인만 게이팅된다.

호출처호출 형태삽입 지점FAIL 판정 시
CI / verify 스텝--gate빌드/검증 스크립트 내(시각 산출물 존재 시)비-제로 종료로 파이프라인 차단
리팩토링·리디자인 등 후속 워크플로우--gate시각 검증 단계(스크린샷 회귀와 병행 가능)JSON summary.error ≥ 1 → 재수정 이슈로 환류
standalone플래그 없음/design-lint 직접보고만 (exit 0)

호출 측은 exit code뿐 아니라 JSON verdict/summary.error를 읽어 판정할 수 있다(모델 오케스트레이션 파이프라인은 셸 &&가 아니라 출력을 읽는 구조가 자연스럽다). --gate의 비-제로 종료는 CI/셸 게이트 신호다.

warn은 게이트를 막지 않는다 — 안티패턴이 의도적 디자인 결정일 수 있으므로 사람이 본다. error(객관적 계약 위반)만 자동 차단한다. 이 분리가 false-positive로 파이프라인을 막지 않게 하는 핵심이다.


검증

이 스킬의 가치는 "detector가 실제 안티패턴을 잡고 깨끗한 디자인은 통과시키는가"로 판정한다. 안티패턴을 심은 HTML / 깨끗한 HTML / 토큰 위생 위반 fixture로 **precision(거짓양성 없음)·recall(놓침 없음)**을 정량 확인한 뒤 detector를 확장한다. 확장 절차는 references/detectors.md의 "확장 원칙" 참조.

주의사항

  • 결정론 유지가 최우선 — detector는 전부 순수 함수. LLM 추론을 섞으면 게이트 가치가 사라진다.
  • 토큰 없으면 hygiene 스킵 — DESIGN-TOKENS.md 없는 프로젝트에서 모든 색을 error로 잡으면 노이즈. 명시적으로 끈다.
  • standalone HTML 범위 — 정규식 파싱은 인라인 <style> 프로토타입에 충분. 복잡한 외부 CSS·빌드 산출물은 Playwright computed-style 경로로 정규화 후 검사.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.