agent-sdk/hooks.md +10 −10
140 ```140 ```
141</CodeGroup>141</CodeGroup>
142 142
143143스크립트를 실행하면 Claude가 `.env` 파일을 생성하려고 시도하고, 훅이 도구 호출을 거부하며, Claude의 최종 응답은 `.env` 파일을 생성할 수 없다고 설명합니다.두 스크립트 중 어느 것을 실행하든 Claude가 `.env` 파일을 생성하려고 시도하고 훅이 도구 호출을 거부합니다.
144 144
145<h2 id="available-hooks">145<h2 id="available-hooks">
146 사용 가능한 훅146 사용 가능한 훅
179| `ConfigChange` | 아니오 | 예 | 구성 파일 변경 | 동적으로 설정 다시 로드 |179| `ConfigChange` | 아니오 | 예 | 구성 파일 변경 | 동적으로 설정 다시 로드 |
180| `InstructionsLoaded` | 아니오 | 예 | `CLAUDE.md` 또는 규칙 파일이 컨텍스트에 로드됨 | 어떤 명령 파일이 로드되는지 감사 |180| `InstructionsLoaded` | 아니오 | 예 | `CLAUDE.md` 또는 규칙 파일이 컨텍스트에 로드됨 | 어떤 명령 파일이 로드되는지 감사 |
181| `WorktreeCreate` | 아니오 | 예 | Git worktree 생성 | 격리된 작업 공간 추적 |181| `WorktreeCreate` | 아니오 | 예 | Git worktree 생성 | 격리된 작업 공간 추적 |
182182| `WorktreeRemove` | 아니오 | 예 | Git worktree 제거 | 작업 공간 리소스 정리 || `WorktreeRemove` | 아니오 | 예 | `WorktreeCreate` 훅으로 생성된 worktree가 제거되는 중 | 워크스페이스 리소스 정리 |
183| `CwdChanged` | 아니오 | 예 | 세션 중 작업 디렉토리가 변경됨 | 디렉토리별 환경 변수 다시 로드 |183| `CwdChanged` | 아니오 | 예 | 세션 중 작업 디렉토리가 변경됨 | 디렉토리별 환경 변수 다시 로드 |
184| `FileChanged` | 아니오 | 예 | 감시 중인 파일이 수정, 생성 또는 삭제됨 | 프로젝트 파일이 변경될 때 구성 다시 로드 |184| `FileChanged` | 아니오 | 예 | 감시 중인 파일이 수정, 생성 또는 삭제됨 | 프로젝트 파일이 변경될 때 구성 다시 로드 |
185| `DirectoryAdded` | 아니오 | 예 | 세션 중 작업 디렉토리가 추가됨 | 세션 중 추가된 저장소에 대한 종속성 설치 |185| `DirectoryAdded` | 아니오 | 예 | 세션 중 작업 디렉토리가 추가됨 | 세션 중 추가된 저장소에 대한 종속성 설치 |
219`hooks` 옵션은 다음과 같은 딕셔너리(Python) 또는 객체(TypeScript)입니다:219`hooks` 옵션은 다음과 같은 딕셔너리(Python) 또는 객체(TypeScript)입니다:
220 220
221* **키**: [훅 이벤트 이름](#available-hooks)입니다(예: `'PreToolUse'`, `'PostToolUse'`, `'Stop'`).221* **키**: [훅 이벤트 이름](#available-hooks)입니다(예: `'PreToolUse'`, `'PostToolUse'`, `'Stop'`).
222222* **값**: [매처](#matchers) 배열이며, 각각 선택적 필터 패턴과 [콜백 함수](#callback-functions)를 포함합니다.* **값**: [matcher](#matchers) 배열이며, 각각 선택적 필터 패턴과 [콜백 함수](#callback-functions)를 포함합니다.
223 223
224<h3 id="matchers">224<h3 id="matchers">
225225 매처 Matcher
226</h3>226</h3>
227 227
228매처를 사용하여 콜백이 발생할 때를 필터링합니다. `matcher` 필드는 훅 이벤트 유형에 따라 다른 값과 일치합니다. 예를 들어 도구 기반 훅은 도구 이름과 일치하고, `Notification` 훅은 알림 유형과 일치합니다.228매처를 사용하여 콜백이 발생할 때를 필터링합니다. `matcher` 필드는 훅 이벤트 유형에 따라 다른 값과 일치합니다. 예를 들어 도구 기반 훅은 도구 이름과 일치하고, `Notification` 훅은 알림 유형과 일치합니다.
259 259
260콜백은 두 가지 필드 범주를 포함하는 객체를 반환합니다:260콜백은 두 가지 필드 범주를 포함하는 객체를 반환합니다:
261 261
262262* **최상위 필드**는 모든 이벤트에서 동일하게 작동합니다: `systemMessage`는 사용자에게 메시지를 표시하고, `continue`(Python에서는 `continue_`)는 이 훅 후에 에이전트가 계속 실행되는지 여부를 결정합니다. 일부 이벤트는 이들을 버리거나 다른 곳에 전달합니다. 각 [이벤트의 섹션](/docs/ko/hooks#hook-events)에서 훅 페이지에 이들이 어디에 도착하는지 설명합니다.* **최상위 필드**는 모든 이벤트에서 허용됩니다: `systemMessage`는 사용자에게 메시지를 표시하고, `continue`(Python에서는 `continue_`)는 이 훅 후에 에이전트가 계속 실행되는지 여부를 결정합니다. 일부 이벤트는 이들을 버리거나 다른 곳에 전달합니다. 훅 페이지의 각 [이벤트 섹션](/docs/ko/hooks#hook-events)에서 이들이 어디로 전달되는지 설명합니다.
263* \*\*`hookSpecificOutput`\*\*은 현재 작업을 제어합니다. 내부의 필드는 훅 이벤트 유형에 따라 다릅니다:263* \*\*`hookSpecificOutput`\*\*은 현재 작업을 제어합니다. 내부의 필드는 훅 이벤트 유형에 따라 다릅니다:
264 * `PreToolUse` 훅의 경우 `permissionDecision`(`"allow"`, `"deny"`, `"ask"`, 또는 `"defer"`), `permissionDecisionReason`, `updatedInput`을 설정하는 곳입니다. `"defer"`를 반환하면 `stop_reason`이 `"tool_deferred"`인 결과 메시지와 함께 턴이 종료되므로 [나중에 호출을 재개](/docs/ko/hooks#defer-a-tool-call-for-later)할 수 있습니다.264 * `PreToolUse` 훅의 경우 `permissionDecision`(`"allow"`, `"deny"`, `"ask"`, 또는 `"defer"`), `permissionDecisionReason`, `updatedInput`을 설정하는 곳입니다. `"defer"`를 반환하면 `stop_reason`이 `"tool_deferred"`인 결과 메시지와 함께 턴이 종료되므로 [나중에 호출을 재개](/docs/ko/hooks#defer-a-tool-call-for-later)할 수 있습니다.
265265 * `PostToolUse` 훅의 경우 `additionalContext`를 설정하여 도구 결과에 정보를 추가할 수 있습니다. 도구의 출력을 Claude가 보기 전에 바꾸려면 `updatedToolOutput`을 설정합니다. 이는 두 SDK 모두에서 모든 도구에 대해 작동합니다. 더 오래된 `updatedMCPToolOutput` 필드는 MCP 도구 출력만 바꾸며 deprecated되었습니다. * `PostToolUse` 훅의 경우 `additionalContext`를 설정하여 도구 결과에 정보를 추가할 수 있습니다. 도구의 출력을 Claude가 보기 전에 바꾸려면 `updatedToolOutput`을 설정합니다. 이는 두 SDK 모두에서 모든 도구에 대해 작동합니다. 더 오래된 `updatedMCPToolOutput` 필드는 MCP 도구 출력만 바꿉니다.
266 * TypeScript SDK에서 `PostToolUse` 콜백은 또한 `classifierContext`를 반환할 수 있습니다. 이는 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode) 권한 분류기를 위한 도구 호출 결과에 대한 짧은 메모입니다. 콜백이 애플리케이션의 자체 프로세스에서 실행되므로 분류기는 메모에서 전달하는 사용자 진술을 사용자 의도로 가중치를 둘 수 있습니다. 이 필드는 TypeScript Agent SDK v0.3.236 이상이 필요합니다. [자동 모드 분류기를 위한 결과 주석 달기](/docs/ko/hooks#annotate-a-result-for-the-auto-mode-classifier)에서 길이 제한, 동기 전용 규칙, 메모에 포함하지 말아야 할 내용을 다룹니다.266 * TypeScript SDK에서 `PostToolUse` 콜백은 또한 `classifierContext`를 반환할 수 있습니다. 이는 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode) 권한 분류기를 위한 도구 호출 결과에 대한 짧은 메모입니다. 콜백이 애플리케이션의 자체 프로세스에서 실행되므로 분류기는 메모에서 전달하는 사용자 진술을 사용자 의도로 가중치를 둘 수 있습니다. 이 필드는 TypeScript Agent SDK v0.3.236 이상이 필요합니다. [자동 모드 분류기를 위한 결과 주석 달기](/docs/ko/hooks#annotate-a-result-for-the-auto-mode-classifier)에서 길이 제한, 동기 전용 규칙, 메모에 포함하지 말아야 할 내용을 다룹니다.
267 267
268변경 없이 작업을 허용하려면 `{}`를 반환합니다. SDK 콜백 훅은 [Claude Code 셸 명령 훅](/docs/ko/hooks#json-output)과 동일한 JSON 출력 형식을 사용하며, 이는 모든 필드와 이벤트별 옵션을 문서화합니다. SDK 타입 정의는 [TypeScript](/docs/ko/agent-sdk/typescript#synchookjsonoutput) 및 [Python](/docs/ko/agent-sdk/python#synchookjsonoutput) SDK 참조를 참조하세요.268변경 없이 작업을 허용하려면 `{}`를 반환합니다. SDK 콜백 훅은 [Claude Code 셸 명령 훅](/docs/ko/hooks#json-output)과 동일한 JSON 출력 형식을 사용하며, 이는 모든 필드와 이벤트별 옵션을 문서화합니다. SDK 타입 정의는 [TypeScript](/docs/ko/agent-sdk/typescript#synchookjsonoutput) 및 [Python](/docs/ko/agent-sdk/python#synchookjsonoutput) SDK 참조를 참조하세요.
840* `PreModelSwitch`: Claude Code는 모델 전환을 차단합니다. 응답하지 않는 훅은 전환을 승인하지 않았습니다.840* `PreModelSwitch`: Claude Code는 모델 전환을 차단합니다. 응답하지 않는 훅은 전환을 승인하지 않았습니다.
841* `Notification`, `PreCompact`, `PostModelSwitch` 같은 다른 이벤트: Claude Code는 실패를 기록하고 계속됩니다.841* `Notification`, `PreCompact`, `PostModelSwitch` 같은 다른 이벤트: Claude Code는 실패를 기록하고 계속됩니다.
842 842
843843주 세션에서 `Stop` 또는 `SessionStart` 콜백이 처음 타임아웃되면 Claude Code는 또한 앱이 세션을 구동하는 것이 응답하지 않았다고 말하는 [`SDKInformationalMessage`](/docs/ko/agent-sdk/typescript#sdkinformationalmessage)를 메시지 스트림에 추가합니다. 앱이 응답하지 않은 상태로 유지되는 동안 이후 타임아웃은 해당 메시지를 반복하지 않습니다.주 세션에서 `Stop` 또는 `SessionStart` 콜백이 처음 타임아웃되면 Claude Code는 또한 세션을 구동하는 앱이 응답하지 않았다는 [`SDKInformationalMessage`](/docs/ko/agent-sdk/typescript#sdkinformationalmessage)를 메시지 스트림에 추가합니다. 앱이 응답하지 않은 상태로 유지되는 동안 이후 타임아웃은 해당 메시지를 반복하지 않습니다.
844 844
845콜백이 대기 중인 동안 쿼리를 중단하면 Claude Code는 대기 중인 도구 호출을 취소합니다. v2.1.208 이전에는 대기 중인 `PreToolUse` 콜백 중에 중단하면 도구 호출이 진행될 수 있었습니다.845콜백이 대기 중인 동안 쿼리를 중단하면 Claude Code는 대기 중인 도구 호출을 취소합니다. v2.1.208 이전에는 대기 중인 `PreToolUse` 콜백 중에 중단하면 도구 호출이 진행될 수 있었습니다.
846 846
878 Python에서 세션 훅을 사용할 수 없음878 Python에서 세션 훅을 사용할 수 없음
879</h3>879</h3>
880 880
881881`SessionStart` 및 `SessionEnd`는 TypeScript에서 SDK 콜백 훅으로 등록할 수 있지만 Python SDK에서는 사용할 수 없습니다(`HookEvent` 유형이 이를 생략합니다). Python에서는 설정 파일(예: `.claude/settings.json`)에 정의된 [셸 명령 훅](/docs/ko/hooks#hook-events)으로만 사용 가능합니다. SDK 애플리케이션에서 셸 명령 훅을 로드하려면 [`setting_sources`](/docs/ko/agent-sdk/python#settingsource) 또는 [`settingSources`](/docs/ko/agent-sdk/typescript#settingsource)를 사용하여 적절한 설정 소스를 포함합니다:`SessionStart` 및 `SessionEnd`는 TypeScript에서 SDK 콜백 훅으로 등록할 수 있지만 Python SDK에서는 사용할 수 없습니다(`HookEvent` 유형이 이를 생략합니다). Python에서는 설정 파일(예: `.claude/settings.json`)에 정의된 [셸 명령 훅](/docs/ko/hooks#hook-events)으로만 사용 가능합니다. SDK 애플리케이션이 어떤 설정 파일을 로드하는지는 [`setting_sources`](/docs/ko/agent-sdk/python#settingsource) 또는 [`settingSources`](/docs/ko/agent-sdk/typescript#settingsource)에 따라 달라집니다. 해당 옵션을 설정하는 경우 훅이 포함된 소스를 포함합니다:
882 882
883<CodeGroup>883<CodeGroup>
884 ```python Python theme={null}884 ```python Python theme={null}
915 systemMessage가 출력에 나타나지 않음915 systemMessage가 출력에 나타나지 않음
916</h3>916</h3>
917 917
918918`systemMessage` 필드는 사용자에게 메시지를 표시합니다. Claude Code v2.1.227 이상에서는 훅의 `systemMessage`가 메시지 스트림에 [`SDKInformationalMessage`](/docs/ko/agent-sdk/typescript#sdkinformationalmessage)로 표시될 수 있습니다. 표시 여부는 이벤트에 따라 다릅니다. 훅 페이지의 각 [이벤트 섹션](/docs/ko/hooks#hook-events)에서 출력이 어떻게 표시되는지 설명합니다. 대신 모델에 컨텍스트를 전달하려면 [`additionalContext`](/docs/ko/hooks#add-context-for-claude)를 반환합니다.`systemMessage` 필드는 모델이 아닌 사용자에게 메시지를 표시합니다. Claude Code v2.1.227 이상에서는 훅의 `systemMessage`가 메시지 스트림에 [`SDKInformationalMessage`](/docs/ko/agent-sdk/typescript#sdkinformationalmessage)로 표시될 수 있습니다. 표시 여부는 이벤트에 따라 다릅니다. 훅 페이지의 각 [이벤트 섹션](/docs/ko/hooks#hook-events)에서 출력이 어떻게 표시되는지 설명합니다. 대신 모델에 컨텍스트를 전달하려면 [`additionalContext`](/docs/ko/hooks#add-context-for-claude)를 반환합니다.
919 919
920920v2.1.227 이전에는 SDK가 메시지 스트림에서 훅 출력을 `SessionStart` 및 `Setup` 훅에만 표시했습니다. 다른 이벤트의 경우 출력은 [`includeHookEvents`](/docs/ko/agent-sdk/typescript#options)(`Python에서는 include_hook_events`)가 추가하는 라이프사이클 이벤트에만 나타났습니다. 해당 옵션의 항목은 각 훅 이벤트가 생성하는 라이프사이클 이벤트를 다룹니다.v2.1.227 이전에는 SDK가 메시지 스트림에서 훅 출력을 `SessionStart` 및 `Setup` 훅에만 표시했습니다. 다른 이벤트의 경우 출력은 [`includeHookEvents`](/docs/ko/agent-sdk/typescript#options)(Python에서는 `include_hook_events`)가 추가하는 라이프사이클 이벤트에만 나타났습니다. 해당 옵션의 항목은 각 훅 이벤트가 생성하는 라이프사이클 이벤트를 다룹니다.
921 921
922훅 결정을 애플리케이션에 안정적으로 표시해야 하면 별도로 기록하거나 전용 출력 채널을 사용합니다.922훅 결정을 애플리케이션에 안정적으로 표시해야 하면 별도로 기록하거나 전용 출력 채널을 사용합니다.
923 923