Claude Code 가이드 #11 — Claude Code에 슬래시 명령어( /commit , /review-pr 등)를 직접 만들 수 있다는 걸 알고 있었나요. Skills 시스템을 사용하면 반복 작업을 단 한 줄 명령으로 처리할 수 있습니다. Skills는 Claude Code에서 사용자가 직접 정의한 슬래시 명령어 입니다. 마크다운 파일( .md )로 작성하며, frontmatter로 이름·설명·트리거 조건을 지정합니다.
Claude Code 가이드 #11 — Claude Code에 슬래시 명령어(/commit, /review-pr 등)를 직접 만들 수 있다는 걸 알고 있었나요? Skills 시스템을 사용하면 반복 작업을 단 한 줄 명령으로 처리할 수 있습니다. 이 편에서는 Skills의 구조, 생성 방법, 사용자 호출 방식, 그리고 실전에서 쓸 수 있는 예시까지 완전 정리합니다.
Skills는 Claude Code에서 사용자가 직접 정의한 슬래시 명령어입니다. 마크다운 파일(.md)로 작성하며, frontmatter로 이름·설명·트리거 조건을 지정합니다.
Skills를 쓰면 다음과 같은 작업을 슬래시 명령으로 단축할 수 있습니다:
PR 커밋 메시지 자동 생성 (/commit)
코드 리뷰 요청 (/review-pr)
포스팅 초안 생성 (/post)
사이트맵 갱신 (/update-sitemap)
Skills 파일은 두 가지 방식으로 저장할 수 있습니다:
저장 위치
적용 범위
용도
~/.claude/skills/
모든 프로젝트 (글로벌)
공통 작업 자동화
.claude/skills/
현재 프로젝트만
프로젝트 전용 커스텀 명령
Claude Code 가이드 #11 — Skills 완벽 가이드 — Skills .md 파일 구조와 슬래시 명령어 등록 흐름 (출처: 공식 문서 기반)
Skill 파일 구조 — frontmatter 완전 해설
Skill 파일은 YAML frontmatter와 마크다운 본문으로 구성됩니다. frontmatter에는 슬래시 명령어 이름, 설명, 트리거 조건 등을 지정합니다.
Claude Code 가이드 #11 — Skills 완벽 가이드 — CLI 실행 화면과 출력 결과 (출처: 공식 문서 및 벤치마크 데이터 기반)
기본 Skill 파일 구조 (.md)
---
name: commit
description: 스테이징된 변경사항을 분석해 커밋 메시지를 생성하고 커밋합니다
trigger: user-invoked
args:
- name: message
description: 커밋 메시지 힌트 (선택사항)
required: false
---
# 커밋 생성
스테이징된 변경사항(`git diff --staged`)을 읽고 다음을 수행합니다:
1. 변경된 파일 목록과 내용을 분석합니다
2. 변경 목적에 맞는 커밋 메시지를 작성합니다
3. 형식: `[type]: description` (type: feat, fix, docs, refactor, test, chore)
4. `git commit -m "..."` 으로 커밋합니다
{{#if message}}
사용자 힌트: {{message}}
{{/if}}
frontmatter 필드 설명:
필드
타입
설명
name
string
슬래시 명령어 이름 (/commit)
description
string
/help 에서 보이는 설명
trigger
enum
user-invoked 또는 auto
args
array
명령어 인수 정의 (선택)
when
string
auto 트리거 조건 (선택)
⚠️ 막히는 케이스:/skillname 을 입력했는데 "알 수 없는 명령어"라고 나오는 경우 — Skills 파일 저장 위치를 확인하세요. 글로벌은 ~/.claude/skills/, 프로젝트는 .claude/skills/ 에 있어야 합니다. 파일 확장자가 .md 인지, frontmatter의 name 필드가 정확한지도 확인하세요.
🎓 유데미 강의 추천
Claude Code 실전 강의 — AI 코딩을 지금 시작하세요
설치부터 자동화·에이전트 활용까지, 실무에서 바로 쓰는 Claude Code 활용법을 단계별로 배울 수 있습니다.
특정 조건이 충족될 때 Claude Code가 자동으로 실행합니다. when 필드에 트리거 조건을 작성합니다.
auto 트리거 Skill 예시 — 파일 저장 시 자동 lint
---
name: auto-lint
description: JS/TS 파일이 수정될 때 자동으로 lint를 실행합니다
trigger: auto
when: 사용자가 JavaScript 또는 TypeScript 파일을 수정할 때
---
# 자동 Lint 실행
수정된 JS/TS 파일에 대해 다음을 실행합니다:
```bash
npx eslint {{modified_files}} --fix
```
lint 결과에서 자동 수정 불가 에러가 있으면 사용자에게 보고합니다.
auto 트리거는 강력하지만 주의가 필요합니다. 의도하지 않은 상황에서 실행되면 흐름을 방해할 수 있습니다. 자주 사용하는 패턴:
파일 저장 시 포맷터 실행
테스트 파일 수정 시 해당 테스트 자동 실행
README 수정 시 문서 검증 실행
⚠️ 막히는 케이스: auto 트리거 Skill이 너무 자주 실행돼 작업을 방해하는 경우 — when 조건을 더 구체적으로 작성하거나, trigger: user-invoked 로 변경해서 수동 호출로 전환하세요. 또는 해당 Skill 파일을 임시로 .claude/skills/disabled/ 폴더로 이동하면 비활성화됩니다.
커스텀 Skill 만들기 — 단계별 실습
실제로 유용한 Skill을 만들어 봅니다. 여기서는 PR 리뷰 요청 Skill을 예시로 사용합니다.
Step 1 — Skill 파일 생성
# 프로젝트 전용 skill 디렉토리 생성
mkdir -p .claude/skills
# skill 파일 생성
touch .claude/skills/review-pr.md
Step 2 — review-pr.md 내용 작성
---
name: review-pr
description: 현재 브랜치의 변경사항을 main과 비교해 코드 리뷰를 수행합니다
trigger: user-invoked
args:
- name: focus
description: 리뷰 집중 영역 (예: security, performance, style)
required: false
---
# PR 코드 리뷰
다음 순서로 코드 리뷰를 수행합니다:
1. `git diff main...HEAD` 로 변경사항 확인
2. 변경된 파일 목록과 라인 수 요약
3. 아래 항목으로 리뷰:
- 버그 가능성 (로직 오류, 엣지 케이스)
- 보안 취약점 (SQL injection, XSS, 인증 누락)
- 성능 이슈 (불필요한 루프, N+1 쿼리)
- 코드 품질 (중복 코드, 명명 규칙)
4. 이슈는 심각도별로 분류: CRITICAL / WARNING / SUGGESTION
{{#if focus}}
특히 {{focus}} 영역에 집중해서 리뷰합니다.
{{/if}}
이제 Claude Code 세션에서 다음과 같이 사용할 수 있습니다:
/review-pr — 전체 리뷰
/review-pr security — 보안에 집중한 리뷰
/review-pr performance — 성능에 집중한 리뷰
Claude Code 가이드 #11 — Skills 완벽 가이드 — 커스텀 Skill 파일 생성과 /review-pr 실행 흐름 (출처: 공식 문서 기반)
실전에서 바로 쓰는 Skill 예시 모음
실무에서 자주 쓰는 Skill 패턴들입니다. 그대로 복사하거나 변형해서 사용할 수 있습니다.
패턴 1: 포스팅 초안 생성 (콘텐츠 사이트용)
post.md — 포스팅 초안 생성 Skill
---
name: post
description: 주제를 받아 포스팅 초안을 생성합니다
trigger: user-invoked
args:
- name: topic
description: 포스팅 주제
required: true
- name: id
description: 포스트 ID (예: 3051)
required: true
---
# 포스팅 초안 생성
1. `data/posts.js` 의 기존 포스트 구조를 참고합니다
2. `CLAUDE.md` 의 포스트 구조 표준을 따릅니다
3. `posts/{{id}}.js` 파일을 생성합니다
4. `data/posts.js` 에 메타데이터를 추가합니다
주제: {{topic}}
포스트 ID: {{id}}
패턴 2: 사이트맵 갱신
update-sitemap.md — 사이트맵 자동 갱신 Skill
---
name: update-sitemap
description: posts.js 기준으로 sitemap.xml을 재생성합니다
trigger: user-invoked
---
# 사이트맵 갱신
다음 명령을 실행합니다:
```bash
node scripts/generate-sitemap.js
```
완료 후 `public/sitemap.xml` 파일이 갱신됐는지 확인하고,
최종 URL 수를 보고합니다.
⚠️ 막히는 케이스: Skill 파일에서 {{args}} 변수가 치환되지 않고 그대로 출력되는 경우 — frontmatter의 args 배열에 해당 변수가 정의돼 있는지 확인하세요. 변수명은 대소문자를 구별합니다. {{topic}}과 {{Topic}}은 다른 변수입니다.
Skills vs CLAUDE.md — 무엇을 어디에 쓸까?
Skills와 CLAUDE.md는 모두 Claude Code의 동작을 정의하는 파일이지만, 용도가 다릅니다.
항목
Skills
CLAUDE.md
역할
특정 작업을 슬래시 명령으로 캡슐화
프로젝트 전반의 규칙·컨텍스트 제공
실행 방식
사용자 호출 또는 자동 트리거
세션 시작 시 자동 로드
반복 사용
매번 명령어로 호출
항상 활성 (상시 컨텍스트)
적합한 것
커밋 생성, 리뷰, 특정 파일 생성
코딩 스타일, 금지 패턴, 프로젝트 구조
실무 원칙: 반복 실행하는 동작은 Skills로, 항상 유지해야 할 규칙은 CLAUDE.md로 분리하세요.
Skills + Hooks 조합 — 더 강력한 자동화
Skills는 Hooks(가이드 #12)와 조합하면 더욱 강력해집니다. Skill이 특정 작업을 정의하고, Hook이 그 작업의 전/후 처리를 담당합니다.
예를 들어:
/commit Skill 실행 → PostToolUse Hook이 커밋 후 자동으로 node --check 검증 실행
/post Skill 실행 → PostToolUse Hook이 파일 생성 후 lint 자동 실행
💡 팁: Skills 파일은 팀원들과 Git으로 공유할 수 있습니다. .claude/skills/ 폴더를 레포에 커밋하면, 팀 전체가 같은 슬래시 명령어를 사용할 수 있습니다. 팀 공통 작업(PR 리뷰, 릴리즈 노트 생성 등)은 이 방식으로 표준화하세요.
Claude Code 가이드 #11 — Skills 완벽 가이드 — Skills + Hooks 조합으로 만드는 자동화 워크플로우 (출처: 공식 문서 기반)
Skills 트러블슈팅
Skills 사용 중 자주 발생하는 문제와 해결법입니다.
⚠️ 막히는 케이스:/help에서 내가 만든 Skill이 보이지 않는 경우 — Claude Code 세션을 재시작해야 합니다. Skill 파일은 세션 시작 시 로드됩니다. 현재 세션에서 생성한 Skill 파일은 다음 세션부터 인식됩니다. exit 후 다시 claude를 실행하세요.
⚠️ 막히는 케이스: required 인수를 넣지 않았는데 에러 없이 실행되는 경우 — required: true 로 설정했더라도 Claude Code가 인수 누락을 항상 차단하지는 않습니다. Skill 본문에서 {{#if argname}} 조건으로 직접 처리하거나, 본문 첫 줄에 "{{argname}}이 없으면 사용자에게 다시 입력을 요청하라" 고 명시하는 것이 더 안전합니다.
요약 및 관련 편
정리하면:
Skills는 .md 파일로 정의하는 사용자 정의 슬래시 명령어입니다
~/.claude/skills/ (글로벌) 또는 .claude/skills/ (프로젝트)에 저장합니다
trigger: user-invoked는 수동 호출, trigger: auto는 조건부 자동 실행입니다
먼저 Skill 파일을 어디에 둘지부터 정하세요. 모든 프로젝트에서 쓰는 공통 작업은 ~/.claude/skills/ 에, 이 프로젝트 전용 명령은 .claude/skills/ 에 둡니다. 그다음 frontmatter의 name 필드(슬래시 명령어가 됨)와 .md 확장자가 정확한지 확인해야 /help에 노출됩니다. 한 가지 더, Skill 파일은 세션 시작 시 로드되므로 방금 만든 명령이 안 보이면 exit 후 claude를 다시 띄워야 한다는 점을 처음부터 알아두면 헷갈리지 않습니다.
가장 자주 발생하는 실수나 함정은 무엇인가요?
가장 자주 겪는 건 {{topic}} 같은 변수가 치환되지 않고 그대로 출력되는 문제입니다. frontmatter의 args 배열에 그 변수가 정의돼 있는지 확인하고, 변수명은 대소문자를 구별하니 {{topic}}과 {{Topic}}을 헷갈리지 마세요. 또 required: true로 지정해도 Claude Code가 인수 누락을 항상 막아주지는 않아서, 본문에서 {{#if argname}} 조건으로 직접 처리하거나 '값이 없으면 다시 입력을 요청하라'고 명시하는 편이 안전합니다. auto 트리거가 너무 자주 끼어들면 when 조건을 좁히거나 user-invoked로 바꾸세요.
다른 대안과 비교했을 때 어떤 상황에 적합한가요?
Skills는 '커밋 생성, PR 리뷰, 특정 파일 생성'처럼 매번 같은 절차로 반복 실행하는 동작을 슬래시 명령 하나로 캡슐화할 때 가장 빛납니다. 팀이 .claude/skills/ 폴더를 Git으로 공유하면 모두가 동일한 명령을 쓸 수 있어 작업 표준화에도 맞습니다. 반면 코딩 스타일·금지 패턴·프로젝트 구조처럼 세션 내내 항상 적용돼야 할 규칙은 Skills가 아니라 CLAUDE.md에 두는 게 맞습니다. Skills는 호출해야 동작하기 때문입니다. 또 파일 저장마다 자동으로 돌려야 하는 lint·검증 같은 이벤트 기반 작업이라면 Skills의 auto 트리거보다 Hooks(가이드 #12)가 더 안정적입니다.
더 깊게 공부하려면 어떤 자료를 보면 좋을까요?
먼저 frontmatter 필드(name, description, trigger, args, when)의 정확한 스펙은 Claude Code 공식 Skills 문서(code.claude.com/docs/en/skills)에서 확인하는 게 가장 정확합니다. {{#if}} 같은 템플릿 문법이나 args 변수 치환 규칙이 특히 자주 바뀌니 1차 자료로 봐 두세요. 그다음 Skills를 Hooks와 엮어 커밋 후 자동 검증 같은 워크플로우를 만들고 싶다면 가이드 #12(Hooks로 워크플로우 자동화)로, Skill을 서브에이전트 안에서 활용하는 패턴은 가이드 #5로 넘어가면 이 글이 짧게 짚은 조합 부분이 채워집니다.
Claude Code 가이드 #11, 한 줄로 정리하면 어떻게 되나요?
Skills는 .md 파일과 YAML frontmatter로 정의하는 사용자 정의 슬래시 명령어로, 반복 작업을 명령 한 줄로 압축해 줍니다. 모든 프로젝트 공통이면 ~/.claude/skills/, 프로젝트 전용이면 .claude/skills/에 저장하고, trigger를 user-invoked로 두면 수동 호출, auto로 두면 조건부 자동 실행입니다. 파일을 Git으로 공유하면 팀 전체가 같은 명령을 쓸 수 있고, Hooks와 조합하면 호출 전후 처리까지 자동화됩니다.