스킬로 Claude 확장하기

스킬로 Claude 확장하기

스킬(Skill)은 Claude Code의 기능을 확장하는 재사용 가능한 단위입니다. SKILL.md 파일 하나에 지침을 담으면 Claude가 도구집에 추가하고, 관련 있을 때 자동 로드하거나 /스킬명으로 직접 호출할 수 있습니다. 같은 지침·체크리스트·다단계 절차를 반복해서 붙여넣게 될 때 스킬을 만들면 됩니다. CLAUDE.md와 달리 스킬 본문은 사용될 때만 로드되므로, 긴 참고 자료도 필요하기 전까지는 컨텍스트를 거의 먹지 않습니다. 스킬은 여러 AI 도구에서 동작하는 Agent Skills 오픈 표준을 따릅니다.

출처: 공식문서

본문

번들 스킬

Claude Code는 /doctor, /code-review, /batch, /debug, /loop, /claude-api 등의 번들 스킬을 포함합니다. 번들 스킬은 프롬프트 기반으로, Claude에게 상세 지침을 주고 도구로 작업을 오케스트레이션하게 합니다. / + 스킬명으로 호출하며, 일부는 관련 있을 때 자동 호출되고 /verify 등은 직접 호출해야 실행됩니다. disableBundledSkills 설정으로 끌 수 있습니다.

앱 실행·검증 3종: /run(변경이 동작함을 보기 위해 앱 실행·구동), /verify(테스트나 타입체크 대신 실제 앱을 빌드·실행해 변경이 의도대로 되었는지 확인), /run-skill-generator(/run·/verify가 프로젝트를 빌드·실행하는 법을 학습시킴). /run·/verify는 설정 없이 프로젝트 유형(CLI·서버·TUI·브라우저)과 README·package.json·Makefile에서 실행법을 추론합니다. /run-skill-generator는 깨끗한 환경에서 성공한 레시피를 .claude/skills/run-<name>/에 프로젝트별 스킬로 커밋합니다.

시작하기

첫 스킬 만들기.claude/skills/summarize-changes/SKILL.md처럼 ~/.claude/skills/<이름>/SKILL.md를 만듭니다. YAML 프론트매터(언제 쓸지) + 마크다운 본문(지침). 디렉토리명이 명령이 되고 description이 자동 로드 판단에 쓰입니다:

---
description: Summarizes uncommitted changes and flags anything risky. Use when the user asks what changed, wants a commit message, or asks to review their diff.
---

## Current changes

!`git diff HEAD`

## Instructions

Summarize the changes above in two or three bullet points, then list any risks...

!git diff HEAD`` 줄은 동적 컨텍스트 주입으로, Claude가 스킬 내용을 보기 전 명령을 실행하고 출력을 해당 위치에 넣습니다. 테스트는 /summarize-changes로 직접 호출하거나 "What did I change?"처럼 description에 맞는 질문으로 자동 호출합니다.

스킬 위치 (어디에 저장하느냐가 로드 범위 결정):

위치 경로 로드
엔터프라이즈 관리 설정 디렉토리의 .claude/skills/ 조직 배포 머신의 모든 사용자
개인 ~/.claude/skills/ 이 머신의 모든 프로젝트
프로젝트 .claude/skills/ 이 저장소의 세션 (커밋 필수)
중첩 <subdir>/.claude/skills/ 그 하위 세션
추가 디렉토리 --add-dir 디렉토리의 .claude/skills/ 해당 세션
플러그인 <plugin>/skills/ 플러그인 활성 위치, /플러그인명:스킬명
claude.ai 계정 claude.ai 설정에서 활성화 Cowork·클라우드 세션

스킬 폴더는 심링크 가능하고, 이름 synced는 예약(claude.ai 동기화용), .claude/commands/*.md는 구버전 형식(여전히 동작, 스킬 선호). 모노레포에서는 상위 디렉토리 스킬도 로드되며, 중첩 스킬은 해당 하위 파일을 읽을 때 로드됩니다. 같은 이름의 중첩 스킬이 있으면 루트 스킬이 /deploy로 실행되고 /apps/web:deploy 형식으로 중첩 스킬을 따로 호출합니다.

이름 충돌 해결: 엔터프라이즈 > 개인 > 프로젝트 순. 스킬과 번들 스킬이 겹치면 내 스킬이 번들 명령을 대체(별칭은 제외). 스킬 > .claude/commands/ 파일. 플러그인 스킬은 네임스페이스(/plugin-name:skill-name)라 함께 로드.

Cowork·클라우드 세션: ~/.claude/skills/를 읽지 않습니다. claude.ai 계정용 스킬을 로드하며, 비대화형에서 CLAUDE_CODE_SYNC_SKILLS=1 claude -p "..."로 다운로드하면 ~/.claude/skills/synced/에 저장됩니다. 동기화 스킬 이름이 다른 명령과 겹치면 그 명령이 실행됩니다.

라이브 변경 감지: ~/.claude/skills/, 프로젝트 .claude/skills/, --add-dir 디렉토리의 스킬 변경은 재시작 없이 현재 세션에서 반영됩니다. 세션 시작 시 없던 최상위 디렉토리를 만들었다면 재시작 필요.

삭제하기: 개인/프로젝트는 디렉토리 삭제, 엔터프라이즈는 관리자가 삭제, 플러그인은 /plugin uninstall, claude.ai 동기화는 계정에서 끄면 다음 동기화 때 제거, 번들은 disableBundledSkills/skillOverrides.

스킬 구성

스킬 콘텐츠 유형: 참조 콘텐츠(관례·패턴·도메인 지식 — 인라인 실행)는 컨텍스트와 함께 사용, 작업 콘텐츠(배포·커밋·코드 생성 같은 단계별 지침)는 /스킬명으로 직접 호출하는 게 일반적이며 disable-model-invocation: true로 자동 트리거를 막습니다. 본문은 간결하게 (로드 후 턴을 넘어 컨텍스트에 남으므로 모든 줄이 반복 토큰 비용).

프론트매터 레퍼런스 (전부 선택, description만 권장):

필드 설명
name 표시 이름 (기본 디렉토리명)
description 언제 쓸지. 전제 조건을 when_to_use와 합쳐 1,536자에서 잘림
when_to_use 트리거 문구·예시 요청 등 추가 컨텍스트
argument-hint 자동완성 힌트 (예: [issue-number])
arguments $name 치환용 이름 인자 (공백 구분 문자열 또는 YAML 목록)
disable-model-invocation true면 Claude가 자동 호출 못 함. 수동 /name 전용
user-invocable false면 Claude만 호출 (사용자는 숨김)
allowed-tools 이 스킬을 호출한 턴 동안 승인 없이 쓸 도구. 다음 메시지 보내면 해제
disallowed-tools 스킬 활성 동안 제거할 도구
model 스킬 활성 시 모델 오버라이드 (다음 턴에 해제)
effort low~max (기본 세션 상속)
context fork면 포크 서브에이전트에서 실행
agent context: fork 시 사용할 서브에이전트 유형
background context: fork와 함께. false면 결과를 기다림 (기본 true)
hooks 스킬 호출 시 등록·세션 동안 유지되는 훅
paths 이 스킬이 활성화될 파일을 제한하는 glob
shell !명령 블록의 셸: bash(기본)/powershell
metadata,license,compatibility Agent Skills 표준 필드

문자열 치환: $ARGUMENTS(전체 인자), $ARGUMENTS[N]/$N(0-기반 인덱스), $name(이름 인자), ${CLAUDE_SESSION_ID}, ${CLAUDE_EFFORT}, ${CLAUDE_SKILL_DIR}(스킬 디렉토리), ${CLAUDE_PROJECT_DIR}(프로젝트 루트), ${CLAUDE_PLUGIN_ROOT}·${CLAUDE_PLUGIN_DATA}(플러그인 전용). 예: /fix-issue 123$ARGUMENTS123을 전달. 다중 값은 셸스타일 따옴표로 감싸세요. $를 리터럴로 쓰려면 \$로 이스케이프.

지원 파일: 스킬 디렉토리에 여러 파일(참조 문서, 예제, 스크립트)을 넣을 수 있습니다. SKILL.md는 500줄 미만 유지.

호출 제어

  • disable-model-invocation: true — 사용자만 호출 (부작용·타이밍 제어 워크플로우용, 예: /commit, /deploy)
  • user-invocable: false — Claude만 호출 (명령으로 실행할 수 없는 배경 지식용)
  • 두 필드 모두 미설정 시 양쪽 다 호출 가능, description은 항상 컨텍스트에 있고 전체 스킬은 호출 시 로드

스킬 콘텐츠 수명주기

호출 시 렌더링된 SKILL.md는 단일 메시지로 대화에 들어가 이후 턴에도 남습니다(권한은 아님 — allowed-tools는 다음 메시지에 해제). 자동 통합 시 스킬을 예산 내로 이월하며, 가장 최근 호출의 처음 5,000 토큰을 재부착하고 총 25,000 토큰 예산을 공유합니다. 오래된 스킬은 통합 후 사라질 수 있으니 재호출하세요.

스킬 도구 사전 승인

allowed-tools: Bash(git add *) Bash(git commit *)처럼 이 스킬을 호출한 턴 동안 승인 없이 쓸 도구를 지정합니다. 다음 메시지를 보내면 해제됩니다. 워크스페이스 신뢰와 무관하게 적용되므로, 저장소에 체크인된 스킬의 allowed-tools는 실행 전에 검토하세요.

인자 전달

$ARGUMENTS 치환으로 인자를 전달합니다. 예: /fix-issue 123 → "Fix GitHub issue 123...". 인덱스 접근 $ARGUMENTS[0]/$0도 가능. 한 메시지 시작에 스킬 여러 개를 스택할 수 있습니다 (/write-tests /fix-issue 123) — 첫 스킬 + 최대 5개 확장.

고급 패턴

동적 컨텍스트 주입: !`<command>` 문법이 스킬 내용을 Claude에게 보내기 전 셸 명령을 실행하고 그 출력으로 치환합니다:

---
name: pr-summary
description: Summarize changes in a pull request
context: fork
agent: Explore
allowed-tools: Bash(gh *)
---

## Pull request context
- PR diff: !`gh pr diff`
- PR comments: !`gh pr view --comments`

줄 시작이나 공백 직후의 !만 인식됩니다. 여러 줄은 ```! 펜스드 코드 블록 사용. disableSkillShellExecution 설정으로 이 동작을 끌 수 있습니다. 실패 처리: 명령이 실패하면 해당 자리뿐 아니라 전체 스킬 호출이 중단됩니다(기본 bash에서 비-0 exit code는 실패. 검색·비교 명령의 exit 1은 정상 처리). 주입 명령은 권한 프롬프트를 띄우지 않으며, 권한 거부 시 호출이 중단됩니다. 각 명령은 Bash 도구의 기본 2분 타임아웃을 사용합니다.

서브에이전트에서 스킬 실행: context: fork를 추가하면 자체 컨텍스트의 서브에이전트에서 실행됩니다. agent 필드로 유형 선택(Explore/Plan/general-purpose/커스텀, 기본 general-purpose), 생략 시 기본. 'fork'라는 이름과 달리 대화 포크가 아니며(대화 히스토리 미상속), 백그라운드로 실행되고 결과가 완료 시 도착합니다. background: false로 그 턴에서 기다릴 수 있습니다. 백그라운드 포크의 편집은 세션 체크포인트 밖이므로 git으로 되돌려야 합니다.

Claude의 스킬 접근 제한: /permissions에서 Skill 도구를 deny하면 전부 비활성. 특정 스킬 허용·거부는 Skill(commit), Skill(review-pr *), Skill(deploy *) 규칙. 개별 숨김은 disable-model-invocation: true.

설정에서 가시성 오버라이드: skillOverrides 설정으로 SKILL.md를 편집하지 않고 제어. 값: "on", "name-only", "user-invocable-only", "off". /skills 메뉴에서 Space로 토글해 .claude/settings.local.json에 저장.

미사용 스킬 찾기: 매 턴 컨텍스트에 스킬이 추가되므로, /skill-doctor로 각 스킬의 비용·사용 빈도를 확인해 끌 것을 결정 (v2.1.252+).

평가·반복

스킬이 트리거되는 것과 의도대로 동작하는 것은 별개입니다. 몇 개의 현실적 프롬프트를 스킬 켜고/끄고 새 세션에서 각각 실행해 비교합니다. skill-creator 플러그인(/plugin install skill-creator@claude-plugins-official)이 이 비교 루프를 자동화합니다: evals/evals.json 테스트 케이스, 스킬당 서브에이전트 격리 실행, grading.json 채점, benchmark.json 벤치마크, A/B 버전 비교, description 튜닝.

스킬 공유

  • 프로젝트 스킬: .claude/skills/를 버전 관리에 커밋
  • 플러그인: 플러그인skills/ 디렉토리 생성
  • 관리형: managed settings로 조직 전역 배포

시각적 출력 생성: 스킬이 어떤 언어의 스크립트든 번들·실행해 단일 프롬프트를 넘는 능력을 부여할 수 있습니다(예: 대화형 HTML 트리뷰 코드베이스 익스플로러). 스크립트 경로는 ${CLAUDE_SKILL_DIR}로 참조해 어느 위치에 설치되든 올바르게 해석되게 하세요.

더 알아보기