2024년 10월 Webflow 인수 이후 모든 플러그인을 무료로 풀어버린 GSAP. 다음 수가 더 영리하다 — Cursor·Claude Code·Copilot 등 40여 개 AI 코딩 에이전트에게 "GSAP를 이렇게 써야 한다"고 직접 가르치는 공식 Skill 파일을 공개했다. 코드 라이브러리가 아니라 교육 자료인데 트렌딩 12위. "AI 시대에 라이브러리는 어떻게 살아남는가"의 정답을 보여주는 레포다.
GSAP가 직접 만들어 배포하는 "AI를 위한 GSAP 사용 설명서."
GSAP(GreenSock Animation Platform)는 2008년에 등장한 자바스크립트 애니메이션 라이브러리다. 18년째 살아남았다는 건 그 자체로 비범한 일이다. 이 레포는 그 GSAP가 "이제 코드는 AI가 쓰니까, AI한테 우리 라이브러리 쓰는 법을 직접 알려주자"는 발상으로 만든 공식 Agent Skill 모음이다.
지금까지 라이브러리는 사람에게 가르치는 문서(공식 docs)와 검색엔진(SEO)을 신경 썼다. 그런데 2026년 현재, 코드를 짜는 건 사람이 아니라 점점 더 Cursor, Claude Code, Copilot, Codex 같은 AI 에이전트다. 이들은 학습 시점이 오래된 데이터로 잘못된 GSAP 코드를 뱉어내곤 한다 — 오래된 API, 폐기된 권장 패턴, React 정리(cleanup) 누락, 잘못된 ease 이름...
GSAP의 해법은 단순하면서 강력하다. "그럼 우리가 교과서를 만들어서 에이전트가 자동으로 읽게 하자." Anthropic의 Agent Skills 표준에 맞춘 8개 Skill 파일을 GitHub에 공개. npx skills add 한 줄로 40+ 에이전트가 다 읽을 수 있다.
SKILL.md 파일의 frontmatter(맨 위 메타데이터)에 name, description, 그리고 어떤 트리거 단어가 나오면 이 스킬을 불러올지 적어둔다. AI 에이전트는 사용자 요청을 보고 "어, 이건 GSAP 관련이네" 싶으면 해당 SKILL.md를 컨텍스트에 자동 로딩한다.단순히 "공식이라서"가 아니다. 세 가지 시그널이 겹쳤다.
GSAP의 SplitText, MorphSVG, DrawSVG, GSDevTools 같은 강력한 플러그인들은 원래 Club GSAP라는 유료 멤버십에서만 다운로드할 수 있었다. .npmrc에 인증 토큰을 박아야 npm 설치가 됐다. Webflow 인수 후 이 모든 게 풀렸다 — 모든 플러그인이 공개 npm gsap 패키지에 통합, 상업적 사용까지 무료. 토큰 필요 없음. 이 변화가 워낙 커서 "GSAP 라이선스 어떻게 됨?" 검색이 폭발했고, 그 답을 가장 정확하게 담은 게 이 레포의 gsap-plugins 스킬이다.
예전: "스타벅스 리저브 매장에서만 파는 비싼 원두 = Club GSAP 플러그인"
지금: "스타벅스가 그 원두를 일반 매장에서 무료로 풀어버린 격." 모든 사람이 같은 출발선에 섰다.
대부분의 AI는 학습 데이터가 GSAP 2.x 또는 초기 GSAP 3 시절 자료를 많이 포함한다. 결과적으로 다음과 같은 잘못된 코드가 자주 나온다:
TweenMax.to(...) ← GSAP 2.x 문법. 지금은 gsap.to(...).opacity: 0으로 페이드아웃 ← 클릭 못 받게 막으려면 autoAlpha: 0이 더 안전 (자동으로 visibility: hidden까지).useEffect만 쓰고 ctx.revert() 호출 안 함 → 메모리 누수, 언마운트된 노드에 애니메이션.이 레포는 이런 함정 37개를 "Do Not" 목록으로 못박아 두었다. AI가 이 스킬을 읽고 코딩하면 거의 모든 함정이 자동으로 피해진다.
2025년 후반부터 Anthropic이 Skills 표준을 띄우면서 트렌딩 상위에 *-skills 레포가 줄을 잇고 있다. mukul975/Anthropic-Cybersecurity-Skills(17위), tw93/Waza(16위), thananon/9arm-skills(21위)... GSAP가 "라이브러리 제조사가 직접 만든 첫 공식 Skill"이라는 포지션을 선점한 것. 이건 React 팀이 "리액트 공식 가이드"를 만든 것과 같은 무게다.
| 접근 | 방식 | 이 레포 대비 약점 |
|---|---|---|
| 공식 docs (gsap.com) | 사람용 웹사이트 | AI가 자동 로딩 안 함, 트리거 키워드 없음 |
| Cursor Rules 커뮤니티 | 유저가 짠 .cursor/rules/*.md | 비공식, 품질 들쭉날쭉, 업데이트 안 됨 |
| Copilot Chat 커스텀 instructions | 레포별 .github/copilot-instructions.md | Copilot 전용, 다른 에이전트엔 안 통함 |
| greensock/gsap-skills | agentskills.io 표준 + 40+ 에이전트 호환 + 공식 | — |
실행되는 코드는 없다. 그러나 "AI 에이전트 파이프라인"이라는 새로운 기술 스택이 보인다.
이 레포에는 빌드 단계가 없고, package.json도 없고, 의존성도 없다. 그 대신 "여러 AI 코딩 에이전트가 동시에 인식하는 디렉토리 규약"이 곧 기술 스택이다. 다 마크다운인데 마법은 "어디에 두느냐"에 있다.
각 SKILL.md는 YAML frontmatter로 시작한다. name, description, license가 필수. description은 단순 설명이 아니라 "어떤 사용자 요청이 오면 이 스킬을 로딩해야 하는지" 지시문이다. 그래서 "React 애니메이션", "스크롤 애니메이션 추천" 같은 키워드가 본문이 아니라 description에 들어간다.
npx skills add https://github.com/greensock/gsap-skills 한 줄. 이 CLI가 사용자의 에이전트 종류를 감지(~/.claude/가 있는지, ~/.cursor/가 있는지)해서 적절한 디렉토리로 스킬을 복사·심볼릭링크한다. 40개 이상의 에이전트 디렉토리를 알고 있다.
각 플랫폼이 스킬을 "플러그인"으로 인식하도록 별도의 메타데이터 폴더가 같이 들어 있다.
.claude-plugin/plugin.json + marketplace.json → Claude Code에서 /plugin marketplace add greensock/gsap-skills로 설치 가능.cursor-plugin/ → Cursor의 Rules 시스템과 연동.github/copilot-instructions.md + .github/instructions/{path}.instructions.md → GitHub Copilot의 경로별 자동 지침8개 스킬이 GSAP의 영역을 칼같이 나눠 가진다. gsap-core, gsap-timeline, gsap-scrolltrigger, gsap-plugins, gsap-utils, gsap-react, gsap-performance, gsap-frameworks. 그리고 skills/llms.txt는 "인덱스" 역할 — 어떤 트리거가 오면 어떤 스킬을 불러야 하는지 한 페이지로 정리.
사용자 채팅 한 줄이 SKILL.md 로딩까지 어떻게 흘러가는가.
일반 RAG(Retrieval-Augmented Generation)는 사용자 질의를 임베딩해 벡터DB에서 끌어온다. 스킬은 다르다. "description의 트리거 단어를 보고 미리 인덱스에서 매칭"한 뒤 통째로 로드한다. 검색 비용이 거의 0이고, 매번 같은 답을 보장한다. 라이브러리 사용법처럼 "정답이 정해진 영역"에 최적이다.
각 SKILL.md 마지막에 "Do Not" 섹션이 반드시 있다. 단순히 좋은 예제만 주는 게 아니라 ❌ 표시로 "이렇게 하지 마라" + "왜 안 되는지"를 동시에 박아둔다. LLM은 negative example을 줘야 회피 학습이 잘 된다는 게 알려진 사실인데, 이걸 스킬 포맷에 못박은 것.
// ❌ DANGER (gsap-react SKILL.md에서) badRef.current.addEventListener('click', () => { gsap.to(badRef.current, { y: 100 }); // 컨텍스트 밖에서 생성됨 }); // → 언마운트 시 정리 안 됨 // ✅ 올바른 방법: contextSafe()로 감싸기 const onClickGood = contextSafe(() => { gsap.to(goodRef.current, { rotation: 180 }); }); goodRef.current.addEventListener('click', onClickGood);
각 SKILL.md 도입부에 "Related skills:" 줄이 있어, "타임라인은 gsap-timeline, 스크롤은 gsap-scrolltrigger, React는 gsap-react를 참고"라고 명시한다. 에이전트가 한 스킬만 로드해도 자연스럽게 관련 스킬을 추가 로딩하도록 유도하는 것. 위키피디아의 내부 링크와 같은 발상이다.
총 16커밋, 별 8개. 코드가 없는 만큼 디렉토리 한 칸 한 칸이 의미를 가진다.
"한 레포가 동시에 4가지 에이전트 시스템의 입구를 가졌다"고 보면 된다. (1) skills/는 공식 표준, (2) .claude-plugin/은 Claude Code 마켓, (3) .cursor-plugin/은 Cursor 플러그인, (4) .github/는 Copilot 전용. 한 번 작성한 콘텐츠로 네 군데에 다 깃발을 꽂는 멀티 플랫폼 전략.
react.instructions.md는 React 관련 파일을 편집할 때만 자동 컨텍스트에 들어온다. 즉 "스크롤 작업 안 하는 React 파일에는 ScrollTrigger 지침이 안 끼어든다." 컨텍스트 윈도우를 아끼는 핵심 기법."GSAP 사용법" + "AI 에이전트용 콘텐츠 설계" 두 마리 토끼.
gsap.to(target, vars)가 90%다. "지금 상태에서 vars 값으로 애니메이션". from()은 반대 — "vars 값에서 지금 상태로". 이게 진입 애니메이션의 핵심이다.
gsap.to(".box", { x: 100, autoAlpha: 1, duration: 0.6, ease: "power2.inOut" });
실습 아이디어: 카드 4개를 화면 밖에서 안으로 stagger 0.1로 슬라이드 인.
delay로 시간 맞추지 말고 timeline을 써라. position 파라미터("+=0.2", "-=0.1", 라벨)로 정밀 제어 가능.
const tl = gsap.timeline({ defaults: { duration: 0.5, ease: "power2" } });
tl.to(".a", { x: 100 })
.to(".b", { y: 50 }, "+=0.2") // 이전 트윈 끝나고 0.2초 뒤
.to(".c", { opacity: 0 }, "-=0.1"); // 이전 트윈 끝나기 0.1초 전
실습: 로그인 모달 시퀀스 — 배경 페이드, 카드 슬라이드, 입력창 stagger 등장.
2026년 웹에서 가장 많이 쓰이는 GSAP 기능. scrub: true면 스크롤에 1:1로 연동, 숫자(예: scrub: 1)면 1초 지연 보간.
gsap.to(".panel", {
xPercent: -100, ease: "none",
scrollTrigger: {
trigger: ".section", pin: true,
start: "top top", end: "+=1000", scrub: true
}
});
주의: 자식 트윈이 아니라 타임라인 자체에 scrollTrigger를 붙여야 한다. 가짜 가로 스크롤(containerAnimation)에는 반드시 ease: "none".
가장 많이 망가지는 부분이 React 정리다. @gsap/react의 useGSAP는 언마운트 시 자동으로 ctx.revert()를 호출한다.
import { useGSAP } from "@gsap/react";
gsap.registerPlugin(useGSAP);
const containerRef = useRef(null);
useGSAP(() => {
gsap.to(".box", { x: 100 });
}, { scope: containerRef }); // 선택자가 컴포넌트 안으로 제한됨
핵심: scope를 꼭 줘라. 안 그러면 페이지 다른 곳의 .box까지 움직인다.
GSAP 사용법 못지않게 가치 있는 게 이 레포의 "메타-콘텐츠 설계"다. 라이브러리 소유자가 아니어도 자기 도메인 지식을 AI에게 가르치고 싶다면 이 구조를 그대로 따라 하면 된다.
| 설계 원칙 | 이 레포에서의 적용 |
|---|---|
| 1. 스킬 입자 크기 | "GSAP 전체"가 아니라 "core/timeline/scroll/..." 8개로 쪼개기. 한 SKILL.md가 너무 길어지면 컨텍스트 낭비. |
| 2. 트리거 단어 사전 | description + llms.txt에 "JavaScript animation library, React animation, scroll animation, parallax..." 같은 사용자 표현을 빽빽이 적어둠. |
| 3. Do / Do Not 대칭 | 모든 스킬 마지막에 ✅ 모범 5~7개 + ❌ 금지 5~7개. negative example이 LLM 학습에 결정적. |
| 4. 크로스 링크 | "Related skills:" 한 줄로 다른 SKILL.md와 연결. 한 스킬 → 다중 스킬 자연 확장. |
| 5. 버전 정보 명시 | "GSAP 3.11+", "v3.12+ clamp() 지원" 등 버전을 본문에 박아둠. AI 학습 데이터의 시점 혼란을 차단. |
설치는 5분, 학습은 평생.
# Anthropic 마켓플레이스 등록 /plugin marketplace add greensock/gsap-skills # 또는 범용 CLI (40+ 에이전트 지원) npx skills add https://github.com/greensock/gsap-skills
| 에이전트 | 스킬 디렉토리 |
|---|---|
| Claude Code | ~/.claude/skills/ |
| Cursor | ~/.cursor/skills/ |
| OpenCode | ~/.config/opencode/skills/ |
| OpenAI Codex | ~/.codex/skills/ |
| Pi | ~/.pi/agent/skills/ |
스킬을 설치만 하지 말고, 직접 손으로 빌드하면서 GSAP 감각을 잡는다.
HTML 페이지 하나에 박스 5개. 각 박스마다 다른 ease로 같은 거리 이동시켜 곡선 차이 체감.
학습 포인트: ease: "power2.out"과 "elastic.out(1, 0.3)"과 "none"의 시각적 차이. 같은 코드인데 이징만 다를 때 사용자 느낌이 얼마나 달라지는지.
페이지 상단에 position: fixed 막대. 스크롤 0% → 100%에 따라 막대 너비를 0% → 100%.
학습 포인트: ScrollTrigger의 scrub: true, start: 0, end: "max" 조합. scaleX로 너비 애니메이션(width보다 60fps 보장).
4개 패널을 가로로 나열. 사용자가 세로로 스크롤하면 화면이 pin되면서 패널이 왼쪽으로 슬라이드.
학습 포인트: containerAnimation, pin: true, ease: "none" 강제 규칙. 트렌디한 포트폴리오 사이트 패턴 그 자체.
Next.js 15 App Router. 히어로 텍스트 stagger 입장, 스크롤 시 카드 등장, 메뉴 hover 시 부드러운 underline. prefers-reduced-motion 대응까지.
학습 포인트: SSR 안전성, useGSAP({ scope }), gsap.matchMedia()로 접근성. 실무에 그대로 옮길 수 있는 수준.
좋아하는 라이브러리(Tailwind? Drizzle? tRPC?) 또는 자기 회사 내부 도구로 이 레포 구조 그대로 my-tool-skills를 만든다.
학습 포인트: Agent Skills 표준에 익숙해지기. description 트리거 단어 설계, llms.txt 작성, .claude-plugin + .cursor-plugin 동시 지원. 사내 위키를 AI 친화 자료로 마이그레이션할 때 그대로 쓸 수 있다.
"GSAP 잘 쓰는 사람" → "AI 시대 콘텐츠 설계자"까지.
| 주차 | 주제 | 핵심 미션 |
|---|---|---|
| Week 1 | GSAP Core + Timeline | 실습 1·2 완수. 공식 docs의 "Getting Started" 정독. stagger 객체 문법 마스터. |
| Week 2 | ScrollTrigger + 성능 | 실습 3 완수. gsap-performance 스킬 정독. Chrome DevTools Performance 탭으로 60fps 측정. |
| Week 3 | React 통합 + 접근성 | 실습 4 완수. useGSAP, contextSafe, gsap.matchMedia()로 reduced-motion 대응. SSR 함정 회피. |
| Week 4 | Agent Skills 설계 | 실습 5 시작. Anthropic Skills 표준 문서 + agentskills.io 정독. 다른 인기 *-skills 레포 5개 디컴파일. |
전체 분량 합쳐 약 60KB. 한 시간이면 다 읽힌다. 그런데 그 한 시간이 "앞으로 GSAP를 평생 잘 쓰는 인생"과 "AI한테 내 도메인을 가르치는 직업적 무기" 두 가지를 동시에 준다.
이 레포·이 분야의 용어를 한 줄씩 정리.
gsap.to()를 호출하면 트윈 인스턴스 하나가 만들어진다.stagger: 0.1이면 각 요소가 0.1초씩 늦게 시작."none"은 등속, "power2.out"은 처음 빠르고 끝이 부드러움, "elastic"은 튕김. CSS의 cubic-bezier와 같은 개념인데, GSAP는 이름 기반의 풍부한 프리셋을 제공한다.scrub: true면 스크롤 위치 = 애니메이션 진행도.pin: true는 특정 섹션을 스크롤 동안 화면에 고정시키는 기법. 그 사이 자식 요소들만 움직이며 "씬"이 진행된다. Apple 제품 페이지의 "스크롤하면 화면이 멈추고 내부만 움직이는" 효과.opacity + visibility를 자동 동기화. autoAlpha: 0이면 opacity 0 + visibility hidden 둘 다 적용 → 클릭 차단·렌더 최적화까지 한 번에.gsap.from() / gsap.fromTo()의 기본 동작 — "트윈이 만들어지자마자 시작값을 즉시 적용". 같은 속성에 여러 from을 쌓을 때 충돌나므로, 뒤쪽 트윈은 immediateRender: false로 설정해야 함.ctx.revert() 한 번으로 다 정리(kill + 인라인 스타일 원복)할 수 있게 해주는 메커니즘. React/Vue/Svelte 정리 패턴의 핵심.@gsap/react가 제공하는 훅. 내부적으로 useLayoutEffect + gsap.context()를 묶어 언마운트 시 자동 정리. scope 옵션으로 선택자를 컴포넌트 내부로 제한.(prefers-reduced-motion: reduce) 같은 접근성 처리, 데스크톱·모바일 분기 처리에 표준 도구.gsap 패키지에 포함.원문과 보조 자료.
npx skills add https://github.com/greensock/gsap-skills.gsap-scrolltrigger + gsap-react 스킬을 자동 호출하는지 확인.useGSAP, ctx.revert(), scope가 자연스럽게 들어 있는지 점검. 빠져 있다면 스킬 미적용일 가능성.my-design-skills 레포를 똑같은 구조로 한 줄씩 작성해본다.