| name | slopslap |
| description | 대상 화면(스택 불문)의 AI-slop 을 문답 없이 걷어내는 병렬-점검 파이프라인 스킬. 단일 에이전트가 규칙을 다 들고 한 번에 고치면 규칙이 컨텍스트 용량에 밀려 조용히 누락되므로(실증됨), 이 스킬은 그 대신 5개 영역(대표슬롭 기계제거·레이아웃컨테이너·간격·타이포·색)을 영역별 서브에이전트로 병렬 정적 점검 → findings 리포트 발행 → 의존성 순서로 순차 집행 → 신선한 에이전트로 재점검 → 렌더 1회로 돌린다. 각 에이전트가 자기 영역만 들어 규칙 드롭이 없고, findings 는 파일로 외부화돼 지휘자·집행자 컨텍스트가 얇게 유지된다. 상세 규칙은 references/inspection-areas.md 가 SSOT. 사용자가 "/slopslap", "빠르게 슬롭 걷어줘", "과감히 AI 티 빼줘", "여백·그리드·색 정리", "이 화면 슬롭 점검하고 고쳐" 라고 하거나, 계층 문답 없이 통계적 AI 결함을 기계적으로 걷어내길 원할 때 쓴다. |
Slop Quick (병렬-점검 파이프라인)
문답 없는 직설·기계적 슬롭 제거. 왜 파이프라인인가: 한 에이전트가 5규칙을 다 들고 큰 타깃을 한 패스로 고치면, 시끄러운 항목(히어로·여백)이 작업기억을 채우고 묻힌 규칙(스크롤바 통일·겹겹 컨테이너 벗기기)이 조용히 누락된다(v4 실증). 이건 규칙을 더 잘 써서 풀 문제가 아니라 용량 문제다. 그래서 점검·집행을 영역별로 쪼개 각 컨텍스트가 자기 영역만 들게 하고, 상태를 파일로 외부화한다.
지휘자(이 스킬을 실행하는 메인 컨텍스트)는 얇게 유지한다 - 오케스트레이션(누구를 띄우고 어떤 순서로 고칠지)만 들고, 상세 규칙·findings 내용은 서브에이전트와 파일이 든다.
영역 ↔ 집행 순서
점검은 병렬, 집행은 이 순서 고정(의존성 순서 = 상류가 먼저 커밋되면 하류 충돌이 자동 소멸, 별도 reconcile 불필요).
| 순서 | 영역 | 무엇 |
|---|
| 1 | A 대표 슬롭 기계제거(1차 스윕) | 측정 없이 "보이면 삭제/flatten": 오버라인·eyebrow / 플로팅 오브·blob / mesh·글로우 / 글래스모피즘 / 소프트섀도 남발 / 그라디언트 텍스트 / 이모지 아이콘 / 장식 도트·스파클 (A1~A8 전수 대조) |
| 2 | B 레이아웃·컨테이너·이미지 | 타입(fluid/fixed·100vh 측정)·모듈(폭도 도출·measure↔밀도)·최소컨테이너(좌border 금지·스크롤바 통일)·이미지가드 |
| 3 | C 간격 | base 도출·고정배수 사다리·초점고립·void 금지 |
| 4 | D 타이포 | 이탤릭 제거·폰트 역할고정 |
| 5 | E 색 | 시맨틱 먼저·접근성 대비 |
상세 판정·집행 규칙은 각 영역이 references/inspection-areas.md 의 자기 영역 절만 Read 한다.
파이프라인 (5단계)
0. 준비 + 콘텐츠 상수화 + BOLD 게이트 (상류 단일 판단)
대상·스택 파악. git 안전 확보 - 더러운 트리면 브랜치, 버전관리 밖이면 <대상>-quick 복사 후 git init. 회차 폴더 생성(findings·리포트 출력처). 수정 1건 = 커밋 1개.
- 콘텐츠 상수화 1회 (레이아웃 판단 전에 먼저): 대상 콘텐츠를 목차/데이터로 추상화한다 — 어느 블록이 반복 시리즈 배열(같은 성격 항목의 map: 리스트·카드·스텝·요금티어·기능항목)인지, 각 시리즈의 항목 규격(불릿/번호/아이콘/카드가 동일 정렬·동일 표면이어야 함)을 식별해 목록화하고 findings/디스패치에 실어 하류(특히 영역 B)에 전달한다. 이게 레이아웃·컨테이너·정렬 판단의 선행 조건: 시리즈로 인식돼야 "항목 간 정렬·최소 컨테이너·불릿 baseline 고정"을 결정할 수 있다(안 하면 시리즈 정렬·컨테이너 남발을 놓친다). 지휘자는 시리즈 목록 + 플래그만 들고 상세는 하류가.
- BOLD 게이트 1회 확정: 대상을 훑어 references 영역 B (1b) 의 AND 판정 — (a) 투박한 스타일 어휘 ≥3종 AND (b) 저밀도로 스타일이 사는 콘텐츠 — 을 적용해
BOLD=on/off 를 여기서 딱 한 번 정한다. 판단은 이 한 지점뿐(하류 영역은 재판정 안 함, 플래그만 소비 → 컨텍스트 부하·불일치 방지). (a) 없으면 off. (a) 있으면 (b) 는 관대하게 on 쪽 — AI 는 불필요하게 고밀도로 채우니 겉보기 빽빽함으로 off 하지 말고, 저밀도로 못 만드는 진짜 밀집(데이터표·폼·빌더·대시보드)만 off. 지휘자는 상세 규칙을 통째로 들지 말고 판정 근거 + 플래그만 든다.
1. 병렬 정적 점검 (한 메시지에 5개 동시 디스패치)
영역별 서브에이전트 5개를 동시에 띄운다. 각 디스패치 프롬프트(얇게):
- 대상 경로·스택·토큰 위치, 회차 폴더,
BOLD=on/off 플래그(0단계 확정값 — B·C 집행자는 이 플래그만 보고 스케일업 여부 결정, 재판정 금지), SSOT 경로(${CLAUDE_PLUGIN_ROOT}/src/data/aiSlopTaxonomyData.js), 스캐너(node ${CLAUDE_PLUGIN_ROOT}/scripts/scan-slop-signals.mjs <경로> --json)
- "references/inspection-areas.md 의 영역 절만 읽고, 그 규칙으로 대상을 정적으로 점검해
findings-<X>.md 를 스키마대로 써라."
- 정적/계산만 (CSS·DOM 읽기, hex 대비 수학, 그리드 fr·간격 리터럴, 폰트 역할맵, 100vh 콘텐츠 높이 합산). playwright/브라우저 금지(싱글턴 충돌 + 점검엔 불필요 - 렌더 없던 시절 방식). read-only.
- 레퍼런스 조회·삽입(교체형 텔에 한함): 각 점검자는 자기가 쓴 finding 이 교체형(간격 사다리·타입 스케일·팔레트 램프·measure·대비)이면 그 finding 의 taxonomy-id 로
node ${CLAUDE_PLUGIN_ROOT}/scripts/fetch-references.mjs <id> --json 를 호출해, 반환된 정량 target 을 그 항목의 처방·검증(check)에 snap 기준값으로 박아 넣는다(예: "16×1.25^n 사다리로 snap, check=고유 크기 수 ≤ rung 수"). 이렇게 해야 레퍼런스가 리포트 참고가 아니라 집행이 실제로 적용하는 값으로 하류에 전달된다. 삭제형 텔은 조회 안 함(차용값 없음). 프로젝트 자체 토큰(config·:root·Figma 변수) 발견 시 그게 최우선, 코퍼스는 폴백.
- findings 는 영역별 별도 파일 → 병렬 쓰기 안전.
2. 리포트 발행 (HTML + 로컬 링크)
5개 findings-*.md 를 하나의 HTML 리포트(report/index.html)로 합본해 회차 폴더에 쓰고, 로컬 정적 서버로 띄워 http://localhost:<포트>/ 링크를 사용자에게 곧바로 제시한다. 아티팩트·브라우저 자동실행 금지 - 링크만. 2·3번 되묻게 하지 말 것.
- 서빙: 회차 폴더에서
python3 -m http.server <포트> 백그라운드 1회. 포트 충돌 시 +1. 링크는 http://localhost:<포트>/report/.
- 리포트 구성(정적 HTML, 자기완결·인라인 CSS·외부요청 0): 상단에 대상·회차·영역별 항목 수 요약 표(A/B/C/D/E n건, waive n건). 그 아래 영역별 섹션 - 각 finding 을 카드로(id · 문제 · 근거 · 처방 · 집행순서), 집행 후면 반영/누락 배지. 값(base·배수·대비비)은 그대로 노출.
- 지휘자는 findings 를 통째로 들지 말고 각
findings-<X>.md 를 그대로 읽어 HTML 로 렌더만(요약 판단 최소화). 사용자가 특정 항목을 waive 하면 그 카드에 "waive" 태깅.
- 이 리포트는 집행 후에도 갱신(4단계 verify 결과의 반영/누락을 각 카드에 반영)해 같은 링크에서 최종 상태를 본다.
- 레퍼런스 자동 조인: 리포트 빌더가 각 finding 의 taxonomy-id 를
${CLAUDE_PLUGIN_ROOT}/src/data/referenceData.js 코퍼스에 결정적으로 조인해(가장 긴 prefix + alias) 카드에 정량 레퍼런스 블록(원칙·정량 타깃·출처·실앱 딥링크)을 붙인다. 무키·무료·오프라인(Tailwind/Radix/WCAG vendoring). 삭제형 텔(오버라인 제거 등)은 "차용값 없음" 으로만 표기. 단독 조회는 node ${CLAUDE_PLUGIN_ROOT}/scripts/fetch-references.mjs <id> --json.
3. 순차 집행 (1→5, 커밋 단위 — check 실측 기반)
영역 순서(A→B→C→D→E)대로 한 번에 한 영역 집행자를 디스패치. 각 집행자 프롬프트:
- "
findings-<X>.md 와 references 영역 절만 로드해, 각 항목의 검증(check) 술어를 소스에서 실측해 이미 충족(참)이면 skip, 미충족(거짓)인 항목만 처방을 적용하라." 재발견·신규점검 금지(findings 밖으로 안 나감), 그러나 "완료" 텍스트를 믿지 말고 check 는 매번 소스에서 계산(옛 findings 재사용·상태 변화로 인한 오기록 스킵 차단).
- 상류가 커밋한 결과 위에서 일한다(하류는 이미 바뀐 상태를 봄). 삭제는 orphan-ref(미사용 var·클래스·키프레임)까지.
- 레퍼런스 snap(교체형 텔에 한함): 처방이 "값 체계로 교체"(간격 사다리·타입 스케일·팔레트 램프·measure·대비 임계)인 항목은
fetch-references.mjs <id> 의 정량 타깃을 snap 기준으로 삼는다 — 자체 도출값이 코퍼스 사다리와 어긋나면 최근접 rung 으로 정렬. 차용은 값만(구성·레이아웃·카피 차용 절대 금지). 프로젝트 자체 토큰(config·:root·Figma 변수)이 있으면 그게 최우선, 코퍼스는 폴백. 삭제형 텔(A·유령 컨테이너)은 레퍼런스 무관 — 그냥 제거.
- 각 영역 집행 후 그 영역 커밋.
4. 병렬 재점검 (신선한 주의로 — 같은 check 재실측)
집행자 자기검증은 "한 것만" 보므로 금지. 대신 영역별 재점검 에이전트 5개를 병렬로 띄워, 각자 findings-<X>.md 전 항목의 검증(check) 술어를 소스/렌더에 재실측해 참(반영)/거짓(누락)을 verify-<X>.md 에 기록(주관 "반영/누락" 판정이 아니라 술어 계산). 거짓(누락)이 있으면 그 영역만 3단계로 경량 재집행.
5. 렌더 1회 (사용자용)
여기서만 브라우저를 쓴다 - before/after 스크린샷 1쌍(가능하면)으로 사용자에게 체감 변화를 보인다. 렌더는 점검이 아니라 보고용. 100vh 등 렌더 의존 값은 이 단계에서 실측 확인.
핵심 계약 (드롭 방지 = 이 스킬의 존재 이유)
- 얇은 지휘자: 메인은 오케스트레이션만. 상세 규칙·findings 는 서브에이전트·파일이 든다. 지휘자가 5영역을 다 들면 용량 문제 재발.
- 영역 격리: 각 점검자/집행자는 자기 영역 절만 Read. 전 규칙을 한 컨텍스트가 동시에 들지 않는다.
- 점검표 = 평가 함수 (상태 주장 금지, 매번 실측): findings 항목은 "완료/무해당" 상태를 텍스트로 선언하지 않는다 — 각 항목은 소스에서 참/거짓으로 실측할
검증(check) 술어를 갖고, 집행자·재점검자가 매번 소스에서 계산해 미충족(거짓)만 집행한다. "완료" 글자를 믿으면 옛 findings 재사용·대상 상태 변화 시 조용히 누락된다(터미널 스크롤바색이 "선행 완료" 오기록으로 스킵된 실패가 이것). check 가 실측이라 findings 를 다른 상태에 재사용해도 안전하지만, 되도록 대상 상태로 새로 점검. 평가·집행·재점검은 전부 서브에이전트가 하고, 지휘자(메인 세션)는 직접 판단·수정하지 않는다.
- 문제 층위 분리 진단: 무언가 누락되면 지휘자는 규칙(있나) → 점검표(check 로 잡혔나) → 집행(check 거짓인데 스킵됐나) → 렌더(반영됐나) 4층위로 먼저 갈라 어디서 터졌는지 확정한다(사용자가 캐묻게 하지 말 것). 이번 실패 = 규칙 O·점검표 O(단 상태 오기록)·집행 스킵 → 평가함수 구조로 차단.
- 점검·집행·재점검 분리: 짓는 자가 자기검증 겸하지 않는다(4단계는 신선한 에이전트).
- 점검은 정적, 렌더는 5단계 1회. playwright 없이 계산으로 점검(그게 원래 방식이고 병렬 안전).
- 값은 도출: 고정 px 금지, 대상서 도출한 base × 고정 배수(영역 C).
- 의미 불가침: 카피·문구·정보 구조·순서는 집행 대상 아님(오버라인 삭제는 중복 장식 제거지 콘텐츠 삭제 아님). 카피 결함(존댓말·em-dash 등)은 humanize-korean 으로.
- 결과는 로컬 링크로 먼저: 점검 리포트(2단계)·before/after(5단계)는
http://localhost:<포트> 로컬 서버 링크로 선제 제시. 아티팩트·브라우저 자동실행·되묻기 금지.
- em-dash(U+2014) 0건 (SSOT 원문 인용부 예외).
transform 모드 (Plan B — 점검 결과 → 실측 레퍼런스 매트릭스 → 과감한 전환)
기본은 reductive(위 파이프라인, 삭제>축소>교체). 사용자가 "과감히 바꿔줘"·"transform"·"재설계급으로" 를 원하면 transform 모드로 전환한다. 차이는 집행 기준이 대상 자체 도출값이 아니라 실측 레퍼런스 매트릭스의 방향 조합이라는 것.
- 매트릭스 소스:
${CLAUDE_PLUGIN_ROOT}/src/data/referenceMatrix/ — 실제 우수 사이트(Linear·Stripe·Apple·Basecamp 등)를 헤드리스 렌더해 뽑은 실측 contract(팔레트·타입스케일·간격·measure·폰트역할), styleTag 로 태깅. 손 타이핑 아님. 조회: node ${CLAUDE_PLUGIN_ROOT}/scripts/fetch-answer.mjs <tell> [--style <styleTag>] --json, 스타일 목록 --styles, 방향 한 벌 --direction <styleTag>.
- 0.5단계 방향 확정(상류 단일 판단): 점검 후, 대상의 콘텐츠·컨셉(무슨 제품인가)·BOLD 플래그에서 styleTag 방향 1개를 도출한다(회피가 아니라 콘텐츠-양성 근거로 — 택소노미 계약).
--direction <styleTag> 로 그 방향의 전 영역 contract 한 벌을 받아 하류 집행자 전원에게 같은 방향으로 배포. 이게 파편 수정이 아닌 일관 전환의 핵심.
- 집행: 각 영역 집행자는 그 방향 contract 의 자기 슬라이스를 snap 기준으로: 간격→spacingLadder(노이즈 클린 후), 타입→typeScale+ratio, 색→palette(무지개 제거·중립 램프+accent), 폰트→fontRoles, 폭→measure. 원시 스케일은 근접값 클린 후 모듈러 사다리로 도출해 적용.
- 불가침 유지: 재설계라도 카피·정보·순서·이미지 콘텐츠는 보존(transform ≠ 콘텐츠 변경). em-dash·존댓말 등 카피 결함은 범위 밖.
- median 가드: 스타일이 다른 두 대상을 돌리면 두 결과가 서로 달라야 정상. 같으면 방향 도출이 콘텐츠를 안 보고 획일 적용한 것(레드팀 위반).
상세 스키마·레드팀은 references/matrix-schema.md.
비대화형 원칙
slopslap = 비대화형·병렬·정적 파이프라인(빠르고 기계적). 애매 항목은 묻지 말고 propose(리포트에 노출). 판단이 크게 갈리는 재설계급 결정(콘텐츠 의도 인터뷰가 필요한 수준)이면 이 스킬 범위 밖 — 사용자에게 알리고 별도 처리한다.
흔한 함정
- 지휘자가 findings 를 통째로 들지 말 것 - 파일 경로만. 들면 용량 문제 재발.
- 집행자가 점검을 겸하지 말 것 - findings 만 tick. 재점검은 4단계 별도.
- 점검에 playwright 쓰지 말 것 - 정적 계산. 렌더는 5단계.
- 집행 순서 어기지 말 것 - A→B→C→D→E. 순서가 충돌 해소 장치다.
- 한 에이전트에 여러 영역 몰지 말 것 - 그게 이 스킬이 죽이는 원래 실패(용량 드롭)다.