commands가 사라졌다?
Claude Code를 쓰면서 .claude/commands/ 디렉토리에 커스텀 명령어를 만들어 쓰던 사람들이 있을 것이다. /deploy, /review, /commit 같은 것들.
그런데 어느 날 문서를 보니 “Skills"라는 게 나와 있다. commands는 어디 간 건가?
결론부터 말하면, commands가 skills로 통합됐다. 정확히는 v2.1.3 (2026년 1월)부터다.
“Merged slash commands and skills, simplifying the mental model with no change in behavior” — Claude Code v2.1.3 Changelog
타임라인
| 시점 | 변경사항 |
|---|---|
| 2025.10 (v2.0.22) | Skills 시스템 첫 도입 |
| 2026.01 (v2.1.3) | Slash commands와 skills 공식 병합 |
| 2026.04 현재 | .claude/commands/ 여전히 동작. 새로 만들 땐 skills 권장 |
공식 deprecation 일정은 아직 없다. 하지만 방향은 명확하다.
commands와 skills의 차이
기존: commands
.claude/commands/deploy.md
마크다운 파일 하나. 프롬프트를 적어두면 /deploy로 호출할 수 있었다. 단순하고 직관적이었다.
현재: skills
.claude/skills/deploy/
├── SKILL.md # 주요 지침 (필수)
├── template.md # Claude가 채울 템플릿
├── examples/
│ └── sample.md # 예제 출력
└── scripts/
└── validate.sh # Claude가 실행할 스크립트
디렉토리 구조다. SKILL.md가 진입점이고, 지원 파일을 함께 둘 수 있다.
핵심 차이: frontmatter
Skills의 가장 큰 차이는 YAML frontmatter다.
---
name: deploy
description: 프로덕션 배포
disable-model-invocation: true
allowed-tools: Bash(ssh *) Bash(rsync *)
model: claude-opus-4-7
context: fork
---
배포 순서:
1. 테스트 실행
2. 빌드
3. 서버에 전송
frontmatter로 할 수 있는 것들:
| 필드 | 기능 |
|---|---|
description | Claude가 자동으로 skill을 선택하는 기준 |
disable-model-invocation | Claude가 임의로 호출하는 것 방지 |
allowed-tools | 이 skill에서 쓸 수 있는 도구 제한 |
model | 특정 모델 강제 지정 |
context: fork | subagent에서 격리 실행 |
paths | 특정 파일 패턴에서만 활성화 |
commands에서는 이런 제어가 전부 불가능했다.
자동 호출이 핵심
commands는 /명령어로 직접 호출해야만 동작했다. skills는 다르다.
description에 적절한 키워드를 넣어두면, Claude가 대화 맥락에서 관련이 있다고 판단할 때 자동으로 로드한다. 예를 들어:
---
name: api-conventions
description: API design patterns for this codebase
---
API 엔드포인트 작성 시:
- RESTful 명명 규칙 사용
- 일관된 에러 포맷 반환
- 요청 유효성 검사 포함
이 skill은 /api-conventions으로 호출할 수도 있고, Claude가 API 코드를 작성할 때 알아서 참조하기도 한다.
반대로 배포처럼 사람이 타이밍을 통제해야 하는 작업은 disable-model-invocation: true를 설정해서 자동 호출을 막는다.
마이그레이션은 어떻게
안 해도 된다
기존 .claude/commands/ 파일은 그대로 동작한다. 이름이 같으면 skill이 우선할 뿐이다.
하고 싶다면
.claude/skills/<이름>/디렉토리 생성- 기존
.md파일 내용을SKILL.md로 이동 - 필요하면 frontmatter 추가
- 기존 commands 파일 삭제
예시:
Before — .claude/commands/deploy.md
프로덕션에 배포해줘.
1. 테스트 실행
2. 빌드
3. rsync로 서버에 전송
After — .claude/skills/deploy/SKILL.md
---
name: deploy
description: 프로덕션 빌드 및 배포
disable-model-invocation: true
---
프로덕션에 배포해줘.
1. 테스트 실행
2. 빌드
3. rsync로 서버에 전송
내용은 같고, frontmatter만 추가됐다.
번들 Skills
Claude Code가 기본으로 제공하는 skills도 있다.
| Skill | 기능 |
|---|---|
/batch <instruction> | 대규모 변경을 병렬 에이전트로 처리 |
/claude-api | Claude API 레퍼런스 로드 |
/debug [description] | 디버그 로깅 활성화 및 문제 분석 |
/loop [interval] <prompt> | 프롬프트를 반복 실행 |
/simplify [focus] | 최근 변경 코드의 품질 리뷰 |
이것들도 전부 skill이다. 프롬프트 기반으로 Claude가 도구를 조율해서 실행한다.
Skills 저장 위치
skill을 어디에 저장하느냐에 따라 적용 범위가 달라진다.
| 위치 | 경로 | 적용 대상 |
|---|---|---|
| Enterprise | 관리 설정 | 조직 전체 |
| Personal | ~/.claude/skills/<name>/SKILL.md | 모든 프로젝트 |
| Project | .claude/skills/<name>/SKILL.md | 해당 프로젝트만 |
| Plugin | <plugin>/skills/<name>/SKILL.md | 플러그인 활성화 시 |
개인적으로 자주 쓰는 건 Personal에, 프로젝트 팀원과 공유할 건 Project에 넣으면 된다.
커뮤니티 반응
병합이 발표됐을 때 커뮤니티에서 혼란이 있었다. GitHub에 “Merged slash commands and skills"가 뭔 말이냐는 이슈가 올라왔고, “no change in behavior"면 왜 changelog에 넣느냐는 비판도 있었다.
실제로 사용자 입장에서는 기존 commands가 그대로 동작하기 때문에 체감할 수 있는 변화가 거의 없었다. 하지만 앞으로 새로 만들 때는 skills로 만드는 것이 맞다. frontmatter의 자동 호출 제어, 도구 제한, subagent 실행 같은 기능은 commands에서는 쓸 수 없다.
정리
| Commands (기존) | Skills (현재) | |
|---|---|---|
| 구조 | 마크다운 파일 1개 | 디렉토리 (SKILL.md + 지원 파일) |
| 자동 호출 | 불가 | Claude가 맥락에 따라 자동 로드 |
| frontmatter | 미지원 | 도구 제한, 모델 지정, 자동 호출 제어 등 |
| subagent 실행 | 불가 | context: fork 지원 |
| 동작 여부 | 여전히 동작 | 권장 |
| 같은 이름 충돌 시 | - | skill이 우선 |
기존 commands를 당장 마이그레이션할 필요는 없다. 하지만 새로 만들 건 skills로, 기존 것도 기능이 필요하면 skills로 전환하는 게 좋다.