본문으로 건너뛰기
5분 AI.
REPO DEEP DIVE · 2026-07-29 · GOOGLE-LABS-CODE/STITCH-SKILLS · AI 디자인 툴을 위한 "에이전트 매뉴얼" 모음집

google-labs-code/stitch-skills 딥다이브
— 코드가 아니라 "지침서"를 배포하는 저장소

스킬 모음

빠른 판단

무엇
Google Stitch의 화면 생성·다운로드·검증·React 변환 절차를 제공하는 에이전트 스킬과 스크립트 모음
이럴 때
Stitch로 만든 디자인을 React·React Native 코드로 옮기며 파일 수집과 변환 결과 검증을 연결할 때
도입 전 확인
디자인 작업에 사용할 Stitch MCP 연결이 선행되어야 한다
stitch-skills는 Google의 AI UI 디자인 툴 Stitch(stitch.withgoogle.com)를 Claude Code·Cursor·Codex 같은 AI 코딩 에이전트가 올바르게 다루도록 가르치는 "스킬(Skill)" 모음집이다. 이 레포에는 실행되는 서버나 앱이 없다. 대신 에이전트가 읽는 마크다운 지침서(SKILL.md)와, 그 지침을 강제·검증하는 작은 스크립트들이 들어있다.

구조는 3개 플러그인(stitch-design·stitch-build·stitch-utilities) 아래 총 15개 스킬이며, 공식 오픈 표준인 Agent Skills(agentskills.io)를 따른다. Stitch로 화면을 생성하고, React/React Native/Remotion 코드로 변환하고, 프롬프트를 다듬고, 디자인 시스템을 지키게 하는 "디자인 → 코드" 파이프라인 전체를 스킬 단위로 쪼갠 것이 핵심이다.

(저장소 google-labs-code/stitch-skills · 라이선스 Apache-2.0 · "공식 지원 Google 제품 아님"을 README에 명시 · 파일 87개(마크다운 51 / JSON 14 / TSX 9 / 셸 4 / TS 3 / JS 2 / Python 1) · 최신 커밋 7b53207, 2026-07-21(PR #87, OpenCode 수동 설치 가이드 추가) · 별점 미인용)
목차
  1. 한 줄 정체
  2. 왜 지금 뜨는가
  3. 무엇을 해결하나 — 문제와 해결
  4. 전체 구조
  5. 핵심 설계·동작 원리
  6. 기술 스택 · 의존성
  7. 설치 · 요구사항
  8. 실제 사용 흐름
  9. 함정 · 오해 방지
  10. 대안 비교
  11. 정리 — 누가 쓰면 좋은가
  12. 직접 해볼 수 있는 실습 과제
  13. 관련 기술 심화 학습 로드맵
  14. 핵심 키워드 사전

1한 줄 정체

한 문장으로: "Stitch라는 AI 디자인 툴을 AI 에이전트가 실수 없이 쓰게 만드는, 실행되지 않는 지침서+검증 스크립트 묶음"

이 저장소를 열면 서버도, 프론트엔드 앱도, npm start로 띄울 무언가도 없다. 있는 것은 plugins/ 폴더 아래 15개의 SKILL.md 파일과 그것을 뒷받침하는 소수의 스크립트(.sh/.js/.py)뿐이다. 즉 이 레포의 "산출물"은 사람이 아니라 AI 에이전트가 읽는 업무 매뉴얼이다.

Stitch는 텍스트나 이미지로 UI 화면(스크린)을 생성해주는 Google의 디자인 툴이며, MCP(Model Context Protocol) 서버로 코딩 에이전트에 연결된다. 문제는 "Stitch MCP에 연결됐다"는 사실만으로는 에이전트가 디자인 토큰을 지키고, 이미지를 안전하게 올리고, React로 옮길 때 접근성·타입을 지키는 행동을 하지 않는다는 점이다. stitch-skills는 이 간극을, 각 작업 단계마다 강제 규칙(GATE)과 안티패턴 목록을 박아넣은 스킬 문서로 메운다.

한 줄 비유

"신입 디자이너에게 건네는 업무 매뉴얼 바인더"

Stitch라는 툴 자체는 신입 디자이너가 손에 쥔 강력한 렌더링 장비다. 하지만 장비를 쥐여줬다고 회사 규정에 맞게 작업하는 건 아니다. "이 순서대로 하고, 이건 절대 하지 마라"는 매뉴얼이 따로 필요하다.

stitch-skills는 그 매뉴얼 바인더다. "디자인 뽑는 법" 챕터, "React로 옮기는 법" 챕터, "색상 규칙 지키는 법" 챕터가 각각 따로 있고, 몇몇 챕터 끝에는 신입이 규칙을 지켰는지 자동으로 채점하는 시험지(스크립트)까지 붙어 있다.

2왜 지금 뜨는가

"Agent Skills" 오픈 표준의 확산 · AI 디자인→코드 파이프라인 수요 · 멀티 CLI 호환

2026년 들어 Claude Code·Codex·Cursor·Gemini CLI 등 코딩 에이전트가 폭발적으로 늘면서, 이들에게 "특정 작업을 어떻게 해야 하는지" 가르치는 표준 포맷인 Agent Skills(agentskills.io)가 여러 벤더에 걸쳐 자리 잡고 있다. stitch-skills는 이 표준을 채택한 초기 사례 중 하나이며, 만든 주체가 google-labs-code라는 점에서 신뢰도 신호가 크다.

① "디자인 → 코드" 자동화가 실전 수요가 됐다

v0·Lovable·Stitch 같은 텍스트/이미지 기반 UI 생성 툴이 늘면서, "생성된 디자인을 실제 프로덕션 코드로 안전하게 옮기는" 중간 단계가 새로운 병목이 됐다. stitch-skills는 이 병목을 정면으로 겨냥해 React·React Native·shadcn/ui·Remotion(동영상)까지 변환 대상을 넓혔다.

② 하나의 스킬로 여러 에이전트 CLI를 동시에 커버

README는 Codex, Antigravity, Gemini CLI, Claude Code, Cursor, (수동 설치로) OpenCode까지 호환된다고 명시한다. npx plugins add ... --target claude-code, npx plugins add ... --target cursor처럼 같은 스킬 소스를 타겟만 바꿔 설치하는 배포 방식은, 특정 벤더에 종속되지 않으려는 최근 흐름과 맞아떨어진다.

③ "그냥 프롬프트"가 아니라 검증 가능한 규율

대부분의 프롬프트 모음은 텍스트일 뿐이라 지켜지는지 확인할 길이 없다. 이 레포는 일부 스킬(react-components, react-native)에 대해 AST 파서로 실제 코드를 검사하는 스크립트와 GitHub Actions CI를 붙여, "말로만 하는 규칙"을 "기계로 확인하는 규칙"으로 바꿨다.

위치
스킬 마켓 생태계 안에서

Anthropic의 공식 Claude Skills, 커뮤니티의 awesome-claude-skills 같은 큐레이션 목록과 나란히 놓고 보면, stitch-skills는 "한 제품(Stitch)을 위한 전용 스킬 스위트"라는 좁고 깊은 포지션을 취한다. 범용 스킬 모음이 아니라, 디자인 생성부터 코드 변환까지 하나의 워크플로를 끝까지 커버하는 구성이 특징이다.

3무엇을 해결하나 — 문제와 해결

에이전트가 "그냥 하면" 벌어지는 실수들을, 스킬 하나하나가 1:1로 막는다

AI 에이전트에게 Stitch MCP 접근권만 주고 "디자인을 React로 바꿔줘"라고 하면 실제로 어떤 일이 벌어질까? 소스 코드에 남은 실패 사례에 대한 방어 코드와 경고 문구들을 역추적하면, 이 레포가 막으려는 실제 문제가 선명하게 드러난다.

실제 문제 상황담당 스킬 / 메커니즘어떻게 막는가
이미지·HTML을 MCP 인자로 그대로 보내면 모델 출력 토큰 한계(~16K)에 걸려 base64가 중간에 잘림upload-to-stitchupload_to_stitch.py가 파일을 모델을 거치지 않고 직접 읽어 base64 인코딩 후 HTTP로 전송
Stitch가 준 다운로드 URL(GCS)이 에이전트 내장 fetch 툴에서 자주 실패react-components / react-nativefetch-stitch.sh가 curl -L -f --compressed로 리다이렉트·보안 핸드셰이크를 대신 처리
변환된 React 컴포넌트에 Props 타입이 없거나 색상이 하드코딩된 hex로 남음react-componentsscripts/validate.js가 AST를 파싱해 Props 인터페이스와 hex 색상 사용을 기계적으로 검사
여러 프로젝트를 오가며 작업하다 이전 프로젝트의 디자인 토큰이 섞여 들어감react-components Phase 2매 변환마다 style-guide.json을 현재 HTML의 tailwind.config에서 다시 추출해 덮어쓰도록 GATE로 강제
Stitch 화면의 href="#" placeholder 링크가 실제 앱에 그대로 남아 내비게이션이 죽음react-components Phase 3모든 href="#"를 라우트가 있는 <Link>로 교체하도록 명시 규칙 + 체크리스트
AI가 생성한 화면이 전형적인 "AI스러운" 디자인(보라 네온, Inter 폰트, 3열 카드, 가짜 통계)이 됨taste-design색상·폰트·레이아웃·통계 조작 등 명시적 금지 목록을 담은 DESIGN.md 생성 규칙
여러 페이지를 자동으로 이어 만들다 다음에 뭘 할지, 뭘 이미 만들었는지 잊음stitch-loop.stitch/next-prompt.md(baton)·.stitch/SITE.md(사이트맵/로드맵)로 진행 상태를 파일에 영속화
비유

일반 프롬프트 모음이 "이렇게 해주세요" 하고 부탁하는 메모라면, stitch-skills는 "이 순서대로, 이 파일을 거쳐서, 이 스크립트로 확인하고 나서"까지 지정하는 작업 표준서(SOP)에 가깝다. 부탁이 아니라 절차이기 때문에, 몇몇 항목은 코드로 재확인까지 한다.

4전체 구조

3개 플러그인(design·build·utilities) × 15개 스킬, 스킬마다 동일한 4단 폴더 규격
stitch-skills/ ├── README.md · CONTRIBUTING.md · SECURITY.md ├── LICENSE # Apache-2.0 ├── .agents/plugins/marketplace.json # Codex 마켓플레이스 등록 정의(3개 플러그인) ├── .github/workflows/validate-skills.yml # CI — 15개 중 2개 스킬만 자동 검증 └── plugins/ ├── stitch-design/ # ★ 6개 스킬 — "디자인 만들기·관리하기" │ ├── plugin.json + .codex-plugin/plugin.json │ └── skills/ │ ├── code-to-design/ # 코드 → Stitch 디자인 역변환 │ ├── generate-design/ # 텍스트/이미지 → 화면 생성·편집·변형 │ ├── manage-design-system/# DESIGN.md 업로드 · 테마 적용 │ ├── extract-design-md/ # 소스코드에서 DESIGN.md 역추출 │ ├── extract-static-html/ # 실행 중인 웹앱 → 정적 HTML 스냅샷 │ └── upload-to-stitch/ # 로컬 자산을 Stitch 프로젝트에 업로드 ├── stitch-build/ # ★ 5개 스킬 — "디자인 → 코드 변환" │ └── skills/ │ ├── react-components/ # ★ Stitch → React (검증 스크립트 有, CI 대상) │ ├── react-native/ # ★ Stitch → React Native (CI 대상) │ ├── react-vite-dashboard/# Stitch → Vite+TanStack Query 대시보드 │ ├── remotion/ # Stitch → 워크스루 영상(Remotion) │ └── shadcn-ui/ # shadcn/ui 세팅·컴포넌트 가이드 └── stitch-utilities/ # ★ 4개 스킬 — "품질·프롬프트 보조" └── skills/ ├── design-md/ # Stitch 프로젝트 → DESIGN.md 생성 ├── enhance-prompt/ # 프롬프트를 Stitch 최적화 형태로 보강 ├── stitch-loop/ # baton 방식 자율 사이트 빌드 루프 └── taste-design/ # 안티-제네릭 프리미엄 DESIGN.md 생성

스킬 하나의 내부는 Agent Skills 표준이 정한 4단 규격을 따른다(단, 아래에서 보듯 실제로는 지켜지지 않는 스킬도 있다):

skills/<skill-name>/ ├── SKILL.md # "미션 컨트롤" — 에이전트가 실제로 읽는 지침 본문 ├── scripts/ # 실행 가능한 강제 장치(다운로드·검증·업로드) ├── resources/ # 지식 베이스(체크리스트, 스타일가이드, 키워드 목록) └── examples/ # "정답" 참고 코드(gold standard)
항목수치 / 사실
전체 파일 수87개(.git 제외)
파일 유형 분포Markdown 51 · JSON 14 · TSX 9 · Shell 4 · TypeScript 3 · JavaScript 2 · Python 1
스킬 개수design 6 + build 5 + utilities 4 = 총 15개
매니페스트 이중화플러그인마다 plugin.json(일반) + .codex-plugin/plugin.json(Codex 전용, brandColor·defaultPrompt 등 UI 메타데이터 포함)
구조 불일치react-vite-dashboard는 SKILL.md+README.md뿐, scripts/resources/examples가 전부 없음(4단 규격 미준수)

5핵심 설계·동작 원리

GATE 강제 절차 · AST 코드 검증 · 모델 출력 한계 우회 스크립트 · baton 릴레이 루프

설계 패턴 ① — "GATE"로 순서를 강제하는 절차형 프롬프트

plugins/stitch-build/skills/react-components/SKILL.md는 작업을 Phase 1~4로 나누고, 각 Phase 앞에 "GATE: … 완료로 간주된다"는 문구를 박아 넣는다. 예를 들어 Phase 1은 fetch-stitch.sh로 모든 화면을 다운로드하고 스크린샷을 육안 감사한 뒤에만 완료로 치고, Phase 2는 현재 프로젝트의 HTML에서 새로 추출한 토큰으로 style-guide.json을 덮어써야만 완료로 친다. 각 Phase 끝에는 "Anti-patterns" 목록이 명시적으로 붙어, 흔한 실수(모놀리식 컴포넌트, 하드코딩 색상, 미변환 href="#")를 나열한다.

비유

공장 생산라인의 품질 게이트와 같다. 검사원(GATE)이 서명하기 전에는 다음 공정으로 부품이 못 넘어간다. 다만 이 게이트는 사람이 손으로 쓴 규칙 문장일 뿐, 실제로 다음 단계를 물리적으로 막는 코드가 아니다 — 에이전트가 지침을 "읽고 따르기"에 의존한다는 한계는 뒤 9장에서 다룬다.

설계 패턴 ② — AST 파서로 실제 코드를 기계 검사

말로 된 규칙과 달리 실제로 강제되는 유일한 지점이 plugins/stitch-build/skills/react-components/scripts/validate.js다. @swc/core로 TSX 코드를 파싱해 AST를 만든 뒤, 재귀 walk() 함수로 트리를 훑으며 두 가지를 검사한다.

const HEX_COLOR_REGEX = /#[0-9A-Fa-f]{3,8}\b/;
...
if (node.type === 'TsInterfaceDeclaration' && node.id.value.endsWith('Props')) hasInterface = true;
if (node.type === 'JSXAttribute' && (node.name?.value === 'className' || node.name?.name === 'className')) {
  if (node.value?.value && HEX_COLOR_REGEX.test(node.value.value)) tailwindIssues.push(node.value.value);
}

즉 ① ~Props로 끝나는 TypeScript 인터페이스 선언이 있는지, ② className 안에 하드코딩 hex 색상이 섞여 있는지를 검사해 hasInterface와 tailwindIssues를 채우고, 하나라도 어긋나면 process.exit(1)로 실패 처리한다. 이 검사는 .github/workflows/validate-skills.yml CI에서 examples/gold-standard-card.tsx를 대상으로 실제로 실행된다(Node 18.x, npm ci → node scripts/validate.js).

설계 패턴 ③ — "모델의 출력 토큰 한계"를 우회하는 스크립트

plugins/stitch-design/skills/upload-to-stitch/scripts/upload_to_stitch.py의 docstring은 이 레포에서 가장 흥미로운 설계 근거를 직접 설명한다: MCP 툴 호출 인자는 모델의 출력이므로, 파일을 base64로 통째로 재생성해 인자에 담아야 하는데 모델 출력 토큰 한도(~16K)가 파일의 base64 길이(예: 53KB PNG → 약 71K자)보다 훨씬 작아 중간에 잘리고 요청이 깨진다.

원문 근거
upload_to_stitch.py 상단 주석

"The AI model cannot upload files via the MCP tool directly … The output gets truncated mid-string, producing a corrupted payload … This script bypasses the model entirely — it reads the file, encodes it in-process, and sends the full payload directly over HTTP."

해결책은 모델을 완전히 우회하는 것이다. 스크립트가 직접 파일을 읽어 base64 인코딩하고, BatchCreateScreens REST 엔드포인트(POST /v1/projects/{id}/screens:batchCreate)로 곧장 HTTP 요청을 보낸다. 에이전트는 "이 파일 경로로 스크립트를 실행해라"라고만 지시하면 된다 — 파일 내용을 자기 출력으로 재생성할 필요가 없다.

설계 패턴 ④ — baton(계주봉) 릴레이로 만드는 자율 루프

stitch-loop 스킬은 .stitch/next-prompt.md라는 파일을 다음 실행 회차에 넘기는 계주봉(baton)으로 쓴다. 파일의 YAML 프론트매터 page: 필드가 다음에 만들 페이지명을, 본문이 그 페이지의 프롬프트(디자인 시스템 블록 포함)를 담는다. 한 번의 실행(iteration)은 6단계로 진행된다.

1. 바톤 읽기 .stitch/next-prompt.md 파싱 (page + prompt) 2. 컨텍스트 확인 .stitch/SITE.md(사이트맵·로드맵) · .stitch/DESIGN.md(디자인 토큰) 3. Stitch로 생성 generate_screen_from_text 호출 → HTML/스크린샷 다운로드 4. 사이트에 통합 site/public/{page}.html로 이동, href="#" 내비게이션 연결 5. 문서 갱신 SITE.md 사이트맵에 [x] 체크, 로드맵 갱신 6. 다음 바톤 작성 next-prompt.md에 다음 페이지 프롬프트 기록 ← 이걸 빼먹으면 루프가 멈춘다

프로젝트·화면 ID는 .stitch/metadata.json에 영속화되어 다음 회차가 이어받는다. 이 루프는 오케스트레이션 방식과 무관하게 설계됐다 — GitHub Actions가 파일 변경을 트리거해도, 사람이 매번 같은 에이전트를 다시 실행해도 동일하게 동작한다.

비유

계주 경기의 바톤(baton)과 똑같다. 각 주자(에이전트 실행 1회)는 바톤(next-prompt.md)을 받아 자기 구간(페이지 1개)을 뛰고, 반드시 다음 주자를 위해 바톤을 다시 넘겨야 한다. 바톤을 안 넘기면 — 즉 next-prompt.md를 안 갱신하면 — 경기(자동 빌드 루프)는 그 자리에서 멈춘다.

설계 패턴 ⑤ — "안티-제네릭"을 명문화한 디자인 규율

taste-design 스킬은 "예쁘게 만들어줘" 대신 무엇을 하지 말아야 하는지를 촘촘히 나열한다 — Inter 폰트 금지, 순수 검정(#000000) 금지, 보라/네온 글로우 금지, 균등 3열 카드 금지, 그리고 "99.98% 가동률" 같은 존재하지 않는 통계를 지어내는 것 자체를 금지한다. 이는 LLM이 그럴듯해 보이는 숫자를 환각하는 문제를 디자인 스킬 차원에서 막으려는 시도다.

배울 점
"프롬프트 엔지니어링"을 코드처럼 다룬다

이 레포 전체를 관통하는 태도는 자연어 지침도 소프트웨어 설계처럼 구조화할 수 있다는 것이다. GATE(전제조건), Anti-pattern(회귀 테스트), 스크립트(단위 테스트), CI(통합 테스트)라는 대응 관계를 발견하면 이 레포의 진짜 학습 가치가 보인다.

용어
MCP (Model Context Protocol)
AI 에이전트가 외부 도구·서비스(여기서는 Stitch)를 표준화된 방식으로 호출하게 해주는 프로토콜. 이 레포의 모든 스킬은 "Stitch MCP 서버가 이미 연결돼 있다"는 것을 전제로 한다.
용어
AST (Abstract Syntax Tree)
소스 코드를 사람이 아니라 프로그램이 읽기 좋은 트리 구조로 파싱한 결과물. validate.js는 TSX 코드를 문자열로 훑는 대신 AST로 정확히 "이 노드가 Props 인터페이스인가"를 판별한다.

6기술 스택 · 의존성

앱이 아니라 마크다운+스크립트 — npm 의존성은 스킬 2개에만 존재

레포 루트에는 package.json이 없다. 이는 이 레포가 "빌드해서 실행하는 소프트웨어"가 아니라 "에이전트가 읽는 문서+도구 모음"이라는 정체성을 그대로 보여준다. npm 의존성의 버전 진실원(source of truth)은 개별 스킬 폴더 안의 package.json뿐이다.

스킬런타임/언어의존성
react-componentsNode ≥18 (ESM)@swc/core ^1.3.100 — AST 파싱·검증용. package-lock.json으로 버전 고정
react-nativeNode ≥18 (ESM)동일하게 @swc/core ^1.3.100 (패키지명만 react-native-components로 다름)
upload-to-stitchPython 3표준 라이브러리(urllib, base64, argparse) + 선택적 certifi(SSL 컨텍스트, 없으면 기본 컨텍스트로 폴백)
remotion / shadcn-uiBashnpm 패키지 없이 download-stitch-asset.sh, verify-setup.sh 같은 순수 셸 스크립트만 사용
extract-static-htmlTypeScript (3개 파일)런타임(웹앱)에서 실행되는 인라인 HTML 추출·후처리·스냅샷 스크립트 — 별도 package.json 없이 사용처 프로젝트의 툴체인에 의존
그 외 10개 스킬—실행 의존성 없음. SKILL.md + 리소스(md/json) 텍스트로만 구성
버전 확인 시 주의
"레포 버전"이라는 게 없다

이 레포 자체에는 세맨틱 버전이 없다(플러그인 plugin.json이 각자 1.0.0을 자체 표기할 뿐). 무엇이 바뀌었는지는 커밋 로그로만 추적된다. 최신 커밋은 7b53207(2026-07-21, OpenCode 매뉴얼 설치 안내 PR merge)이다.

7설치 · 요구사항

Stitch MCP 서버가 선행 조건 — 스킬만 깔아서는 아무 일도 안 일어난다
대상 CLI설치 방법
Codexcodex plugin marketplace add google-labs-code/stitch-skills --ref main --sparse .agents/plugins --sparse plugins/stitch-design ... 로 마켓플레이스 등록 후 플러그인별 설치
Claude Codenpx plugins add google-labs-code/stitch-skills --scope project --target claude-code
Cursornpx plugins add google-labs-code/stitch-skills --scope workspace --target cursor
스킬 선택 설치(공통)npx skills add google-labs-code/stitch-skills — 단, 스킬 간 의존관계가 있어 일부만 골라 설치하면 깨질 수 있음(README 경고)
OpenCode수동 설치만 지원. plugins/*/skills/<name> 폴더를 .opencode/skills/로 직접 복사 + opencode.json에 Stitch 원격 MCP 엔드포인트 수동 등록
필수 전제조건Stitch MCP 서버 설정이 먼저 끝나 있어야 함(API 키/환경변수 포함) — 이게 없으면 스킬은 그냥 텍스트일 뿐 아무 것도 호출할 수 없다
주의
OpenCode에서 흔히 걸리는 이름 규칙 함정

이 레포의 스킬 이름 상당수가 stitch::react-components처럼 stitch:: 네임스페이스 접두어를 쓴다. 그런데 README는 "OpenCode는 name frontmatter가 소문자 kebab-case이면서 폴더명과 일치해야 로드한다"고 명시한다. 즉 OpenCode에 쓰려면 frontmatter의 name과 폴더명을 둘 다 바꿔야 하는 경우가 생긴다 — 그대로 복사만 하면 스킬이 인식되지 않는다.

8실제 사용 흐름

"프로젝트 확인 → 프롬프트 강화 → 생성 → 다운로드+감사 → 코드 변환 → 검증" 6단계

가장 대표적인 흐름은 "Stitch에서 화면을 만들고, 그것을 React 코드로 바꾸는" 경로다. 여러 스킬이 이 한 흐름 안에서 순서대로 호출된다.

사용자: "이 Stitch 프로젝트를 React 대시보드로 만들어줘" │ ▼ [1] enhance-prompt 막연한 요청을 UI/UX 키워드로 구체화(선택) │ ▼ [2] generate-design list_projects → 없으면 create_project 디자인 시스템 없으면 manage-design-system에 위임 generate_screen_from_text 로 화면 생성 │ ▼ [3] react-components Phase 1: get_screen 전체 + fetch-stitch.sh 다운로드 (GATE 강제) Phase 1: 스크린샷 육안 감사(필수) Phase 2: HTML <head>에서 tailwind 토큰 추출 → style-guide.json 덮어쓰기 Phase 3: 컴포넌트 분리 · Props 타입 · href="#" 치환 Phase 4: mockData.ts 작성 → App.tsx 연결 │ ▼ [4] scripts/validate.js (사용자 동의 후) 모든 .tsx에 대해 AST 검증 + tsc --noEmit 타입 체크 │ ▼ 결과: src/components/*.tsx, src/hooks/*, src/data/mockData.ts 완성

자율 사이트 빌드가 목적이면 stitch-loop가 이 흐름을 반복 실행으로 감싼다: baton(.stitch/next-prompt.md)을 읽고 → 위 [2]~[4]에 준하는 생성·통합을 한 페이지만큼 수행하고 → 다음 페이지를 위한 새 baton을 써서 마무리한다. Chrome DevTools MCP가 있으면 Step 4.5에서 렌더링 결과를 스크린샷 비교로 시각 검증하는 선택 단계도 들어간다.

권장
MCP 없이도 스킬 문서 자체는 읽어볼 가치가 있다

Stitch 계정이 없어도 SKILL.md 파일들은 그냥 마크다운이라 로컬에서 바로 읽힌다. "에이전트에게 복잡한 다단계 작업을 안전하게 시키려면 지침을 어떻게 구조화해야 하는가"를 배우는 참고 자료로 활용 가치가 크다.

9함정 · 오해 방지

"코드"라는 착각 · CI가 지켜주는 범위는 15개 중 2개뿐 · 비공식 프로젝트
오해 ①
"GATE"는 프로그램이 아니라 문장이다

SKILL.md의 "GATE: … 완료로 간주된다"는 문구는 에이전트에게 주는 강한 어조의 지시문일 뿐, 실제로 다음 단계 실행을 막는 코드가 아니다. 에이전트가 그 지시를 무시하거나 잘못 이해하면 그대로 어겨진다. 진짜로 강제되는 지점은 validate.js와 CI뿐이고, 그마저도 15개 스킬 중 2개(react-components, react-native)에만 존재한다.

오해 ②
Stitch MCP 없이는 이 레포가 "그냥 텍스트"다

이 저장소를 클론해서 뭔가를 "실행"해볼 수는 없다. 모든 스킬은 Stitch MCP 서버가 이미 연결되어 있다는 것을 전제로 쓰였다(list_tools로 MCP 접두어를 찾는 절차가 거의 모든 SKILL.md 첫머리에 등장). 전제 인프라 없이 읽으면 "왜 아무 것도 안 되지?"라는 함정에 빠지기 쉽다.

오해 ③
"google-labs-code" 조직 = 공식 지원 아님

README 맨 끝에 "This is not an officially supported Google product. This project is not eligible for the Google OSS VRP(취약점 신고 보상)"라고 명시돼 있다. 조직명에 google-labs-code가 들어 있다고 프로덕션급 SLA를 기대하면 안 된다.

오해 ④
모든 스킬이 같은 4단 폴더 규격을 지키지 않는다

README의 "Repository Structure" 절은 모든 스킬이 SKILL.md/scripts/resources/examples 4종을 갖는 것처럼 설명하지만, 실제로 react-vite-dashboard는 SKILL.md와 README.md 두 파일뿐이고 remotion·shadcn-ui는 scripts는 있어도 npm package.json은 없다. 문서와 실제 구조가 스킬마다 미묘하게 다르다.

권장
스킬을 고를 때 "검증 스크립트 유무"를 기준으로 삼자

같은 "지침서"라도 react-components·react-native처럼 AST 검증 + CI가 붙은 스킬은 결과물 품질을 기계적으로 재확인할 수 있지만, 나머지는 에이전트의 성실함에 전적으로 의존한다. 중요한 작업에는 검증 스크립트가 있는 스킬을 우선하거나, 직접 검증 단계를 추가하는 편이 안전하다.

10대안 비교

범용 디자인→코드 툴 vs 에이전트 스킬 표준 vs 다른 스킬 큐레이션
대안결이 다른 점
v0(Vercel) · Lovable · Bolt디자인 생성부터 코드 배포까지 자체 폐쇄형 플랫폼이 전부 처리한다. stitch-skills는 반대로 "Stitch라는 외부 툴 + 내가 쓰는 에이전트"를 이어붙이는 접착제에 가깝다 — 플랫폼이 아니라 워크플로 지침이다.
Figma-to-code 플러그인류대부분 Figma 파일 안에서 동작하는 단일 변환기다. stitch-skills는 변환뿐 아니라 프롬프트 강화·디자인 시스템 관리·자율 루프까지 워크플로 전 구간을 스킬로 쪼갠다는 점이 다르다.
Anthropic 공식 Claude Skills / awesome-claude-skills류 목록범용 목적의 스킬을 폭넓게 모은 백화점형 큐레이션이다. stitch-skills는 Stitch라는 단일 제품 전용으로 좁고 깊게 판다 — 서로 경쟁 관계라기보다 "한 제품을 위한 깊은 스킬 세트"라는 다른 카테고리에 가깝다.
일반 프롬프트 템플릿 모음(gist, 블로그 포스트 등)대개 텍스트 하나로 끝난다. 이 레포는 GATE·Anti-pattern·AST 검증·CI까지 갖춘 게 차별점이지만, 그 장치가 15개 중 2개 스킬에만 있다는 점은 감안해야 한다.

11정리 — 누가 쓰면 좋은가

Stitch 사용자 · 에이전트 스킬 설계를 배우고 싶은 사람에게 적합

stitch-skills는 "소프트웨어"가 아니라 "AI 에이전트를 위한 운영 지침 세트"다. 이미 Google Stitch로 디자인 작업을 하면서 Claude Code·Cursor·Codex 같은 에이전트에게 후속 작업(React 변환, 디자인 시스템 관리, 자율 사이트 빌드)을 맡기고 싶은 사람에게 직접적인 실용 가치가 있다. Stitch를 쓰지 않더라도, "에이전트에게 복잡한 다단계 작업을 어떻게 안전하게 위임할 것인가"를 GATE·Anti-pattern·AST 검증·CI라는 구체적 장치로 보여주는 참고 설계 사례로서 읽을 가치가 크다.

이런 사람에게 추천

Stitch로 화면을 만들고 코드까지 뽑아야 하는 프론트엔드 개발자

디자인 토큰이 흐트러지지 않게, 내비게이션이 깨지지 않게, 타입이 빠지지 않게 체크리스트가 이미 짜여진 상태로 변환을 맡길 수 있다.

이런 사람에게 추천

자기 팀의 에이전트 스킬(SKILL.md)을 설계하려는 사람

GATE 문구, Anti-pattern 목록, "왜 이 스크립트가 필요한가"를 설명하는 docstring, CI로 검증되는 gold-standard 예제 — 이 네 가지 패턴을 그대로 참고해 자기 도메인의 스킬을 만들 수 있다.

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

지침 읽기 → 요구사항 구체화 → 검증 범위 확인 → 다음 작업 설계

아래 명령은 모두 로컬에 준비된 stitch-skills 클론의 루트에서 실행한다. 원본 파일은 읽기만 하고, 프롬프트와 설계 답안은 별도 메모로 작성한다. 외부 서비스 연결 없이 진행할 수 있으며, 과제 3의 검증기 실행만 해당 스킬의 npm 의존성이 이미 설치된 환경에서 선택한다.

과제 1

지침과 실행 코드의 경계 찾기 입문

목표: 플러그인 등록 정보, 에이전트 지침, 검사 스크립트가 각각 어떤 역할을 맡는지 설명한다.

  1. 등록 정보와 React 변환 지침, 품질 체크리스트를 차례로 읽는다.
    cat .agents/plugins/marketplace.json plugins/stitch-build/plugin.json
    cat plugins/stitch-build/skills/react-components/SKILL.md
    cat plugins/stitch-build/skills/react-components/resources/architecture-checklist.md
  2. SKILL.md의 네 단계를 표로 정리한다. 각 행에 입력, 필요한 작업, 완료 증거를 적고, 다운로드 파일·현재 프로젝트의 디자인 토큰·컴포넌트·검증 결과가 어느 단계에 속하는지 연결한다.
  3. scripts/validate.js를 읽고 체크리스트의 각 항목에 자동 검사인지 수동 확인인지 표시한다. GATE라는 문구 자체가 다음 단계를 막는 실행 코드는 아니라는 점도 기록한다.

완료 기준: 네 단계의 입출력을 설명하고, Props 인터페이스와 색상 검사 외에 컴포넌트 분리·데이터 분리·링크 연결은 별도 확인이 필요하다고 구분하면 완료다.

과제 2

막연한 요청을 화면 명세로 바꾸기 입문 → 중급

목표: “설정 화면을 만들어줘”라는 요청을 다른 사람이 같은 의도로 구현할 수 있는 프롬프트로 구체화한다.

  1. 프롬프트 보강 절차와 용어 목록, 디자인 명세 예제를 읽는다.
    utility_dir=plugins/stitch-utilities/skills
    cat "$utility_dir/enhance-prompt/SKILL.md"
    cat "$utility_dir/enhance-prompt/references/KEYWORDS.md"
    cat "$utility_dir/design-md/examples/DESIGN.md"
  2. 예제의 색상·글꼴 규칙을 사용하는 웹 설정 화면을 가정한다. 목적 한 줄, 필수 디자인 규칙, 번호가 붙은 화면 구성 순서로 프롬프트를 작성한다.
  3. 화면 구성에 계정 정보, 알림 설정, 화면 테마, 저장 버튼을 넣는다. 입력 필드의 라벨, 변경 사항 저장 후의 안내, 좁은 화면에서의 배치까지 한국어로 명시한다.
  4. 디자인 예제의 배경색·강조색·본문색·글꼴을 원문과 대조한다. “깔끔하게”처럼 판단하기 어려운 표현은 여백, 정렬, 색상의 용도처럼 확인 가능한 조건으로 고친다.

완료 기준: 대상 기기, 화면 목적, 디자인 규칙, 구성 순서, 사용자 조작, 저장 결과가 모두 드러나고, 가져온 디자인 값이 예제와 일치하면 완료다. 이 과제의 결과물은 생성된 화면이 아니라 검토 가능한 프롬프트다.

과제 3

검증기에 통과 사례와 반례 넣기 중급

목표: 검증기가 확인하는 조건과 놓치는 조건을 실제 예제에 연결한다.

  1. 다음 파일을 읽고 hasInterface, tailwindIssues, process.exit의 관계를 따라간다.
    react_skill_dir=plugins/stitch-build/skills/react-components
    cat "$react_skill_dir/package.json"
    cat "$react_skill_dir/scripts/validate.js"
    cat "$react_skill_dir/examples/gold-standard-card.tsx"
  2. 원본 예제, ActivityCardProps를 ActivityCardInput으로 바꾼 예제, bg-surface-dark를 bg-[#123456]으로 바꾼 예제의 판정을 각각 예상한다. 이름 변경은 인터페이스 선언과 사용처 모두에 적용한다고 가정한다.
  3. Node.js와 이 스킬의 @swc/core가 이미 설치돼 있다면, macOS나 Linux에서 아래 명령으로 예상과 비교한다. sed의 변형 결과는 표준 입력으로만 전달되므로 원본은 바뀌지 않는다.
    node "$react_skill_dir/scripts/validate.js" "$react_skill_dir/examples/gold-standard-card.tsx"
    sed 's/ActivityCardProps/ActivityCardInput/g' "$react_skill_dir/examples/gold-standard-card.tsx" |
      node "$react_skill_dir/scripts/validate.js" /dev/stdin
    sed 's/bg-surface-dark/bg-[#123456]/g' "$react_skill_dir/examples/gold-standard-card.tsx" |
      node "$react_skill_dir/scripts/validate.js" /dev/stdin
  4. 의존성이 없으면 설치하지 않고 소스의 분기로 판정을 추적한다. 원본에 남은 href="#"와 ../data/mockData 가져오기를 찾아, 링크 목적지와 모듈 존재 여부가 이 검사에 포함되는지도 확인한다.

완료 기준: 소스상 예상 종료 코드는 원본이 0, 이름 변경과 색상 변경이 각각 1이다. 이 검사는 가져온 모듈을 실행하거나 TypeScript 전체 타입 검사를 하지 않으므로, 통과를 앱 실행 성공과 구별해 설명하면 완료다.

과제 4

다음 회차가 이어받을 바톤 설계하기 심화

목표: 한 페이지 작업의 완료 상태와 다음 작업 지시를 분리해, 중복 생성과 상태 누락을 줄이는 인계안을 만든다.

  1. 반복 작업 지침, 사이트 상태 예제, 현재 바톤, 바톤 형식을 함께 읽는다.
    loop_skill_dir=plugins/stitch-utilities/skills/stitch-loop
    cat "$loop_skill_dir/SKILL.md"
    cat "$loop_skill_dir/examples/SITE.md"
    cat "$loop_skill_dir/examples/next-prompt.md"
    cat "$loop_skill_dir/resources/baton-schema.md"
  2. 예제의 page: contact를 찾아 출력 경로 site/public/contact.html과 연결한다. 사이트맵의 [x]와 [ ]를 구별해, 이미 완성된 페이지와 예정된 페이지를 나눈다.
  3. 연락처 페이지의 통합이 성공했다고 가정한 상태 변경안을 메모한다. 이어서 로드맵의 상품 상세 페이지를 골라, page: product-detail과 페이지 목적·디자인 규칙·번호가 붙은 구성 목록을 갖춘 다음 바톤을 작성한다.
  4. 디자인 규칙은 과제 2에서 읽은 plugins/stitch-utilities/skills/design-md/examples/DESIGN.md의 생성 지침과 대조한다. 통합 실패 시 완료 표시를 보류하고 같은 작업을 다시 확인하는 절차도 인계안에 덧붙인다.

완료 기준: 현재 출력 경로, 성공 뒤의 사이트맵 변경, 다음 바톤이 서로 맞아야 한다. 다음 page에는 확장자를 붙이지 않고, 이미 완성된 페이지를 다시 고르지 않으며, 다음 회차가 디자인 규칙을 알 수 있도록 작성하면 완료다.

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

5주 동안 문서 형식에서 타입·검증·상태 전달까지 연결한다

매주 읽은 내용을 작은 결과물로 남기면, 스킬을 설치하는 방법을 넘어 절차를 설계하는 방법까지 배울 수 있다. 표의 경로는 모두 레포 루트 기준이며, 결과물은 학습자가 작성할 메모와 설계안이다.

주차 · 배울 개념이 레포에서 읽을 파일결과물
1주차
스킬 형식과 배포 구조
README.md
.agents/plugins/marketplace.json
plugins/stitch-build/plugin.json
plugins/stitch-build/skills/react-components/SKILL.md
플러그인 등록 → 스킬 선택 → 도구 사용 흐름도. 프론트매터의 name·description·allowed-tools와 본문 절차의 역할을 구분한다.
2주차
요구사항과 디자인 토큰
plugins/stitch-utilities/skills/enhance-prompt/SKILL.md
plugins/stitch-utilities/skills/design-md/examples/DESIGN.md
plugins/stitch-build/skills/react-components/resources/style-guide.json
설정 화면 프롬프트와 색상·글꼴·간격의 역할표. 자연어 디자인 명세와 코드용 JSON의 차이를 설명하고, 서로 다른 예제의 값을 한 프로젝트 규칙처럼 섞지 않는다.
3주차
React와 TypeScript의 역할 분리
plugins/stitch-build/skills/react-components/resources/component-template.tsx
plugins/stitch-build/skills/react-components/examples/gold-standard-card.tsx
plugins/stitch-build/skills/react-components/resources/architecture-checklist.md
카드의 입력 타입·표시 요소·데이터를 나눈 구조도. 스킬이 생성하도록 지시하는 src/components/·src/hooks/·src/data/mockData.ts에 각각 무엇을 둘지 적는다.
4주차
AST 검사와 지속적 통합
plugins/stitch-build/skills/react-components/scripts/validate.js
plugins/stitch-build/skills/react-native/scripts/validate.js
.github/workflows/validate-skills.yml
웹·모바일 검증기의 검사 범위 비교표와 과제 3의 판정표. CI가 참고 예제를 검사하는 것과 새로 생성한 앱 전체를 검증하는 것의 범위를 구별한다.
5주차
상태 저장과 반복 작업 설계
plugins/stitch-utilities/skills/stitch-loop/SKILL.md
plugins/stitch-utilities/skills/stitch-loop/examples/SITE.md
plugins/stitch-utilities/skills/stitch-loop/examples/next-prompt.md
plugins/stitch-utilities/skills/stitch-loop/resources/baton-schema.md
현재 작업 → 성공 뒤 상태 → 다음 작업의 인계안. 중복 페이지 확인, 디자인 규칙 전달, 실패 시 완료 표시 보류를 검토 항목으로 넣는다.

마지막에는 “지침에 적힌 규칙”, “스크립트가 검사하는 조건”, “사람이 확인할 결과”를 따로 설명해 본다. 이 구분이 되면 다른 분야의 에이전트 스킬을 읽을 때도 자동화할 부분과 검토할 부분을 판단하기 쉬워진다.

14핵심 키워드 사전

파일 이름과 실행 흐름에 연결해 이해하는 14개 용어
에이전트 스킬 · Agent Skills
작업 매뉴얼처럼 에이전트에게 특정 일을 수행하는 절차와 참고 자료를 전달하는 형식이다. 이 레포에서는 각 SKILL.md가 중심이고, 일부 스킬에는 resources/·examples/·scripts/가 함께 제공된다.
플러그인
관련 기능을 함께 배포하는 묶음으로, 여러 작업 매뉴얼을 담은 바인더에 가깝다. 이 레포의 plugins/ 아래에는 디자인·코드 변환·보조 작업을 묶은 폴더와 각 묶음을 설명하는 plugin.json이 있다.
프론트매터
문서 앞부분의 --- 사이에 적는 YAML 형식의 이름표다. 여기서는 스킬의 name·description·allowed-tools를 설명하거나, 바톤의 page로 다음 출력 파일명을 지정한다.
MCP · Model Context Protocol
에이전트와 외부 도구를 잇는 공통 연결 규약이다. 이 레포의 Stitch 작업 지침은 MCP를 통해 get_screen이나 generate_screen_from_text 같은 도구를 호출하도록 안내한다.
게이트 · GATE
다음 단계로 넘어가기 전에 확인할 완료 조건으로, 작업 체크리스트의 통과 기준에 해당한다. react-components/SKILL.md의 다운로드·시각 감사·토큰 동기화 조건은 자연어 지침이므로, 실제 준수 여부는 별도 증거로 확인해야 한다.
안티패턴
반복해서 문제를 만드는 작업 방식으로, 매뉴얼의 “자주 하는 실수” 목록에 가깝다. React 변환 지침은 한 파일에 모든 화면을 넣기, 데이터 하드코딩, href="#" 방치 등을 피할 대상으로 명시한다.
디자인 토큰
색상·글꼴·간격 같은 디자인 결정을 이름으로 관리하는 값으로, 화면들이 공유하는 재료표다. React 변환에서는 현재 프로젝트의 HTML에 있는 tailwind.config에서 값을 추출해 resources/style-guide.json을 맞추도록 지시한다.
디자인 명세 · DESIGN.md
화면의 분위기, 색상의 역할, 글꼴, 구성 요소 규칙을 글로 풀어 쓴 디자인 설명서다. stitch-loop는 작업 프로젝트의 .stitch/DESIGN.md에서 규칙을 읽고 바톤에 포함해 다음 화면의 일관성을 유지하도록 한다.
TSX
TypeScript 코드 안에 화면 요소를 표현하는 JSX 구문을 함께 적는 파일 형식이다. 이 레포의 gold-standard-card.tsx와 component-template.tsx는 변환 결과의 참고 자료이며, 그 자체로 완성된 앱은 아니다.
Props 인터페이스와 readonly
컴포넌트가 받는 입력의 모양을 TypeScript로 선언하고, 입력을 직접 바꾸지 않도록 표시하는 약속이다. 예제의 ActivityCardProps는 읽기 전용 필드를 쓰지만, 웹 검증기는 이름이 Props로 끝나는 인터페이스의 존재만 확인하고 읽기 전용 여부까지 검사하지는 않는다.
모의 데이터 · mockData.ts
서버 없이도 화면을 구성할 수 있도록 준비한 예시 데이터로, 화면의 모양과 내용을 분리하는 데 쓰인다. React 변환 지침은 정적 문구·이미지 주소·목록을 생성 대상 앱의 src/data/mockData.ts로 모으도록 한다.
AST · 추상 구문 트리
소스 코드를 선언·속성·화면 요소 같은 구조로 나눈 나무 모양의 자료다. 여기서는 @swc/core가 TSX를 이 구조로 바꾸고, validate.js가 노드를 순회해 정해진 조건을 검사한다.
CI · 지속적 통합
변경 사항을 합칠 때 정해진 검사를 자동으로 반복하는 절차로, 매번 같은 시험지를 채점하는 장치에 가깝다. .github/workflows/validate-skills.yml은 React와 React Native 스킬의 의존성을 설치하고 각 참고 예제에 검증기를 실행한다.
바톤
다음 실행 회차에 할 일을 전달하는 작업 인계서다. .stitch/next-prompt.md가 다음 페이지와 프롬프트를 담고 .stitch/SITE.md가 전체 진행 상태를 보완하며, 다음 회차를 시작하는 실행 주체는 별도로 필요하다.