나는 160개의 Claude Code hooks를 가지고 있다. 매일 제 역할을 다하는 5가지 hook
요약
Claude Code의 hooks 기능을 활용하여 에이전트의 동작을 강제하고 워크플로우를 최적화하는 5가지 실전 패턴을 소개합니다. 비용 차단, 문체 교정, 보안 유출 방지 등 프롬프트 엔지니어링만으로는 해결하기 어려운 문제들을 hook을 통해 해결하는 방법을 다룹니다.
핵심 포인트
- hook은 단순 제안이 아닌 규칙을 강제하는 '벽' 역할을 수행함
- PreToolUse hook을 통해 예기치 못한 API 비용 발생을 방지 가능
- em-dash 차단 등 hook을 활용해 AI 특유의 문체를 제어할 수 있음
- 비밀 정보 유출을 git add 단계에서 선제적으로 차단 가능
- SessionStart hook으로 세션 시작 시 필요한 컨텍스트를 자동 로드
$ ls ~/.claude/hooks/ | wc -l
160
$ ls ~/.claude/rules/ | wc -l
...
이것이 오늘 아침 기준 나의 Claude Code 설정 상태이다.
대부분의 사람들은 한두 개의 hook에서 멈춘다.
그러고 나서 대부분의 사람들은 Claude가 규칙을 "잊어버린다"고 불평한다.
Claude는 잊어버리지 않는다. 애초에 규칙이 강제(enforced)된 적이 없었을 뿐이다. 마크다운(markdown) 파일에 있는 규칙은 제안일 뿐이다. hook에 있는 규칙은 벽이다.
다음은 나의 일상적인 워크플로우에서 실제로 제 역할을 다하는(pay rent) 다섯 가지 hook 패턴이다. 각 패턴은 프롬프트 엔지니어링(prompt engineering)으로는 해결할 수 없는 문제 유형을 해결한다.
1. 비용 차단 hook (Bash에 대한 PreToolUse)
Anthropic은 2026년 6월 15일에 Agent SDK 과금을 구독 서비스와 분리했다. 헤드리스(Headless) claude -p 호출은 이제 Pro 구독이 아닌 SDK를 통해 과금된다. 만약 당신의 에이전트가 실수로 claude -p가 포함된 야간 cron 작업을 실행한다면, 당신의 청구 금액은 하룻밤 사이에 변할 수 있다.
해결책은 해당 패턴을 차단하는 Bash에 대한 PreToolUse hook이다.
#!/usr/bin/env bash
# @event: PreToolUse
# @matcher: Bash
...
이 hook은 지난 2주 동안 내 컴퓨터에서 세 번 실행되었다. 실행될 때마다 각각은 내가 인지하지 못한 채 커밋했을 법한 스크립트들이었다.
2. em-dash 추방 hook (Write에 대한 PreToolUse)
AI가 생성한 텍스트는 em dash(—)를 도처에 흘리고 다닌다. 편집자들은 한 번의 스크롤만으로도 그 패턴을 찾아낼 수 있다. 콘텐츠 파일에 대한 Write 작업 시 em dash를 차단하는 hook은 출력물이 인간처럼 들리게 유지해 준다.
#!/usr/bin/env bash
# @event: PreToolUse
# @matcher: Write|Edit
...
에이전트는 잘못된 문장 부호가 포함된 초안을 배포할 수 없다. 쓰기(write) 작업이 실패했기 때문에 그 자리에서 다시 작성하게 된다.
3. 비밀 정보 유출 선제적 차단기 (Bash에 대한 PreToolUse)
Pre-push hook은 push 시점에 비밀 정보(secrets)를 잡아낸다. 하지만 그때는 이미 로컬 커밋 히스토리에 포함된 상태다. git add .env* 또는 자격 증명(credential) 형태의 파일을 추가하는 것을 감시하는 Bash에 대한 PreToolUse는 유출을 두 단계 더 일찍 잡아낸다.
#!/usr/bin/env bash
# @event: PreToolUse
# @matcher: Bash
...
내 저장소(repo) 중 두 곳은 루트 디렉토리에 .env.local 파일을 가지고 있습니다. 이 훅(hook)이 git add가 실행되기 전에 작동하기 때문에, 두 파일 모두 git 관리 대상에서 제외된 상태로 유지됩니다.
4. 세션 시작 표면 (SessionStart 이벤트)
SessionStart 훅은 상태 파일(state files)을 읽어 세션 사이에 무엇이 변했는지 보여줄 수 있습니다. 나의 훅은 처리 대기 중인 문서, agent-os 저장소의 드리프트(drift), 밤사이 업데이트된 보안 권고 사항(security advisories), 그리고 지난 24시간 동안 3회 이상 충돌한 모든 훅을 표면화하여 보여줍니다.
#!/usr/bin/env bash
# @event: SessionStart
...
신호는 수동적으로 전달됩니다. 일일이 확인해야 할 필요가 없습니다. 모든 세션은 세상의 상태가 이미 에이전트의 뷰(view)에 로드된 상태로 시작됩니다.
5. 복잡도 상한 가드 (Write 작업에 대한 PreToolUse)
이것은 진화하는 설정을 운영할 때만 가질 수 있는 독특한 기능입니다. 나는 각 자산 클래스(asset class)에 대해 엄격한 제한(95개 규칙, 160개 훅, 75개 기술)을 두고 있습니다. 만약 내가 제한치를 초과하게 만드는 새로운 규칙을 쓰려고 시도하면, 훅이 쓰기 작업을 차단하고 기존 규칙을 먼저 제거하거나 병합하도록 강제합니다.
#!/usr/bin/env bash
# @event: PreToolUse
# @matcher: Write
...
이 훅이 없다면 내 설정은 한 달 만에 200개의 규칙으로 늘어났을 것이고, 그중 어느 것도 무게감을 갖지 못했을 것입니다. 이 훅 덕분에 모든 새로운 규칙은 더 약한 콘텐츠를 대체함으로써 자신의 자리를 확보하게 됩니다.
실무에서 훅이 변화시키는 것들
이 정도 규모의 훅을 갖게 되면 더 이상 하지 않게 되는 세 가지가 있습니다.
에이전트가 조용히 무시할 규칙을 작성하는 일을 멈추게 됩니다.
수정 비용이 가장 높은 푸시(push) 시점에 실수를 발견하는 일을 멈추게 됩니다.
Claude에게 "X를 하는 것을 기억해"라고 말하는 일을 멈추게 됩니다. 왜냐하면 이제 X는 모델이 기억하느냐와 상관없이 도구 경계(tool boundary)에서 강제되기 때문입니다.
이러한 사고 모델의 전환은 DevOps가 "올바르게 배포하는 것을 기억하라"에서 "파이프라인이 당신이 잘못 배포하도록 내버려 두지 않는다"로 넘어갔던 것과 동일한 전환입니다. 훅은 Claude Code를 위한 파이프라인입니다.
만약 당신이 없어서는 안 될 단 하나의 훅 (hook)을 가지고 있다면, 댓글로 남겨주세요. 저는 특히 PreCompact 및 알림 훅 (notification hooks)과 같이 제가 아직 다루지 않은 에이전트 루프 (agent loop)의 부분들에 대한 훅들이 특히 궁금합니다. 패턴 라이브러리 (pattern library)는 실제로 실행되는 훅들을 더 많은 사람들이 공유할 때만 성장합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기