Screen spec
Skill wigtn/wigtn-plugins/plugins/wigtn-plugins/skills/screen-spec
Claude Code Plugins for AI Native-based Engineer
npx -y skills add wigtn/wigtn-plugins --skill screen-specAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
PRD를 입력으로 화면정의서 5종(IA, User Flow, Screen Spec, Wireframe HTML, Dev Handoff)을 순차 생성한다. Wireframe은 흑백 + 의미색만 사용하는 lo-fi 산출물(스타일/브랜드는 별도 단계). frontend-developer 자동 리뷰 지원. /screen-spec 명령어에서 호출되며, /prd → /implement 사이의 선택적 게이트로 동작한다.
SKILL.md
16.8 KB, as published. Nobody here has run it
Screen Spec Skill
/screen-spec 명령어의 실행 엔진. PRD를 읽어 화면정의서 5종을 생성한다.
핵심 원칙
- PRD 단일 진실원: Role Key, FR ID, 페이지 Route, 상태 매트릭스는 모두 PRD에서 인용. 추측 금지
- 순차 의존: IA → User Flow → Screen Spec → Wireframe → Dev Handoff. 이전 단계 누락 시 stop
- 로파이 와이어프레임: 흑백 + 의미색(빨강=error, 초록=success, 노랑=warning, 회색=중립)만 사용. 컬러/타이포/브랜드 결정은 다음 단계(mockup/
/implement직전 스타일 선택)에서 다룸 - wigtn-plugins 자산 활용: frontend-developer (리뷰)와 통합
- 차단보다 보강: 입력 부족 시 사용자에게 명확한 보완 지시를 주고 stop
입력 / 출력
입력
docs/prd/PRD_<feature>.md(필수)- 옵션:
--interview(디테일 보강 Q&A),--platform=web|mobile(기본 web),--pages=<list>
출력 디렉토리: docs/prd/screens/<feature>/
docs/prd/screens/<feature>/
├── 01-IA.md # 정보구조도 (Mermaid flowchart LR + 매핑 테이블)
├── 02-USER-FLOW.md # 상세 플로우 (분기 조건 명시)
├── 03-SCREEN-SPEC.md # 화면별 명세 (Audience/Auth/States/Components/Microcopy/Responsive)
├── 04-WIREFRAME.html # 단일 HTML, Tailwind CDN, anchor 네비, 흑백+의미색만
└── 05-DEV-HANDOFF.md # FR ↔ 화면 ↔ 컴포넌트 매핑, /implement 입력
워크플로우
LOAD → [INTERVIEW?] → GENERATE × 5 → REVIEW → HANDOFF
--interview 플래그가 주어지면 LOAD 직후 단일 턴 배치 질문 단계가 들어간다. 기본은 PRD 추론 모드.
Phase 1: LOAD (PRD 파싱)
docs/prd/PRD_<feature>.mdRead- 추출 항목:
roles: [author, admin] # §2.3 pages: # §5.4 (Has FE Components: Yes만) - route: / audience: [guest, author] auth: optional linked_frs: [FR-001] primary_state: success responsive: [Desktop, Mobile] page_states: # §5.4.1 /: [loading, error, success] /submit: [loading, error, success, no-permission] user_flow: <Mermaid source> # §5.5 functional_requirements: # §3 FR-001: {요약} FR-002: {요약} - 검증 게이트:
- FE 페이지 0개 → "백엔드 전용 PRD. /implement로 진행" 안내 후 stop
- §5.4.1 누락 → "Page State Matrix가 필요합니다" 안내 후 stop
- §5.5 누락 → "User Flow가 필요합니다" 안내 후 stop
- 플랫폼 감지 및 자동 전환:
--platform명시값이 있으면 그 값을 그대로 사용 (사용자 의도 우선)- 미지정 + §1 Overview에 모바일 시그널 감지 → 자동으로
mobile모드 전환. "모바일 PRD로 판단되어--platform=mobile로 진행합니다. 웹으로 강제하려면--platform=web을 명시하세요." 안내 출력- 시그널:
React Native,RN,iOS,Android,네이티브,앱스토어,모바일 앱,mobile - ⚠️ 단독
앱은 시그널로 쓰지 않는다 —웹앱/web app에 부분 매칭되어 오탐.웹앱만 있으면web
- 시그널:
- 미지정 + 시그널 없음 → 기본
web
Phase 2: INTERVIEW (선택, --interview 플래그 시에만)
PRD가 못 다루는 화면 레이어 의사결정을 끌어낸다. 단일 메시지에 5~7개 객관식 질문을 번호 매겨 제시한 뒤 사용자 1회 응답을 받는다(라운드트립 1회로 끝나도록 분할하지 않는다).
질문 셋(샘플):
- 네비게이션 패턴 — top / side / bottom / drawer
- 정보 밀도 — compact (정보 우선) / spacious (가독성 우선)
- 에러 톤 — 공식적 / 친근한
- 빈 상태 철학 — 일러스트 + CTA / 최소 텍스트 + CTA
- 전환 방식 — page / modal / drawer
- 모바일 우선순위 — desktop-first / mobile-first / parity
- 핵심 후크(첫 화면) 방향 — value-first / action-first / story-first
응답을 받으면 03-SCREEN-SPEC.md 작성 시 명시적으로 반영.
플래그가 없으면 이 Phase 건너뜀(추론 모드). PRD에 TBD / ??? / 빈 셀이 5건 이상이면 종료 안내에 --interview 재실행을 추천한다.
Phase 3: GENERATE (산출물 5종 순차 생성)
각 산출물은 templates/ 보일러플레이트를 기반으로 PRD 데이터를 주입.
실행 분기 (토큰 최적화):
- 3.1~3.3 (IA, User Flow, Screen Spec): 메인 스레드에서 직접 생성. 짧고 구조적이며 후속 단계에서 참조 빈도가 높음.
- 3.4~3.5 (Wireframe HTML, Dev Handoff): subagent로 분기 실행. 가장 큰 출력이며 한 번 생성 후 재참조가 적어 메인 컨텍스트에 누적할 가치가 낮음. 호출 시 Agent 도구로
general-purposesubagent에 다음을 전달:- PRD 파일 경로
- 01~03 산출물 파일 경로 (subagent가 재읽기)
- 사용할 템플릿 경로 (플랫폼 분기 결과)
- INTERVIEW 응답이 있다면 결정사항 요약
- 출력 파일 경로
- subagent는 결과 파일 경로와 검증 요약만 메인 스레드로 반환. 본문 자체는 메인 컨텍스트에 누적시키지 않음.
- prompt caching 활용을 위해 PRD 읽기는 LOAD 단계에 고정 (5분 TTL 안에 후속 단계 마무리).
3.1 01-IA.md (정보구조도)
Mermaid flowchart LR + 페이지×기능 매핑 테이블.
flowchart LR
Root((<feature>))
Root --> Entry[진입]
Root --> Create[작성]
Root --> Manage[관리]
Entry --> Landing["/ (Landing)"]
Create --> Submit["/submit"]
Create --> My["/my"]
Manage --> Admin["/admin"]
규칙:
- 1Depth ≤ 7개 (Miller's Law)
- 모든 페이지에 1+ FR 연결 강제
- 페이지-FR 매핑 테이블 필수
- mindmap은 사용 금지 (환경별 지원 편차) —
flowchart LR통일 - 라우트는
["..."]로 감싸 파서 안전성 확보
3.2 02-USER-FLOW.md (사용자 플로우)
PRD §5.5의 Mermaid를 분기 조건까지 명시하여 확장.
flowchart TD
Start([진입]) --> Auth{인증 검증}
Auth -->|허용| Submit["/submit"]
Auth -->|거부| NoPerm[no-permission 안내]
Submit -->|폼 검증 PASS| Save[(DB 저장)]
Submit -->|폼 검증 FAIL| Submit
Save -->|성공| MyList["/my"]
Save -->|422 검증 실패| Submit
Mermaid 안전 룰: 라우트(
/)나 특수문자(?,=,:,())가 포함된 노드 텍스트는 항상["..."]큰따옴표로 감싼다. shape는 valid한 것만 사용 — 직사각형[], 둥근(), 원(()), 다이아몬드{}, 실린더[(...)], 비대칭/사다리꼴[/.../].{(...)}는 존재하지 않는다.
규칙:
- 시나리오 1개당 플로우 1개 권장 (Acceptance Criteria 매핑)
- 모든 페이지가 IA의 페이지와 매칭되어야 함
- 분기 노드(
{})에 조건 라벨 필수
3.3 03-SCREEN-SPEC.md (화면별 명세)
페이지 1개당 1섹션. 다음 7개 슬롯 강제:
## Screen: {route}
| 항목 | 값 |
|---|---|
| Audience | {role-key} |
| Auth | {Required 또는 Optional} ({인증 방식}) |
| Linked FRs | {FR-list} |
| Layout | {레이아웃 요약} |
| Responsive | {분기 표기} |
### States
- [x] loading: {처리}
- [ ] empty: N/A 또는 {CTA 포함 안내}
- [x] error: {inline 또는 상단 배너}
- [x] success: {전환 또는 토스트}
- [x] no-permission: {안내 또는 리다이렉트}
### Components
| Slot | Type | Required | Validation | Microcopy |
|---|---|---|---|---|
| {field} | {type} | Yes/No | {규칙} | "{라벨}" |
| submit | button | Yes | - | "{동사형}" |
### Microcopy
- 진입 안내: "{1~2줄 안내}"
- 에러: "{사용자 언어, 코드 노출 금지}"
### Responsive
- Desktop (≥1024px): {레이아웃 변화}
- Mobile (<768): {1열 또는 모달}
### Wireframe Anchor
→ `04-WIREFRAME.html#screen-{slug}`
규칙:
- §5.4.1의 체크된 상태마다 1줄 이상 명세 (
references/state-checklist.md참조) - 모든 폼 필드에 validation + microcopy 둘 다 있어야 함
- Wireframe Anchor는 04-WIREFRAME.html의
<section id="screen-<slug>">와 일치
3.4 04-WIREFRAME.html (단일 HTML 와이어프레임)
한 파일에 모든 페이지를 <section>으로 분할. 상단 anchor 네비게이션. 흑백 + 의미색만 사용.
플랫폼 분기:
--platform=web(기본) →templates/04-WIREFRAME.html보일러플레이트 사용. Desktop ≥1024 / Tablet 768~1023 / Mobile <768 분기점.--platform=mobile→templates/04-WIREFRAME-mobile.html사용. iPhone 15 (393×852) / SE (375×667) 프레임, Stack/Tab/Drawer 네비 패턴, safe area, bottom/action sheet 예시 포함.- 미지정 + PRD §1 Overview에 모바일 시그널(
React Native/RN/iOS/Android/네이티브/앱스토어/모바일 앱/mobile, 단독앱·웹앱은 제외) 감지 → LOAD 단계에서 자동으로 mobile 모드로 전환하고 사용자에게 안내. 사용자가 웹으로 강제하려면--platform=web을 명시.
의미색 가이드:
bg-red-50/text-red-*— error 상태bg-green-50/text-green-*— success 상태bg-amber-50/text-amber-*— warning / no-permission- 그 외 모두
neutral-*(회색 계열) - 브랜드/액센트 컬러 금지 — 스타일 결정은 별도 단계로 분리
구조:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>화면정의서 — {feature}</title>
<script src="https://cdn.tailwindcss.com"></script>
<style>/* Wireframe = grayscale + semantic state colors only. */</style>
</head>
<body class="bg-neutral-50">
<header class="sticky top-0 z-50 bg-white border-b">
<nav class="max-w-5xl mx-auto px-4 py-3 flex gap-4">
<a href="#screen-landing" class="text-sm">Landing</a>
<a href="#screen-submit" class="text-sm">/submit</a>
<a href="#screen-my" class="text-sm">/my</a>
<a href="#screen-admin" class="text-sm">/admin</a>
</nav>
</header>
<main class="max-w-5xl mx-auto px-4 py-8 space-y-16">
<section id="screen-landing" class="border rounded-lg p-6">
<h2 class="text-xl font-semibold mb-4">Landing /</h2>
<!-- 로파이 박스 + 라벨 -->
</section>
<section id="screen-submit" class="border rounded-lg p-6">
<h2 class="text-xl font-semibold mb-4">/submit</h2>
<!-- Desktop 뷰 -->
<div class="border-2 border-dashed border-neutral-300 p-6 mb-4">
<p class="text-xs text-neutral-500 mb-2">Desktop ≥1024px</p>
<!-- 좌: 폼 / 우: reference Q&A -->
</div>
<!-- Mobile 뷰 -->
<div class="border-2 border-dashed border-neutral-300 p-6 max-w-sm">
<p class="text-xs text-neutral-500 mb-2">Mobile <768px</p>
<!-- 1열 -->
</div>
</section>
</main>
</body>
</html>
규칙:
- 회색 박스(
border-2 border-dashed) + 라벨로 표현 - 실제 콘텐츠 디자인 X (텍스트 위주, 이미지 placeholder만)
- 페이지 수 ≥6개 또는 생성된 산출물이 600줄 초과 시
04-wireframes/<page-slug>.html분할 +04-WIREFRAME.html은 인덱스 - 페이지 간 이동은
<a href="#screen-<slug>">anchor 링크 (클릭 가능 프로토타입) - 모바일 reference 템플릿(
04-WIREFRAME-mobile.html)은 네비 패턴 3종을 보여주기 위해 더 길 수 있으며, 실제 생성 시에는 사용하지 않는 패턴 섹션을 제거할 것
3.5 05-DEV-HANDOFF.md (개발 인계)
/implement가 task로 분해할 수 있도록 매핑.
## FR ↔ Screen ↔ Component Mapping
| FR | Screen | Components | Estimated Tasks |
|----|--------|------------|----------------|
| FR-001 {요약} | {route-list} | {Component-list} | {sub-task-list} |
| FR-002 {요약} | {route} | {Component-list} | {sub-task-list} |
| FR-003 {요약} | {route} | {Component-list} | {sub-task-list} |
## Reusable Component Inventory
- {ReusableComponent-1}
- {ReusableComponent-2}
## Open Questions for Implementation
- [ ] {결정 보류 항목 1}
- [ ] {결정 보류 항목 2}
- [ ] {라이브러리 선택 결정 보류}
규칙:
- 모든 FR이 1+ Screen에 매핑 (역도 성립)
- Estimated Tasks는
/implement의 sub-task로 직접 변환됨 - Open Questions는 명세에서 빠진 항목 (선택 가능)
Phase 4: REVIEW (frontend-developer 자동 리뷰, 필수)
wigtn-plugins:frontend-developer 에이전트를 호출하여 산출물을 검증한다.
전달 입력:
- 산출물 디렉토리 경로
docs/prd/screens/<feature>/ - 점검 체크리스트 (
references/handoff-checklist.md그대로):- a11y — landmark, label, aria-* 누락 없음
- Responsive — 모든 페이지에 적절한 분기점 (web: ≥1024/<768, mobile: 393/375)
- AI 냄새 — 클리셰 카피, 보라색 그라데이션 등 wireframe에 부적절한 디자인 요소 없음
- Microcopy — §5.4.1 체크된 모든 상태에 카피 존재
- Component — 모든 폼 필드에 validation + microcopy
- INTERVIEW 응답이 있다면 그 결정사항(네비/밀도/톤 등)이 일관되게 반영되었는지 확인
반환 형식: PASS | WARN(개수) | FAIL(critical 개수, 항목 리스트) — 자세한 출력 스키마는 references/handoff-checklist.md "Output Format" 섹션 참조.
결과 처리 (구간 연속, 공백 없음):
- PASS → 진행
- WARN 1~3건 → 경고만 표시하고 진행
- WARN 4~7건 → 경고 표시 후 사용자에게 부분 재생성 여부 확인
- FAIL (critical ≥1건 또는 WARN ≥8건) → 해당 섹션(03-SCREEN-SPEC.md 또는 04-WIREFRAME.html)만 재생성
리뷰는 품질 게이트다. PASS/WARN 결과를 받은 뒤 Phase 5로 진행한다.
Phase 5: HANDOFF (다음 단계 안내)
screen-spec.md (commands/) 의 Phase 5 가이드 출력.
트리거 패턴별 동작
| 사용자 입력 | 실행 |
|---|---|
/screen-spec <feature> | 전체 워크플로우 (추론 모드, web) |
/screen-spec <feature> --interview | LOAD 후 Q&A 단계 추가 |
/screen-spec <feature> --platform=mobile | 모바일 템플릿으로 분기 |
/screen-spec <feature> --pages=/a,/b | Phase 3에서 지정 페이지만 |
| "와이어프레임만 다시 만들어" | Phase 3.4만 재실행 (해당 파일만 덮어쓰기, 나머지 보존) |
| "FR-003 매핑이 빠졌어" | Phase 3.5만 재실행 |
재실행 머지 정책: 부분 재생성 시 지정된 파일만 전체 덮어쓰기, 다른 산출물은 보존. diff 머지는 하지 않음.
안티패턴
- PRD 없이 실행하지 않는다 (입력 부족 → 추측 → 거짓 명세)
- 5개 산출물을 하나의 거대 파일에 합치지 않는다 (검토 불가)
- 와이어프레임에 브랜드/액센트 컬러를 넣지 않는다 (흑백 + 의미색 원칙)
- 와이어프레임에 실제 콘텐츠 디자인(폰트, 그림자, 그라데이션)을 넣지 않는다
- frontend-developer 리뷰를 건너뛰지 않는다 (필수 품질 게이트)
- §5.4.1 체크된 상태를 명세에서 누락하지 않는다 (Single Source of Truth)
- INTERVIEW 질문을 한 개씩 분할 전송하지 않는다 (라운드트립 폭증 → 토큰 낭비)
참고 문서
templates/01-IA.mdtemplates/02-USER-FLOW.mdtemplates/03-SCREEN-SPEC.mdtemplates/04-WIREFRAME.html— 웹 (기본)templates/04-WIREFRAME-mobile.html— 모바일 (--platform=mobile)templates/05-DEV-HANDOFF.mdreferences/state-checklist.md— 페이지 상태별 체크리스트references/microcopy-patterns.md— 자주 쓰는 마이크로카피 패턴references/handoff-checklist.md— frontend-developer 리뷰 체크리스트
기존 wigtn-plugins 자산과의 관계
| 자산 | 관계 |
|---|---|
commands/prd.md | screen-spec은 PRD §2.3/§5.4/§5.4.1/§5.5를 입력으로 받음 |
agents/prd-reviewer.md | prd-reviewer가 §5.4.1·§5.5 누락을 막아주면 입력이 안정됨 |
agents/frontend-developer.md | Phase 4에서 자동 리뷰 (필수 품질 게이트) |
agents/design-discovery.md | screen-spec 밖의 별도 단계로 분리됨. mockup/스타일 결정은 /implement 직전 또는 별도 명령으로 호출 |
skills/design-system-reference/ | screen-spec에선 사용 안 함. mockup/구현 단계에서 참조 |
commands/implement.md | screen-spec 산출물을 입력으로 받아 task 분해 |