이 페이지는 Claude Code에서 훅을 구현하기 위한 참조 문서를 제공합니다.
~/.claude/settings.json
- 사용자 설정.claude/settings.json
- 프로젝트 설정.claude/settings.local.json
- 로컬 프로젝트 설정 (커밋되지 않음)PreToolUse
및 PostToolUse
에만 적용)
Write
는 Write 도구만 일치Edit|Write
또는 Notebook.*
*
사용. 빈 문자열(""
)을 사용하거나 matcher
를 비워둘 수도 있습니다.type
: 현재 "command"
만 지원command
: 실행할 bash 명령 ($CLAUDE_PROJECT_DIR
환경 변수 사용 가능)timeout
: (선택사항) 특정 명령이 취소되기 전에 실행되어야 하는 시간(초)UserPromptSubmit
, Notification
, Stop
, SubagentStop
과 같은 이벤트의 경우 matcher 필드를 생략할 수 있습니다:
CLAUDE_PROJECT_DIR
(Claude Code가 훅 명령을 실행할 때만 사용 가능)을 사용하여 프로젝트에 저장된 스크립트를 참조할 수 있으며, Claude의 현재 디렉터리에 관계없이 작동하도록 보장합니다:
Task
- 서브에이전트 작업 (서브에이전트 문서 참조)Bash
- 셸 명령Glob
- 파일 패턴 매칭Grep
- 콘텐츠 검색Read
- 파일 읽기Edit
, MultiEdit
- 파일 편집Write
- 파일 쓰기WebFetch
, WebSearch
- 웹 작업manual
- /compact
에서 호출auto
- 자동 압축에서 호출 (전체 컨텍스트 창으로 인해)startup
- 시작에서 호출resume
- --resume
, --continue
, 또는 /resume
에서 호출clear
- /clear
에서 호출compact
- 자동 또는 수동 압축에서 호출reason
필드는 다음 중 하나입니다:
clear
- /clear 명령으로 세션 지워짐logout
- 사용자 로그아웃prompt_input_exit
- 프롬프트 입력이 표시된 상태에서 사용자 종료other
- 기타 종료 이유tool_input
의 정확한 스키마는 도구에 따라 다릅니다.
tool_input
과 tool_response
의 정확한 스키마는 도구에 따라 다릅니다.
stop_hook_active
는 Claude Code가 이미 중지 훅의 결과로 계속 진행 중일 때 true입니다. 이 값을 확인하거나 트랜스크립트를 처리하여 Claude Code가 무한정 실행되는 것을 방지하세요.
manual
의 경우 custom_instructions
는 사용자가 /compact
에 전달하는 내용에서 가져옵니다. auto
의 경우 custom_instructions
는 비어 있습니다.
stdout
은 트랜스크립트 모드(CTRL-R)에서 사용자에게 표시되지만, UserPromptSubmit
과 SessionStart
의 경우 stdout이 컨텍스트에 추가됩니다.stderr
이 Claude에게 자동으로 피드백됩니다. 아래 훅 이벤트별 동작을 참조하세요.stderr
이 사용자에게 표시되고 실행이 계속됩니다.UserPromptSubmit
훅은 예외입니다.훅 이벤트 | 동작 |
---|---|
PreToolUse | 도구 호출을 차단하고, stderr을 Claude에게 표시 |
PostToolUse | stderr을 Claude에게 표시 (도구는 이미 실행됨) |
Notification | 해당 없음, stderr을 사용자에게만 표시 |
UserPromptSubmit | 프롬프트 처리를 차단하고, 프롬프트를 지우고, stderr을 사용자에게만 표시 |
Stop | 중지를 차단하고, stderr을 Claude에게 표시 |
SubagentStop | 중지를 차단하고, stderr을 Claude 서브에이전트에게 표시 |
PreCompact | 해당 없음, stderr을 사용자에게만 표시 |
SessionStart | 해당 없음, stderr을 사용자에게만 표시 |
SessionEnd | 해당 없음, stderr을 사용자에게만 표시 |
stdout
에서 구조화된 JSON을 반환할 수 있습니다:
continue
가 false인 경우, 훅 실행 후 Claude는 처리를 중지합니다.
PreToolUse
의 경우, 이는 특정 도구 호출만 차단하고 Claude에게 자동 피드백을 제공하는 "permissionDecision": "deny"
와 다릅니다.PostToolUse
의 경우, 이는 Claude에게 자동화된 피드백을 제공하는 "decision": "block"
과 다릅니다.UserPromptSubmit
의 경우, 이는 프롬프트가 처리되는 것을 방지합니다.Stop
과 SubagentStop
의 경우, 이는 모든 "decision": "block"
출력보다 우선합니다."continue" = false
는 모든 "decision": "block"
출력보다 우선합니다.stopReason
은 continue
와 함께 사용자에게 표시되는 이유를 제공하며, Claude에게는 표시되지 않습니다.
PreToolUse
결정 제어PreToolUse
훅은 도구 호출이 진행되는지 여부를 제어할 수 있습니다.
"allow"
는 권한 시스템을 우회합니다. permissionDecisionReason
은 사용자에게 표시되지만 Claude에게는 표시되지 않습니다."deny"
는 도구 호출이 실행되는 것을 방지합니다. permissionDecisionReason
은 Claude에게 표시됩니다."ask"
는 사용자에게 UI에서 도구 호출을 확인하도록 요청합니다. permissionDecisionReason
은 사용자에게 표시되지만 Claude에게는 표시되지 않습니다.decision
과 reason
필드는 더 이상 사용되지 않습니다.
대신 hookSpecificOutput.permissionDecision
과
hookSpecificOutput.permissionDecisionReason
을 사용하세요. 더 이상 사용되지 않는 필드
"approve"
와 "block"
은 각각 "allow"
와 "deny"
에 매핑됩니다.PostToolUse
결정 제어PostToolUse
훅은 도구 실행 후 Claude에게 피드백을 제공할 수 있습니다.
"block"
은 자동으로 reason
과 함께 Claude에게 프롬프트를 제공합니다.undefined
는 아무것도 하지 않습니다. reason
은 무시됩니다."hookSpecificOutput.additionalContext"
는 Claude가 고려할 컨텍스트를 추가합니다.UserPromptSubmit
결정 제어UserPromptSubmit
훅은 사용자 프롬프트가 처리되는지 여부를 제어할 수 있습니다.
"block"
은 프롬프트가 처리되는 것을 방지합니다. 제출된 프롬프트는 컨텍스트에서 지워집니다. "reason"
은 사용자에게 표시되지만 컨텍스트에 추가되지 않습니다.undefined
는 프롬프트가 정상적으로 진행되도록 허용합니다. "reason"
은 무시됩니다."hookSpecificOutput.additionalContext"
는 차단되지 않은 경우 문자열을 컨텍스트에 추가합니다.Stop
/SubagentStop
결정 제어Stop
과 SubagentStop
훅은 Claude가 계속해야 하는지 여부를 제어할 수 있습니다.
"block"
은 Claude가 중지하는 것을 방지합니다. Claude가 어떻게 진행해야 하는지 알 수 있도록 reason
을 채워야 합니다.undefined
는 Claude가 중지하도록 허용합니다. reason
은 무시됩니다.SessionStart
결정 제어SessionStart
훅을 사용하면 세션 시작 시 컨텍스트를 로드할 수 있습니다.
"hookSpecificOutput.additionalContext"
는 문자열을 컨텍스트에 추가합니다.additionalContext
값이 연결됩니다.SessionEnd
결정 제어SessionEnd
훅은 세션이 종료될 때 실행됩니다. 세션 종료를 차단할 수는 없지만 정리 작업을 수행할 수 있습니다.
UserPromptSubmit
훅의 경우 두 가지 방법으로 컨텍스트를 주입할 수 있습니다:UserPromptSubmit
의 특별한 경우)mcp__<server>__<tool>
패턴을 따릅니다. 예를 들어:
mcp__memory__create_entities
- Memory 서버의 엔티티 생성 도구mcp__filesystem__read_file
- Filesystem 서버의 파일 읽기 도구mcp__github__search_repositories
- GitHub 서버의 검색 도구$VAR
가 아닌 "$VAR"
사용..
확인$CLAUDE_PROJECT_DIR
사용).env
, .git/
, 키 등 피하기/hooks
메뉴에서 검토가 필요합니다CLAUDE_PROJECT_DIR
환경 변수를 사용할 수 있으며 프로젝트 루트 디렉터리(Claude Code가 시작된 곳)의 절대 경로를 포함합니다--debug
)/hooks
를 실행하여 훅이 등록되었는지 확인claude --debug
를 사용하여 훅 실행 세부사항 확인\"
를 사용claude --debug
를 사용하여 자세한 훅 실행 확인claude --debug
를 사용하여 훅 실행 세부사항을 확인하세요: