name: slides-review
description: Gemini CLI를 활용한 HTML 디자인 리뷰 스킬. 생성된 HTML 파일을 Gemini에게 전달하여 시각 디자인 개선 지침을 받고, 메인 세션에서 CSS/HTML을 수정한다. Gemini 불가 시 in-session fallback. 트리거: "디자인 리뷰", "gemini review", "design review", "디자인 검토", "디자인 보완", "slides review", "슬라이드 리뷰".
Slides Review
Overview
HTML 파일의 시각 디자인 품질을 Gemini CLI로 검토하고, 반환된 개선 지침을 메인 세션(Claude)이 직접 적용하는 스킬이다.
다른 스킬(예: create-slides)의 후처리 단계로 호출되거나, 사용자가 직접 호출할 수 있다.
에이전트(Gemini CLI)가 불가하거나 전원 실패하면 in-session fallback으로 직접 리뷰한다.
핵심 원칙: gemini CLI가 불가하면(missing_cli 등) 아무 일도 하지 않는 대신 in-session fallback으로 직접 리뷰한다. 진짜 quiet pass는 리뷰 대상 HTML 파일 경로가 유효하지 않은 경우뿐이다.
Input
이 스킬은 아래 정보를 필요로 한다:
| 파라미터 | 필수 | 설명 |
|---|
| HTML 파일 경로 | Yes | 리뷰 대상 HTML 파일의 절대 경로 |
| 디자인 경로 | No | 사용된 디자인 스타일 (예: "frontend-design", "자체 심플", "직접 제공"). Gemini에게 맥락을 전달하여 디자인 방향에 맞는 리뷰를 유도한다 |
| 보호 규칙 | No | 호출자가 지정하는 수정 금지 항목 (예: scroll-snap, 특정 폰트) |
호출 패턴:
- 다른 스킬에서 호출: 호출자가 파일 경로와 보호 규칙을 컨텍스트로 전달
- 사용자 직접 호출: 대화에서 HTML 파일 경로를 파악하거나 AskUserQuestion으로 확인
Workflow
Step 1: HTML 파일 확인
리뷰 대상 HTML 파일 경로를 확인한다.
- 다른 스킬에서 호출 시: 호출자가 전달한 경로 사용
- 사용자 직접 호출 시: 대화 컨텍스트에서 파악하거나 AskUserQuestion으로 확인
Step 2: 리뷰 Job 시작
CRITICAL: 모든 Bash 호출에 timeout: 180000을 설정한다.
프롬프트 파일을 작성하고 job을 시작한다:
PROMPT_FILE=$(mktemp)
cat > "$PROMPT_FILE" << 'PROMPT_EOF'
[HTML 파일 전체 내용을 여기에 포함]
Design path used: {design-path}
PROMPT_EOF
JOB_DIR=$(bun "${CLAUDE_SKILL_DIR}/scripts/job.ts" start --stdin < "$PROMPT_FILE")
- HTML 파일 전문을 Read 도구로 읽은 뒤 프롬프트 파일에 포함
- 디자인 경로가 없으면
Design path used: 행 생략
- JOB_DIR이 stdout에 출력됨
start 실패 시 in-session fallback: start가 non-zero로 종료되거나 $JOB_DIR이 비어 있으면 Steps 3–5(collect/clean 없음)를 건너뛰고, prompts/default.md를 READ한 뒤 그 페르소나가 되어 in-session으로 HTML 디자인 리뷰를 수행한다. stderr에 to dispatch가 포함된 경우(멤버 0개 — 예상된 경로)는 조용히 fallback으로 진입한다. 그 외 non-zero 종료(디스크/권한 오류, spawn 실패 등 예상치 못한 실패)는 실패 사유(stderr 한 줄)를 출력한 뒤 in-session fallback을 수행한다.
Step 3: 결과 수집
bun "${CLAUDE_SKILL_DIR}/scripts/job.ts" collect "$JOB_DIR"
"overallState": "done" → Step 4로 진행
"running" / "queued" → collect 재호출 (동일 명령)
- 멤버 상태가
missing_cli / error / timed_out / canceled / non_retryable → in-session fallback (아래 참조). "unavailable"로 끝내지 않는다.
- 멤버 상태가
awaiting_resume 이거나 내용이 비-답변(플랜/프레이밍/대기 패턴) → resume-member로 완답을 이끌어낸다 (최대 3회). cap 소진 또는 실패 시 in-session fallback.
in-session fallback 진입 시: prompts/default.md를 READ하고 그 페르소나가 되어 in-session으로 HTML 디자인 리뷰를 수행한다. fallback 전에 clean을 먼저 실행하지 않는다 — clean은 모든 처리가 끝난 마지막 단계다.
Step 4: 지침 적용
collect 결과의 manifest에서 gemini의 outputFilePath를 Read 도구로 읽는다.
Gemini가 반환한 개선 지침을 그대로 Edit 도구로 CSS/HTML에 적용한다.
적용 원칙:
- Gemini의 지침을 있는 그대로 적용한다. Claude가 자체 판단으로 지침을 필터링하거나 추가 보정하지 않는다.
- 각 지침의 Target(셀렉터)을 HTML에서 찾아 Fix에 명시된 값을 정확히 반영한다.
- 지침에 없는 추가 개선을 임의로 수행하지 않는다.
호출자 보호 규칙만 예외:
호출자가 보호 규칙을 전달한 경우, 해당 규칙에 정확히 위배되는 지침만 제외한다.
Step 5: 정리 및 보고
bun "${CLAUDE_SKILL_DIR}/scripts/job.ts" clean "$JOB_DIR"
주의: clean은 모든 처리가 끝난 마지막 단계다. quiet pass로 빠져나온 경우도 마찬가지로 clean을 호출해 임시 파일을 정리한다.
적용 완료 후 사용자에게 간략히 요약:
Gemini 디자인 리뷰 반영: {적용 항목 수}/{전체 지침 수}건 적용
- {적용한 항목 1줄 요약}
...
quiet pass인 경우 아무것도 출력하지 않는다.
Quiet Pass 조건
아래 경우에서 에러 없이 조용히 건너뛴다:
| 조건 | 동작 |
|---|
| HTML 파일 경로가 유효하지 않음 | 즉시 종료, 메시지 없음 |
In-Session Fallback 조건
아래 경우에서 prompts/default.md를 읽고 in-session 리뷰를 수행한다:
| 조건 | 동작 |
|---|
start 비정상 종료 / $JOB_DIR 빔 (멤버 없음) | Steps 3–5 생략, in-session fallback 즉시 진입 (clean 없음) |
gemini CLI 미설치 (missing_cli 상태) | in-session fallback 수행 후 clean |
Gemini 호출 타임아웃 (timed_out 상태) | in-session fallback 수행 후 clean |
Gemini 호출 에러 (error 상태) | in-session fallback 수행 후 clean |
awaiting_resume — resume cap 소진 또는 전원 실패 | in-session fallback 수행 후 clean |
Anti-Patterns
- Claude가 Gemini 지침을 자체 판단으로 필터링하거나 추가 보정하지 않는다 -- 보호 규칙 위반 외에는 전부 적용
- 한 번에 전체
<style> 블럭을 교체하지 않는다 -- 개별 CSS 속성 단위로 Edit
- Gemini 설치를 사용자에게 권유하지 않는다
- 리뷰 실패를 에러로 취급하지 않는다 -- 이 스킬은 항상 "성공"으로 종료
Reference Files
review.config.yaml: Gemini 리뷰어 설정 (command, model, timeout)
scripts/job.ts: Job 매니저 (start/collect/clean). generic-job.ts 프레임워크 기반 thin wrapper.
scripts/worker.ts: Gemini CLI 워커. worker-utils.ts 기반.
prompts/gemini.md: Gemini에 전달하는 디자인 리뷰 시스템 프롬프트. 리뷰 기준 6가지, 출력 포맷(Target/Issue/Fix), 제약 조건 정의.
prompts/default.md: in-session fallback 페르소나 프롬프트 — 에이전트 불가 시 in-session fallback에서 로드. 동일한 리뷰 기준 6가지 + 직접 Edit 적용 지침.