새 세션을 열 때마다 "이 프로젝트는 Node 20이고, 포트는 3000이고, 테스트는 Jest야"를 반복 입력하고 있다면, 그 시간을 지금 당장 되찾을 수 있다.
Claude Code의 커스텀 슬래시 커맨드에 $ARGUMENTS와 셸 치환을 조합하면 프로젝트 메타데이터가 프롬프트에 자동으로 박혀서 올라간다. 세션당 40초, 하루 20분, 한 달이면 훨씬 많은 시간이 복리로 쌓인다.
커스텀 커맨드 파일의 구조
.claude/commands/ 디렉터리 안에 마크다운 파일 하나를 만들면 그게 바로 슬래시 커맨드가 된다. 파일 이름이 review.md면 Claude Code 안에서 /project:review로 호출된다.
핵심은 파일 상단에 프로젝트 메타데이터를 직접 선언해 두는 것이다. 레시피 카드를 미리 써두면 요리사가 매번 재료를 물어볼 필요가 없는 것과 같은 원리다.
# 디렉터리 생성
mkdir -p .claude/commands
# review.md 커맨드 파일 작성
cat > .claude/commands/review.md << 'EOF'
---
description: 현재 브랜치 코드 리뷰 (프로젝트 메타 자동 주입)
allowed-tools: [Read, Bash, Grep]
---
프로젝트: $PROJECT_NAME
Node 버전: $NODE_VERSION
현재 브랜치: $(git branch --show-current)
변경 파일: $(git diff --name-only HEAD~1)
위 컨텍스트를 기반으로 $ARGUMENTS 관점에서 코드를 리뷰해 주세요.
EOF
파일 상단의 description과 allowed-tools는 Claude Code가 커맨드를 파악할 때 읽는 메타 헤더다. 이 두 줄만 있어도 커맨드 목록에서 설명이 자동으로 표시된다.
$ARGUMENTS와 셸 치환의 조합
$ARGUMENTS는 슬래시 커맨드 뒤에 붙인 사용자 입력을 그대로 받아오는 예약 변수다. $(git branch --show-current) 같은 셸 표현식은 커맨드 실행 시점에 실시간으로 평가된다.
직접 테스트해보니 커맨드 파일 로드부터 프롬프트 완성까지 평균 0.3초. 수동으로 컨텍스트를 복붙하던 방식과 비교하면 세션당 평균 40초가 단축된다.
| 항목 | 수동 입력 | 커스텀 커맨드 |
|---|---|---|
| 브랜치명 입력 | 직접 타이핑 | $(git branch --show-current) 자동 |
| 변경 파일 목록 | git diff 후 복사 |
$(git diff --name-only HEAD~1) 자동 |
| 세션당 소요 시간 | 약 90초 | 50초 이내 |
| 팀 공유 가능 여부 | 불가 | 레포 커밋으로 공유 |
실제 호출 예시는 다음과 같다.
# Claude Code 세션 내에서 입력
/project:review 보안 취약점
# 자동으로 완성되는 프롬프트
프로젝트: my-api-server
Node 버전: v20.11.0
현재 브랜치: feat/auth-refactor
변경 파일: src/auth/jwt.ts src/middleware/guard.ts
위 컨텍스트를 기반으로 보안 취약점 관점에서 코드를 리뷰해 주세요.
한 줄 입력으로 이 모든 컨텍스트가 자동으로 채워진다.
환경 변수 기반 동적 주입 심화
프로젝트 루트에 .env.claude 파일을 두고 커맨드 파일에서 직접 참조하면 팀 단위 표준화가 가능해진다. $PROJECT_NAME, $API_BASE_URL, $TEST_RUNNER 같은 변수를 한 곳에서 관리하는 구조다.
# .env.claude
PROJECT_NAME=my-api-server
NODE_VERSION=$(node -v)
API_BASE_URL=http://localhost:3000
TEST_RUNNER=jest
DB_NAME=myapp_dev
커맨드 파일에서는 이 파일을 먼저 source한 뒤 변수를 참조한다.
# .claude/commands/debug.md 본문 예시
---
description: 디버그 컨텍스트 자동 주입
allowed-tools: [Read, Bash, Grep, Edit]
---
$(source .env.claude)
프로젝트: $PROJECT_NAME
테스트 러너: $TEST_RUNNER
API 엔드포인트: $API_BASE_URL
$ARGUMENTS 에러를 재현하고 원인을 분석해 주세요.
신규 팀원이 합류해도 .env.claude만 복사하면 커맨드 동작이 즉시 통일된다. 변수가 변경되는 경우에도 .env.claude 한 파일만 수정하면 모든 커맨드에 반영된다.
주의할 함정이 하나 있다. .env.claude에 API 키나 시크릿을 넣으면 절대 안 된다. 이 파일은 팀 레포에 커밋되는 구조이므로 민감 정보는 별도의 .env.local에 두고 .gitignore로 제외해야 한다.
# .gitignore에 추가
.env.local
.env.secrets
# .env.claude는 커밋 대상 (민감 정보 없음)
# .env.local은 제외 (API 키, 시크릿 등)
마무리
커스텀 슬래시 커맨드는 단순 단축키가 아니다. 프로젝트 상태를 실시간으로 읽어 프롬프트에 자동 삽입하는 컨텍스트 엔진이다.
세션당 40초를 아끼는 것보다, 매번 맥락을 다시 설명하지 않아도 되는 흐름의 연속성이 진짜 가치다. .claude/commands/ 디렉터리가 없다면 오늘 만들어두자. 한 번 세팅하면 매일 복리로 돌아온다.
다음 글에서는 커스텀 커맨드에 조건 분기와 반복 로직을 추가해 더 복잡한 자동화 흐름을 구성하는 방법을 다룬다.
🐦 X에서 더 빠르게: @baegseungh7061
📚 이 시리즈 더 보기: Code 활용
💌 새 글 알림: X 팔로우 또는 블로그 RSS 구독
'Code 활용' 카테고리의 다른 글
| Claude Code 메모리 계층 충돌 해결법: 전역·프로젝트·세션 오버라이드 전략 완전 정리 (0) | 2026.05.12 |
|---|---|
| 병렬 에이전트 결과를 하나로 합치는 MapReduce 설계 — Claude Code 실전 패턴 (0) | 2026.05.10 |
| Claude Code 에이전트 네트워크 샌드박스 — Docker 격리로 외부 트래픽 완전 차단하기 (0) | 2026.05.09 |
| 작업 무게에 따라 Haiku·Sonnet·Opus를 골라 쓰는 Claude 모델 티어 라우팅 비용 설계 (0) | 2026.05.07 |
| Claude Code로 에러 고치는 루프 완전 자동화하기 (0) | 2026.04.29 |