가이드 Skills & Hooks
🧩 Chapter 18 / 22

Skills & Hooks

반복 작업 자동화 스킬과 훅 활용법.


Skills (스킬) 마스터하기

스킬이란?

반복 작업을 자동화하는 마크다운 레시피입니다. 자주 하는 작업 패턴을 파일로 저장해두면, Claude Code가 일관되게 처리합니다. "업무 매뉴얼을 Claude Code에게 등록해두는 것"입니다.

스킬 파일 위치와 구조

~/.claude/skills/         # 전역 스킬 (모든 프로젝트)
.claude/skills/           # 프로젝트 스킬 (Git 공유 가능)
/skills                   # 사용 가능한 스킬 목록 보기

스킬 파일은 YAML 프런트매터 + 마크다운 본문:

---
name: cafe24-order-cleaner
description: 카페24 스토어의 주문 데이터를 정리합니다. 카페24 엑셀 정리가 필요할 때 사용하세요.
---
# 카페24 주문 데이터 정리
1. input 폴더의 카페24 주문 엑셀 읽기
2. 불필요한 칼럼 제거 (카페24 기본 내보내기에 포함된 시스템 칼럼 등)
3. 칼럼명 한글 통일 (영문/영문+한글 혼합 → 한글)
4. SKU별 주문수/매출/평균단가 요약 시트 추가
5. 기간별(일/주/월) 집계 시트 추가
6. output 폴더에 정리된 엑셀 저장
description이 중요합니다. Claude Code가 이 설명을 보고 언제 이 스킬을 사용할지 판단합니다.

실전 스킬 3가지

1. 카페24 데이터 정리 - 위 예시. "카페24 주문 데이터 정리해줘"로 호출. 2. 주간 브랜드 리포트 (~/.claude/skills/weekly-brand-report.md):
---
name: weekly-brand-report
description: 주간 브랜드별 매출 리포트를 생성합니다. 매주 월요일 리포트 정리할 때 사용하세요.
---
# 주간 브랜드 리포트
1. 브랜드별 주간 매출 집계 (8개 브랜드)
2. 전주 대비 증감률 계산
3. 채널별 매출 비중 (자사몰/쿠팡/네이버/기타)
4. Top 10 SKU 랭킹
5. 특이사항 (전주 대비 30% 이상 증감 SKU 자동 추출)
6. 마크다운 + 엑셀 두 형태로 output/ 저장
3. 경쟁사 모니터링 (~/.claude/skills/competitor-monitor.md):
---
name: competitor-monitor
description: 경쟁사 가격/프로모션 데이터를 정리합니다. 경쟁사 분석이 필요할 때 사용하세요.
---
# 경쟁사 모니터링
1. 경쟁사 제품별 가격 추출 (스크린샷 또는 엑셀)
2. 우리 제품과 1:1 매칭 (유사 카테고리 기준)
3. 가격 차이 계산, 프로모션 정보 정리
4. "우리가 비싼 제품 / 우리가 싼 제품" 분류
5. output/ 에 비교 테이블 엑셀 저장

스킬 vs CLAUDE.md vs 서브에이전트

구분스킬 (Skills)CLAUDE.md서브에이전트
역할반복 작업 레시피프로젝트 맥락/규칙독립 하위 작업 수행
적용명시적 호출 또는 자동 매칭항상 자동 로드메인 에이전트가 위임
저장.claude/skills/ (Git 공유)프로젝트 루트 (Git 공유)코드 내 설정

판단 기준: "매번 같은 패턴" -> 스킬 / "항상 적용할 규칙" -> CLAUDE.md / "병렬 처리" -> 서브에이전트


Hooks (훅) 활용하기

훅이란?

Claude Code 라이프사이클의 특정 시점에 자동 실행되는 명령입니다. AI 판단이 아닌 확정적(deterministic) 규칙 기반으로 동작합니다. "파일 수정 시 Prettier 실행"을 AI에게 말로 부탁하면 잊을 수 있지만, 훅은 100% 실행됩니다.

주요 훅 이벤트

이벤트발생 시점활용 예시
PreToolUse도구 실행 위험 명령 차단, .env 수정 방지
PostToolUse도구 실행 자동 포맷팅 (Prettier), 로그 기록
Notification입력 대기 상태 진입 시데스크톱 알림, Slack 알림
Stop응답 완료 시작업 완료 검증, 세션 요약 저장
SessionStart세션 시작/재개 시환경 변수 로드, 컨텍스트 주입
PermissionRequest권한 요청 시특정 도구 자동 승인

실전 설정 예시 3가지

1. 데스크톱 알림 (Notification) - 긴 작업 중 다른 일을 해도 놓치지 않음:
{
  "hooks": {
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"Claude Code 확인 필요\" with title \"Claude Code\" sound name \"Ping\"'"
          }
        ]
      }
    ]
  }
}
matcher가 빈 문자열이면 모든 알림에 반응. 정규식으로 특정 키워드 필터링 가능. 2. 파일 편집 후 자동 포맷 (PostToolUse + Prettier):
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "write|edit",
        "hooks": [
          {
            "type": "command",
            "command": "npx prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
          }
        ]
      }
    ]
  }
}
$CLAUDE_FILE_PATH는 방금 수정한 파일 경로로 자동 치환됩니다. 3. 보호 파일 편집 차단 (PreToolUse):

먼저 .claude/hooks/protect-files.sh 스크립트를 만듭니다:

#!/bin/bash
INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

# 보호할 파일 패턴
PROTECTED=(".env" ".env.local" "package-lock.json" "yarn.lock")

for pattern in "${PROTECTED[@]}"; do
  if [[ "$FILE_PATH" == *"$pattern"* ]]; then
    echo "BLOCKED: $FILE_PATH 는 수동으로만 편집하세요" >&2
    exit 2
  fi
done
exit 0

그리고 settings.json에 훅을 등록합니다:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": ".claude/hooks/protect-files.sh"
          }
        ]
      }
    ]
  }
}

exit 2로 종료하면 해당 도구 실행이 차단되고, stderr 메시지가 Claude에게 피드백됩니다. "이 파일 수정하지 마"라고 말하는 것보다 확실합니다.

설정 파일 위치와 우선순위

위치적용 범위Git 공유용도
~/.claude/settings.json모든 프로젝트X (로컬)개인 전역 설정
.claude/settings.json현재 프로젝트O (Git)팀 공유 설정
.claude/settings.local.json현재 프로젝트X (로컬)개인 프로젝트 설정

우선순위: 프로젝트 로컬 > 프로젝트 공유 > 전역.

Prompt 기반 훅과 Agent 기반 훅

type: "command" 외에 두 가지 타입이 더 있습니다. type: "prompt" - AI 판단으로 조건부 제어. Stop 훅에서 "모든 작업 완료 여부 확인"에 유용:
{
  "hooks": {
    "Stop": [{
      "matcher": "",
      "hooks": [{
        "type": "prompt",
        "prompt": "사용자가 요청한 모든 작업이 완료되었는지 확인하세요. 미완료 항목이 있으면 계속 진행하세요."
      }]
    }]
  }
}
type: "agent" - 서브에이전트가 실제로 도구를 사용해 검증. 테스트 통과 확인 후 종료 같은 복잡한 검증에 사용:
{
  "hooks": {
    "Stop": [{
      "matcher": "",
      "hooks": [{
        "type": "agent",
        "prompt": "npm test를 실행하고 모든 테스트가 통과하는지 확인하세요. 실패하면 수정하세요."
      }]
    }]
  }
}

prompt는 AI가 판단만, agent는 서브에이전트가 실제 도구를 실행하여 검증합니다.

퀴즈

이 챕터의 핵심 내용을 확인해보세요

1

Claude Code에서 반복 작업을 자동화하는 마크다운 레시피를 무엇이라 하나?

2

Hooks의 주요 역할은?