TrendShift 딥다이브 · 2026-07-17 · Daily #15

ibelick/ui-skills 딥다이브
— AI에게 "딱 필요한 UI 스킬만" 골라 먹이는 라우터

UI Skills디자인 엔지니어를 위한 AI 스킬 179개를 한데 모아 색인하고, 작업에 맞는 "가장 작은 유용한 스킬 묶음"만 골라 에이전트에게 물려 주는 라우터 겸 레지스트리다. 실체는 두 개가 한 저장소에 들어 있다 — npx ui-skills CLI(에이전트를 알맞은 스킬로 안내)② ui-skills.com 웹사이트(179개 스킬 카탈로그). 만든 사람은 Motion Primitives·Prompt Kit로 유명한 디자인 엔지니어 Julien Thibeaut(ibelick). 여기서 가장 먼저 각인할 발상 하나 — "스킬을 전부 컨텍스트에 쏟아붓지 말고, 라우터 스킬이 카테고리를 판단해 딱 1~3개만 로드한다"는 컨텍스트 이코노미다. 이 문서는 소스를 직접 클론해 "여기서 무엇을 배울 수 있는가"를 파고든다. (저장소: ibelick/ui-skills · Astro + Cloudflare Workers 웹 + Node CLI · MIT © 2026 Julien Thibeaut · npm v0.2.3 · 최신 커밋 2026-07-16 1b3c6c0 · TrendShift Daily #15 · #AI agent #AI skills)
목차
  1. 프로젝트 한 줄 요약
  2. 왜 지금 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트
  7. 시스템 · 실행 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한 줄 요약

"스킬 모음집"이 아니라 스킬을 골라 주는 라우터 + 색인(레지스트리)이다

ibelick/ui-skills(제품명 UI Skills)는 "AI 코딩 에이전트를 위한 UI/디자인 스킬 색인 겸 라우터"다. 2026년 들어 Claude Code·Cursor·Codex 같은 에이전트에 물려 주는 스킬(SKILL.md)이 폭발적으로 쏟아졌는데, 문제는 "너무 많다"는 것이다. UI Skills는 이 혼돈 위에 얹히는 큐레이션 + 안내 레이어다 — 179개의 UI 스킬을 카테고리별로 색인하고, 작업 하나에 딱 필요한 1~3개만 골라 에이전트의 컨텍스트에 넣게 한다.

이 저장소에는 성격이 다른 두 물건이 함께 들어 있다. 하나는 CLI(npx ui-skills) — 터미널에서 카테고리를 훑고 스킬 본문을 꺼내 오는 명령어 도구. 다른 하나는 웹사이트(ui-skills.com) — Astro로 만든 서버 렌더링 사이트로, 사람에게는 예쁜 카탈로그를, 에이전트에게는 llms.txt·registry.txt 같은 기계가 읽기 좋은 텍스트 엔드포인트를 준다. 놀라운 점은 179개 스킬 중 저장소가 직접 품은 건 단 6개뿐이고, 나머지 173개는 다른 사람들 저장소를 가리키는 링크(포인터)라는 것 — 즉 UI Skills는 거대한 코드 뭉치가 아니라 주소록에 가깝다.

핵심 용어 · 이게 뭐냐
SKILL.md — 에이전트에게 물려 주는 "절차적 지식" 파일
스킬(Skill)은 Claude Code·Cursor·Codex 같은 에이전트가 특정 작업을 할 때 참고하는 지침서 마크다운 파일이다. 맨 위에 name·description 같은 메타데이터(프런트매터)를 달고, 본문에 "이럴 때는 이렇게 하라"는 규칙을 적는다. 에이전트는 description을 보고 "지금 이 스킬이 필요한가"를 판단해 필요할 때만 본문을 읽어 들인다. UI Skills가 하는 일은 이런 SKILL.md들을 잔뜩 모아 놓고, "지금 작업엔 이 스킬을 읽어라"라고 안내하는 것이다.
핵심 용어 · 이 프로젝트의 핵심 가치
라우터 스킬(Router Skill) · 컨텍스트 이코노미
스킬이 179개면 그걸 전부 에이전트에 넣을 수 없다 — 컨텍스트 창이 터지고, 주의가 흩어진다. UI Skills의 심장은 ui-skills-root라는 라우터 스킬이다. 이건 실제 UI 작업을 하는 스킬이 아니라, "작업 → 카테고리 판단 → 그 카테고리만 CLI로 열어 봄 → 가장 작은 유용한 스킬 1~3개만 로드"라는 고르는 절차를 적어 둔 메타 스킬이다. 즉 "무엇을 읽을지 결정하는 스킬"이 맨 앞에 서서, 나머지 178개는 필요할 때만 불려 나온다. 이 컨텍스트 이코노미(context economy) 발상이 UI Skills 전체를 관통한다.
한 문장 비유

"요리 재료 창고 전체를 주방에 쏟아붓는 대신, 메뉴에 맞는 재료만 꺼내 오는 수셰프"

스킬 179개를 통째로 AI에게 넘기는 건, 냉장고 안 재료 전부를 도마 위에 올려놓고 "알아서 요리해"라고 하는 것과 같다 — 공간은 꽉 차고, 정작 필요한 재료는 파묻힌다. UI Skills의 라우터 스킬은 수셰프처럼 굴린다: "오늘 메뉴는 애니메이션 버그 수정" → 창고의 'motion' 칸만 열어 봄 → 딱 맞는 재료 1~2개만 꺼내 도마에 올림.

그리고 이 창고는 대부분 남의 창고를 가리키는 주소록이다. 179개 재료 중 6개만 이 집 냉장고에 있고, 나머지는 "그 재료는 저 집(다른 GitHub 저장소)에 있으니 필요할 때 가져와"라는 링크(rawUrl 포인터)다. UI Skills는 재료를 다 쟁여 두는 대신, 어디에 무엇이 있는지를 안다.

2왜 지금 주목받는가

TrendShift Daily #15 · #AI agent #AI skills — "스킬 폭발기의 큐레이션 레이어 + 안티슬롭 + 유명 제작자"

2026년의 개발 트렌드를 한 단어로 요약하면 "스킬(Skills)"이다. OSSInsight 일간 트렌딩 목록만 봐도 절반이 *-skills 저장소일 정도로, 누구나 자기만의 SKILL.md 묶음을 쏟아 내고 있다. 그런데 이렇게 스킬이 많아질수록 진짜 문제는 "이 많은 스킬 중 지금 작업엔 뭘 써야 하고, 그걸 어떻게 컨텍스트에 넣지?"로 옮겨 간다. UI Skills는 정확히 이 빈틈을 파고든다 — 스킬을 만드는 게 아니라, 흩어진 스킬들을 색인하고 골라 주는 라우터를 자처한다.

포인트내용
정체디자인 엔지니어용 UI 스킬 레지스트리 + 라우터. CLI(npx ui-skills)와 웹사이트(ui-skills.com) 두 얼굴. 스킬을 만드는 도구가 아니라 고르는 도구.
차별점컨텍스트 이코노미 — 라우터 스킬이 "카테고리 판단 → 최소 스킬만 로드", 절대 3개 초과 금지. 179개를 통째로 안 넣는다.
제작자ibelick(Julien Thibeaut) — Motion Primitives, Prompt Kit, Zola의 제작자. 디자인 엔지니어 커뮤니티에서 이름값이 크다.
안티슬롭대표 스킬 baseline-ui가 "AI가 만든 밋밋한 UI(슬롭)"를 잡는 MUST/NEVER 규칙집. 이 규칙표 자체가 훌륭한 학습 자료.
연합(federation)179개 중 6개만 직접 호스팅, 173개는 42명의 다른 제작자 저장소를 가리키는 포인터. 독점 저장소가 아니라 열린 색인.

주목 포인트 1 — 스킬을 "더" 만드는 대신 "고르는" 층을 만들었다

대부분의 트렌딩 스킬 저장소는 "내가 만든 232개 스킬 모음!"처럼 을 자랑한다. UI Skills는 반대 방향이다. 핵심 제품은 스킬이 아니라 라우터 스킬 하나(ui-skills-root)와 레지스트리다. "무엇을 읽을지 결정하는 얇은 뇌"를 맨 앞에 두고, 실제 지식은 필요할 때만 불러온다. 스킬 인플레이션 시대에 "큐레이션과 라우팅이 곧 가치"라는 베팅이고, 이게 신선하게 먹혔다.

주목 포인트 2 — "디슬롭(deslop)"이라는 시대정신

AI가 짠 UI는 특유의 냄새가 있다 — 보라색 그라데이션, 과한 글로우, 아무 데나 붙은 애니메이션, 제각각인 여백. UI Skills의 간판 스킬 baseline-ui는 이걸 "슬롭(slop, AI가 뱉는 밋밋·조잡한 결과물)"이라 부르며, "NEVER use purple or multicolor gradients", "NEVER exceed 200ms for interaction feedback", "MUST use h-dvh not h-screen" 같은 수십 개 규칙으로 잡아낸다. 2026년 "AI 슬롭에 질렸다"는 정서와 정확히 맞물려, 이 안티슬롭 규칙집이 입소문의 중심이 됐다.

주목 포인트 3 — 에이전트 네이티브 웹이라는 설계

UI Skills 웹사이트는 사람만을 위한 게 아니다. 모든 페이지에 기계가 읽는 쌍둥이가 있다 — 사이트 전체 지도는 /llms.txt, 스킬 색인은 /skills/registry.txt(탭 구분 텍스트), 스킬 하나하나는 /skills/<slug>/llms.txt로 원본 SKILL.md를 그대로 내려 준다. 에이전트가 방문해도 곧바로 소화할 수 있는 웹을 어떻게 짓는지 보여 주는 좋은 표본이다.

균형 잡힌 시각
과대평가는 금물 — 아직 "얇은" 프로젝트다

냉정히 보면 UI Skills의 핵심 코드는 작다. 정말로 '만든' 스킬은 6개뿐이고, CLI는 순수 Node 몇백 줄, 나머지는 웹사이트다. 라우팅도 AI 모델이 아니라 "카테고리 고르고 링크 열기"라는 규칙 기반이라, 마법 같은 알고리즘은 없다. 진짜 가치는 발상과 큐레이션(레지스트리 SSOT 설계, 안티슬롭 규칙, 에이전트 네이티브 엔드포인트)에 있지, 대단한 엔지니어링 난이도에 있지 않다. 그래서 오히려 초보자가 통째로 읽어 낼 수 있는 학습용 표본으로 훌륭하다.

3기술 스택 전체 지도

CLI(Node + tsx) · 웹(Astro SSR + Cloudflare Workers) · UI(React 19 + Tailwind v4 + Base UI)

UI Skills는 하나의 저장소지만 기술적으로는 세 덩어리로 나뉜다: ① 터미널에서 도는 CLI, ② 클라우드플레어에 배포되는 Astro 웹사이트, ③ 모든 것의 원천인 데이터 레이어(레지스트리). 순서대로 지도를 그려 보자.

① CLI — Node + tsx로 TypeScript를 "그대로" 실행

요소정체 · 쓰임새
진입점bin/ui-skills.jspackage.jsonbin에 등록된 런처. npx ui-skills가 이걸 실행.
tsxTypeScript를 컴파일 없이 바로 실행하는 런타임. 런처가 node --import tsx ui-skills.tsspawn으로 띄워, .ts 소스를 그대로 굴린다.
본체bin/ui-skills.tsstart/categories/list/get 4개 명령. 순수 Node(fs·fetch)만 쓰고 외부 라이브러리 의존 0.
동작get <slug>로컬 skills/<slug>/SKILL.md가 있으면 그걸, 없으면 rawUrl을 fetch해서 출력(로컬 우선, 원격 폴백).

② 웹사이트 — Astro SSR을 Cloudflare Workers 위에서

요소정체 · 쓰임새
Astro 5.16서버 렌더링(SSR) 웹 프레임워크. output: "server"로 페이지를 요청 시 서버에서 생성. 콘텐츠 위주 사이트에 강함.
Cloudflare 어댑터@astrojs/cloudflare — Astro 앱을 Cloudflare Workers(엣지 서버리스)에 올린다. wrangler.jsonc가 배포 설정.
React 19 (아일랜드)사이트 대부분은 정적 Astro, 인터랙션이 필요한 조각(검색 다이얼로그·복사 버튼)만 React 컴포넌트로 심는 아일랜드 아키텍처.
Tailwind CSS v4@tailwindcss/vite 플러그인으로 통합된 최신 v4. 제작자 규칙은 "Tailwind 기본값을 쓰고 임의값을 남발하지 말 것".
Base UI@base-ui/react접근성 갖춘 헤드리스 UI 프리미티브(Radix 계열 후속). baseline-ui 스킬이 신규 프리미티브로 권장하는 바로 그것.
motionframer-motion의 새 이름. 애니메이션이 필요할 때 쓰는 표준. marked는 SKILL.md 마크다운을 HTML로 렌더.

③ 데이터 · 폰트 · 빌드

요소정체 · 쓰임새
레지스트리src/data/registry.ts179개 스킬을 담은 단 하나의 TypeScript 배열. CLI·웹·txt 엔드포인트가 전부 여기서 나온다(단일 진실원).
토픽src/data/topics.ts — 26개 카테고리(디자인 코어 11 + 넓은 프론트엔드 8 + 프레임워크별 7). 카테고리끼리 "관련 토픽" 그래프도 정의.
폰트JetBrains Mono · Fira Mono(@fontsource). 사이트 규칙이 "코드·명령어·모노스페이스 UI엔 JetBrains Mono".
TypeScript 5.6전 코드가 TS. 테스트 프레임워크·린터는 없고 prettier + astro check(타입체크)만.
배포 자동화GitHub Actions release.ymlv*.*.* 태그를 밀면 타입체크 → npm publish → GitHub 릴리스 생성.
함정 · 오해 방지
"UI 컴포넌트 라이브러리"가 아니다

이름이 "UI Skills"라 shadcn/ui처럼 복붙하는 컴포넌트 모음이라 오해하기 쉽다. 아니다. 여기엔 재사용할 버튼·카드 컴포넌트가 들어 있지 않다. UI Skills가 주는 건 컴포넌트가 아니라 "UI를 만들 때 에이전트가 참고할 지침(SKILL.md)"과, 그 지침들을 골라 주는 라우터다. 사이트의 src/ui/*.astro는 이 웹사이트 자체를 만드는 부품일 뿐, 배포되는 제품이 아니다.

4아키텍처 심화 분석

단일 진실원(레지스트리) 하나가 CLI·웹페이지·txt 엔드포인트를 전부 낳는다

UI Skills의 아키텍처를 이해하는 열쇠는 딱 하나 — 모든 것이 src/data/registry.ts 배열 하나에서 파생된다는 것이다. 스킬 하나를 이 배열에 추가하면, CLI 목록에도·웹 카탈로그에도·llms.txt에도·registry.txt에도·사이트맵에도 자동으로 나타난다. 이 단일 진실원(SSOT, Single Source Of Truth) 패턴이 전체 구조를 떠받친다.

┌─────────────────────────────────────────────────────────────┐ │ 단일 진실원: src/data/registry.ts │ │ registrySource[] = 179 × { slug, user, repo, rawUrl, │ │ githubUrl, name, description, │ │ topics[] } │ │ │ │ 빌드 시 파생 → pathSlug( user/slug, 충돌 시 user/repo/slug ) │ │ sourceKey, sourceLabel 자동 계산 │ └───────────────┬──────────────────────────────┬──────────────┘ │ │ ┌─────────▼─────────┐ ┌─────────▼───────────┐ │ skills.ts (파생) │ │ topics.ts (26개) │ │ 표시용 가공 + 정렬 │ │ 카테고리 + 관련그래프 │ │ (root→baseline→…) │ └─────────┬───────────┘ └───┬───────────┬───┘ │ │ │ │ ┌──────▼────┐ ┌────▼──────────────┐ ┌──────▼──────────────┐ │ CLI │ │ Astro 웹 페이지 │ │ 에이전트 엔드포인트 │ │ ui-skills │ │ /skills, /agents │ │ /llms.txt │ │ start │ │ /skills/[slug] │ │ /skills/registry.txt│ │ categories │ │ /topics │ │ /skills/[slug]/ │ │ list --cat │ │ (사람용 HTML) │ │ llms.txt │ │ get <slug> │ └───────────────────┘ │ (기계용 text) │ └─────┬──────┘ └─────────────────────┘ │ │ get 실행 시 ▼ ┌─────────────────────────────────────────────┐ │ 로컬 skills/<slug>/SKILL.md 있나? │ │ 있음 → 파일 그대로 출력 (6개: ibelick 자작) │ │ 없음 → rawUrl 을 fetch (173개: 남의 저장소) │ └─────────────────────────────────────────────┘

설계 패턴 1 — 라우터 스킬(Progressive Disclosure)

가장 핵심적인 발상. ui-skills-root/SKILL.md는 "UI 작업을 하는" 스킬이 아니라 "무엇을 읽을지 고르는" 스킬이다. 그 안의 프로토콜은 이렇게 못 박는다:

# ui-skills-root 의 선택 규칙 (요지)
1. UI 작업인가?  아니면 → "no skill needed" 반환
2. 어느 카테고리인가 판단
3. 그 카테고리를 CLI로 열어 봄 (list --category)
4. 가장 작은 유용한 스킬 묶음만 로드
5. 그 컨텍스트로 구현

Prefer 1 skill. Use 2 only when 두 각도가 필요할 때.
Use 3 only for 광범위 리뷰/재설계.  Never more than 3.

이건 점진적 공개(Progressive Disclosure)의 교과서적 구현이다 — 처음엔 얇은 라우터만 컨텍스트에 있고, 필요가 확인된 뒤에야 무거운 지식이 딱 그만큼 열린다. "자율성"이 아니라 "컨텍스트 절약"을 최적화한다.

설계 패턴 2 — 포인터 레지스트리(연합 구조)

레지스트리 179개 중 6개만 로컬 파일, 173개는 rawUrl로 남의 GitHub를 가리키는 포인터다. 제작자는 42명(MengTo 29개, pbakaus 18개, antfu 17개, mattpocock 13개…). 즉 UI Skills는 스킬을 소유·복제하지 않고 주소만 안다. npm 레지스트리가 패키지 소스를 다 품는 게 아니라 "어디서 받을지"를 아는 것과 같은 구조다. 장점은 원저작자가 자기 저장소에서 스킬을 업데이트하면 UI Skills는 fetch로 항상 최신을 가져온다는 것. 단점은 원본이 사라지면 링크가 깨진다는 것(그래서 CLI의 get은 fetch 실패 시 상태코드로 실패를 알린다).

비유 · 도서관 카드 목록

옛날 도서관의 카드 목록함을 떠올리면 된다. 서랍 안의 색인 카드는 책 자체가 아니라 "그 책은 3층 B열 12번 서가에 있음"이라는 위치 정보다. UI Skills의 레지스트리가 딱 이 목록함이고, rawUrl이 서가 위치다. 사서(라우터 스킬)는 "이 주제엔 이 카드"라고 골라 주고, 실제 책(SKILL.md 본문)은 필요할 때 get으로 서가에서 꺼내 온다. 6권만 목록함 바로 옆 특별 서가(로컬)에 있고, 나머지는 다른 건물(남의 저장소)에 있다.

설계 패턴 3 — 파생 데이터와 충돌 해소

레지스트리 원본(registrySource)에는 pathSlug가 없다. 빌드 시 코드가 계산한다 — 기본은 user/slug(예: ibelick/baseline-ui), 만약 같은 경로가 이미 쓰였으면 user/repo/slug자동 충돌 해소. 이렇게 하면 서로 다른 제작자가 같은 이름의 스킬을 올려도 URL이 안 겹친다. 표시용 데이터(skills.ts)는 여기서 한 번 더 가공되며, 정렬은 라우터(ui-skills-root)를 맨 앞, 간판 스킬(baseline-ui)을 두 번째로 고정하고 나머지는 알파벳순으로 놓는다.

설계 패턴 4 — 에이전트 네이티브 엔드포인트

웹의 모든 표면에 기계가 읽는 판본이 붙는다. /llms.txt는 사이트 지도 + 전체 스킬 카탈로그를, /skills/registry.txtpathSlug ⇥ rawUrl ⇥ description 탭 구분 표를, /skills/<slug>/llms.txt는 그 스킬의 원본 SKILL.md를 rawUrl에서 당겨 그대로 준다. 여기에 X-Robots-Tag: noindex를 달아 사람 검색엔진에는 안 걸리되 에이전트는 소화하게 한다. GitHub 별 수는 Cloudflare Cache API로 24시간 캐시해 API 호출을 아낀다.

5디렉토리 구조 해부

69개 추적 파일 — bin(CLI) · skills(자작 6개) · src(웹) 세 축
ui-skills/ ├── bin/ # ── CLI 진입 ── │ ├── ui-skills.js # npm bin 런처 → tsx로 .ts 실행 │ ├── ui-skills.ts # 본체: start/categories/list/get (순수 Node) │ └── ui-skills # POSIX 쉘 폴백 런처 │ ├── skills/ # ── 로컬 호스팅 스킬 6개 (ibelick 자작) ── │ ├── ui-skills-root/ # ★ 라우터 스킬 (npx ui-skills start 가 출력) │ ├── baseline-ui/ # ★ 안티슬롭 MUST/NEVER 규칙집 (간판) │ ├── improve-ui/ # 읽기전용 UI 감사 + 실행계획 작성 │ │ ├── SKILL.md │ │ ├── agents/openai.yaml # Codex/ChatGPT 등록 매니페스트 │ │ └── references/plan-template.md │ ├── fixing-accessibility/ # ARIA·키보드·대비 접근성 수정 │ ├── fixing-metadata/ # <head> 메타·OG·SEO 수정 │ └── fixing-motion-performance/ # 레이아웃 스래싱·컴포지터 애니 수정 │ ├── src/ # ── Astro 웹사이트 ── │ ├── data/ │ │ ├── registry.ts # ★ 단일 진실원 (179 스킬) │ │ ├── skills.ts # 파생 + 정렬 (root→baseline→…) │ │ ├── topics.ts # 26 카테고리 + 관련그래프 │ │ └── agents.ts # 지원 에이전트 20종 (Claude Code·Cursor·Codex…) │ ├── pages/ # Astro 라우트 │ │ ├── index.astro / skills/ / agents/ / 404 │ │ ├── llms.txt.ts # 기계용: 사이트+카탈로그 │ │ ├── skills/registry.txt.ts # 기계용: pathSlug⇥rawUrl⇥desc │ │ ├── skills/[...slug]/llms.txt.ts # 기계용: 원본 SKILL.md fetch │ │ ├── api/github-stars.ts # 별 수 (Cache API 24h) │ │ └── sitemap.xml.ts / robots.txt.ts │ ├── lib/ # github-stars, format-stars │ ├── ui/ # Astro/React 컴포넌트 (사이트 부품) │ ├── layouts/ styles/ │ └── middleware.ts # 후행 슬래시 301 리다이렉트 │ ├── scripts/write-assetsignore.mjs # Cloudflare 빌드 후처리 훅 ├── astro.config.mjs # Cloudflare 어댑터·SSR·React·Tailwind ├── wrangler.jsonc # Cloudflare Workers 배포 설정 ├── AGENTS.md # 저장소 자체의 에이전트 규칙(사이트 스타일·스킬 추가법) └── package.json # bin: ui-skills · v0.2.3 · MIT

핵심만 다시 짚으면 — 배울 게 가장 많은 세 곳은 ① bin/ui-skills.ts(작고 깔끔한 Node CLI), ② src/data/registry.ts(SSOT 설계의 실물), ③ skills/ui-skills-rootbaseline-ui(스킬 프롬프트 엔지니어링의 표본)다. 셋 다 짧아서 초보자도 한 번에 통독할 수 있다.

함정 · AGENTS.md의 규칙
스킬 추가는 registry.ts에만 — 로컬 파일 금지

저장소 루트의 AGENTS.md는 못 박는다: "스킬은 src/data/registry.ts에만 추가하라. 저장소가 실제로 그 스킬 마크다운을 호스팅하지 않는 한 skills/* 로컬 파일을 만들지 말라." 즉 남의 스킬을 넣을 땐 rawUrl 포인터만 등록하는 게 원칙이다. 이 규칙을 모르고 로컬에 파일을 복제하면 "포인터 레지스트리"라는 설계 철학이 깨진다.

6학습 포인트

작지만 밀도 높은 저장소 — CLI·SSOT·스킬 프롬프트·엣지 배포를 한 번에 배운다

배울 것 1 — TypeScript를 컴파일 없이 실행하는 CLI 패턴

bin/ui-skills.js는 아주 실용적인 트릭을 보여 준다. npm의 bin.js만 안전하게 가리킬 수 있는데, 정작 로직은 TypeScript로 쓰고 싶다. 해법: 얇은 .js 런처가 tsx를 찾아 node --import tsx 본체.tsspawn한다. 자식 프로세스의 종료 코드·시그널까지 부모로 전달해 깔끔히 마무리한다. "TS로 CLI를 쓰되 사용자는 빌드 없이 npx로 바로 실행"이라는 요구를 이렇게 푼다.

// bin/ui-skills.js (요지)
const tsxPath = pathToFileURL(require.resolve("tsx")).href;
const child = spawn(process.execPath,
  ["--import", tsxPath, scriptPath, ...process.argv.slice(2)],
  { stdio: "inherit" });
child.on("exit", (code, signal) => { /* 코드·시그널 전달 */ });

배울 것 2 — 단일 진실원(SSOT)에서 여러 출력 뽑기

데이터를 한 곳(registry.ts)에만 두고, CLI 목록·웹 페이지·llms.txt·registry.txt·사이트맵을 전부 여기서 파생하는 구조는 어떤 프로젝트에도 옮겨 붙일 수 있는 값진 패턴이다. 핵심 교훈: 원본 데이터는 최소한만 담고(pathSlug 같은 건 저장하지 말고 계산하라), 표시·정렬·충돌해소 같은 가공은 파생 단계에서 하라. 그러면 스킬 하나를 추가할 때 손댈 곳이 딱 한 군데다.

배울 것 3 — SKILL.md 프롬프트 엔지니어링(라우터 + 규칙집)

두 자작 스킬은 스타일이 정반대라 나란히 읽으면 교육적이다. ui-skills-root"의사결정 절차"형 프롬프트(번호 매긴 프로토콜 + "Never more than 3" 같은 상한). baseline-ui"단정형 규칙집"(MUST/NEVER/SHOULD로 수십 개 제약). 전자는 어떻게 고를지, 후자는 무엇을 지킬지를 가르친다. 좋은 스킬은 장황한 설명이 아니라 검증 가능한 단문 규칙의 목록이라는 걸 보여 준다.

그대로 훔쳐 쓸 규칙 · baseline-ui 발췌
에이전트 없이 사람이 봐도 유용한 UI 체크리스트

NEVER h-screenh-dvh 사용 · MUST 아이콘 버튼에 aria-label · NEVER 200ms 넘는 인터랙션 피드백 · MUST 컴포지터 속성(transform/opacity)만 애니메이션(width/top 금지) · MUST 파괴적 동작엔 AlertDialog · NEVER 보라/무지개 그라데이션 · MUST 숫자엔 tabular-nums · SHOULD 뷰당 액센트 컬러 하나만. 이 목록만 지켜도 "AI 티" 나는 UI가 확 줄어든다.

배울 것 4 — 엣지에서 도는 Astro SSR + 에이전트 네이티브 웹

Astro를 output: "server"로 두고 Cloudflare Workers에 얹는 실전 구성을 통째로 볼 수 있다. 덤으로 배우는 것들: 후행 슬래시를 정리하는 middleware.ts, 외부 API(GitHub 별)를 Cache API로 캐싱하는 법, 그리고 같은 데이터를 사람용 HTML과 기계용 llms.txt 두 판본으로 서빙하는 에이전트 네이티브 설계. 2026년 "웹을 에이전트가 읽는다"는 전제로 사이트를 짓는 감각을 익히기 좋다.

실습 아이디어(가볍게)

내 프로젝트에도 public/llms.txt를 하나 만들어 "이 사이트는 무엇이고, 주요 페이지는 어디"를 적어 보자. UI Skills의 llms.txt.ts가 좋은 최소 예시다. 또 baseline-ui의 규칙 5개를 골라 .cursor/rulesCLAUDE.md에 붙여 넣고, 실제로 에이전트 출력이 달라지는지 관찰해 보라.

7시스템 · 실행 요구사항

쓰는 데는 Node만, 만드는 데는 Cloudflare 계정 — GPU·API 키 전부 불필요
목적요구사항
CLI 사용Node 20+ 와 npx면 끝. 설치조차 불필요 — npx ui-skills가 바로 실행. GPU·계정·API 키 없음.
스킬 본문 받기get <slug>로 원격 스킬(173개)을 볼 땐 인터넷 연결 필요(raw.githubusercontent.com에서 fetch). 로컬 6개는 오프라인도 가능.
웹사이트 개발Node + npm, npm run dev(Astro 개발 서버). 로컬에서 페이지·엔드포인트 미리보기.
웹사이트 배포Cloudflare 계정 + wrangler. npm run build → Workers 배포. postbuilddist/.assetsignore를 써서 워커 번들을 정적 자산에서 제외.
별 수 표시(선택)레이트리밋 여유를 위해 GITHUB_TOKEN 환경변수(선택). 없어도 동작하고 결과는 24시간 캐시.
비유 · 진입 장벽이 거의 없다

이 저장소는 "무거운 AI 인프라"가 전혀 아니다. CLI를 써 보는 데는 npx ui-skills start 한 줄이면 되고, 다운로드도 로그인도 GPU도 필요 없다. 라우팅을 하는 주체는 무거운 모델이 아니라 당신의 에이전트(Claude Code 등)가 라우터 스킬의 지시를 읽고 스스로 판단하는 것이라, UI Skills 쪽엔 서버 연산이 거의 없다. "설치형 대형 앱"이 아니라 "얇은 안내판"이라 생각하면 정확하다.

8직접 해볼 수 있는 실습 과제

난이도별 6개 — CLI 체험부터 나만의 스킬·엣지 배포까지
난이도 ★☆☆ · 초급

과제 1 — 라우팅 흐름을 손으로 밟아 보기

터미널에서 순서대로 실행: npx ui-skills start(라우터 스킬 출력) → npx ui-skills categories(카테고리 26개) → npx ui-skills list --category motion(모션 스킬 목록) → npx ui-skills get baseline-ui(스킬 본문). 라우터가 "카테고리 → 목록 → 본문"으로 좁혀 가는 과정을 직접 체감하는 게 목표다.

난이도 ★☆☆ · 초급

과제 2 — baseline-ui 규칙을 내 코드에 적용

baseline-ui 규칙 중 5개(예: h-dvh, 아이콘 버튼 aria-label, 200ms 상한, tabular-nums, 액센트 1개)를 골라 내 컴포넌트를 손본다. 전후를 비교하며 "왜 이 규칙이 슬롭을 막는지"를 한 줄씩 적어 보라. 규칙을 외우는 게 아니라 이유를 이해하는 게 핵심.

난이도 ★★☆ · 중급

과제 3 — 레지스트리에 스킬 1개 추가(포인터)

저장소를 포크·클론하고 src/data/registry.ts의 배열에 항목 하나를 추가한다(slug/user/repo/rawUrl/githubUrl/name/description/topics). npx ui-skills listget에 잘 뜨는지 확인. 단일 진실원 한 곳만 고쳐도 CLI·웹·txt에 전부 반영되는 SSOT의 위력을 체험한다.

난이도 ★★☆ · 중급

과제 4 — 나만의 SKILL.md 작성

프런트매터(name·description)와 MUST/NEVER 규칙 본문을 갖춘 스킬 하나를 직접 쓴다(예: "폼 검증 UI 규칙"). skills/<slug>/SKILL.md로 로컬에 넣고 CLI get로컬 파일을 원격보다 먼저 집어 오는지 확인. 좋은 description이 곧 좋은 라우팅의 조건임을 느껴 본다.

난이도 ★★★ · 고급

과제 5 — 레지스트리를 소스로 새 출력 만들기

registry.ts를 읽어 카테고리별 마크다운 인덱스(예: docs/motion.md에 모션 스킬 목록+링크)를 생성하는 작은 스크립트를 짠다. 기존 llms.txt.ts·registry.txt.ts가 참고 예시. "하나의 데이터, 여러 관점의 출력"을 스스로 하나 더 늘려 보는 것.

난이도 ★★★ · 고급

과제 6 — Astro SSR을 Cloudflare Workers에 배포

npm run buildwrangler로 자신의 Cloudflare 계정에 배포한다. postbuild.assetsignore 훅이 왜 필요한지, middleware.ts의 후행 슬래시 리다이렉트가 어떻게 도는지 관찰. 엣지 서버리스에 SSR 앱을 올리는 전 과정을 손으로 익힌다.

9관련 기술 심화 학습 로드맵

4주 코스 — 스킬 규격 → CLI/SSOT → 엣지 배포 → 에이전트 네이티브 설계
주차주제 · 학습 목표
1주차
스킬 규격
SKILL.md와 에이전트 스킬 시스템을 이해한다. 프런트매터(name·description·metadata)의 역할, Claude Code·Cursor·Codex가 스킬을 언제 로드하는지. baseline-ui·ui-skills-root를 정독하며 "좋은 스킬 = 검증 가능한 단문 규칙 목록"을 체득. improve-ui의 agents/openai.yaml로 Codex 등록 방식도 확인.
2주차
CLI + SSOT
Node CLI 설계와 단일 진실원 패턴. bin/의 tsx 런처 트릭, process.argv 파싱, 종료 코드 규약. registry.ts를 모델 삼아 "원본 최소화 + 파생 계산(pathSlug 충돌해소)"을 직접 구현. commander/yargs 없이 순수 Node로 CLI 짜기.
3주차
엣지 SSR
Astro SSR + Cloudflare Workers. output: "server"와 어댑터, wrangler.jsonc, 아일랜드 아키텍처(React 조각만 하이드레이션). middleware.ts·Cache API·정적/동적 라우트 혼합. Tailwind v4 + Base UI로 접근성 있는 UI 부품 만들기.
4주차
에이전트 네이티브
컨텍스트 이코노미와 에이전트용 웹. 라우터 스킬/점진적 공개로 "최소 컨텍스트" 설계, llms.txt 관례, 같은 데이터의 사람용/기계용 이중 서빙. MCP·스킬 디렉터리(~/.claude/skills·~/.codex/skills)와의 연결까지 확장.

10핵심 키워드 사전

이 문서에서 반드시 챙길 용어 14개
용어 01
SKILL.md · 스킬(Skill)
에이전트가 특정 작업에 참고하는 지침 마크다운. 프런트매터(name·description)로 "언제 쓸지"를 알리고, 본문에 규칙을 담는다. UI Skills의 색인 단위.
용어 02
라우터 스킬(Router Skill)
일을 하는 스킬이 아니라 "무엇을 읽을지 고르는" 메타 스킬. UI Skills의 ui-skills-root가 그것. 카테고리 판단 → 최소 스킬 로드.
용어 03
컨텍스트 이코노미(Context Economy)
에이전트의 한정된 컨텍스트 창을 아끼려 "가장 작은 유용한 정보만" 넣는 원칙. 179개를 다 넣지 않고 1~3개만 로드하는 UI Skills의 핵심 철학.
용어 04
점진적 공개(Progressive Disclosure)
처음엔 얇은 개요만 노출하고, 필요가 확인되면 그만큼만 상세를 연다. 라우터 스킬이 정확히 이 패턴을 구현한다.
용어 05
단일 진실원(SSOT)
데이터를 한 곳(registry.ts)에만 두고 나머지 출력(CLI·웹·txt)을 전부 파생. 스킬 추가 시 손댈 곳이 딱 한 군데가 되는 설계.
용어 06
포인터 레지스트리 · 연합(Federation)
스킬 본문을 소유하지 않고 rawUrl로 남의 저장소를 가리키는 구조. 179개 중 173개가 포인터. 원저작자가 업데이트하면 자동 최신화.
용어 07
디슬롭(Deslop) · 슬롭(Slop)
슬롭 = AI가 뱉는 밋밋·조잡한 결과물. 디슬롭 = 그걸 걷어내 다듬는 것. baseline-ui가 UI 슬롭을 잡는 규칙집.
용어 08
디자인 엔지니어(Design Engineer)
디자인 감각과 프론트엔드 구현을 겸하는 직군. UI Skills의 타깃 사용자이자, 스킬 카테고리의 "디자인 코어" 8종이 겨냥하는 대상.
용어 09
Astro · SSR · 아일랜드
콘텐츠 중심 웹 프레임워크. output:"server"로 서버 렌더링(SSR)하고, 인터랙션 필요한 조각만 React "아일랜드"로 하이드레이션.
용어 10
Cloudflare Workers · wrangler
전 세계 엣지에서 도는 서버리스 실행 환경과 그 배포 CLI. UI Skills 웹의 배포 대상. @astrojs/cloudflare 어댑터로 연결.
용어 11
tsx
TypeScript를 사전 컴파일 없이 바로 실행하는 런타임. CLI 런처가 이걸 통해 .ts 본체를 굴린다.
용어 12
Base UI
접근성을 갖춘 헤드리스 UI 프리미티브 라이브러리(Radix 계열 후속). baseline-ui가 신규 프리미티브로 권장.
용어 13
llms.txt
사이트를 LLM이 읽기 좋게 요약·색인한 기계용 텍스트 파일 관례. UI Skills는 사이트·스킬마다 이 판본을 함께 서빙.
용어 14
MCP(Model Context Protocol)
에이전트가 외부 도구·데이터에 연결되는 표준 프로토콜. UI Skills가 대상으로 삼는 에이전트 생태계(Claude Code·Cursor·Codex)의 공통 기반.

11참고 링크

원본을 직접 열어 확인하는 습관 — 특히 스킬 본문은 매번 최신을 fetch한다

저장소 · 사이트
· GitHub: github.com/ibelick/ui-skills (MIT © 2026 Julien Thibeaut · npm v0.2.3)
· 웹사이트: ui-skills.com · 기계용 색인 /llms.txt, /skills/registry.txt
· npm: npmjs.com/package/ui-skillsnpx ui-skills start

핵심 파일(클론 후)
· bin/ui-skills.ts — CLI 본체(4개 명령, 순수 Node)
· src/data/registry.ts — 단일 진실원(179 스킬)
· skills/ui-skills-root/SKILL.md — 라우터 스킬
· skills/baseline-ui/SKILL.md — 안티슬롭 규칙집
· AGENTS.md — 저장소 자체의 에이전트 규칙(스킬 추가법)

배경 지식
· 제작자 ibelick: Motion Primitives, Prompt Kit, Zola
· Astro × Cloudflare 어댑터 문서 · Base UI
· llms.txt 관례 · Model Context Protocol

확인된 함정 모음 · 재확인 필수
읽기 전에 알아 둘 5가지

컴포넌트 라이브러리 아님 — 복붙할 버튼·카드가 아니라 "지침(SKILL.md) + 라우터"다. ② 대부분 남의 스킬 — 179개 중 6개만 로컬, 173개는 rawUrl 포인터(42명 제작). ③ 라우팅은 규칙 기반 — AI 모델이 아니라 라우터 스킬의 절차를 에이전트가 읽고 판단. ④ 버전 진실원은 package.json=0.2.3, 스킬 프런트매터의 version(root=1.0.0)은 별개. ⑤ topics는 26개(디자인 코어 11·그중 primary 8) — CLI categories는 26개 전부 나열.