Agent Skills Open Standard · SKILL.md

SKILL.md 완전 가이드

SKILL.md 파일 하나로 Claude의 기능을 확장한다.
슬래시 명령, Subagent 실행, 동적 컨텍스트 주입까지.

SKILL.md란?

Skills는 Claude Code의 기능을 확장하는 SKILL.md 파일이다. 지침을 작성하면 Claude가 자동으로 도구 모음에 추가한다. 관련 상황에서 자동 로드되거나, /skill-name으로 직접 호출할 수 있다. Agent Skills 개방형 표준을 따르므로 여러 AI 도구에서 작동한다.

commands에서 skills로: 기존 .claude/commands/deploy.md와 .claude/skills/deploy/SKILL.md는 모두 /deploy를 생성하고 동일하게 작동한다. 기존 commands 파일은 계속 작동하지만, Skills는 지원 파일 디렉토리, frontmatter 제어, 자동 로드 등 추가 기능을 제공한다.

CLAUDE.md

  • 매 대화 시작 시 항상 로드
  • 프로젝트 전반의 규칙과 컨벤션
  • 200줄 이하 권장 (항상 컨텍스트 차지)
  • "이 프로젝트에서는 이렇게 해라"

SKILL.md

  • 호출될 때만 전체 내용 로드
  • 설명(description)만 컨텍스트에 상주
  • 길이 제한 없음 + 지원 파일 가능
  • "이 작업은 이 순서로 해라"

번들 Skills

Claude Code에 기본 제공되는 Skills. 프롬프트 기반이라 병렬 에이전트를 생성하고, 파일을 읽고, 코드베이스에 적응한다.

/batch <instruction>
코드베이스 전체에서 대규모 변경을 병렬로 수행. 5~30개 독립 단위로 분해, 각각 격리된 git worktree에서 에이전트가 구현 후 PR 생성.
/claude-api
프로젝트 언어에 맞는 Claude API 레퍼런스 로드. 도구 사용, 스트리밍, 구조화된 출력 등. anthropic SDK import 시 자동 활성화.
/loop [interval] <prompt>
프롬프트를 간격에 따라 반복 실행. 배포 폴링, PR 감시, 주기적 작업에 활용. 예: /loop 5m check deploy
/simplify [focus]
최근 변경 파일에서 코드 품질 검토. 3개 리뷰 에이전트를 병렬로 생성, 결과 집계 후 수정 적용.
/debug [description]
디버그 로깅 활성화 후 세션 로그를 읽어 문제 해결. 선택적으로 문제를 설명하여 분석 초점을 맞춤.

SKILL.md 파일 구조

YAML frontmatter + 마크다운 콘텐츠. frontmatter는 동작을 제어하고, 마크다운은 지침을 담는다.

# .claude/skills/explain-code/SKILL.md
---
name: explain-code
description: 코드를 시각적 다이어그램과 유추로 설명한다. "이거 어떻게 동작해?"라고 물을 때 사용.
---

코드를 설명할 때 항상 포함할 것:

1. 유추로 시작 — 일상의 무언가에 비유
2. 다이어그램 그리기 — ASCII 아트로 흐름, 구조, 관계를 표현
3. 코드 워크스루 — 단계별로 무슨 일이 일어나는지 설명
4. 함정 하이라이트 — 흔한 실수나 오해를 짚어줌

설명은 대화체로. 복잡한 개념은 여러 유추를 사용한다.

디렉토리 구조

# 각 스킬은 SKILL.md를 진입점으로 하는 디렉토리
my-skill/
├── SKILL.md           # 주요 지침 (필수)
├── template.md        # Claude가 채울 템플릿
├── examples/
│   └── sample.md      # 예상 형식을 보여주는 예제
└── scripts/
    └── validate.sh    # Claude가 실행할 수 있는 스크립트

# 프로젝트 전체 구조
my-project/
├── CLAUDE.md                            # 항상 로드되는 규칙
├── .claude/
│   └── skills/
│       ├── deploy/
│       │   └── SKILL.md               # /deploy
│       ├── review/
│       │   └── SKILL.md               # /review
│       └── create-page/
│           ├── SKILL.md               # /create-page
│           └── template.html          # 지원 파일
└── src/

# 글로벌 스킬 (모든 프로젝트에서 사용)
~/.claude/skills/
├── commit/
│   └── SKILL.md                       # /commit
└── explain-code/
    └── SKILL.md                       # /explain-code

스킬 저장 위치와 우선순위

저장 위치에 따라 적용 범위가 결정된다. 같은 이름이면 상위가 우선.

Enterprise (최우선)
관리 설정
조직의 모든 사용자에게 적용. IT 관리자가 배포.
Personal
~/.claude/skills/<name>/SKILL.md
모든 프로젝트에서 사용 가능. 개인 워크플로우.
Project
.claude/skills/<name>/SKILL.md
이 프로젝트에서만 사용. Git 커밋해서 팀 공유.
Plugin
<plugin>/skills/<name>/SKILL.md
플러그인 활성화된 곳에서 사용. plugin:skill 네임스페이스.
모노레포 지원: 하위 디렉토리의 파일을 작업할 때, Claude Code는 중첩된 .claude/skills/도 자동으로 검색한다. packages/frontend/.claude/skills/에 프론트엔드 전용 스킬을 둘 수 있다.

Frontmatter 레퍼런스

SKILL.md 상단의 YAML frontmatter로 스킬 동작을 제어한다. 모든 필드는 선택 사항.

필드설명
name스킬 표시 이름. 생략 시 디렉토리 이름 사용. 소문자, 숫자, 하이픈만 (최대 64자).
description권장. 무엇을 하고 언제 사용할지. Claude가 자동 적용 시기를 판단하는 기준. 250자 초과 시 잘림.
argument-hint자동완성 시 표시되는 인수 힌트. 예: [issue-number], [filename] [format]
disable-model-invocationtrue면 Claude가 자동 로드하지 않음. /name으로만 수동 트리거. 배포, 커밋 등에 적합.
user-invocablefalse면 / 메뉴에서 숨김. Claude만 자동으로 사용. 배경 지식 스킬에 적합.
allowed-tools스킬 활성화 시 허가 없이 사용 가능한 도구. Read Grep Glob 같이 공백 구분.
model스킬 활성화 시 사용할 모델 지정.
effort노력 수준. low, medium, high, max(Opus만).
contextfork으로 설정하면 격리된 subagent에서 실행.
agentcontext: fork 시 사용할 subagent 타입. Explore, Plan, general-purpose 또는 커스텀.
paths활성화를 제한하는 glob 패턴. 패턴에 매칭되는 파일 작업 시에만 자동 로드.
hooks스킬 라이프사이클에 범위가 지정된 hooks.

호출 제어: 누가 스킬을 사용하는가

frontmatter로 사용자/Claude 각각의 호출 권한을 분리한다

Frontmatter
사용자
Claude
로드 시점
(기본값)
O
O
description 항상 컨텍스트에 + 호출 시 전체 로드
disable-model-invocation: true
O
X
사용자가 /name 호출할 때만 전체 로드
user-invocable: false
X
O
description 항상 컨텍스트에 + Claude가 판단하여 로드
실전 팁: 배포(/deploy), 커밋(/commit), 슬랙 전송 같은 부작용이 있는 스킬은 disable-model-invocation: true를 설정한다. Claude가 "코드가 준비된 것 같으니 배포하겠습니다"라고 스스로 판단하는 것을 막는다.

고급 패턴

동적 컨텍스트 주입 — !`command`

!`command` 구문은 스킬이 Claude에게 전달되기 전에 셸 명령을 실행한다. 명령 출력이 플레이스홀더를 대체하므로 Claude는 실제 데이터를 받는다.

---
name: pr-summary
description: PR 변경사항을 요약
context: fork
agent: Explore
allowed-tools: Bash(gh *)
---

## Pull request 컨텍스트
- PR diff: !`gh pr diff`
- PR 댓글: !`gh pr view --comments`
- 변경된 파일: !`gh pr diff --name-only`

## 작업
이 PR을 요약해줘...

Subagent에서 실행 — context: fork

context: fork를 설정하면 스킬이 격리된 subagent에서 실행된다. 스킬 콘텐츠가 subagent의 프롬프트가 된다.

---
name: deep-research
description: 주제를 철저히 조사
context: fork
agent: Explore
---

$ARGUMENTS를 철저히 조사한다:

1. Glob과 Grep으로 관련 파일 찾기
2. 코드를 읽고 분석
3. 구체적인 파일 참조와 함께 결과 요약

인수 전달 — $ARGUMENTS

---
name: migrate-component
description: 컴포넌트를 다른 프레임워크로 마이그레이션
---

$0 컴포넌트를 $1에서 $2로 마이그레이션한다.
기존 동작과 테스트를 모두 유지한다.

# 사용: /migrate-component SearchBar React Vue
# $0 = SearchBar, $1 = React, $2 = Vue
문자열 치환: $ARGUMENTS (전체 인수), $ARGUMENTS[N] 또는 $N (위치별), ${CLAUDE_SESSION_ID} (세션 ID), ${CLAUDE_SKILL_DIR} (스킬 디렉토리 경로)를 사용할 수 있다.

실전 예제

배포 스킬 (사용자만 호출)

---
name: deploy
description: 프로덕션 환경에 배포
disable-model-invocation: true
---

$ARGUMENTS를 프로덕션에 배포한다:

1. 테스트 스위트 실행
2. 애플리케이션 빌드
3. 배포 타겟에 푸시
4. 배포 성공 여부 확인

읽기 전용 탐색 스킬

---
name: safe-reader
description: 파일을 읽기만 하고 수정하지 않음
allowed-tools: Read Grep Glob
---

파일을 탐색하고 분석하되 절대 수정하지 않는다.
발견한 내용을 정리해서 보고한다.

이슈 수정 스킬

---
name: fix-issue
description: GitHub 이슈를 수정
disable-model-invocation: true
argument-hint: [issue-number]
---

GitHub 이슈 $ARGUMENTS를 코딩 표준에 맞게 수정한다:

1. 이슈 설명 읽기
2. 요구사항 파악
3. 수정 구현
4. 테스트 작성
5. 커밋 생성

공식 자료 및 참고 링크

SKILL.md 공식 문서
code.claude.com/docs/ko/skills
Agent Skills 개방형 표준
agentskills.io
Subagents 공식 문서
code.claude.com/docs/ko/sub-agents
Hooks 공식 문서
code.claude.com/docs/ko/hooks

지원 파일 활용

SKILL.md를 500줄 이하로 유지하고, 상세한 참조 자료는 별도 파일로 분리한다. SKILL.md에서 링크로 참조하면 Claude가 필요할 때만 로드한다.

# 스킬 디렉토리 구조
create-api/
├── SKILL.md             # 핵심 지침 + 파일 참조
├── reference.md        # 상세 API 문서 (필요 시 로드)
├── examples.md         # 사용 예제 (필요 시 로드)
└── scripts/
    └── validate.py     # 유틸리티 스크립트 (실행용)
# SKILL.md에서 지원 파일 참조
---
name: create-api
description: 새 API 엔드포인트를 생성
---

새 API 엔드포인트를 프로젝트 표준에 맞게 생성한다.

## 추가 리소스
- 상세 API 스펙은 [reference.md](reference.md) 참조
- 사용 예제는 [examples.md](examples.md) 참조

Python 스크립트 번들링

스킬 디렉토리에 Python, Shell 등 스크립트를 함께 번들하면 Claude가 단일 프롬프트로 가능한 것 이상의 작업을 수행할 수 있다. 스크립트가 무거운 작업을 처리하고, Claude는 조율을 담당한다.

디렉토리 구조

# 코드베이스 시각화 스킬 — Python 스크립트 번들 예제
~/.claude/skills/
└── codebase-visualizer/
    ├── SKILL.md                     # 스킬 지침
    └── scripts/
        └── visualize.py             # 번들된 Python 스크립트

SKILL.md — 스크립트 실행 지시

핵심은 ${CLAUDE_SKILL_DIR} 변수다. 이 변수는 SKILL.md가 위치한 디렉토리의 절대 경로로 치환되므로, 현재 작업 디렉토리와 무관하게 번들된 스크립트를 정확히 참조할 수 있다.

---
name: codebase-visualizer
description: 코드베이스의 인터랙티브 트리 시각화를 생성한다. 새 레포 탐색, 프로젝트 구조 파악, 대용량 파일 식별에 사용.
allowed-tools: Bash(python *)
---

# Codebase Visualizer

프로젝트의 파일 구조를 접을 수 있는 인터랙티브 HTML 트리 뷰로 생성한다.

## 사용법

프로젝트 루트에서 시각화 스크립트를 실행한다:

```bash
python ${CLAUDE_SKILL_DIR}/scripts/visualize.py .
```

현재 디렉토리에 `codebase-map.html`을 생성하고 브라우저에서 연다.

## 시각화 내용
- 접기/펼치기 디렉토리: 폴더 클릭으로 토글
- 파일 크기: 각 파일 옆에 표시
- 색상 코딩: 파일 타입별 다른 색상
- 디렉토리 합계: 폴더별 총 크기 표시

scripts/visualize.py — 번들 스크립트

Python 기본 라이브러리만 사용하므로 별도 패키지 설치가 필요없다. 디렉토리 트리를 스캔해서 자체 완결형 HTML 파일을 생성한다.

#!/usr/bin/env python3
"""코드베이스의 인터랙티브 트리 시각화를 생성한다."""

import json, sys, webbrowser
from pathlib import Path
from collections import Counter

IGNORE = {'.git', 'node_modules', '__pycache__', '.venv', 'dist', 'build'}

def scan(path: Path, stats: dict) -> dict:
    result = {"name": path.name, "children": [], "size": 0}
    try:
        for item in sorted(path.iterdir()):
            if item.name in IGNORE or item.name.startswith('.'):
                continue
            if item.is_file():
                size = item.stat().st_size
                ext = item.suffix.lower() or '(no ext)'
                result["children"].append(
                    {"name": item.name, "size": size, "ext": ext}
                )
                result["size"] += size
                stats["files"] += 1
                stats["extensions"][ext] += 1
            elif item.is_dir():
                stats["dirs"] += 1
                child = scan(item, stats)
                if child["children"]:
                    result["children"].append(child)
                    result["size"] += child["size"]
    except PermissionError:
        pass
    return result

def generate_html(data, stats, output):
    # ... HTML 생성 로직 (요약 사이드바 + 막대 차트 + 트리 뷰)
    # 전체 코드: code.claude.com/docs/ko/skills 공식 문서 참조
    ...

if __name__ == '__main__':
    target = Path(sys.argv[1] if len(sys.argv) > 1 else '.').resolve()
    stats = {"files": 0, "dirs": 0, "extensions": Counter()}
    data = scan(target, stats)
    out = Path('codebase-map.html')
    generate_html(data, stats, out)
    print(f'Generated {out.absolute()}')
    webbrowser.open(f'file://{out.absolute()}')
실행 흐름: 사용자가 "이 코드베이스를 시각화해줘"라고 말하면 → Claude가 스킬을 로드 → ${CLAUDE_SKILL_DIR}/scripts/visualize.py를 실행 → Python이 디렉토리를 스캔해서 HTML 생성 → 브라우저에서 열림. Claude는 조율만 하고, 무거운 작업은 스크립트가 처리한다.

스크립트 번들링 패턴 정리

핵심 변수
${CLAUDE_SKILL_DIR} — SKILL.md가 위치한 디렉토리의 절대 경로. 스크립트 참조 시 필수.
allowed-tools: Bash(python *) — Claude가 Python 실행 시 허가를 묻지 않도록 설정.
활용 예시
코드베이스 시각화, 종속성 그래프, 테스트 커버리지 리포트, API 문서 생성, DB 스키마 다이어그램 등. 표준 라이브러리만 쓰면 별도 설치 없이 바로 동작.
# 스크립트 참조 패턴 비교

# 잘못된 방법 — 상대 경로 (작업 디렉토리에 따라 깨짐)
python ./scripts/visualize.py .

# 올바른 방법 — ${CLAUDE_SKILL_DIR} 사용 (항상 정확)
python ${CLAUDE_SKILL_DIR}/scripts/visualize.py .

# Shell 스크립트도 동일
bash ${CLAUDE_SKILL_DIR}/scripts/setup.sh

# Node.js 스크립트
node ${CLAUDE_SKILL_DIR}/scripts/generate.js
주의: 스크립트에서 외부 패키지가 필요하면 SKILL.md에 설치 절차를 명시하거나, 표준 라이브러리만 사용하도록 작성하는 게 이식성이 높다. allowed-tools에 Bash(python *) 같이 실행 권한을 열어줘야 Claude가 허가 요청 없이 스크립트를 실행한다.

전체 코드와 더 많은 예제는 공식 문서 (code.claude.com/docs/ko/skills)를 참고한다.

실전 활용 사례

📋
퇴사자 인수인계 스킬 만들기
중국 AI 분신 논란을 반면교사로, 퇴사자의 업무 지식을 SKILL.md로 체계화하는 올바른 방법. HR/개발 직군별 실전 예제 포함.
→