improve-animations (emilkowalski/skills)
코드베이스의 모션 코드를 점검하고 다른 에이전트가 실행할 우선순위별 개선 계획을 만듭니다.
improve-animations: 막연한 '애니메이션을 감사하라'는 요청을 정확한 이징 곡선이 담긴 목록으로 바꿔 주지만(대조군 3.2, 스킬 4.8), 같은 체크리스트를 한 문장으로 담은 프롬프트는 토큰 0.84배만 쓰고 4.9점을 받았습니다
Codex CLI · gpt-6-astra
25.5 / 30
스킬 없이 대비 향상폭: +1.66 · 추천 · 18회 실행
추천: 총점 25.5/30이 22점 이상, 출력 품질 4.8가 3.5 이상, 향상폭 +1.66가 +1.0 이상입니다.
SOTA
통과Codex로 테스트
커버 대상 Codex, Claude Code
Codex CLI 0.166 (SOTA 티어): 채점된 실행 18회. 여기서 통과하면 티어 규칙에 따라 Claude Code도 커버되지만, 두 번째 티어에 대해서는 아무것도 말해주지 않습니다.
점수
각 차원은 0~5점이며 여섯 차원을 더하면 30점 만점의 총점이 됩니다. 모든 차원에서 5가 가장 좋습니다. 비용 5는 저렴하고 빠름, 설치 5는 쉬움을 뜻합니다.
- 트리거 신뢰도
- 5.0
- 스킬 없이 대비 향상폭
- 3.7
- 출력 품질
- 4.8
- 토큰 및 시간 비용
- 4.0
- 설치 및 이식성
- 4.0
- 안전성
- 4.0
보안 리뷰
안전정적 스캔: CRITICAL 0 / HIGH 2 / MEDIUM 0. 수동 검토: 네트워크가 차단된 샌드박스에서 실행 안전(스캐너 지적 사항은 설명됨). 스캔이 깨끗하다고 해서 스킬이 안전하다는 증거는 아닙니다.
설치
npx skills@latest add emilkowalski/skills --skill improve-animations
고정 커밋: a81dbca07f2217b7103e510c0f13f8d5b017afc9
테스트일: 2026-11-02
테스트한 과제
- 모션 코드 감사 — 이 프로젝트의 애니메이션과 모션을 감사하세요. 고칠 항목을 우선순위 목록으로 주고, 각 항목에 파일과 정확한 대체 값을 함께 적으세요. 파일은 변경하지 마세요.
- 컴포넌트 두 개 감사 — styles.css에서 드롭다운과 모달 애니메이션만 감사하세요. 무엇이 문제이고 정확히 어떻게 바뀌어야 합니까? 파일은 변경하지 마세요.
- 다른 사람이 구현할 우선 수정 사항 — 이 프로젝트를 본 적 없는 동료에게 모션 수정을 넘기려 합니다. 가장 효과가 큰 애니메이션 수정 5개를 각각 작성할 정확한 CSS와 함께 나열해, 저에게 묻지 않고도 구현할 수 있게 하세요. 파일은 변경하지 마세요.
장점
- 스킬 없이보다 평균 점수를 3.15에서 4.81로 끌어올렸습니다(+1.66).
- 스킬 이름을 언급하지 않았는데도 적용되었습니다. 스킬 사용군 실행 6/6회에서 스킬 파일을 읽었습니다.
- 스킬 사용 시 높은 절대 품질: 4.81/5.
단점
- 한 문장 프롬프트는 4.94점, 스킬 사용은 4.81점(-0.13).
- 과제·그룹당 n=2이며, 약 1점 미만의 차이는 노이즈입니다.
리뷰
Codex CLI 0.166 (gpt-6-astra, low reasoning)을 전용 Windows 테스트 PC에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬 설치(스킬 사용군), 미설치(대조군), 미설치 상태에서 스킬의 핵심 요구사항만 한 문장으로 압축해 프롬프트에 덧붙인 경우(한 문장 프롬프트군)로 나눴으며, 과제·그룹당 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 언급하지 않았습니다(아래에 적은 경우 제외). 모션 문제 8개를 심어 둔 작은 웹 앱(am_app) 하나를 사용했습니다. 과제는 프로젝트 전체 감사, 드롭다운과 모달만 감사, 지정된 문제 다섯 개 수정입니다. 프롬프트에는 어떤 규칙도 언급하지 않고 '애니메이션과 모션'이라고만 적었습니다. 한 문장 프롬프트군은 규칙을 나열하고 정확한 대체 값을 요구합니다.
3개 그룹 비교
| 그룹 | 평균 점수 (0-5) | 실행당 토큰 |
|---|---|---|
| 스킬 없음 | 3.15 | 65k |
| 한 문장 프롬프트 | 4.94 | 65k |
| 스킬 사용 | 4.81 | 78k |
Codex CLI에서 18회 실행해 측정했고, LLM 심사 없이 규칙 기반 검사로 채점했습니다. 총점 25.5 / 30, 판정 추천.
판정: 추천 (25.5 / 30). 출처: emilkowalski/skills, skills/improve-animations, 커밋 a81dbca에 고정. 설치: npx skills@latest add emilkowalski/skills --skill improve-animations. 라이선스: MIT(저장소 LICENSE).
무엇인가
emilkowalski/skills의 improve-animations 스킬입니다. 모션 디자인 감사 가이드로, 기본 ease-in/기본 곡선 대신 사용자 정의 ease-out 곡선을 쓰고, 지속 시간은 150-300 ms, transform과 opacity만 사용하며, transition: all 금지, scale(0) 시작 금지, transform-origin은 트리거 위치에 맞추고, reduced-motion을 지원하며, 빈도가 높은 동작에는 애니메이션을 넣지 않습니다.
테스트 방법
Codex CLI 0.166(gpt-6-astra, 낮은 추론)을 전용 Windows 테스트 PC에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬을 설치한 스킬 사용군, 스킬이 없는 대조군, 스킬 없이 핵심 요구사항을 한 문장으로 압축해 프롬프트 끝에 붙인 한 문장 프롬프트군으로 나눴으며, 작업·군당 2회 실행, 네트워크 차단, /tmp 쓰기 차단 조건이었습니다. 프롬프트에는 스킬 이름을 전혀 언급하지 않았습니다(아래에 적은 표현 제외).
작은 웹 앱(am_app) 하나에 모션 문제 8개를 심어 두었습니다. 작업은 프로젝트 전체 감사, 드롭다운과 모달만 감사, 이름이 지정된 다섯 문제 수정입니다. 프롬프트에는 '애니메이션과 모션'이라고만 하고 어떤 규칙도 언급하지 않습니다. 한 문장 프롬프트는 규칙을 나열하고 정확한 대체 값을 요구합니다.
- 모션 코드 감사 — 이 프로젝트의 애니메이션과 모션을 감사하세요. 수정할 항목을 우선순위 순서로 알려주고, 각 항목에 파일과 정확한 대체 값을 붙이세요. 파일은 변경하지 마세요.
- 두 컴포넌트 감사 — styles.css의 드롭다운과 모달 애니메이션만 감사하세요. 무엇이 잘못되었고 정확히 어떻게 바뀌어야 하나요? 파일은 변경하지 마세요.
- 다른 사람이 구현할 핵심 수정 — 이 프로젝트를 본 적 없는 동료에게 모션 수정 작업을 넘기려 합니다. 영향력이 가장 큰 애니메이션 수정 5개를 각각 작성할 정확한 CSS와 함께 나열해, 저에게 묻지 않고도 구현할 수 있게 하세요. 파일은 변경하지 마세요.
채점은 프로그램 방식(숨은 테스트/심어 둔 문제 탐지/제약 조건 검사/해당되는 경우 렌더링+OCR)으로 진행하며 실행당 0~5점입니다. 어떤 점수도 LLM 심사자가 결정하지 않았습니다.
결과
세 번째 군에 제공한 한 문장 프롬프트: "선임 디자인 엔지니어처럼 모션 코드를 감사하세요. ease-in과 기본 곡선, transition: all, scale(0) 시작, 레이아웃 속성 애니메이션, 누락된 reduced-motion, 빈도 높은 동작의 애니메이션, 잘못된 transform-origin, 느린 지속 시간을 지적하고, 각 항목에 정확한 대체 값(사용자 정의 ease-out cubic-bezier, 150-300 ms, transform/opacity만)을 제시해 다른 사람이 적용할 수 있게 하세요. 소스 파일은 변경하지 마세요."
| 작업 | 대조군 점수 | 한 문장 프롬프트 | 스킬 사용 | 대조군 토큰 | 한 문장 토큰 | 스킬 사용 토큰 | 스킬 읽음 |
|---|---|---|---|---|---|---|---|
| t1-audit | 3.21 | 4.82 | 4.82 | 65k | 66k | 77k | 2/2 |
| t2-focus | 2.5 | 5.0 | 5.0 | 63k | 64k | 77k | 2/2 |
| t3-five-fixes | 3.75 | 5.0 | 4.62 | 65k | 65k | 78k | 2/2 |
평균 점수: 스킬 없음 3.15 vs 스킬 사용 4.81(델타 +1.66). 실행당 토큰: 65k vs 78k(1.20배), 시간 48초 vs 49초. 한 문장 프롬프트군: 4.94(한 문장 프롬프트 대비 스킬의 이득: -0.13, 스킬 없음 대비 한 문장 프롬프트의 이득: +1.79). 한 문장 프롬프트는 실행당 65k 토큰이므로 스킬 비용은 한 문장 프롬프트의 1.19배입니다.
무슨 일이 있었나
- 대조군 3.15, 스킬 4.81, 한 문장 4.94(각 6회). 안내가 없을 때 Codex는 심어 둔 문제 8개 중 3~7개를 찾았고, 6회 중 5회에서 cubic-bezier나 정확한 이징 곡선을 제시하지 않았습니다.
- 스킬이 이 격차를 메웁니다. 집중 감사 두 실행 모두 5.0이었고(대조군은 두 실행 모두 scale(0) 모달 시작을 놓침), 모든 감사에서 정확한 곡선을 제시했습니다. 한 문장 프롬프트도 같은 결과에 도달합니다.
- 다섯 가지 수정 작업에서 스킬은 한 문장 프롬프트에 살짝 뒤졌습니다(4.62 vs 5.0). 스킬 사용군 두 실행 모두 700 ms 선형 카드 호버를 놓쳤고, 각각 다른 심어 둔 문제 하나(scale(0) 모달 또는 transition: all)를 놓쳤습니다.
- 토큰: 스킬 78k, 한 문장 65k, 대조군 65k(대조군의 1.2배). 스킬은 이름을 대지 않은 채 스킬 사용군 6/6 실행에서 읽혔습니다.
항목별 점수
| 항목 | 점수 | 이유 |
|---|---|---|
| 1_출력_품질 | 4.81 | 스킬 사용 시 평균 4.81/5(프로그램 검사, 작업별 표 참고). |
| 2_스킬_없음_대비_향상 | 3.66 | 스킬 없음 3.15 대비 +1.66점(작업당 n=2, 약 1점 미만은 노이즈). |
| 3_트리거 | 5.0 | 스킬 사용군 6/6 실행에서 스킬 파일을 읽었습니다. |
| 4_지침_이식성 | 4 | SKILL.md와 참고 텍스트만 있습니다. |
| 5_효율성 | 4 | 토큰 1.20배(실행당 78k vs 65k), 시간 1.03배(49초 vs 48초). |
| 6_안전성_및_위생 | 4 | 서술형 문서만 사용, security.md 참고. |
이 테스트의 한계
- 감사 텍스트에 대한 탐지 검사와 변경된 CSS에 대한 정규식 검사를 했으며, 브라우저에서 렌더링하거나 측정한 것은 없습니다.
- 한 문장 프롬프트는 스킬 자체 체크리스트를 거의 그대로 옮긴 것이라 강력한 비교 대상입니다.
- 픽스처 하나, 셀당 n=2.
- 작업·군당 n=2: 약 1점 미만의 차이는 노이즈입니다.
- 규칙 기반 채점은 검사가 볼 수 있는 것만 측정하며, 취향이나 결과가 최선인지는 판단하지 못합니다.
보안
security.md를 참고하세요. 스캔: CRITICAL 0 / HIGH 2 / MEDIUM 0. 판정: 실행해도 안전(네트워크 차단 샌드박스). 깨끗한 스캔 결과가 스킬의 안전성을 증명하지는 않습니다.
결론
이 스킬은 특히 항상 구체적인 곡선과 지속 시간을 제시한다는 점에서, 아무 안내 없는 감사보다 분명히 낫습니다. 같은 규칙을 나열한 한 문장이 더 적은 비용으로 같은 성과를 내므로, 이득은 안내가 없는 경우에 대한 것이지 좋은 프롬프트에 대한 것이 아닙니다.
트랜스크립트
실행 로그: improve-animations (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 열: 작업, 그룹-회차, 점수(0-5), 토큰, 초, 통과한 검사, 에이전트가 연 스킬 파일. t1-audit control-1: 점수 3.21, 토큰 65584, 초 50.5, 검사 2/3, 연 파일 없음 t1-audit control-2: 점수 3.21, 토큰 65586, 초 52.4, 검사 2/3, 연 파일 없음 t1-audit oneliner-1: 점수 4.64, 토큰 66262, 초 51.5, 검사 3/3, 연 파일 없음 t1-audit oneliner-2: 점수 5.0, 토큰 66276, 초 69.8, 검사 3/3, 연 파일 없음 t1-audit treatment-1: 점수 4.64, 토큰 78329, 초 42.8, 검사 3/3, 연 파일 improve-animations t1-audit treatment-2: 점수 5.0, 토큰 76979, 초 51.1, 검사 3/3, 연 파일 improve-animations t2-focus control-1: 점수 2.5, 토큰 64157, 초 30.6, 검사 2/4, 연 파일 없음 t2-focus control-2: 점수 2.5, 토큰 63682, 초 30.8, 검사 2/4, 연 파일 없음 t2-focus oneliner-1: 점수 5.0, 토큰 64128, 초 32.3, 검사 4/4, 연 파일 없음
18회 실행, 아티팩트 3개
샘플 출력
SOTA · With the skill: final message (t1-audit, run 1, Codex)
Audited all four project files. **No files changed.** This is a static code audit: `index.html` does not load `app.js`, so the dropdown click handler currently never runs. Other open states have no handlers. All motion fixes below are in [styles.css](C:/Users/<user>/AppData/Local/Temp/asv-improve-an-9e585535/work/styles.css), ordered by priority. | Priority | Severity | Location | Finding | Exact replacement | |---|---|---|---|---| | 1 | HIGH | Line 8, `.palette` | The documented ~100 daily keyboard openings should respond immediately. | Replace its declaration with `transition: none;` | | 2 | HIGH | Line 1, `.dropdown` | `400ms ease-in` delays the initial response and makes opening sluggish. | `transition: transform 200ms cubic-bezier(0.23, 1, 0.32, 1), opacity 200ms cubic-bezier(0.23, 1, 0.32, 1);` | | 3 | HIGH | Lines 4–5, `.modal` | Scaling from zero over 500ms creates excessive movement. | Use the modal replacement below. | | 4 | HIGH | Line 6, `.accordion` | Animating `height` forces repeated layout over 500ms. | Replace `transition: height 0.5s ease;` with `transition: none;`. Keep both height values. This is the smallest safe fix; a smooth reveal needs additional structure. | | 5 | MEDIUM | Missing reduced-motion rule | Dropdown and modal movement have no preference override. | Append the reduced-motion block below, after the other rules. | | 6 | MEDIUM | Line 3, `.btn` | `transition: all` can animate unintended properties. No button state currently changes a visual property. | Replace with `.btn { transition: none; }` | | 7 | MEDIUM | Line 9, `.popover` | Center scaling contradicts its documented connection to the top-bar trigger. | Replace `transform-origin: center;` with `transform-origin: top left;` **if positioned below and left-aligned with the trigger**. Placement is absent from this prototype; use `top right` for right alignment or `top center` for centered alignment. | | 8 | LOW | Lines 10–11, `.card` | A 700ms linear shadow transition makes routine hover feedback linger; hover is also ungated on touch devices. | Use the card replacement below. | Replace lines 4–5 with: ```css .modal { opacity: 0; transform: scale(0.96); transition: transform 250ms cubic-bezier(0.23, 1, 0.32, 1), opacity 250ms cubic-bezier(0.23, 1, 0.32, 1); } .modal.open { opacity: 1; transform: scale(1); } ``` Keep the modal’s centered transform origin; it is appropriate here. Replace lines 10–11 with: ```css .card { transition: none; } @media (hover: hover) and (pointer: fine) { .card:hover { box-shadow: 0 8px 24px rgba(0, 0, 0, .2); } } ``` This preserves hover feedback while removing repeated shadow painting during an animation. Append this reduced-motion override: ```css @media (prefers-reduced-motion: reduce) { .dropdown, .dropdown.open, .modal, .modal.open { transform: none; transition: opacity 200ms ease; } .popover { transition: opacity 200ms ease; } } ``` One grounded optional addition: give the Menu button press feedback with `.btn:active { transform: scale(0.97); }` and `.btn { transition: transform 160ms ease-out; }`. If adopted, also add `.btn:active { transform: none; }` in [... excerpt: first 3200 of 3496 characters]