[Agent Skills #4] 나만의 Agent Skill 만들기
· 약 9분
팀 컨벤션부터 자동화 워크플로우까지, 커스텀 스킬로 패키징하는 방법
들어가며
지금까지 Vercel이 제공하는 스킬을 사용해봤습니다.
하지만 Agent Skills의 진정한 힘은 나만의 스킬을 만들 수 있다는 점입니다.
- 팀 코딩 컨벤션
- 프로젝트별 워크플로우
- 반복되는 작업 자동화
- 도메인 전문 지식
이 모든 것을 스킬로 패키징해서 AI 에이전트에게 전달할 수 있습니다.
스킬의 기본 구조
Agent Skill은 단순한 폴더입니다.
my-skill/
├── SKILL.md # 필수: 스킬 정의 파일
├── scripts/ # 선택: 자동화 스크립트
│ └── check.sh
└── references/ # 선택: 참고 문서
└── examples.md
최소 요구사항은 SKILL.md 파일 하나뿐입니다.
SKILL.md 작성법
기본 구조
---
name: my-skill
description: 스킬이 언제 사용되어야 하는지 설명. 트리거 문구 포함.
---
# 스킬 제목
스킬에 대한 상세 설명과 지침.
## 규칙 또는 가이드라인
1. 첫 번째 규칙
2. 두 번째 규칙
## 예시
좋은 예시와 나쁜 예시 포함.
Frontmatter (YAML 헤더)
---
name: my-skill # 필수: 스킬 이름 (kebab-case)
description: 스킬 설명 # 필수: 언제 이 스킬을 사용할지
version: 1.0.0 # 선택: 버전
author: your-name # 선택: 작성자
license: MIT # 선택: 라이센스
---
중요: description이 스킬 활성화의 핵심입니다.
에이전트는 사용자의 요청과 description을 매칭해서 스킬 활성화 여부를 결정합니다.
좋은 description 작성법
# ❌ 너무 모호함
description: 코드 관련 도움
# ❌ 너무 일반적
description: React 개발 도움
# ✅ 구체적 + 트리거 문구 포함
description: React 컴포넌트의 성능 이슈를 검토합니다. "성능 검토해줘", "최적화해줘", "느린 것 같아" 등의 요청에 사용됩니다.
# ✅ 액션 기반
description: Git 커밋 메시지를 Conventional Commits 형식으로 작성합니다. "커밋 메시지 만들어줘", "커밋해줘" 요청 시 활성화됩니다.
실전 예제 1: 팀 코딩 컨벤션 스킬
우리 팀만의 코딩 규칙을 스킬로 만들어봅시다.
디렉토리 구조
team-conventions/
└── SKILL.md
SKILL.md 핵심 구조
---
name: team-conventions
description: 우리 팀의 코딩 컨벤션을 적용합니다. 코드 작성, 리뷰, PR 생성 시 자동으로 활성화됩니다.
version: 1.0.0
---
# Team Alpha 코딩 컨벤션
## 파일 및 폴더 구조
src/
├── components/ # React 컴포넌트
├── hooks/ # 커스텀 훅
├── lib/ # 유틸리티 함수
└── types/ # TypeScript 타입 정의
## 네이밍 규칙
- 컴포넌트: `PascalCase.tsx`
- 훅: `useCamelCase.ts`
- 상수: `SCREAMING_SNAKE_CASE`
## 금지 사항
- ❌ `any` 타입 사용 금지
- ❌ `console.log` 커밋 금지
- ❌ 인라인 스타일 사용 금지
## 커밋 메시지
Conventional Commits: `feat`, `fix`, `docs`, `refactor`, `test`, `chore`
포인트: description에 트리거 문구("코드 작성", "리뷰", "PR")를 포함해야 에이전트가 자동으로 스킬을 활성화합니다.
📄 전체 SKILL.md 예시 보기 (클릭하여 펼치기)
---
name: team-conventions
description: 우리 팀의 코딩 컨벤션을 적용합니다. 코드 작성, 리뷰, PR 생성 시 자동으로 활성화됩니다.
version: 1.0.0
author: Team Alpha
---
# Team Alpha 코딩 컨벤션
## 파일 및 폴더 구조
```
src/
├── components/ # React 컴포넌트
│ ├── ui/ # 재사용 가능한 UI 컴포넌트
│ └── features/ # 기능별 컴포넌트
├── hooks/ # 커스텀 훅
├── lib/ # 유틸리티 함수
├── types/ # TypeScript 타입 정의
└── styles/ # 글로벌 스타일
```
## 네이밍 규칙
| 대상 | 규칙 | 예시 |
|------|------|------|
| 컴포넌트 파일 | `PascalCase.tsx` | `UserProfile.tsx` |
| 훅 파일 | `useCamelCase.ts` | `useAuth.ts` |
| 유틸리티 | `camelCase.ts` | `formatDate.ts` |
| 상수 | `SCREAMING_SNAKE_CASE` | `MAX_RETRY_COUNT` |
## 컴포넌트 작성 규칙
1. **함수형 컴포넌트만 사용**
2. **Props 인터페이스는 컴포넌트 위에 정의**
3. **한 파일에 하나의 컴포넌트**
```tsx
interface UserCardProps {
user: User
onSelect?: (id: string) => void
}
export function UserCard({ user, onSelect }: UserCardProps) {
return <div>{user.name}</div>
}
```
## 컴포넌트 내부 순서
1. 훅 선언 → 2. 파생 상태 → 3. 이벤트 핸들러 → 4. 이펙트 → 5. early return → 6. 렌더링
## Import 순서
1. React → 2. 외부 라이브러리 → 3. 내부 컴포넌트 → 4. 훅 → 5. 유틸리티 → 6. 타입 → 7. 스타일
## 금지 사항
- ❌ `any` 타입 사용 금지 (불가피한 경우 주석 필수)
- ❌ `console.log` 커밋 금지
- ❌ 매직 넘버 사용 금지 (상수로 정의)
- ❌ 인라인 스타일 사용 금지
## 커밋 메시지 형식
Conventional Commits: `<type>(<scope>): <subject>`
- `feat`: 새로운 기능
- `fix`: 버그 수정
- `docs`: 문서 변경
- `refactor`: 리팩토링
- `test`: 테스트 추가/수정
- `chore`: 빌드, 설정 변경
설치 및 사용
# 스킬 디렉토리에 복사
cp -r team-conventions ~/.claude/skills/
# 또는 프로젝트에 추가 (팀 공유용)
cp -r team-conventions .claude/skills/
git add .claude/skills/team-conventions
git commit -m "chore: 팀 컨벤션 스킬 추가"
