실수 방지 안전장치
클로드가 .env 같은 파일 못 건드리게 막기
CLAUDE.md에 '.env는 건드리지 마'라고 써도 그건 부탁이라 100% 지켜진다는 보장이 없어요.
훅은 클로드의 판단과 상관없이 매번 실행돼요. 파일을 고치기 직전(PreToolUse)에 검사해서, 금지 목록이면 막고 이유를 클로드에게 알려 줍니다.
준비jq 설치
- 훅 스크립트가 JSON을 읽을 때 jq라는 작은 도구를 써요. 맥은 이렇게 설치해요.
brew install jq
- 데비안·우분투는 apt-get install jq 로 설치해요.
1단계검사 스크립트 만들기
- 프로젝트 안 .claude/hooks/protect-files.sh 로 저장합니다. 막고 싶은 이름은 PROTECTED_PATTERNS 괄호 안에 더하면 돼요.
#!/bin/bash # protect-files.sh INPUT=$(cat) FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty') # Normalize Windows backslash separators so the patterns below match FILE_PATH="${FILE_PATH//\\//}" PROTECTED_PATTERNS=(".env" "package-lock.json" ".git/") for pattern in "${PROTECTED_PATTERNS[@]}"; do if [[ "$FILE_PATH" == *"$pattern"* ]]; then echo "Blocked: $FILE_PATH matches protected pattern '$pattern'" >&2 exit 2 fi done exit 0
- exit 2 가 '막아라'라는 신호예요. 그때 >&2 로 내보낸 문장이 클로드에게 이유로 전달돼요.
2단계실행 권한 주기
- 맥·리눅스에선 실행 권한이 있어야 돌아가요.
chmod +x .claude/hooks/protect-files.sh
3단계훅 등록
- 프로젝트의 .claude/settings.json 에 넣어요. Edit|Write 는 '파일을 고치거나 새로 쓸 때'만 검사하라는 뜻이에요.
{ "hooks": { "PreToolUse": [ { "matcher": "Edit|Write", "hooks": [ { "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/protect-files.sh" } ] } ] } }
4단계시험
- 클로드에게 '.env 파일에 주석 한 줄 추가해 줘'라고 해 보세요. 고치기 전에 막히고, Blocked: 로 시작하는 이유가 클로드에게 전달되면 성공이에요.
- 이 훅은 클로드의 편집 도구만 검사해요. 셸 명령으로 파일을 바꾸는 경우까지 막진 못해요.
같이 걸어 두면 좋은 훅
긴 대화 요약 뒤 규칙 다시 알려 주기 SessionStart 훅에 matcher를 compact로 두고 echo로 핵심 규칙을 출력하면, 대화가 압축된 뒤에도 그 문장이 다시 들어가요.
고칠 때마다 자동 정리(개발자용) PostToolUse 훅에 Edit|Write로 jq -r '.tool_input.file_path' | xargs npx prettier --write 를 걸면 코드 모양이 늘 맞춰져요.

부탁은 잊혀도 훅은 안 잊어요. 비밀 키 파일 있는 프로젝트라면 오늘 걸어 두고 푹 주무세요 🌙
출처 (2026-09-30 확인)
Claude Code 공식 문서 — Automate actions with hooks — https://code.claude.com/docs/en/hooks-guide
Claude Code 공식 문서 — Automate actions with hooks — https://code.claude.com/docs/en/hooks-guide