세 가지를 고친다. 전부 실제 사용에서 드러난 것이다.
1) 0단계에서 가정으로 채우던 것을 인터뷰로 바꾼다
"꽃집 사이트 만들어보자"를 받고 업종 성격·목표 행동·톤·이름을 혼자 정했다.
물어보니 넷 중 넷이 달랐다(일상 구독 → 하이엔드 스튜디오, 문의 하나 → 넷 다,
톤 미정 → 에디토리얼, 이름 지어냄 → 목요일의 화원).
그대로 갔으면 레퍼런스 세 개를 전부 틀린 방향에서 골랐다.
SKILL.md 0단계에 질문 도구로 한 번에 묻는 절차를 넣었다. 무엇을 묻고
무엇을 묻지 않는지, 답이 모순될 때 어떻게 정리하는지까지 적었다.
2) 레퍼런스가 막히면 브라우저를 띄운다
Aesop(403) → Kinto(404) → Hasami(DNS) → MUJI(타임아웃)로 네 번 왕복하고
톤 레퍼런스를 하나도 못 얻었다. 좋은 레퍼런스일수록 봇을 막는다.
galleries.md 에 headed 브라우저로 직접 열어 스크린샷과 실측값을 받는
방법을 넣고, 접근 실패 2회면 바로 전환하도록 규칙을 세웠다.
Playwright 를 선택 의존성으로 잡았다(core/tools.ts).
- 온보딩 마지막에 설치 여부를 묻는다. 건너뛰어도 스킬은 동작한다
- `designpaca tools` 로 상태 확인, `--yes` 로 설치
- 수백 MB 라 --yes 없이는 상태만 보여준다
- MCP 서버는 설치만 하고 등록 명령은 안내만 한다(에이전트 설정을
대신 건드리지 않는다)
3) 온보딩 말투
"이제 브리프를 던져라", "설치해라", "건너뛴다" — 사용자를 향한 문구가
명령조였다. 스킬 문서의 단정한 반말은 의도지만 CLI UI 는 다르다.
전부 존댓말로 바꾸고, 각 단계가 왜 필요한지 설명을 붙였다.
명령조가 다시 섞이지 않도록 검사하는 테스트를 넣었다(테스트 22 → 25개).
|
||
|---|---|---|
| .. | ||
| scripts | ||
| src | ||
| test | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| tsup.config.ts | ||
designpaca
웹 디자인 파이프라인 스킬을 Claude Code · Codex · Cursor 에 한 줄로 설치한다.
npx designpaca
무엇인가
designpaca 는 AI 코딩 에이전트에게 웹 디자인을 순서대로 하게 만드는 스킬이다.
"예쁘게 만들어줘"라고 하면 에이전트는 자기가 아는 기본값을 쏟아낸다. 보라-파랑 그라디언트, Inter, 3열 아이콘 카드, rounded-2xl shadow-lg. 못 만들어서가 아니라 결정을 안 해서 그렇게 된다. designpaca 는 그 결정을 강제한다.
7단계 파이프라인
| 단계 | 하는 일 | 통과 조건 |
|---|---|---|
| 0 | 브리프 게이트 | 무엇을·누구에게·제약 3줄 |
| 1 | 레퍼런스 조사 | 실제 사이트 3개를 서로 다른 층위에서 |
| 2 | 방향 결정 | 한 문장 컨셉 + 프리셋 + 감수할 리스크 하나 |
| 3 | 디자인 토큰 | 타입·색·간격·모션을 실제 값으로 + 성능 예산 |
| 4 | 구현 | 레이아웃 → 재질(SVG 필터) → 입체(three.js) → 모션 |
| 5 | 프리플라이트 | 하드 게이트 12개 + 슬롭 지문 grep |
| 6 | 결정 기록 | design.md 로 다음 실행에 인계 |
1단계를 건너뛴 디자인은 5단계에서 실패 처리된다. 머릿속 기본값이 아니라 실제로 존재하는 사이트에서 시작하게 만드는 것이 이 스킬의 핵심이다.
무엇이 들어 있나
- 레퍼런스 갤러리 라우팅 — 브리프별로 어디를 볼지. Awwwards 수상작이 럭셔리·자동차에 몰려 있어 SaaS 브리프에 이식하면 안 된다는 것까지
- AI 슬롭 지문 목록 — 실측 검출률과 함께. 보라 CTA 10.7%, 전체 대문자 헤드라인 10.5%, 번호 매긴 1·2·3 단계 9.4%. grep 으로 기계 검출 가능
- SVG 필터를 재질로 — 그레인·굴절·잉크 번짐·수차. 장식이 아니라 "이 디자인의 표면은 무엇인가"를 정하는 도구로
- three.js를 예산 안에서 — 지연 로드, DPR 클램프, 품질 티어, 폴백. 캔버스를 LCP 요소로 만들지 않는 규칙
- 인터랙티브 모션 — 이징의 의미론, 마이크로 인터랙션,
prefers-reduced-motion의 올바른 대응 - 한글 조판 —
word-break: keep-all, line-height 1.6~1.8, 음수 자간 금지, 한글 폰트 페어링. 서구 레퍼런스에 없는 정보 - HTML-in-Canvas — Chrome 실험 API. 폴백을 완성한 뒤에만 얹도록 격리
설치
npx designpaca # 대화형 온보딩 (권장)
설치 대상을 자동 감지해서 기본 선택해준다.
비대화형
npx designpaca install -t claude-code,codex -s user -y
npx designpaca install -t cursor -s project
| 대상 | 설치 위치 |
|---|---|
claude-code |
~/.claude/skills/designpaca/ (또는 프로젝트 .claude/) |
codex |
~/.codex/skills/designpaca/ |
cursor |
.cursor/rules/designpaca.mdc (프로젝트 단위) |
agents-md |
AGENTS.md 에 블록 주입 |
사용
설치 후 에이전트에게 그냥 말하면 된다.
랜딩 페이지 만들어줘 — 수제 커피 로스터리, 원두 정기구독이 목적
Claude Code 에서는 /designpaca 로 명시적으로 부를 수도 있다.
명령어
npx designpaca update # 최신 스킬로 갱신
npx designpaca doctor # 설치 상태 진단
npx designpaca list # 설치 가능 대상과 현재 설치 목록
npx designpaca uninstall # 제거
업데이트가 내 수정을 덮지 않는다
스킬 파일을 직접 고쳤다면 update 는 그 파일을 건드리지 않고 건너뛴다. 설치 시점의 해시를 기록해두고 비교하기 때문이다.
강제로 최신 내용에 맞추려면 --force 를 쓴다. 이때도 원본은 .orig 로 남는다.
npx designpaca update --force
AGENTS.md 처럼 사용자 문서에 주입하는 경우, 마커 블록(<!-- designpaca:start -->) 안쪽만 교체한다. 문서의 나머지는 손대지 않는다. 제거할 때도 블록만 빼간다.
옵션
| 옵션 | 설명 |
|---|---|
-t, --target <id[,id]> |
claude-code codex cursor agents-md |
-s, --scope <범위> |
user (전역) | project |
-y, --yes |
확인 없이 진행 |
-f, --force |
직접 수정한 파일도 덮어쓴다 (.orig 백업) |
--dry-run |
쓰지 않고 계획만 출력 |
--no-update-check |
새 버전 확인 생략 |
요구사항
Node 20.11 이상.
링크
라이선스
MIT