Skills — 반복을 패키징하다
이전 이야기에서: 지민은 Hooks로 Claude의 행동을 제어하게 됐다. main에 직접 push하는 사고는 다시 일어나지 않았다. 파일 수정 후 lint도 자동으로 돌아갔다. 그런데 새로운 종류의 피로감이 쌓이고 있었다...
Harness = Tools + Knowledge + Context + Permissions
Skills는 반복되는 Knowledge를 On-demand로 패키징한다. "Load knowledge when you need it, not upfront"
하루에 10번 같은 말
지민은 하루에 커밋을 10번 했다. 매번 같은 지시를 타이핑했다.
"스테이지된 변경사항 보고, 컨벤셔널 커밋 형식으로 커밋해줘.
타입은 feat/fix/refactor/docs/test/chore 중 하나. 50자 이하. 한국어."
열 번. 매일. 아침에는 정확하게 지시했지만, 저녁에는 "그냥 커밋해줘"로 줄어들었다. Claude의 커밋 품질이 아침과 저녁에 달랐다. 사람의 일관성에 한계가 있었기 때문이다.
그리고 또 다른 문제가 있었다.
CLAUDE.md로 항상 필요한 Knowledge가 생겼다. 그런데 개발자들이 더 많은 것을 넣기 시작하면서 문제가 드러났다.
모든 Knowledge를 CLAUDE.md(시스템 프롬프트)에 넣으면:
시스템 프롬프트 = 프로젝트 정보 (500 토큰)
+ Git 워크플로우 (1000 토큰)
+ 코드 리뷰 체크리스트 (2000 토큰)
+ 테스트 가이드라인 (1500 토큰)
+ 배포 절차 (2000 토큰)
+ 보안 가이드 (1800 토큰)
+ ...
= 총 15,000 토큰
문제 1: 컨텍스트 낭비
/commit을 실행할 때 배포 절차 2000 토큰은 필요 없다.
/deploy를 실행할 때 코드 리뷰 체크리스트 2000 토큰은 필요 없다.
모든 지식을 항상 들고 다니는 건 낭비다.
문제 2: 반복 지시의 비효율 매번 같은 지시를 내리는 것과는 다른 문제: "이 워크플로우를 실행할 때는 이 지식이 필요하다"는 것을 어떻게 자동화할까?
해결책: Two-Layer Knowledge Loading
핵심 패턴:
Layer 1 (항상 활성화 — 시스템 프롬프트):
┌─────────────────────────────────────┐
│ 사용 가능한 스킬: │
│ - git: Git 워크플로우 헬퍼 │ ~100 토큰/스킬
│ - code-review: 코드 리뷰 체크리스트│
│ - deploy: 배포 절차 │
└─────────────────────────────────────┘
↓ Claude가 load_skill("git") 요청
Layer 2 (필요할 때만 — tool_result):
┌─────────────────────────────────────┐
│ <skill name="git"> │
│ ## Git 워크플로우 │ ~2000 토큰
│ 1. 브랜치 전략: ... │
│ 2. 커밋 형식: ... │
│ </skill> │
└─────────────────────────────────────┘
Layer 1: 어떤 Knowledge가 있는지만 알려준다 (이름 + 한 줄 설명) — 저렴 Layer 2: 실제로 필요할 때 전체 내용을 로드한다 — 필요할 때만
10개 스킬 × 100토큰 = 1,000 토큰 (레이어 1 항상) vs 사용된 스킬 × 2,000 토큰 = 평균 2,000-4,000 토큰 (레이어 2 필요 시)
총 소비 토큰이 크게 줄었다.