모든 스킬

animate (emilkowalski/skills)

목적, 속성, 곡선, 시간, 중단, 종료 방식을 순서대로 정하며 애니메이션을 처음부터 구현합니다.

animate: Codex가 생성한 UI 애니메이션이 디자인 엔지니어의 모션 규칙을 따르도록 만들지만(대조군 3.7, 스킬 사용군 4.4, 한 문장 프롬프트군 5.0) 토큰을 1.7배 사용합니다. 같은 규칙을 한 문장으로 적은 프롬프트가 더 좋은 결과를 더 적은 비용으로 냅니다.

상황에 따라안전

Codex CLI · gpt-6-astra

22.0 / 30

스킬 없이 대비 향상폭: +0.64 · 상황에 따라 · 18회 실행

상황에 따라: 향상폭 +0.64가 +1.0 미만. 추천이 되려면 총점 22/30, 출력 품질 3.5, 향상폭 +1.0이 필요합니다.

SOTA

통과

Codex로 테스트

커버 대상 Codex, Claude Code

Codex CLI 0.166 (SOTA 티어): 채점된 실행 18회. 여기서 통과하면 티어 규칙에 따라 Claude Code도 커버되지만, 두 번째 티어에 대해서는 아무것도 말해주지 않습니다.

점수

각 차원은 0~5점이며 여섯 차원을 더하면 30점 만점의 총점이 됩니다. 모든 차원에서 5가 가장 좋습니다. 비용 5는 저렴하고 빠름, 설치 5는 쉬움을 뜻합니다.

트리거 신뢰도
5.0
스킬 없이 대비 향상폭
2.6
출력 품질
4.4
토큰 및 시간 비용
2.0
설치 및 이식성
4.0
안전성
4.0

보안 리뷰

안전

정적 스캔: CRITICAL 0 / HIGH 0 / MEDIUM 0. 수동 검토: 네트워크가 차단된 샌드박스에서 실행 안전(발견 사항 없음). 스캔이 깨끗하다고 해서 스킬이 안전하다는 증거는 아닙니다.

설치

npx skills@latest add emilkowalski/skills --skill animate

출처

고정 커밋: a81dbca07f2217b7103e510c0f13f8d5b017afc9

테스트일: 2026-11-02

테스트한 과제

  • 애니메이션 드롭다운 메뉴 — menu.html을 만드세요: 5개 항목이 있는 드롭다운 메뉴를 여는 버튼이며, 열기와 닫기 애니메이션이 있어야 합니다. 자체 완결형 HTML 파일 하나로 작성하세요(인라인 CSS와 JS, 라이브러리 없음).
  • 애니메이션 모달 대화상자 — modal.html을 만드세요: 어두운 배경과 함께 모달 대화상자를 여는 버튼이며, 열기와 닫기 애니메이션이 있어야 합니다. 자체 완결형 HTML 파일 하나로 작성하세요(인라인 CSS와 JS, 라이브러리 없음).
  • 토스트 알림 — toasts.html을 만드세요: 각각 토스트 알림을 표시하는 버튼 세 개가 있고, 토스트는 쌓였다가 스스로 사라지며, 등장과 퇴장 애니메이션이 있어야 합니다. 자체 완결형 HTML 파일 하나로 작성하세요(인라인 CSS와 JS, 라이브러리 없음).

장점

  • 스킬 없이보다 평균 점수를 3.71에서 4.36으로 끌어올렸습니다(+0.64).
  • 스킬 이름을 언급하지 않았는데도 적용되었습니다. 스킬 사용군 실행 6/6회에서 스킬 파일을 읽었습니다.

단점

  • 한 문장 프롬프트는 5.0점, 스킬 사용은 4.36점(-0.64).
  • 스킬 없이보다 토큰을 1.68배 사용합니다.
  • 과제·그룹당 n=2이며, 약 1점 미만의 차이는 노이즈입니다.

리뷰

Codex CLI 0.166 (gpt-6-astra, low reasoning)을 전용 Windows 테스트 PC에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬 설치(스킬 사용군), 미설치(대조군), 미설치 상태에서 스킬의 핵심 요구사항만 한 문장으로 압축해 프롬프트에 덧붙인 경우(한 문장 프롬프트군)로 나눴으며, 과제·그룹당 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 언급하지 않았습니다(아래에 적은 경우 제외). 세 가지 빌드 과제를 사용했으며, 각 과제는 인라인 CSS와 JS를 포함한 자체 완결형 HTML 파일 하나를 작성하는 것입니다. 드롭다운 메뉴, 어두운 배경의 모달, 쌓이는 토스트이며, 모두 열기/닫기 또는 등장/퇴장 애니메이션이 있습니다. 프롬프트에는 모션 규칙을 언급하지 않았습니다. 한 문장 프롬프트군은 규칙을 한 문장으로 나열합니다.

3개 그룹 비교

그룹평균 점수 (0-5)실행당 토큰
스킬 없음3.7178k
한 문장 프롬프트5.0105k
스킬 사용4.36132k

Codex CLI에서 18회 실행해 측정했고, LLM 심사 없이 규칙 기반 검사로 채점했습니다. 총점 22.0 / 30, 판정 상황에 따라.

판정: 상황에 따라 다름 (22.0 / 30). 출처: emilkowalski/skills, skills/animate, 커밋 a81dbca에 고정. 설치: npx skills@latest add emilkowalski/skills --skill animate. 라이선스: MIT (저장소 LICENSE).

어떤 스킬인가

animate 스킬(emilkowalski/skills)은 UI 애니메이션을 만들 때 따르는 모션 규칙을 담고 있습니다. 목적이 있는 곳에만 애니메이션을 적용하고, 사용자 정의 ease-out 큐빅 베지어를 쓰며(절대 ease-in이나 기본값은 쓰지 않음), 150-300 ms, transform과 opacity만 사용하고, 눌림 피드백은 scale(0.97)로 주고, scale(0)에서 시작하지 않으며, 등장은 스태거로, 전환은 중단 가능하게, prefers-reduced-motion을 존중하고, hover는 (hover: hover)로 제한합니다.

테스트 방법

Codex CLI 0.166(gpt-6-astra, 낮은 추론)을 전용 Windows 테스트 PC에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬을 설치한 경우(스킬 사용군), 설치하지 않은 경우(대조군), 스킬의 핵심 요구사항을 한 문장으로 압축해 프롬프트 끝에 붙인 경우(한 문장 프롬프트군)로 나눴고, 작업마다 각 군 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 전혀 언급하지 않았습니다(아래에 적은 표현은 예외).

빌드 작업은 세 가지로, 각각 인라인 CSS와 JS를 넣은 단일 HTML 파일을 만드는 과제입니다. 드롭다운 메뉴, 어두운 배경을 깐 모달, 겹쳐 쌓이는 토스트이며, 모두 열기/닫기 또는 등장/퇴장 애니메이션이 필요합니다. 프롬프트에는 모션 규칙이 없습니다. 한 문장 프롬프트는 그 규칙을 한 문장으로 나열합니다.

  1. 애니메이션 드롭다운 메뉴 — menu.html을 만드세요: 버튼을 누르면 5개 항목이 있는 드롭다운 메뉴가 열리고, 열기와 닫기 애니메이션이 있어야 합니다. 인라인 CSS와 JS만 사용하는 단일 HTML 파일로 작성하세요(라이브러리 사용 금지).
  2. 애니메이션 모달 대화상자 — modal.html을 만드세요: 버튼을 누르면 어두운 배경을 깐 모달 대화상자가 열리고, 열기와 닫기 애니메이션이 있어야 합니다. 인라인 CSS와 JS만 사용하는 단일 HTML 파일로 작성하세요(라이브러리 사용 금지).
  3. 토스트 알림 — toasts.html을 만드세요: 버튼 세 개가 각각 토스트 알림을 띄우고, 토스트는 겹쳐 쌓였다가 스스로 사라지며, 등장과 퇴장 애니메이션이 있어야 합니다. 인라인 CSS와 JS만 사용하는 단일 HTML 파일로 작성하세요(라이브러리 사용 금지).

채점은 프로그램 방식(숨은 테스트, 심어 둔 문제 탐지, 제약 조건 검사, 해당되는 경우 렌더링+OCR)으로 실행당 0~5점입니다. 점수를 결정한 LLM 심사자는 없습니다.

결과

세 번째 군에 전달한 한 문장 프롬프트: "디자인 엔지니어처럼 애니메이션을 만드세요. 목적이 있는 것만 애니메이션하고, 사용자 정의 ease-out 큐빅 베지어를 쓰며(절대 ease-in이나 기본값은 쓰지 않음), 150-300 ms, transform과 opacity만 사용하고, 눌림 피드백은 scale(0.97), scale(0)에서 시작하지 말고, 등장은 스태거로, 전환은 중단 가능하게, prefers-reduced-motion을 존중하고 hover는 (hover: hover)로 제한하세요."

작업대조군 점수한 문장 프롬프트스킬 사용대조군 토큰한 문장 프롬프트 토큰스킬 사용 토큰스킬 읽음
t1-dropdown3.55.04.1481k100k163k2/2
t2-modal3.55.04.5761k100k110k2/2
t3-toasts4.145.04.3693k114k121k2/2

평균 점수: 스킬 없이 3.71, 스킬 사용 시 4.36(델타 +0.64). 실행당 토큰: 78k 대 132k(1.68배), 시간 82초 대 81초. 한 문장 프롬프트군: 5.0(한 문장 프롬프트 대비 스킬의 이득: -0.64, 스킬 없는 경우 대비 한 문장 프롬프트의 이득: +1.29). 한 문장 프롬프트는 실행당 105k 토큰을 쓰므로, 스킬은 한 문장 프롬프트의 1.25배 비용입니다.

실제로 있었던 일

  • 대조군 3.71, 스킬 4.36, 한 문장 프롬프트 5.0(각 n=6). 규칙 기반 모션 검사는 페이지가 10개 규칙 중 몇 개를 따르는지 셉니다. 대조군은 10개 중 6〜8개, 스킬은 8〜9개에 도달했고, 한 문장 프롬프트는 6회 실행 모두에서 모든 검사를 통과했습니다.
  • 대조군이 가장 자주 놓친 규칙은 눌림 피드백(:active scale)으로 6회 중 3회에서 빠졌고, 일부 실행에서는 스태거 등장과 비기본 이징도 빠졌습니다. 스킬도 2회 실행에서 눌림 피드백을 놓쳤고 여러 실행에서 스태거 등장이나 이징을 놓쳤습니다. 토스트 작업에서는 점수가 4.14와 4.57로, 대조군 4.14와 비슷했습니다.
  • 토큰: 스킬 132k, 한 문장 프롬프트 105k, 대조군 78k(실행당). 대조군의 1.7배, 한 문장 프롬프트의 1.3배입니다. 스킬은 스킬 사용군 6/6 실행에서 읽혔고, 명령을 더 많이 씁니다(실행당 9.3회 대 4.7회).
  • 스킬 사용군은 실행마다 작업 폴더에 스킬 사본을 포함해 약 3개의 파일을 추가로 만듭니다.

항목별 점수

항목점수이유
1_output_quality4.36

스킬 사용 시 평균 4.36/5점(프로그램 검사, 작업별 표 참조).

2_lift_vs_no_skill2.64

스킬 없이 3.71점 대비 +0.64점(작업당 n=2, 약 1점 미만의 차이는 노이즈).

3_trigger5.0스킬 사용군 6/6 실행에서 스킬 파일이 읽힘.
4_instructions_portability4SKILL.md 규칙과 참고 텍스트.
5_efficiency2토큰 1.68배(실행당 132k 대 78k), 시간 0.99배(81초 대 82초).
6_safety_hygiene4산문만 포함. security.md 참조.

이 테스트의 한계

  • HTML 파일 하나의 코드 텍스트를 대상으로 한 규칙 기반 검사입니다. 애니메이션을 브라우저에서 렌더링하거나 시간을 재지 않았으므로 부드러움과 시각적 품질은 평가하지 않았습니다.
  • 한 문장 프롬프트는 스킬 자체 체크리스트를 거의 그대로 옮긴 것이고, 검사도 같은 규칙 목록을 따릅니다.
  • 셀당 n=2.
  • 작업·군당 n = 2: 약 1점 미만의 차이는 노이즈입니다.
  • 규칙 기반 채점은 검사가 볼 수 있는 것만 측정합니다. 취향이나 결과가 최선인지는 판단할 수 없습니다.

보안

security.md를 참조하세요. 스캔: CRITICAL 0 / HIGH 0 / MEDIUM 0. 판정: 실행해도 안전(네트워크 비활성 샌드박스). 깨끗한 스캔 결과가 스킬의 안전성을 증명하지는 않습니다.

결론

이 스킬은 아무 안내도 없을 때보다 모션 규칙 준수를 개선하지만, 같은 규칙을 한 문장으로 주면 더 적은 토큰으로 완벽한 점수를 얻습니다. 따라서 이득은 맨 프롬프트에 비할 때만 있습니다.

트랜스크립트

실행 로그: animate (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.)
열: 작업, 그룹-회차, 점수(0-5), 토큰, 초, 통과한 검사, 에이전트가 연 스킬 파일.

t1-dropdown control-1: 점수 3.71, 토큰 52757, 초 64.6, 검사 1/2, 연 파일 없음
t1-dropdown control-2: 점수 3.29, 토큰 109744, 초 78.3, 검사 1/2, 연 파일 없음
t1-dropdown oneliner-1: 점수 5.0, 토큰 90139, 초 90.1, 검사 2/2, 연 파일 없음
t1-dropdown oneliner-2: 점수 5.0, 토큰 110798, 초 84.6, 검사 2/2, 연 파일 없음
t1-dropdown treatment-1: 점수 4.14, 토큰 162460, 초 70.2, 검사 2/2, 연 파일 animate
t1-dropdown treatment-2: 점수 4.14, 토큰 165193, 초 85.1, 검사 2/2, 연 파일 animate
t2-modal control-1: 점수 3.71, 토큰 69259, 초 69.5, 검사 1/2, 연 파일 없음
t2-modal control-2: 점수 3.29, 토큰 52805, 초 73.9, 검사 1/2, 연 파일 없음
t2-modal oneliner-1: 점수 5.0, 토큰 110675, 초 103.1, 검사 2/2, 연 파일 없음

18회 실행, 아티팩트 3개

샘플 출력

SOTA · With the skill: menu.html (t1-dropdown, run 1, Codex)

<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Workspace menu</title> <style> :root { font-family: system-ui, sans-serif; color: #252c39; background: #f4f5f7; --ease-out: cubic-bezier(0.23, 1, 0.32, 1); } * { box-sizing: border-box; } body { margin: 0; min-height: 100svh; display: grid; place-items: center; padding: 24px; } main { width: min(100%, 400px); min-height: 440px; } .eyebrow { color: #687183; font-size: 11px; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; } h1 { margin: 12px 0 8px; font-size: 30px; letter-spacing: -.04em; } .description { margin: 0 0 28px; color: #687183; font-size: 14px; line-height: 1.6; } .dropdown { position: relative; width: min(100%, 280px); } button { font: inherit; cursor: pointer; } .trigger { display: flex; align-items: center; justify-content: space-between; gap: 32px; border: 1px solid #303a4e; border-radius: 12px; background: #293448; color: white; padding: 14px 18px; font-size: 14px; font-weight: 600; box-shadow: 0 3px 5px #20293b15; } .chevron { width: 16px; height: 16px; transition: transform 200ms var(--ease-out); } [aria-expanded="true"] .chevron { transform: rotate(180deg); } .menu { position: absolute; top: calc(100% + 10px); left: 0; width: 100%; padding: 6px; border: 1px solid #e1e4eb; border-radius: 14px; background: white; box-shadow: 0 16px 36px -12px #27324a30, 0 3px 8px #27324a08; opacity: 0; transform: scale(.95); transform-origin: top left; pointer-events: none; transition: opacity 200ms var(--ease-out), transform 200ms var(--ease-out); } .dropdown.open .menu { opacity: 1; transform: scale(1); pointer-events: auto; } .item { width: 100%; display: flex; align-items: center; gap: 12px; border: 0; border-radius: 8px; background: transparent; color: #394256; padding: 12px; text-align: left; font-size: 14px; } .icon { width: 20px; text-align: center; color: #738098; font-size: 18px; line-height: 1; } .item:last-child { margin-top: 5px; border-top: 1px solid #edf0f5; border-radius: 0 0 8px 8px; } button:focus-visible { outline: 2px solid #657cf0; outline-offset: 3px; } .item:focus-visible { outline-offset: -2px; background: #f0f3fa; } @media (hover: hover) and (pointer: fine) { .trigger:hover { background: #36435b; } .item:hover { background: #f0f3fa; } } .dropdown.instant .menu, .dropdown.instant .chevron { transition: none; } @media (prefers-reduced-motion: reduce) { .menu, .dropdown.open .menu { transform: none; } .chevron { transition: none; } } .status { margin-top: 300px; font-size: 13px; color: #687183; min-height: 20px; } </style> </head> <body> <main> <div class="eyebrow">Your workspace</div> <h1>A little room for everything.</h1> <p class="description">Your everyday essentials, one click away.</p> <div class="dropdown" id="dropdown"> <button class="trigger" id="trigger" type="button" aria-haspopup="menu" aria-expanded="false" aria-controls="menu"> Workspace <svg class="chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-wid [... excerpt: first 3200 of 7249 characters]

Pro 보기