# 차단되는 자리와 풀리지 않는 자리

> 이벤트 선택, 응답 방식, 퍼미션과의 우선순위

- Canonical: https://learning.reopt.ai/courses/claude-code-automation/lessons/ccau-m2-concept
- Language: ko-KR
- HTML: https://learning.reopt.ai/courses/claude-code-automation/lessons/ccau-m2-concept

---

[자동화와 확장](/courses/claude-code-automation) 2. Hooks 실행 경계 3 / 9

# 차단되는 자리와 풀리지 않는 자리

이벤트 선택, 응답 방식, 퍼미션과의 우선순위
개념 학습 45 XP 9분

훅을 처음 도입한 팀이 가장 많이 겪는 사고는 훅은 돌았는데 아무것도 막히지 않는 것 입니다. 원인은 거의 항상 이벤트 선택이거나 응답 방식의 혼용입니다. 여기에 하나 더, 훅은 제약을 죌 수는 있어도 퍼미션 규칙이 허용한 범위 너머로 풀어 주지는 못합니다 . PreToolUse의 deny는 퍼미션 모드 검사보다 먼저 실행되어 bypassPermissions 나 --dangerously-skip-permissions 환경에서도 도구를 막지만, allow는 deny 퍼미션 규칙을 우회하지 못합니다.
훅은 조이기만 하고 풀지 못한다 정책 강제는 훅으로, 권한 완화는 퍼미션 규칙으로 나눠 설계합니다. 훅에서 allow를 반환해도 deny 규칙이 그대로 적용된다면, 고칠 대상은 훅이 아니라 deny 규칙입니다.

| 제어 수단 | 실제 효과 | 주의점 |
| 종료 코드 2 | 차단하고 stderr를 Claude에 피드백 | PostToolUse 계열은 차단 안 됨 |
| 종료 코드 0 + stdout JSON | allow·deny·ask·defer 정밀 결정 | 종료 코드 2면 JSON이 무시됨 |
| matcher | 이벤트 필드 이름으로 발동 범위 제한 | 대소문자를 구분함 |
| if 필드 | 퍼미션 규칙 구문으로 조건 판별 | 도구 이벤트에만 붙일 것 |
| permissionDecision: allow | 대화형 퍼미션 프롬프트만 건너뜀 | deny 규칙은 그대로 적용됨 |

차단이 목적인 훅은 이벤트를 고르는 단계에서 이미 성패가 갈립니다.

- 1 이벤트 먼저 고르기 차단이 목적이면 아직 동작이 일어나지 않은 시점의 이벤트에 겁니다.

- 2 응답 방식 통일 종료 코드 2와 stdout JSON 중 하나만 쓰고 분기마다 섞지 않습니다.

- 3 발동 범위 좁히기 matcher와 if로 필요한 호출에서만 훅 프로세스가 생성되게 합니다.

- 4 폭주 방지 배치 stop_hook_active 조기 종료 분기와 큰 출력 처리 방식을 미리 정합니다.

실무에 남길 기준

- 종료 코드 2의 차단은 아직 일어나지 않은 시점의 이벤트에서만 성립하고, 이미 일어난 시점에서는 성립하지 않는다
- 훅의 allow는 프롬프트를 생략할 뿐 deny 퍼미션 규칙을 이기지 못한다
- Stop 훅은 연속 8회 차단되면 강제로 우회되므로 조기 종료 분기가 필요하다

[이전](/courses/claude-code-automation/lessons/ccau-m1-quiz) 이해했어요 · 계속

---

에이전트용 사이트 안내: https://learning.reopt.ai/llms.txt · 사이트맵: https://learning.reopt.ai/sitemap.xml · 문의: https://learning.reopt.ai/contact
