내장 커맨드와 커스텀 커맨드
세션에서 /만 입력하면 사용할 수 있는 커맨드 목록이 뜬다. 커맨드는 메시지 맨 앞에서만 인식되며, 커맨드 이름 뒤에 오는 텍스트는 인자로 전달된다. Claude Code가 제공하는 커맨드는 크게 내장 커맨드와, 사용자가 직접 만드는 커스텀 커맨드로 나뉜다. 이 절은 그 둘의 경계와, 내장 커맨드 안에 숨어 있는 또 하나의 구분선을 다룬다.
고정 동작 커맨드 대 번들 스킬
내장 커맨드 대부분은 동작이 CLI 코드에 박혀 있는 고정 동작 커맨드다. /help, /clear, /compact, /model, /config, /permissions, /agents, /mcp, /memory, /add-dir, /init, /login, /resume, /doctor 같은 것들이다. 이들은 정해진 로직을 그대로 실행한다. 예를 들어 /compact는 대화를 요약해 컨텍스트를 비우고, /clear는 빈 컨텍스트로 새 대화를 시작한다.
그런데 내장 커맨드 중 일부는 성격이 다르다. /code-review, /debug, /loop, /batch, /claude-api, /run, /verify, /simplify 같은 커맨드는 번들 스킬(bundled skill)이다. 고정 로직이 아니라 Claude에게 상세 지시를 건네는 프롬프트이고, Claude가 자신의 도구로 작업을 조율한다. 결정적 차이는 호출 방식이다. 고정 동작 커맨드는 사용자가 직접 입력해야만 실행되지만, 번들 스킬은 사용자가 /이름으로 부를 수도 있고 관련 상황에서 Claude가 자동으로 불러올 수도 있다.
시험은 이 둘을 섞어 놓고 "다음 중 Claude가 스스로 호출할 수 있는 커맨드는 무엇인가" 또는 "프롬프트 기반으로 동작하는 커맨드는 무엇인가"를 묻는다. /compact처럼 컨텍스트를 다루는 고정 커맨드를 번들 스킬로 착각하지 않는 것이 함정 회피의 핵심이다. 공식 커맨드 레퍼런스 표에서 번들 스킬은 Purpose 칸에 Skill로 명시되어 있다.
커스텀 커맨드는 스킬로 통합되었다
여기서 가장 중요한 변화가 등장한다. 커스텀 커맨드는 스킬로 통합되었다. .claude/commands/deploy.md라는 커맨드 파일과 .claude/skills/deploy/SKILL.md라는 스킬은 둘 다 /deploy 커맨드를 만들고 동일하게 동작한다. 기존에 만들어 둔 .claude/commands/ 파일은 그대로 계속 작동하므로 마이그레이션을 강제당하지 않는다. 다만 스킬 형식은 보조 파일을 담는 디렉터리, 호출 주체를 제어하는 프론트매터, 관련 상황에서 Claude가 자동으로 불러오는 기능 같은 추가 이점을 제공하므로 권장된다.
이름이 충돌하면 우선순위가 적용된다. 스킬과 커맨드가 같은 이름이면 스킬이 이긴다. 또한 같은 이름이 여러 수준에 있으면 엔터프라이즈가 개인을 덮고, 개인이 프로젝트를 덮는다. 어느 수준의 스킬이든 같은 이름의 번들 스킬을 덮어쓸 수 있어서, 프로젝트의 .claude/skills/에 둔 code-review 스킬은 번들 /code-review를 대체한다.
시험에서 자주 나오는 함정은 "커스텀 커맨드를 만들려면 별도의 명령 등록 API가 필요하다"거나 "스킬 통합 이후 기존 .claude/commands/ 파일은 더 이상 동작하지 않는다"는 잘못된 선택지다. 둘 다 틀렸다. 파일을 두기만 하면 커맨드가 생기고, 레거시 파일은 계속 작동한다.
정리
- 내장 커맨드는 고정 동작 커맨드(
/compact,/clear,/model등)와 프롬프트 기반 번들 스킬(/code-review,/debug,/loop,/batch등)로 나뉜다. - 고정 동작 커맨드는 사용자가 직접 호출해야 하지만, 번들 스킬은 사용자가
/이름으로 부를 수도 있고 Claude가 관련 상황에서 자동으로 불러올 수도 있다. - 커스텀 커맨드는 스킬로 통합되었다.
.claude/commands/foo.md와.claude/skills/foo/SKILL.md는 모두/foo를 만들며, 레거시 커맨드 파일은 계속 작동한다. - 이름 충돌 시 스킬이 커맨드를 이기고, 수준 충돌 시 엔터프라이즈 > 개인 > 프로젝트 순으로 덮어쓴다.
- 시험은 "별도 등록 API가 필요하다", "레거시 파일은 폐기되었다" 같은 선택지를 함정으로 낸다. 파일을 두기만 하면 커맨드가 되고 레거시는 유지된다.