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로 할 수 있는 것들:

필드기능
descriptionClaude가 자동으로 skill을 선택하는 기준
disable-model-invocationClaude가 임의로 호출하는 것 방지
allowed-tools이 skill에서 쓸 수 있는 도구 제한
model특정 모델 강제 지정
context: forksubagent에서 격리 실행
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이 우선할 뿐이다.

하고 싶다면

  1. .claude/skills/<이름>/ 디렉토리 생성
  2. 기존 .md 파일 내용을 SKILL.md로 이동
  3. 필요하면 frontmatter 추가
  4. 기존 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-apiClaude 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로 전환하는 게 좋다.


참고 자료