콘텐츠로 이동

훅 시스템

훅(Hook)은 Claude Code의 이벤트 기반 자동화 메커니즘입니다. 특정 이벤트가 발생했을 때 셸 명령어, HTTP 요청, LLM 프롬프트, 또는 에이전트를 자동으로 실행할 수 있습니다. 이를 통해 코드 포맷팅, 보안 검사, 알림 전송 등 반복적인 작업을 자동화할 수 있습니다.

훅 명령어의 종료 코드에 따라 Claude Code의 동작이 달라집니다.

Exit 코드의미동작
0성공정상 진행, stdout이 있으면 Claude에게 주입
2차단/주입도구 실행 차단 또는 응답에 텍스트 주입
기타 (1 등)오류stderr 내용만 표시, 실행은 계속
# exit 2로 도구 실행 차단 예시
#!/bin/bash
if echo "$CLAUDE_TOOL_INPUT" | grep -q "rm -rf"; then
echo "위험한 명령어가 감지되었습니다" >&2
exit 2
fi
exit 0

Claude Code는 20가지 이상의 이벤트를 제공합니다.

이벤트시점차단 가능
PreToolUse도구 실행 직전예 (exit 2)
PostToolUse도구 실행 성공 후아니오
PostToolUseFailure도구 실행 실패 후아니오
이벤트시점
SessionStart세션 시작 시
Stop응답 생성 완료 시
UserPromptSubmit사용자 메시지 전송 시
SessionEnd세션 종료 시
이벤트시점
PreCompact컨텍스트 압축 직전
PostCompact컨텍스트 압축 완료 후
이벤트시점
Setup초기 환경 구성 시
ConfigChange설정 파일 변경 시
CwdChanged작업 디렉토리 변경 시
FileChanged파일 변경 감지 시
InstructionsLoadedCLAUDE.md 로드 시 (차단 불가)
이벤트시점
SubagentStart서브에이전트 시작 시
SubagentStop서브에이전트 종료 시
TeammateIdle팀메이트 에이전트 유휴 상태 시
이벤트시점
PermissionRequest권한 요청 시
PermissionDenied권한 거부 시
Notification알림 발생 시
TaskCreated태스크 생성 시
TaskCompleted태스크 완료 시
이벤트시점
WorktreeCreateGit 워크트리 생성 시
WorktreeRemoveGit 워크트리 제거 시
유형설명사용 사례
command셸 명령어 실행코드 포맷팅, 린트, 파일 검사
httpHTTP POST 요청 전송외부 서비스 알림, 웹훅
promptLLM 프롬프트 실행AI 기반 코드 리뷰, 자동 설명 생성
agent도구 접근 가능한 에이전트복잡한 자동화, 멀티스텝 작업
// settings.json 훅 설정 예시
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "/usr/local/bin/check-dangerous-cmd.sh"
}
]
}
],
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "prettier --write $CLAUDE_FILE_PATH"
}
]
}
]
}
}

훅 실행 시 다음 환경 변수가 자동으로 주입됩니다.

변수설명
$CLAUDE_FILE_PATH현재 작업 중인 파일 경로
$CLAUDE_TOOL_NAME실행된 도구 이름
$CLAUDE_TOOL_INPUT도구에 전달된 입력 (JSON)
$ARGUMENTS훅에 전달된 추가 인수

훅 시스템을 통해 Claude Code를 팀의 개발 워크플로우에 긴밀하게 통합할 수 있습니다.