GitHub ↗
CHAPTER 04 OF 10

Skills & Slash Commands: Dynamic Context Injection

Skills & 슬래시 커맨드 — 동적 컨텍스트 주입의 기술

SKILL.md는 CLAUDE.md의 강력한 확장이다 — 정적 규칙 대신 실시간으로 실행되는 컨텍스트를 주입하고, 팀의 반복 작업을 재사용 가능한 절차로 캡슐화한다.

Skills & Slash Commands: Dynamic Context Injection cheatsheet
🍌 NANO BANANA CHEATSHEET · CH 04

Overview

개관

CLAUDE.md가 '항상 적용되는 규칙'이라면, Skills는 '필요할 때 호출하는 절차'다. 팀의 배포 절차, 코드 리뷰 체크리스트, PR 생성 워크플로우 — 이런 반복적인 작업을 SKILL.md로 정의하면 /deploy, /review, /pr 같은 슬래시 커맨드로 일관성 있게 실행할 수 있다.

Skills의 진짜 힘은 동적 컨텍스트 주입에 있다. ! 문법을 사용하면 스킬이 실행될 때 실제 쉘 명령을 실행하고 그 출력을 컨텍스트에 포함시킨다. 고정된 지시문이 아니라, 현재 상태에 반응하는 살아있는 문서가 된다.

🎯 Learning Goals
  • SKILL.md의 13가지 프론트매터 필드를 알고 주요 필드를 활용한다
  • 슬래시 커맨드 이름이 어떻게 해석되는지 경로 규칙을 이해한다
  • 동적 컨텍스트 주입(! 문법)으로 실시간 데이터를 스킬에 포함하는 방법을 안다
  • 팀의 반복 작업을 스킬로 캡슐화하는 설계를 할 수 있다
  • 번들 스킬의 종류와 커스터마이즈 방법을 안다

Sections

본문

SKILL.md 구조 — 13가지 프론트매터 필드

SKILL.md 파일의 기본 구조:

---
name: my-skill          # 표시 이름 (커맨드 이름이 아님)
description: 무엇을 하는지, 언제 사용하는지
when_to_use: 트리거 문구들
disable-model-invocation: true   # 모델이 자동 트리거 못하게
user-invocable: false             # /메뉴에서 숨김
allowed-tools: Read Grep          # 이 스킬에서 허용할 도구
disallowed-tools: AskUserQuestion # 이 스킬에서 차단할 도구
model: claude-opus-4-7            # 이 스킬용 모델 오버라이드
effort: high                      # 노력 수준 오버라이드
context: fork                     # 포크된 서브에이전트에서 실행
paths: "src/**/*.ts"             # 이 경로에서만 활성화
---

## 지시사항
!`git diff HEAD`  ← 동적 컨텍스트: 실행 시 현재 diff 주입

가장 중요한 필드는 description이다. Claude는 이 설명을 기반으로 어떤 스킬이 관련있는지 판단한다. 좋은 description은 '무엇을'과 '언제'를 모두 담는다.

context: fork는 스킬을 메인 세션과 격리된 서브에이전트에서 실행한다. 긴 작업이나 독립적인 태스크에 유용하다.

슬래시 커맨드 이름 해석 규칙

스킬의 커맨드 이름은 name 필드가 아니라 파일 경로에서 결정된다. 이 규칙을 이해하지 못하면 커맨드를 찾지 못한다.

파일 위치 커맨드 이름
.claude/skills/deploy/SKILL.md /deploy
.claude/skills/pr/SKILL.md /pr
apps/web/.claude/skills/deploy/SKILL.md /apps/web:deploy
my-plugin/skills/review/SKILL.md /my-plugin:review
~/.claude/skills/debug/SKILL.md /debug (전역)

중첩 스킬에서 충돌이 생기면 : 네임스페이스로 구분된다. 플러그인 스킬은 플러그인 이름이 네임스페이스가 된다.

자동 발견 규칙: 스킬은 현재 작업 디렉토리와 모든 조상 디렉토리의 .claude/skills/에서 자동 발견된다. 서브디렉토리 스킬도 CLAUDE.md와 마찬가지로 지연 로딩된다.

실시간 변경 감지: SKILL.md 파일의 변경은 재시작 없이 즉시 반영된다.

동적 컨텍스트 주입 — ! 문법의 힘

Skills의 가장 강력한 기능은 스킬이 실행될 때 쉘 명령을 실행하고 그 출력을 Claude의 컨텍스트에 주입하는 것이다.

---
name: code-review
description: 현재 브랜치의 변경 사항을 리뷰한다
---

아래 변경 사항을 리뷰해주세요:

!`git diff HEAD`

또한 현재 테스트 상태:

!`npm test --silent 2>&1 | tail -20`

/code-review를 실행하면, Claude는 git diff HEAD의 실제 현재 출력과 테스트 결과를 컨텍스트에 받은 상태로 리뷰를 시작한다. 오래된 스니펫이 아닌 실제 현재 상태다.

이것이 CLAUDE.md의 정적 지시와 Skills의 근본적인 차이다 — Skills는 실행 시점의 실제 데이터를 컨텍스트에 포함할 수 있다.

쉘 스크립트 블록도 지원된다:

!```bash
echo '## 현재 브랜치:'
git branch --show-current
echo '## 변경된 파일:'
git diff --name-only HEAD

번들 스킬과 팀 스킬 설계

Claude Code에는 기본 내장 스킬들이 있다 — /code-review, /debug, /batch, /loop, /verify, /run. 이것들은 프롬프트 기반(고정 로직이 아닌 Claude의 지시)이며, 커스터마이즈할 수 없지만 참고할 수 있다.

disableBundledSkills: true 설정으로 번들 스킬을 비활성화할 수 있다 (팀 스킬과 충돌하는 경우).

실용적인 팀 스킬 예시:

# .claude/skills/pr/SKILL.md
---
name: pr
description: PR을 생성하고 팀 체크리스트를 적용한다
---

다음 단계로 PR을 생성해주세요:

현재 변경 사항:
!`git log main..HEAD --oneline`

1. PR 제목: [type]: [짧은 설명] (type: feat/fix/refactor/docs)
2. 체크리스트 확인:
   - [ ] 테스트 추가/업데이트 완료
   - [ ] 타입 체크 통과
   - [ ] 보안 취약점 검토
3. gh pr create 실행

팀이 이 스킬을 쓰면 모든 PR이 동일한 구조와 체크리스트를 가진다.

💡 Analogy · 비유
매크로 vs 함수

프로그래밍에서 매크로와 함수를 비교해보자. 매크로는 정적으로 텍스트를 치환한다 — 호출 시점의 상태와 관계없이 항상 같은 내용으로 전개된다. 함수는 호출 시점에 인자를 받고, 실행 시점의 상태를 반영한 결과를 반환한다.

CLAUDE.md는 매크로다. 항상 같은 내용이 주입된다. Skills는 함수다. ! 문법으로 실행 시점의 상태 — 현재 git diff, 테스트 결과, 환경 변수 — 를 받아서 컨텍스트에 포함한다.

이 차이가 중요한 이유는, '이 규칙은 항상 적용'인 것과 '이 작업은 현재 상태를 보고 수행'인 것을 명확하게 분리할 수 있기 때문이다. 배포 절차 스킬이 현재 배포 환경 상태를 확인하는 것은 Functions이 해야 할 일이다. 'default export 쓰지 마라'는 CLAUDE.md의 일이다.

실제 팀에서 사용할 수 있는 PR 생성 스킬의 완성된 예제다. 동적 컨텍스트 주입이 어떻게 작동하는지 주목하라.

markdown
---
name: pr-create
description: >-
  현재 브랜치의 변경사항으로 PR을 생성한다.
  git add/commit이 완료된 후 호출하라.
allowed-tools: Bash Read
---

# PR 생성 절차

## 현재 상태 확인

**브랜치:** !`git branch --show-current`

**Main 대비 커밋:**
!`git log main..HEAD --oneline`

**변경된 파일:**
!`git diff main --name-only`

## 작업 순서

1. 위 변경 사항을 분석해 PR 제목을 작성하라
   - 형식: `[type]: [설명]` (feat/fix/refactor/chore/docs)
   - 50자 이내

2. PR 본문을 작성하라:
   - ## Summary (변경 이유, 3줄 이내)
   - ## Changes (변경 내용 bullet)
   - ## Test Plan (어떻게 검증했는지)

3. 다음 체크리스트를 확인하라:
   - [ ] 타입체크: npm run typecheck
   - [ ] 테스트: npm test
   - [ ] 보안: .env 파일이 스테이징에 없는지

4. 체크리스트 통과 후: gh pr create 실행

**중요**: 체크리스트 실패 시 PR 생성 전에 반드시 수정할 것

스킬 파일의 ! 백틱 구문이 실행 시 실제 쉘 명령으로 교체된다. /pr-create를 호출하면 Claude는 현재 브랜치 이름, 실제 커밋 목록, 실제 변경 파일 목록을 받은 상태로 PR 작성을 시작한다. 매번 같은 지시를 하는 게 아니라, 현재 상태에 맞게 작동하는 것이다.

🏭 현업에서의 평가
고급 Claude Code 사용자는 팀의 반복 작업 전체를 스킬로 캡슐화한다. 배포, 코드 리뷰, PR 생성, 릴리즈 노트 작성 — 이런 작업들을 스킬화하면 팀 전체의 일관성이 올라간다.

✅ 시니어가 보는 것

  • 동적 컨텍스트 주입(!`)을 사용해 실제 상태를 반영하는 스킬
  • 팀 표준 절차를 스킬로 문서화한 것
  • allowed-tools, disallowed-tools로 스킬의 권한을 최소화한 것

⚠️ 레드 플래그

  • 정적인 지시만 있고 ! 문법을 사용하지 않는 스킬
  • CLAUDE.md에 있어야 할 내용을 스킬로 만든 경우 (항상 적용 vs 명시적 호출의 혼동)
  • 너무 범용적이어서 재사용 가능성이 없는 스킬

🎤 예상 인터뷰 질문

  1. 팀에서 가장 가치 있는 스킬이 무엇이고 왜 스킬로 만들었나요?
  2. CLAUDE.md 규칙과 스킬을 어떻게 구분해서 설계하시나요?
  3. 동적 컨텍스트 주입을 활용한 스킬 사례를 보여주실 수 있나요?
숙달 vs 익숙함: 단순히 아는 수준: 슬래시 커맨드를 만들 수 있다. 마스터 수준: CLAUDE.md와 Skills의 역할을 명확히 분리하고, 동적 컨텍스트 주입으로 실제 상태를 반영하는 살아있는 스킬을 설계하며, 팀의 반복 작업 전체를 스킬 라이브러리로 커버한다.

Key Takeaways

핵심 정리

스킬 = 호출 가능한 절차

CLAUDE.md가 항상 적용 규칙이라면, Skills는 명시적으로 호출하는 팀 표준 절차다.

커맨드 이름은 파일 경로

name 필드가 아니라 디렉토리 이름이 커맨드 이름이 된다. 이 규칙을 혼동하면 커맨드를 찾지 못한다.

! 문법이 핵심 차별점

실행 시점에 쉘 명령을 실행하고 출력을 컨텍스트에 주입한다. 정적 지시가 아닌 현재 상태에 반응하는 스킬을 만든다.

allowed-tools로 권한 최소화

스킬이 필요한 도구만 허용한다. 불필요한 도구 접근을 차단하면 실수 가능성이 줄어든다.

실시간 감지로 바로 적용

SKILL.md 변경은 재시작 없이 즉시 반영된다. 스킬을 수정하고 바로 테스트할 수 있다.