SpyBara
Go Premium

Documentation 2026-10-16 22:59 UTC to 2026-10-17 23:57 UTC

23 files changed +195 −83. View all changes and history on the product overview
2026
Fri 30 23:01 Thu 29 23:57 Wed 28 23:57 Tue 27 22:59 Mon 26 22:57 Sun 25 23:58 Sat 24 22:59 Fri 23 22:59 Thu 22 22:58 Wed 21 23:02 Tue 20 23:00 Mon 19 23:58 Sat 17 23:57 Fri 16 22:59 Thu 15 23:58 Wed 14 22:58 Tue 13 23:57 Sun 11 23:57 Sat 10 23:01 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

165 사용자 정의 도구 호출165 사용자 정의 도구 호출

166</h3>166</h3>

167 167 

168`mcpServers` 옵션을 통해 생성한 MCP 서버를 `query`에 전달합니다. `mcpServers`의 키는 각 도구의 정규화된 이름에서 `{server_name}` 세그먼트가 됩니다: `mcp__{server_name}__{tool_name}`. 도구가 권한 프롬프트 없이 실행되도록 `allowedTools`에 해당 이름을 나열합니다.168`mcpServers` 옵션을 통해 생성한 MCP 서버를 `query`에 전달합니다. 각 도구의 [정규화된 이름](/docs/ko/agent-sdk/mcp#tool-naming-convention)은 `mcp__{server_name}__{tool_name}`이며, 여기서 `{server_name}`은 `mcpServers`에서 서버에 지정한 키입니다. 키에 `.`이나 공백과 같은 문자가 포함되어 있으면 `{server_name}`을 작성할 때 해당 문자를 `_`로 바꿉니다. 도구가 권한 프롬프트 없이 실행되도록 `allowedTools`에 정규화된 이름을 나열합니다.

169 169 

170이 스니펫들은 [날씨 도구 예제](#weather-tool-example)의 `weatherServer`를 재사용하여 Claude에게 특정 위치의 날씨를 묻습니다.170이 스니펫들은 [날씨 도구 예제](#weather-tool-example)의 `weatherServer`를 재사용하여 Claude에게 특정 위치의 날씨를 묻습니다.

171 171 

Details

235 235 

236| 옵션 | 타입 | 기본값 | 설명 |236| 옵션 | 타입 | 기본값 | 설명 |

237| - | - | - | - |237| - | - | - | - |

238| `matcher` | `string` | `undefined` | [설정 파일의 매처 규칙](/docs/ko/hooks#matcher-patterns)을 따르는 이벤트의 필터 필드와 일치하는 패턴입니다. 도구 훅의 경우 도구 이름입니다. 기본 제공 도구에는 `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent` 등이 포함됩니다([도구 입력 타입](/docs/ko/agent-sdk/typescript#tool-input-types)에서 전체 목록 참조). MCP 도구는 `mcp__<server>__<action>` 패턴을 사용합니다. 여기서 `<server>`는 `mcpServers` 구성에서 사용하는 키입니다. |238| `matcher` | `string` | `undefined` | [설정 파일의 매처 규칙](/docs/ko/hooks#matcher-patterns)을 따르는 이벤트의 필터 필드와 일치하는 패턴입니다. 도구 훅의 경우 도구 이름입니다. 기본 제공 도구에는 `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent` 등이 포함됩니다([도구 입력 타입](/docs/ko/agent-sdk/typescript#tool-input-types)에서 전체 목록 참조). MCP 도구는 `mcp__<server>__<action>` 패턴을 사용합니다. 여기서 `<server>`는 `mcpServers` 구성에서 사용하는 키이며, [도구 명명 규칙](/docs/ko/agent-sdk/mcp#tool-naming-convention)에 설명된 대로 표기합니다. |

239| `hooks` | `HookCallback[]` | - | 필수입니다. 패턴이 일치할 때 실행할 콜백 함수의 배열 |239| `hooks` | `HookCallback[]` | - | 필수입니다. 패턴이 일치할 때 실행할 콜백 함수의 배열 |

240| `timeout` | `number` | `undefined` | 초 단위의 타임아웃입니다. 생략하면 Claude Code는 [이벤트의 기본 타임아웃](#hook-timeout)을 적용합니다. SDK 콜백은 `command` 훅 기본값을 따릅니다. |240| `timeout` | `number` | `undefined` | 초 단위의 타임아웃입니다. 생략하면 Claude Code는 [이벤트의 기본 타임아웃](#hook-timeout)을 적용합니다. SDK 콜백은 `command` 훅 기본값을 따릅니다. |

241 241 

agent-sdk/mcp.md +21 −12

Details

187`init` 서브타입이 있는 `system` 메시지는 내보낼 때 각 서버의 상태를 보고합니다. 해당 상태를 읽으려면 [오류 처리](#error-handling)를 참조하세요.187`init` 서브타입이 있는 `system` 메시지는 내보낼 때 각 서버의 상태를 보고합니다. 해당 상태를 읽으려면 [오류 처리](#error-handling)를 참조하세요.

188 188 

189<h2 id="allow-mcp-tools">189<h2 id="allow-mcp-tools">

190 MCP 도구 허용190 MCP 도구 허용하기

191</h2>191</h2>

192 192 

193MCP 도구는 Claude가 사용하기 전에 명시적 권한이 필요합니다. 권한이 없으면 Claude는 도구를 사용할 수 있음을 확인하지만 호출할 수 없습니다.193MCP 도구는 Claude가 사용하기 전에 명시적인 권한이 필요합니다. 권한이 없으면 Claude는 도구가 존재한다는 것은 인식하지만 해당 도구를 호출할 수는 없습니다.

194 194 

195<h3 id="tool-naming-convention">195<h3 id="tool-naming-convention">

196 도구 명명 규칙196 도구 이름 지정 규칙

197</h3>197</h3>

198 198 

199MCP 도구는 `mcp__<server-name>__<tool-name>` 패턴을 따릅니다. 예를 들어, `"github"`라는 이름의 GitHub 서버에 `list_issues` 도구가 있으면 `mcp__github__list_issues`가 됩니다.199MCP 도구의 이름은 `mcp__<server-name>__<tool-name>` 형식이며, 여기서 `<server-name>`은 `mcpServers`의 키처럼 서버를 등록할 때 사용한 이름입니다.

200 

201서버 이름에 포함된 `.`이나 공백 같은 문자는 `_`로 대체됩니다. 다음 표는 두 가지 서버 키에 대한 `list_issues` 도구의 전체 이름을 보여 줍니다.

202 

203| `mcpServers`의 키 | 전체 도구 이름 |

204| :- | :- |

205| `github` | `mcp__github__list_issues` |

206| `my.server` | `mcp__my_server__list_issues` |

207 

208`allowedTools`와 [MCP 권한 규칙](/docs/ko/permissions#mcp)에서는 전체 도구 이름을 사용합니다. [플러그인](/docs/ko/agent-sdk/plugins)이 제공하는 서버의 경우 `<server-name>`은 [플러그인 범위 형식](/docs/ko/mcp#plugin-provided-mcp-servers)을 따르며 `plugin_`으로 시작합니다.

200 209 

201<h3 id="auto-approve-with-allowedtools">210<h3 id="auto-approve-with-allowedtools">

202 allowedTools를 사용한 자동 승인211 allowedTools로 자동 승인하기

203</h3>212</h3>

204 213 

205`allowedTools`를 사용하여 특정 MCP 도구를 자동 승인하면 Claude가 권한 프롬프트 없이 도구를 사용할 수 있습니다:214`allowedTools`를 사용하면 특정 MCP 도구를 자동 승인하여 Claude가 권한 프롬프트 없이 해당 도구를 사용할 수 있습니다.

206 215 

207<CodeGroup>216<CodeGroup>

208 ```typescript TypeScript hidelines={1,-1} theme={null}217 ```typescript TypeScript hidelines={1,-1} theme={null}


237와일드카드(`*`)를 사용하면 각 도구를 개별적으로 나열하지 않고도 서버의 모든 도구를 허용할 수 있습니다.246와일드카드(`*`)를 사용하면 각 도구를 개별적으로 나열하지 않고도 서버의 모든 도구를 허용할 수 있습니다.

238 247 

239<Note>248<Note>

240 **MCP 액세스를 위해 권한 모드보다 `allowedTools`를 선호합니다.** `permissionMode: "acceptEdits"`는 MCP 도구를 자동 승인하지 않습니다(파일 편집 및 파일 시스템 Bash 명령만 해당). `permissionMode: "bypassPermissions"`는 MCP 도구를 자동 승인하지만 대부분의 다른 안전 프롬프트도 비활성화하므로 필요한 것보다 범위가 넓습니다. 남아있는 프롬프트는 [권한이 평가되는 방식](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated)을 참조하십시오. `allowedTools`의 와일드카드는 원하는 MCP 서버에만 정확히 액세스 권한을 부여하고 그 이상은 부여하지 않습니다. 전체 비교는 [권한 모드](/docs/ko/agent-sdk/permissions#permission-modes)를 참조하십시오.249 **MCP 접근에는 권한 모드보다 `allowedTools`를 사용하는 것이 좋습니다.** `permissionMode: "acceptEdits"`는 MCP 도구를 자동 승인하지 않습니다(파일 편집과 파일 시스템 Bash 명령만 자동 승인합니다). `permissionMode: "bypassPermissions"`는 MCP 도구를 자동 승인하지만 다른 대부분의 안전 프롬프트도 비활성화하므로 필요 이상으로 범위가 넓습니다. 남아 있는 프롬프트는 [권한 평가 방식](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated)을 참조하세요. `allowedTools`의 와일드카드는 원하는 MCP 서버에만 정확히 권한을 부여하며 그 이상은 허용하지 않습니다. 전체 비교는 [권한 모드](/docs/ko/agent-sdk/permissions#permission-modes)를 참조하세요.

241</Note>250</Note>

242 251 

243<h3 id="discover-available-tools">252<h3 id="discover-available-tools">

244 사용 가능한 도구 검색253 사용 가능한 도구 확인하기

245</h3>254</h3>

246 255 

247MCP 서버가 제공하는 도구를 확인하려면 서버의 설명서를 확인하거나 `system` init 메시지의 `tools` 배열을 검사합니다. MCP 도구 이름은 `mcp__`로 시작합니다.256MCP 서버가 제공하는 도구를 확인하려면 서버의 문서를 확인하거나 `system` init 메시지의 `tools` 배열을 검사합니다. MCP 도구 이름은 `mcp__`로 시작합니다.

248 257 

249Claude Code는 `options.mcpServers`에 전달된 서버에 대해 [첫 번째 턴 연결 대기](#connection-timing) 후 init 메시지를 내보내므로, `tools` 배열은 그때까지 연결된 각 서버의 `mcp__` 도구와 [캐시된 도구 목록](#connection-timing)이 있는 서버의 도구를 나열합니다. 이러한 서버는 첫 사용 시 연결됩니다. 아직 연결되지 않은 다른 서버의 도구는 없습니다. 각 서버의 상태를 읽으려면 [오류 처리](#error-handling)를 참조하십시오.258Claude Code는 `options.mcpServers`로 전달된 서버에 대해 [첫 번째 턴의 연결 대기](#connection-timing) 이후에 init 메시지를 내보냅니다. 따라서 `tools` 배열에는 그 시점까지 연결된 각 서버의 `mcp__` 도구와, 처음 사용할 때 연결되는 [캐시된 도구 목록](#connection-timing)을 가진 서버의 도구가 나열됩니다. 연결되지 않은 다른 서버의 도구는 포함되지 않습니다. 각 서버의 상태를 확인하는 방법은 [오류 처리](#error-handling)를 참조하세요.

250 259 

251이 필터는 MCP 도구 이름을 출력합니다:260다음 필터는 MCP 도구 이름을 출력합니다.

252 261 

253<CodeGroup>262<CodeGroup>

254 ```typescript TypeScript theme={null}263 ```typescript TypeScript theme={null}


289 ```298 ```

290</CodeGroup>299</CodeGroup>

291 300 

292Claude에게 서버에서 사용 가능한 도구를 나열하도록 요청할 수도 있습니다.301Claude에게 서버에서 사용 가능한 도구 목록을 요청할 수도 있습니다.

293 302 

294<h2 id="transport-types">303<h2 id="transport-types">

295 전송 유형304 전송 유형

Details

16 16 

17<Steps>17<Steps>

18 <Step title="Hooks">18 <Step title="Hooks">

19 먼저 [hooks](/docs/ko/agent-sdk/hooks)를 실행합니다. Hook은 호출을 완전히 거부하거나 통과시킬 수 있습니다. `allow`를 반환하는 Hook은 아래의 거부 및 확인 규칙을 건너뛰지 않습니다. 이러한 규칙은 Hook 결과와 관계없이 평가됩니다. `PreToolUse` Hook allow는 [중요 경로](/docs/ko/permission-modes#critical-paths)를 대상으로 하는 `rm` 또는 `rmdir` 제거를 승인할 수 없습니다.19 먼저 [hooks](/docs/ko/agent-sdk/hooks)를 실행합니다. 훅은 호출을 완전히 거부하거나 통과시킬 수 있습니다. `allow`를 반환하는 훅은 아래의 거부 및 확인 규칙을 건너뛰지 않습니다. 이러한 규칙은 훅 결과와 관계없이 평가됩니다. 또한 `allow`를 반환하는 `PreToolUse` 훅은 [중요 경로](/docs/ko/permission-modes#critical-paths)를 대상으로 하는 `rm` 또는 `rmdir` 제거를 승인할 수 없습니다. 플랜 모드에서 해당 `allow`가 어떻게 작동하는지는 [플랜 모드의 훅 승인](/docs/ko/permissions#hook-approvals-in-plan-mode)을 참조하세요.

20 </Step>20 </Step>

21 21 

22 <Step title="거부 규칙">22 <Step title="거부 규칙">


161 161 

162<Tabs>162<Tabs>

163 <Tab title="쿼리 시간에">163 <Tab title="쿼리 시간에">

164 쿼리를 생성할 때 `permission_mode`(Python) 또는 `permissionMode`(TypeScript)를 전달합니다. 이 모드는 동적으로 변경되지 않는 한 전체 세션에 적용됩니다.164 쿼리를 생성할 때 `permission_mode`(Python) 또는 `permissionMode`(TypeScript)를 전달합니다.

165 165 

166 <CodeGroup>166 <CodeGroup>

167 ```python Python theme={null}167 ```python Python theme={null}


314 314 

315Claude는 소스 파일을 편집하지 않고 코드베이스를 탐색하고 계획을 생성합니다. 읽기 전용 도구는 `default` 권한 모드에서와 같이 실행됩니다.315Claude는 소스 파일을 편집하지 않고 코드베이스를 탐색하고 계획을 생성합니다. 읽기 전용 도구는 `default` 권한 모드에서와 같이 실행됩니다.

316 316 

317파일 편집은 허용 규칙이 일치하더라도 계획 모드에서 자동 승인되지 않습니다. 대신 `canUseTool` 콜백을 통해 프롬프트됩니다. Claude Code v2.1.212 이상에서는 `touch` 및 `rm`과 같이 파일을 수정하는 셸 명령도 동일한 방식으로 `canUseTool` 콜백에 도달합니다.317파일 편집은 허용 규칙이 일치하거나 `PreToolUse` 훅이 `allow`를 반환하더라도 플랜 모드에서 자동 승인되지 않습니다. 대신 `canUseTool` 콜백을 통해 프롬프트됩니다. Claude Code v2.1.212 이상에서는 `touch` 및 `rm`과 같이 파일을 수정하는 셸 명령도 동일한 방식으로 `canUseTool` 콜백에 도달합니다.

318 318 

319TypeScript SDK에서 `allowDangerouslySkipPermissions: true`를 `permissionMode: 'plan'`과 함께 설정하면 파일 편집 및 파일을 수정하는 셸 명령은 여전히 `canUseTool` 콜백에 도달합니다. 이 옵션을 사용하면 나중에 `setPermissionMode()`로 `bypassPermissions`로 전환할 수 있습니다.319TypeScript SDK에서 `allowDangerouslySkipPermissions: true`를 `permissionMode: 'plan'`과 함께 설정하면 파일 편집 및 파일을 수정하는 셸 명령은 여전히 `canUseTool` 콜백에 도달합니다. 이 옵션을 사용하면 나중에 `setPermissionMode()`로 `bypassPermissions`로 전환할 수 있습니다.

320 320 


322 322 

323**사용 시기:** Claude가 변경 사항을 실행하지 않고 제안하기를 원할 때(예: 코드 검토 중이거나 변경 사항이 적용되기 전에 승인해야 할 때).323**사용 시기:** Claude가 변경 사항을 실행하지 않고 제안하기를 원할 때(예: 코드 검토 중이거나 변경 사항이 적용되기 전에 승인해야 할 때).

324 324 

325<h4 id="auto-mode-auto">

326 자동 모드(`auto`)

327</h4>

328 

329분류기 모델이 셸 명령 및 네트워크 요청과 같은 작업을 실행 전에 검토하고, 검토하는 각 작업을 허용하거나 차단합니다. 자동 모드에 필요한 모델 및 제공자와 작업을 평가하는 순서는 [자동 모드로 권한 프롬프트 제거](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)를 참조하세요.

330 

331[`set_model()`](/docs/ko/agent-sdk/python#claudesdkclient), [`setModel()`](/docs/ko/agent-sdk/typescript#query-object) 또는 [`applyFlagSettings()`](/docs/ko/agent-sdk/typescript#applyflagsettings)를 사용하여 자동 모드에 있는 세션을 자동 모드가 지원하지 않는 모델로 전환하면 세션이 `default` 모드로 변경됩니다.

332 

333* **표시되는 내용**: 하위 유형이 `status`이고 `permissionMode`가 `"default"`로 설정된 `system` 메시지이며, TypeScript SDK에서는 이를 [`SDKStatusMessage`](/docs/ko/agent-sdk/typescript#sdkstatusmessage)로 타입 지정합니다. 그 이후로는 승인이 필요하고 허용 규칙과 일치하지 않는 호출이 `canUseTool` 콜백에 도달합니다.

334* **자동 모드로 돌아가려면**: 지원되는 모델로 전환한 다음 `set_permission_mode("auto")` 또는 `setPermissionMode("auto")`를 호출합니다. 해당 호출 없이 모델만 다시 전환하면 세션은 `default` 모드로 유지됩니다. 지원되지 않는 모델이 활성 상태인 동안에는 `Cannot set permission mode to auto: auto mode unavailable for this model` 오류와 함께 호출이 실패합니다.

335 

336`set_model()`, `setModel()` 또는 `applyFlagSettings()` 호출 후 `default` 모드로 변경되는 동작은 Claude Code v2.1.299 이상이 필요합니다.

337 

325<h2 id="related-resources">338<h2 id="related-resources">

326 관련 리소스339 관련 리소스

327</h2>340</h2>

Details

575 `ClaudeSDKClient`575 `ClaudeSDKClient`

576</h3>576</h3>

577 577 

578**여러 교환에 걸쳐 대화 세션을 유지합니다.** 이것은 TypeScript SDK의 `query()` 함수가 내부적으로 작동하는 방식의 Python 동등물입니다 - 대화를 계속할 수 있는 클라이언트 객체를 생성합니다. [`query()`와 `ClaudeSDKClient` 간의 선택](#choosing-between-query-and-claudesdkclient)을 참조하십시오.578**여러 교환에 걸쳐 대화 세션을 유지합니다.** 이것은 TypeScript SDK의 `query()` 함수가 내부적으로 작동하는 방식의 Python 동등물입니다 - 대화를 계속할 수 있는 클라이언트 객체를 생성합니다. [`query()`와의 비교](#choosing-between-query-and-claudesdkclient)를 참조하십시오.

579 579 

580```python theme={null}580```python theme={null}

581class ClaudeSDKClient:581class ClaudeSDKClient:


610| `receive_response()` | ResultMessage를 포함하여 메시지 수신 |610| `receive_response()` | ResultMessage를 포함하여 메시지 수신 |

611| `interrupt()` | 중단 신호 전송 (스트리밍 모드에서만 작동) |611| `interrupt()` | 중단 신호 전송 (스트리밍 모드에서만 작동) |

612| `set_permission_mode(mode)` | 현재 세션의 권한 모드 변경 |612| `set_permission_mode(mode)` | 현재 세션의 권한 모드 변경 |

613| `set_model(model)` | 현재 세션의 모델 변경. [Claude Code의 기본 모델](/docs/ko/model-config)로 재설정하려면 `None` 전달 |613| `set_model(model)` | 현재 세션의 모델 변경. [Claude Code의 기본 모델](/docs/ko/model-config)로 재설정하려면 `None` 전달. 새 모델이 자동 모드를 지원하지 않으면 `auto` 모드의 세션은 [`default` 모드로 변경됩니다](/docs/ko/agent-sdk/permissions#auto-mode-auto) |

614| `rewind_files(user_message_id)` | 지정된 사용자 메시지의 상태로 파일 복원. `enable_file_checkpointing=True` 필요. [파일 체크포인팅](/docs/ko/agent-sdk/file-checkpointing) 참조 |614| `rewind_files(user_message_id)` | 지정된 사용자 메시지의 상태로 파일 복원. `enable_file_checkpointing=True` 필요. [파일 체크포인팅](/docs/ko/agent-sdk/file-checkpointing) 참조 |

615| `get_mcp_status()` | 구성된 모든 MCP 서버의 상태 가져오기. [`McpStatusResponse`](#mcpstatusresponse) 반환 |615| `get_mcp_status()` | 구성된 모든 MCP 서버의 상태 가져오기. [`McpStatusResponse`](#mcpstatusresponse) 반환 |

616| `get_context_usage()` | 카테고리, 스킬 및 도구별 컨텍스트 윈도우 사용량의 분석 가져오기. 대화형 세션에서 `/context`가 표시하는 것과 동일한 데이터입니다. [`ContextUsageResponse`](#contextusageresponse)를 반환합니다. 분석을 계산하기 위해 Claude Code는 메시지 스트림에 나타나지 않는 여러 토큰 계산 API 요청을 수행합니다. [이러한 요청이 어떻게 처리되는지](#contextusageresponse) 참조 |616| `get_context_usage()` | 카테고리, 스킬 및 도구별 컨텍스트 윈도우 사용량의 분석 가져오기. 대화형 세션에서 `/context`가 표시하는 것과 동일한 데이터입니다. [`ContextUsageResponse`](#contextusageresponse)를 반환합니다. 분석을 계산하기 위해 Claude Code는 메시지 스트림에 나타나지 않는 여러 토큰 계산 API 요청을 수행합니다. [이러한 요청이 어떻게 처리되는지](#contextusageresponse) 참조 |


3884 대신 중지하려면 샌드박스 설정에서 `"failIfUnavailable": True`를 설정하십시오. SDK는 선언된 `SandboxSettings` 필드와 함께 `failIfUnavailable`을 Claude Code로 전달합니다. 그러면 `query()`는 `subtype="error_during_execution"`과 `errors`의 이유를 포함한 `ResultMessage`를 보고합니다. 이것이 단일 샷 `query()` 호출이므로, SDK는 해당 오류 결과를 생성한 후 발생시키므로, 루프를 try 블록으로 감싸서 이를 지나 계속 진행하십시오. [결과 처리](/docs/ko/agent-sdk/agent-loop#handle-the-result)에서 오류 계약을 참조하십시오.3884 대신 중지하려면 샌드박스 설정에서 `"failIfUnavailable": True`를 설정하십시오. SDK는 선언된 `SandboxSettings` 필드와 함께 `failIfUnavailable`을 Claude Code로 전달합니다. 그러면 `query()`는 `subtype="error_during_execution"`과 `errors`의 이유를 포함한 `ResultMessage`를 보고합니다. 이것이 단일 샷 `query()` 호출이므로, SDK는 해당 오류 결과를 생성한 후 발생시키므로, 루프를 try 블록으로 감싸서 이를 지나 계속 진행하십시오. [결과 처리](/docs/ko/agent-sdk/agent-loop#handle-the-result)에서 오류 계약을 참조하십시오.

3885</Note>3885</Note>

3886 3886 

3887샌드박스된 명령이 파일에 쓰지 못하도록 하려면, 샌드박스 설정의 [`denyWrite`](/docs/ko/settings-reference#sandbox-filesystem-denywrite) 아래에 해당 파일의 절대 경로를 나열하십시오(예: `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`). SDK는 선언된 `SandboxSettings` 필드와 함께 `filesystem`을 Claude Code로 전달합니다. 샌드박스가 시작되면 나열된 각 경로에 대한 쓰기를 차단합니다. `.env` 또는 `./.env`를 나열하면, 샌드박스된 명령은 세션의 작업 디렉터리에 있는 `.env` 파일에 쓸 수 있습니다.3887샌드박스된 명령이 파일에 쓰지 못하도록 하려면, 샌드박스 설정의 [`denyWrite`](/docs/ko/settings-reference#sandbox-filesystem-denywrite) 아래에 해당 파일의 절대 경로를 나열하십시오(예: `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`). SDK는 선언된 `SandboxSettings` 필드와 함께 `filesystem`을 Claude Code로 전달합니다. 샌드박스가 시작되면 나열된 각 절대 경로에 대한 쓰기를 차단합니다.

3888 3888 

3889<h4 id="example-usage">3889<h4 id="example-usage">

3890 사용 예제3890 사용 예제

Details

736| `interrupt()` | 쿼리를 중단합니다. 스트리밍 입력 모드에서만 사용할 수 있습니다. CLI가 [`SDKSystemMessage.capabilities`](#sdksystemmessage)에서 `interrupt_receipt_v1` 기능을 알리는 경우, 중단 시점에 대기 중이던 메시지를 나열하는 [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse)로 resolve됩니다. v2.1.205 이전 CLI에서는 `undefined`로 resolve됩니다 |736| `interrupt()` | 쿼리를 중단합니다. 스트리밍 입력 모드에서만 사용할 수 있습니다. CLI가 [`SDKSystemMessage.capabilities`](#sdksystemmessage)에서 `interrupt_receipt_v1` 기능을 알리는 경우, 중단 시점에 대기 중이던 메시지를 나열하는 [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse)로 resolve됩니다. v2.1.205 이전 CLI에서는 `undefined`로 resolve됩니다 |

737| `rewindFiles(userMessageId, options?)` | 지정된 사용자 메시지 시점의 상태로 파일을 복원합니다. 변경 사항을 미리 보려면 `{ dryRun: true }`를 전달하세요. `enableFileCheckpointing: true`가 필요합니다. [파일 체크포인트](/docs/ko/agent-sdk/file-checkpointing)를 참조하세요 |737| `rewindFiles(userMessageId, options?)` | 지정된 사용자 메시지 시점의 상태로 파일을 복원합니다. 변경 사항을 미리 보려면 `{ dryRun: true }`를 전달하세요. `enableFileCheckpointing: true`가 필요합니다. [파일 체크포인트](/docs/ko/agent-sdk/file-checkpointing)를 참조하세요 |

738| `setPermissionMode()` | 권한 모드를 변경합니다(스트리밍 입력 모드에서만 사용 가능) |738| `setPermissionMode()` | 권한 모드를 변경합니다(스트리밍 입력 모드에서만 사용 가능) |

739| `setModel()` | 모델을 변경합니다(스트리밍 입력 모드에서만 사용 가능). `undefined` 또는 문자열 `"default"`를 전달하면 [Claude Code의 기본 모델](/docs/ko/model-config)로 재설정됩니다 |739| `setModel()` | 모델을 변경합니다(스트리밍 입력 모드에서만 사용 가능). `undefined` 또는 문자열 `"default"`를 전달하면 [Claude Code의 기본 모델](/docs/ko/model-config)로 초기화됩니다. 새 모델이 자동 모드를 지원하지 않으면 `auto` 모드의 세션은 [`default` 모드로 변경](/docs/ko/agent-sdk/permissions#auto-mode-auto)됩니다 |

740| `setMaxThinkingTokens()` | *지원 중단:* 대신 `thinking` 옵션을 사용하세요. 최대 사고 토큰 수를 변경합니다. `null`을 전달하면 사고가 세션 기본값으로 재설정됩니다. 세션 중 재정의는 지워지며, 사고가 비활성화된 세션에서는 계속 꺼진 상태로 유지됩니다 |740| `setMaxThinkingTokens()` | *지원 중단:* 대신 `thinking` 옵션을 사용하세요. 최대 사고 토큰 수를 변경합니다. `null`을 전달하면 사고가 세션 기본값으로 재설정됩니다. 세션 중 재정의는 지워지며, 사고가 비활성화된 세션에서는 계속 꺼진 상태로 유지됩니다 |

741| `applyFlagSettings(settings)` | 런타임에 세션의 플래그 설정 계층에 설정을 병합합니다(스트리밍 입력 모드에서만 사용 가능). [`applyFlagSettings()`](#applyflagsettings)를 참조하세요 |741| `applyFlagSettings(settings)` | 런타임에 세션의 플래그 설정 계층에 설정을 병합합니다(스트리밍 입력 모드에서만 사용 가능). [`applyFlagSettings()`](#applyflagsettings)를 참조하세요 |

742| `updateSettings(source, settings)` | 허용 목록에 있는 키 하나를 프로젝트의 로컬 설정 파일 또는 사용자 설정 파일에 기록하여, 이후 세션에서도 값이 유지되도록 합니다. [`updateSettings()`](#updatesettings)를 참조하세요. Claude Code v2.1.257이 번들된 TypeScript SDK v0.3.257 이상이 필요합니다 |742| `updateSettings(source, settings)` | 허용 목록에 있는 키 하나를 프로젝트의 로컬 설정 파일 또는 사용자 설정 파일에 기록하여, 이후 세션에서도 값이 유지되도록 합니다. [`updateSettings()`](#updatesettings)를 참조하세요. Claude Code v2.1.257이 번들된 TypeScript SDK v0.3.257 이상이 필요합니다 |


6366| 속성 | 타입 | 기본값 | 설명 |6366| 속성 | 타입 | 기본값 | 설명 |

6367| :- | :- | :- | :- |6367| :- | :- | :- | :- |

6368| `allowWrite` | `string[]` | `[]` | 쓰기 액세스를 허용할 파일 경로 패턴 |6368| `allowWrite` | `string[]` | `[]` | 쓰기 액세스를 허용할 파일 경로 패턴 |

6369| `denyWrite` | `string[]` | `[]` | 쓰기 액세스를 거부할 파일 경로 패턴입니다. 세션의 작업 디렉터리에 있는 파일에 대한 샌드박스된 쓰기를 차단하려면 해당 파일의 절대 경로를 나열합니다. `.env` 또는 `./.env`를 나열하면 샌드박스된 명령이 세션의 작업 디렉터리에 있는 `.env` 파일에 쓸 수 있습니다 |6369| `denyWrite` | `string[]` | `[]` | 쓰기 액세스를 거부할 파일 경로 패턴입니다. 세션의 작업 디렉터리에 있는 파일에 대한 샌드박스된 쓰기를 차단하려면 해당 파일의 절대 경로를 나열합니다. |

6370| `denyRead` | `string[]` | `[]` | 읽기 액세스를 거부할 파일 경로 패턴 |6370| `denyRead` | `string[]` | `[]` | 읽기 액세스를 거부할 파일 경로 패턴 |

6371 6371 

6372<h3 id="permissions-fallback-for-unsandboxed-commands">6372<h3 id="permissions-fallback-for-unsandboxed-commands">

agent-view.md +2 −2

Details

738[권한 모드](/docs/ko/permissions)는 세션을 시작한 방식에 따라 다릅니다:738[권한 모드](/docs/ko/permissions)는 세션을 시작한 방식에 따라 다릅니다:

739 739 

740* **`/bg` 또는 `←`로 백그라운드로 보낸 경우**: Claude Code는 세션의 기존 권한 모드를 유지하므로, `acceptEdits`나 `auto`로 전환한 세션은 분리 후에도 그 모드를 유지합니다740* **`/bg` 또는 `←`로 백그라운드로 보낸 경우**: Claude Code는 세션의 기존 권한 모드를 유지하므로, `acceptEdits`나 `auto`로 전환한 세션은 분리 후에도 그 모드를 유지합니다

741* **`←`로 연 에이전트 뷰에서 디스패치한 경우**: 대상 자체의 구성이 먼저 적용되고, 다른 설정이 없을 때 원래 세션의 권한 모드가 적용됩니다741* **`←`로 연 에이전트 뷰에서 디스패치한 경우**: Claude Code는 새 세션의 권한 모드를 먼저 대상 디렉터리의 구성에서 가져오고, 그다음 원래 세션에서 가져옵니다

742* **셸에서 시작한 `claude agents` 또는 `claude --bg`로 디스패치한 경우**: [디스패치 기본값](#dispatch-defaults)과 함께 연 에이전트 뷰에서 디스패치한 경우가 아니면, 새 세션은 해당 디렉터리에서 새 `claude` 세션이 시작되는 방식대로 시작됩니다. [세션이 시작되는 권한 모드](/docs/ko/permission-modes#which-mode-a-session-starts-in)에 순서가 나와 있습니다742* **셸에서 시작한 `claude agents` 또는 `claude --bg`로 디스패치한 경우**: [디스패치 기본값](#dispatch-defaults)과 함께 연 에이전트 뷰에서 디스패치한 경우가 아니면, 새 세션은 해당 디렉터리에서 새 `claude` 세션이 시작되는 방식대로 시작됩니다. [세션이 시작되는 권한 모드](/docs/ko/permission-modes#which-mode-a-session-starts-in)에 순서가 나와 있습니다

743 743 

744`←`로 연 에이전트 뷰에서 디스패치한 세션의 경우, Claude Code는 다음 중 처음으로 적용되는 항목에서 권한 모드를 가져옵니다:744`←`로 연 에이전트 뷰에서 디스패치한 세션의 경우, Claude Code는 다음 중 처음으로 적용되는 항목에서 권한 모드를 가져옵니다:


7461. 대상 디렉터리의 [`permissions.defaultMode`](/docs/ko/settings-reference#permissions-defaultmode). 출처에 관한 두 가지 규칙이 적용됩니다:7461. 대상 디렉터리의 [`permissions.defaultMode`](/docs/ko/settings-reference#permissions-defaultmode). 출처에 관한 두 가지 규칙이 적용됩니다:

747 * `auto`와 `bypassPermissions`는 [관리형 설정, `--settings` 파일, 또는 `~/.claude/settings.json`에서만 적용됩니다](/docs/ko/settings-reference#permissions-defaultmode).747 * `auto`와 `bypassPermissions`는 [관리형 설정, `--settings` 파일, 또는 `~/.claude/settings.json`에서만 적용됩니다](/docs/ko/settings-reference#permissions-defaultmode).

748 * Claude Code는 프로젝트의 `.claude/settings.json` 또는 `.claude/settings.local.json`에 있는 `defaultMode`가 원래 세션의 모드보다 더 허용적인 모드를 선택하면 이를 거부합니다.748 * Claude Code는 프로젝트의 `.claude/settings.json` 또는 `.claude/settings.local.json`에 있는 `defaultMode`가 원래 세션의 모드보다 더 허용적인 모드를 선택하면 이를 거부합니다.

7492. 원래 세션의 권한 모드7492. 원래 세션의 권한 모드. 해당 세션이 `bypassPermissions` 모드였다면, 새 세션은 대신 `Bypass permissions was requested at launch and ignored` 알림과 함께 Manual 모드로 시작될 수 있습니다. 이는 우회 면책 조항에 대한 사용자의 수락이 `.claude/settings.local.json` 또는 `--settings` 파일에만 있을 때 발생합니다. Manual 모드로 계속하거나, [해당 수락을 `~/.claude/settings.json`에 추가](/docs/ko/permission-modes#bypass-permissions-acceptance)합니다.

750 750 

751Claude Code가 어떤 출처의 모드를 지나치게 허용적이라는 이유로 거부하면, 목록의 다음 출처가 결정합니다. 예를 들어 플랜 모드 세션에서 체크인된 설정이 `acceptEdits`를 요청하는 디렉터리로 디스패치하면, 새 세션은 플랜 모드로 시작합니다. 해당 `defaultMode`를 `~/.claude/settings.json`으로 옮기면 원래 세션의 권한 모드와 관계없이 적용됩니다.751Claude Code가 어떤 출처의 모드를 지나치게 허용적이라는 이유로 거부하면, 목록의 다음 출처가 결정합니다. 예를 들어 플랜 모드 세션에서 체크인된 설정이 `acceptEdits`를 요청하는 디렉터리로 디스패치하면, 새 세션은 플랜 모드로 시작합니다. 해당 `defaultMode`를 `~/.claude/settings.json`으로 옮기면 원래 세션의 권한 모드와 관계없이 적용됩니다.

752 752 

Details

84| `--continue`, `-c` | 현재 디렉터리에서 가장 최근 대화를 로드합니다. [완료된 백그라운드 세션](/docs/ko/sessions#where-the-session-picker-looks)을 포함합니다. 완료된 백그라운드 세션을 열려면 Claude Code v2.1.257 이상이 필요합니다. `claude -p` 또는 Agent SDK로 생성된 세션과 첫 번째 프롬프트가 `/loop`인 세션을 건너뜁니다. `claude -p --continue`는 `-p`, SDK 및 `/loop` 세션을 포함합니다. 이 디렉터리를 `/add-dir`로 추가한 세션을 포함합니다 | `claude --continue` |84| `--continue`, `-c` | 현재 디렉터리에서 가장 최근 대화를 로드합니다. [완료된 백그라운드 세션](/docs/ko/sessions#where-the-session-picker-looks)을 포함합니다. 완료된 백그라운드 세션을 열려면 Claude Code v2.1.257 이상이 필요합니다. `claude -p` 또는 Agent SDK로 생성된 세션과 첫 번째 프롬프트가 `/loop`인 세션을 건너뜁니다. `claude -p --continue`는 `-p`, SDK 및 `/loop` 세션을 포함합니다. 이 디렉터리를 `/add-dir`로 추가한 세션을 포함합니다 | `claude --continue` |

85| `--dangerously-load-development-channels` | 로컬 개발을 위해 승인된 허용 목록에 없는 [채널](/docs/ko/channels-reference#test-during-the-research-preview)을 활성화합니다. `plugin:<name>@<marketplace>` 및 `server:<name>` 항목을 허용합니다. 확인을 요청하므로 대화형 세션에서 적용됩니다. `-p`를 사용하면 Claude Code는 이 플래그를 무시합니다 | `claude --dangerously-load-development-channels server:webhook` |85| `--dangerously-load-development-channels` | 로컬 개발을 위해 승인된 허용 목록에 없는 [채널](/docs/ko/channels-reference#test-during-the-research-preview)을 활성화합니다. `plugin:<name>@<marketplace>` 및 `server:<name>` 항목을 허용합니다. 확인을 요청하므로 대화형 세션에서 적용됩니다. `-p`를 사용하면 Claude Code는 이 플래그를 무시합니다 | `claude --dangerously-load-development-channels server:webhook` |

86| `--dangerously-skip-permissions` | 권한 프롬프트를 건너뜁니다. `--permission-mode bypassPermissions`과 동등합니다. 이것이 건너뛰는 것과 건너뛰지 않는 것에 대해 [권한 모드](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)를 참조하세요. `--bg`로 시작된 세션의 경우, 모드는 [감독자가 세션을 다시 시작할 때 유지됩니다](/docs/ko/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |86| `--dangerously-skip-permissions` | 권한 프롬프트를 건너뜁니다. `--permission-mode bypassPermissions`과 동등합니다. 이것이 건너뛰는 것과 건너뛰지 않는 것에 대해 [권한 모드](/docs/ko/permission-modes#skip-all-checks-with-bypasspermissions-mode)를 참조하세요. `--bg`로 시작된 세션의 경우, 모드는 [감독자가 세션을 다시 시작할 때 유지됩니다](/docs/ko/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |

87| `--debug` | `--debug='mcp,startup'` 또는 `--debug='!1p'`와 같은 선택적 카테고리 필터링으로 디버그 모드를 활성화합니다. 필터는 `=` 형식에서만 바인딩됩니다. 공백으로 구분된 필터는 필터링 없이 디버그 모드를 활성화합니다 | `claude --debug='mcp,startup'` |87| `--debug` | `--debug='mcp,startup'` 또는 `--debug='!mcp'`와 같은 선택적 카테고리 필터링으로 디버그 모드를 활성화합니다. 필터는 `=` 형식에서만 바인딩됩니다. 공백으로 구분된 필터는 필터링 없이 디버그 모드를 활성화합니다 | `claude --debug='mcp,startup'` |

88| `--debug-file <path>` | 특정 파일 경로에 디버그 로그를 작성합니다. 암묵적으로 디버그 모드를 활성화합니다. `CLAUDE_CODE_DEBUG_LOGS_DIR`보다 우선합니다 | `claude --debug-file /tmp/claude-debug.log` |88| `--debug-file <path>` | 특정 파일 경로에 디버그 로그를 작성합니다. 암묵적으로 디버그 모드를 활성화합니다. `CLAUDE_CODE_DEBUG_LOGS_DIR`보다 우선합니다 | `claude --debug-file /tmp/claude-debug.log` |

89| `--desktop` | [Claude Desktop 앱](/docs/ko/desktop)을 현재 디렉터리에서 열고 터미널에서 세션을 시작하지 않고 종료합니다. `--continue` 또는 `--resume`을 세션 ID와 함께 추가하여 [대신 Desktop에서 해당 세션을 열 수 있습니다](/docs/ko/desktop#coming-from-the-cli). 여기서 `--resume`은 세션 ID만 사용하며 이름이나 트랜스크립트 경로는 사용하지 않습니다. 프롬프트와 `--verbose` 및 `--debug` 플래그를 제외한 다른 플래그를 사용하지 않습니다. 앱이 세션을 시작하기 때문입니다. Claude 구독으로 로그인했을 때 macOS 및 x64 Windows에서 사용 가능합니다. Claude Code v2.1.285 이상이 필요합니다 | `claude --desktop` |89| `--desktop` | [Claude Desktop 앱](/docs/ko/desktop)을 현재 디렉터리에서 열고 터미널에서 세션을 시작하지 않고 종료합니다. `--continue` 또는 `--resume`을 세션 ID와 함께 추가하여 [대신 Desktop에서 해당 세션을 열 수 있습니다](/docs/ko/desktop#coming-from-the-cli). 여기서 `--resume`은 세션 ID만 사용하며 이름이나 트랜스크립트 경로는 사용하지 않습니다. 프롬프트와 `--verbose` 및 `--debug` 플래그를 제외한 다른 플래그를 사용하지 않습니다. 앱이 세션을 시작하기 때문입니다. Claude 구독으로 로그인했을 때 macOS 및 x64 Windows에서 사용 가능합니다. Claude Code v2.1.285 이상이 필요합니다 | `claude --desktop` |

90| `--disable-slash-commands` | 이 세션에 대해 모든 스킬 및 명령을 비활성화합니다 | `claude --disable-slash-commands` |90| `--disable-slash-commands` | 이 세션에 대해 모든 스킬 및 명령을 비활성화합니다 | `claude --disable-slash-commands` |

costs.md +1 −1

Details

429몇 시간 동안 열려 있던 세션은 활동 수준보다 훨씬 더 많은 플랜 한도를 사용할 수 있으며, 일반적으로 다음 중 하나의 이유 때문입니다:429몇 시간 동안 열려 있던 세션은 활동 수준보다 훨씬 더 많은 플랜 한도를 사용할 수 있으며, 일반적으로 다음 중 하나의 이유 때문입니다:

430 430 

431* **긴 컨텍스트**: Claude Code는 모든 요청과 함께 전체 대화를 전송하며, Claude가 도구를 사용할 때마다 해당 도구 결과 배치를 포함하는 또 다른 요청을 전송합니다. [프롬프트 캐싱](/docs/ko/prompt-caching)을 사용하면 Claude Code는 해당 기록을 [캐시된 토큰 요금](https://platform.claude.com/docs/en/about-claude/pricing)으로 다시 읽으므로, 하루 종일 열려 있던 세션의 한 줄 질문도 전체 대화에 대한 사용량을 소비합니다. 컨텍스트를 작게 유지하는 방법은 [컨텍스트 사전에 관리하기](#manage-context-proactively)를 참조하세요431* **긴 컨텍스트**: Claude Code는 모든 요청과 함께 전체 대화를 전송하며, Claude가 도구를 사용할 때마다 해당 도구 결과 배치를 포함하는 또 다른 요청을 전송합니다. [프롬프트 캐싱](/docs/ko/prompt-caching)을 사용하면 Claude Code는 해당 기록을 [캐시된 토큰 요금](https://platform.claude.com/docs/en/about-claude/pricing)으로 다시 읽으므로, 하루 종일 열려 있던 세션의 한 줄 질문도 전체 대화에 대한 사용량을 소비합니다. 컨텍스트를 작게 유지하는 방법은 [컨텍스트 사전에 관리하기](#manage-context-proactively)를 참조하세요

432* **캐시 미스**: [캐시 수명](/docs/ko/prompt-caching#cache-lifetime)보다 긴 휴식 후의 첫 번째 메시지는 캐시를 놓치고 전체 컨텍스트를 다시 처리합니다. 수명은 구독 시 1시간이며 [사용 크레딧](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans)을 사용하기 시작하면 5분으로 단축됩니다. API 키 또는 클라우드 제공자의 경우 기본값은 5분입니다. 사용 크레딧을 사용하면서 1시간 수명을 유지하려면 [TTL을 직접 선택](/docs/ko/prompt-caching#choose-the-ttl-yourself)하세요. Pro 및 Max 플랜에서 긴 휴식 후 큰 세션을 재개할 때 Claude Code는 [요약에서 재개할 것을 제안](/docs/ko/sessions#resume-from-a-summary)하므로 이후 요청이 전체 기록을 포함하지 않습니다432* **캐시 미스**: [캐시 수명](/docs/ko/prompt-caching#cache-lifetime)보다 긴 휴식 후의 첫 번째 메시지는 캐시를 놓치고 전체 컨텍스트를 다시 처리합니다. 수명은 구독 시 1시간이며 [사용량 크레딧](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans)을 사용하기 시작하면 5분으로 단축됩니다. API 키 또는 클라우드 제공자의 경우 기본값은 5분입니다. 사용량 크레딧을 사용하면서 1시간 수명을 유지하려면 [TTL을 직접 선택](/docs/ko/prompt-caching#choose-the-ttl-yourself)하세요

433* **예약된 작업**: [예약된 작업](/docs/ko/scheduled-tasks)은 세션이 유휴 상태일 때도 해당 간격으로 실행되며, 매번 전체 컨텍스트를 전송합니다433* **예약된 작업**: [예약된 작업](/docs/ko/scheduled-tasks)은 세션이 유휴 상태일 때도 해당 간격으로 실행되며, 매번 전체 컨텍스트를 전송합니다

434* **세션 간 메시지**: Claude Code는 이 세션이 유휴 상태일 때 [다른 세션의 메시지](/docs/ko/cross-session-messaging)를 새로운 턴으로 전달하며, 매번 전체 컨텍스트를 전송합니다. 인바운드 메시지를 전달하지 않고 보류하려면 [`crossSessionInbound`](/docs/ko/settings-reference#crosssessioninbound)를 `hold`로 설정하세요434* **세션 간 메시지**: Claude Code는 이 세션이 유휴 상태일 때 [다른 세션의 메시지](/docs/ko/cross-session-messaging)를 새로운 턴으로 전달하며, 매번 전체 컨텍스트를 전송합니다. 인바운드 메시지를 전달하지 않고 보류하려면 [`crossSessionInbound`](/docs/ko/settings-reference#crosssessioninbound)를 `hold`로 설정하세요

435* **목표 체크인**: 백그라운드 작업이 활성 [목표](/docs/ko/goal)를 대기 상태로 유지하는 동안 Claude Code는 세션이 유휴 상태일 때도 [해당 작업을 확인하도록 Claude에 요청](/docs/ko/goal#background-work-defers-evaluation)하며, 전체 컨텍스트를 전송하는 새로운 턴을 시작합니다. Claude Code는 프롬프트 사이에 목표당 최대 3개의 유휴 체크인을 시작합니다. v2.1.246 이전에는 유휴 체크인이 무제한이었습니다. 체크인을 끄려면 [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/ko/env-vars)를 `0`으로 설정하세요. 유휴 체크인에는 Claude Code v2.1.236 이상이 필요합니다435* **목표 체크인**: 백그라운드 작업이 활성 [목표](/docs/ko/goal)를 대기 상태로 유지하는 동안 Claude Code는 세션이 유휴 상태일 때도 [해당 작업을 확인하도록 Claude에 요청](/docs/ko/goal#background-work-defers-evaluation)하며, 전체 컨텍스트를 전송하는 새로운 턴을 시작합니다. Claude Code는 프롬프트 사이에 목표당 최대 3개의 유휴 체크인을 시작합니다. v2.1.246 이전에는 유휴 체크인이 무제한이었습니다. 체크인을 끄려면 [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/ko/env-vars)를 `0`으로 설정하세요. 유휴 체크인에는 Claude Code v2.1.236 이상이 필요합니다

env-vars.md +1 −1

Details

196| `ANTHROPIC_VERTEX_PROJECT_ID` | Google Cloud's Agent Platform 요청이 전송되는 GCP 프로젝트 ID입니다. [GCP 자격 증명 구성](/docs/ko/google-vertex-ai#3-configure-gcp-credentials)을 참조하세요 |196| `ANTHROPIC_VERTEX_PROJECT_ID` | Google Cloud's Agent Platform 요청이 전송되는 GCP 프로젝트 ID입니다. [GCP 자격 증명 구성](/docs/ko/google-vertex-ai#3-configure-gcp-credentials)을 참조하세요 |

197| `ANTHROPIC_WORKSPACE_ID` | [워크로드 아이덴티티 페더레이션](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation)용 워크스페이스 ID입니다. 페더레이션 규칙의 범위가 둘 이상의 워크스페이스로 지정된 경우, 토큰 교환이 대상 워크스페이스를 알 수 있도록 이 값을 설정합니다 |197| `ANTHROPIC_WORKSPACE_ID` | [워크로드 아이덴티티 페더레이션](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation)용 워크스페이스 ID입니다. 페더레이션 규칙의 범위가 둘 이상의 워크스페이스로 지정된 경우, 토큰 교환이 대상 워크스페이스를 알 수 있도록 이 값을 설정합니다 |

198| `API_FORCE_IDLE_TIMEOUT` | 바이트가 도착하지 않을 때 스트리밍 모델 응답을 중단하는 5분 본문 유휴 타임아웃을 재정의합니다. 느린 [게이트웨이](/docs/ko/llm-gateway)나 로컬 모델이 청크 사이에 5분 넘게 멈추는 경우처럼 타임아웃을 끄려면 `0`으로, 모든 제공자에서 켜 두려면 `1`로 설정합니다. 설정하지 않으면 직접 연결한 Anthropic API, [Claude Platform on AWS](/docs/ko/claude-platform-on-aws), 그리고 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`이 설정된 Amazon Bedrock 이외의 제공자에서 타임아웃이 활성화됩니다. [스트림 워치독](/docs/ko/network-config#streaming-idle-watchdogs)은 이와 독립적으로 실행되며, 여기서 `0`으로 설정하더라도 오랫동안 아무 응답이 없는 일시 중지를 중단합니다 |198| `API_FORCE_IDLE_TIMEOUT` | 바이트가 도착하지 않을 때 스트리밍 모델 응답을 중단하는 5분 본문 유휴 타임아웃을 재정의합니다. 느린 [게이트웨이](/docs/ko/llm-gateway)나 로컬 모델이 청크 사이에 5분 넘게 멈추는 경우처럼 타임아웃을 끄려면 `0`으로, 모든 제공자에서 켜 두려면 `1`로 설정합니다. 설정하지 않으면 직접 연결한 Anthropic API, [Claude Platform on AWS](/docs/ko/claude-platform-on-aws), 그리고 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`이 설정된 Amazon Bedrock 이외의 제공자에서 타임아웃이 활성화됩니다. [스트림 워치독](/docs/ko/network-config#streaming-idle-watchdogs)은 이와 독립적으로 실행되며, 여기서 `0`으로 설정하더라도 오랫동안 아무 응답이 없는 일시 중지를 중단합니다 |

199| `API_TIMEOUT_MS` | API 요청의 타임아웃(밀리초)입니다(기본값: 600000, 즉 10분, 최댓값: 2147483647). 느린 네트워크에서 요청이 시간 초과되거나 프록시를 통해 라우팅할 때 이 값을 늘립니다. 최댓값을 초과하는 값은 내부 타이머를 오버플로시켜 요청이 즉시 실패하게 만듭니다 |199| `API_TIMEOUT_MS` | API 요청의 타임아웃(밀리초)입니다(기본값: 600000, 즉 10분; 최댓값: 2147483647). 스트리밍 요청은 이 시간 내에 응답 헤더를 받아야 합니다. 느린 네트워크에서나 프록시를 통해 라우팅할 때 요청이 시간 초과되면 이 값을 늘립니다 |

200| `AWS_BEARER_TOKEN_BEDROCK` | 인증용 Amazon Bedrock API 키입니다([Amazon Bedrock API 키](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/) 참조) |200| `AWS_BEARER_TOKEN_BEDROCK` | 인증용 Amazon Bedrock API 키입니다([Amazon Bedrock API 키](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/) 참조) |

201| `BASH_DEFAULT_TIMEOUT_MS` | 포그라운드 Bash 또는 PowerShell 도구 명령의 기본 타임아웃(밀리초)입니다(기본값: 120000, 즉 2분). [백그라운드 명령의 기본 시간 제한](/docs/ko/tools-reference#time-limit-for-background-commands)보다 큰 값은 무인 세션에서 해당 기본값을 대체합니다. 백그라운드 시간 제한에는 Claude Code v2.1.285 이상이 필요합니다 |201| `BASH_DEFAULT_TIMEOUT_MS` | 포그라운드 Bash 또는 PowerShell 도구 명령의 기본 타임아웃(밀리초)입니다(기본값: 120000, 즉 2분). [백그라운드 명령의 기본 시간 제한](/docs/ko/tools-reference#time-limit-for-background-commands)보다 큰 값은 무인 세션에서 해당 기본값을 대체합니다. 백그라운드 시간 제한에는 Claude Code v2.1.285 이상이 필요합니다 |

202| `BASH_MAX_OUTPUT_LENGTH` | Claude Code가 명령 결과로 다시 읽어 들이는 bash 출력의 최대 문자 수입니다(기본값: 30000, 최댓값: 150000). [`bashOutputMaxChars`](/docs/ko/settings-reference#bashoutputmaxchars) 설정을 지정하면 Claude Code는 이 변수를 무시합니다. [출력 제한](/docs/ko/tools-reference#output-limits)을 참조하세요 |202| `BASH_MAX_OUTPUT_LENGTH` | Claude Code가 명령 결과로 다시 읽어 들이는 bash 출력의 최대 문자 수입니다(기본값: 30000, 최댓값: 150000). [`bashOutputMaxChars`](/docs/ko/settings-reference#bashoutputmaxchars) 설정을 지정하면 Claude Code는 이 변수를 무시합니다. [출력 제한](/docs/ko/tools-reference#output-limits)을 참조하세요 |

errors.md +3 −1

Details

346| `Can't open — this session is running in another terminal` | [백그라운드 세션 오류](#this-session-is-running-in-another-terminal) |346| `Can't open — this session is running in another terminal` | [백그라운드 세션 오류](#this-session-is-running-in-another-terminal) |

347| `This conversation is already open in another running Claude session` | [백그라운드 세션 오류](#this-session-is-running-in-another-terminal) |347| `This conversation is already open in another running Claude session` | [백그라운드 세션 오류](#this-session-is-running-in-another-terminal) |

348| `This session's saved conversation is no longer on disk` | [백그라운드 세션 오류](#this-sessions-saved-conversation-is-no-longer-on-disk) |348| `This session's saved conversation is no longer on disk` | [백그라운드 세션 오류](#this-sessions-saved-conversation-is-no-longer-on-disk) |

349| `Bypass permissions was requested at launch and ignored` | [bypassPermissions 모드로 모든 검사 건너뛰기](/docs/ko/permission-modes#bypass-permissions-acceptance) |

349| `kept <id> — its worktree is still at <path>` | [백그라운드 세션 오류](#worktree-has-commits-that-are-not-pushed-anywhere) |350| `kept <id> — its worktree is still at <path>` | [백그라운드 세션 오류](#worktree-has-commits-that-are-not-pushed-anywhere) |

350| `kept <id> — <n> unpushed commits on <branch>` | [백그라운드 세션 오류](#worktree-has-commits-that-are-not-pushed-anywhere) |351| `kept <id> — <n> unpushed commits on <branch>` | [백그라운드 세션 오류](#worktree-has-commits-that-are-not-pushed-anywhere) |

351| `kept <id> — worktree has commits that are not pushed anywhere` | [백그라운드 세션 오류](#worktree-has-commits-that-are-not-pushed-anywhere) |352| `kept <id> — worktree has commits that are not pushed anywhere` | [백그라운드 세션 오류](#worktree-has-commits-that-are-not-pushed-anywhere) |


418* 끊어진 연결. Claude가 사고를 포함하여 응답의 어떤 부분도 완료하기 전에 요청 도중 연결이 끊어지면, 일부 텍스트가 이미 스트리밍되기 시작했더라도 Claude Code는 동일한 백오프로 요청을 다시 보내고 턴이 계속됩니다. Claude가 사고를 마친 후 텍스트나 도구 호출을 시작하기 전에 연결이 끊어지면, Claude Code는 대신 요청을 빠르게 연달아 최대 2회 다시 보내며, 이 시점에서 연결이 계속 끊어지면 `Connection lost before a response was produced`와 함께 턴을 종료합니다.419* 끊어진 연결. Claude가 사고를 포함하여 응답의 어떤 부분도 완료하기 전에 요청 도중 연결이 끊어지면, 일부 텍스트가 이미 스트리밍되기 시작했더라도 Claude Code는 동일한 백오프로 요청을 다시 보내고 턴이 계속됩니다. Claude가 사고를 마친 후 텍스트나 도구 호출을 시작하기 전에 연결이 끊어지면, Claude Code는 대신 요청을 빠르게 연달아 최대 2회 다시 보내며, 이 시점에서 연결이 계속 끊어지면 `Connection lost before a response was produced`와 함께 턴을 종료합니다.

419* 요청 도중 컴퓨터가 절전 모드로 전환되어 연결이 끊어졌다고 Claude Code가 감지한 경우. Claude Code는 이를 위 규칙에 따른 끊어진 연결로 간주합니다. 재시도 레이블에 구체적인 이유가 표시되면 `Connection lost while your computer was asleep`로 표시되며, Claude가 사고를 마친 후 텍스트나 도구 호출 전에 턴이 종료되면 메시지는 `Your computer went to sleep before a response was produced`로 표시됩니다.420* 요청 도중 컴퓨터가 절전 모드로 전환되어 연결이 끊어졌다고 Claude Code가 감지한 경우. Claude Code는 이를 위 규칙에 따른 끊어진 연결로 간주합니다. 재시도 레이블에 구체적인 이유가 표시되면 `Connection lost while your computer was asleep`로 표시되며, Claude가 사고를 마친 후 텍스트나 도구 호출 전에 턴이 종료되면 메시지는 `Your computer went to sleep before a response was produced`로 표시됩니다.

420* 응답 헤더는 도착했지만 Claude의 응답이 전혀 도착하지 않았거나, Claude가 사고를 마쳤지만 텍스트나 도구 호출을 시작하지 않은 상태에서 멈춘 응답 스트림: Claude Code는 멈춘 연결을 중단하고 요청을 최대 1회 다시 스트리밍합니다. Claude가 사고를 마친 후 텍스트나 도구 호출 전에 응답이 두 번째로 멈추면, Claude Code는 `The response stalled before a response was produced`와 함께 턴을 종료합니다.421* 응답 헤더는 도착했지만 Claude의 응답이 전혀 도착하지 않았거나, Claude가 사고를 마쳤지만 텍스트나 도구 호출을 시작하지 않은 상태에서 멈춘 응답 스트림: Claude Code는 멈춘 연결을 중단하고 요청을 최대 1회 다시 스트리밍합니다. Claude가 사고를 마친 후 텍스트나 도구 호출 전에 응답이 두 번째로 멈추면, Claude Code는 `The response stalled before a response was produced`와 함께 턴을 종료합니다.

421* [첫 바이트 기한이 적용되는](/docs/ko/network-config#streaming-idle-watchdogs) 연결에서 API가 응답 헤더로 전혀 응답하지 않는 스트리밍 요청: Claude Code는 기한에 도달하면 요청을 중단하고 재시도 예산 내에서 모델 요청당 최대 1회 다시 보내며, 그 시도에도 응답이 없으면 [No response from API](#no-response-from-api)와 함께 턴을 종료합니다. 다른 연결에서는 요청이 `API_TIMEOUT_MS`만큼 기다립니다. `CLAUDE_CODE_RETRY_WATCHDOG`을 설정하면 1회 재시도 상한이 적용되지 않습니다.422* [첫 바이트 기한이 적용되는](/docs/ko/network-config#streaming-idle-watchdogs) 연결에서 API가 응답 헤더로 전혀 응답하지 않는 스트리밍 요청: Claude Code는 기한에 도달하면 요청을 중단하고 재시도 예산 내에서 모델 요청당 최대 1회 다시 보내며, 그 시도에도 응답이 없으면 [No response from API](#no-response-from-api)와 함께 턴을 종료합니다. `CLAUDE_CODE_RETRY_WATCHDOG`을 설정하면 1회 재시도 상한이 적용되지 않습니다.

422* Claude가 사고를 마치거나 텍스트 또는 도구 호출을 시작하기 전에 API의 출력 콘텐츠 필터가 중단시킨 스트리밍 응답. Claude Code는 재시도 예산 내에서 요청을 1회 다시 보내며, 필터가 두 번째 응답도 중단시키면 [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy)를 표시합니다.423* Claude가 사고를 마치거나 텍스트 또는 도구 호출을 시작하기 전에 API의 출력 콘텐츠 필터가 중단시킨 스트리밍 응답. Claude Code는 재시도 예산 내에서 요청을 1회 다시 보내며, 필터가 두 번째 응답도 중단시키면 [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy)를 표시합니다.

423* 일시적인 429 스로틀. 단, 게이트웨이의 지출 한도 `429`는 스로틀이 아니므로 제외됩니다. [Spend limit reached](#spend-limit-reached)를 참조하세요.424* 일시적인 429 스로틀. 단, 게이트웨이의 지출 한도 `429`는 스로틀이 아니므로 제외됩니다. [Spend limit reached](#spend-limit-reached)를 참조하세요.

424 * claude.ai 구독으로 로그인한 경우, 플랜의 할당량 헤더가 포함되지 않은 429 스로틀도 여기에 포함됩니다. v2.1.199 이전에는 Claude Code가 API 키 및 Enterprise 로그인에 대해서만 이러한 스로틀을 재시도했습니다.425 * claude.ai 구독으로 로그인한 경우, 플랜의 할당량 헤더가 포함되지 않은 429 스로틀도 여기에 포함됩니다. v2.1.199 이전에는 Claude Code가 API 키 및 Enterprise 로그인에 대해서만 이러한 스로틀을 재시도했습니다.


4552 4553 

4553* 오류가 지정하는 각 항목을 [서브에이전트에서 사용 가능한 도구](/docs/ko/sub-agents#available-tools)에 대해 수정합니다.4554* 오류가 지정하는 각 항목을 [서브에이전트에서 사용 가능한 도구](/docs/ko/sub-agents#available-tools)에 대해 수정합니다.

4554* 세션에 없는 도구의 항목을 제거합니다. 예를 들어 연결되지 않은 서버의 MCP 도구입니다.4555* 세션에 없는 도구의 항목을 제거합니다. 예를 들어 연결되지 않은 서버의 MCP 도구입니다.

4556* 항목이 연결된 MCP 서버를 지정하는 경우, 해당 서버의 [도구 이름](/docs/ko/permissions#mcp)에 표기된 서버 이름과 항목을 비교합니다. 예를 들어 `mcp__reports__v2__get_totals`의 `reports__v2`입니다. 해당 서버의 경우 `mcp__` 뒤에 전체 이름과 `__*`를 붙인 `mcp__reports__v2__*`로 작성합니다. `reports`라는 서버를 지정하는 더 짧은 `mcp__reports`를 사용하면 서브에이전트는 `reports__v2` 도구를 하나도 받지 못합니다.

4555* [백그라운드 서브에이전트가 제거하는](/docs/ko/sub-agents#available-tools) 도구(예: `CronCreate`)의 경우 항목을 제거합니다. 도구를 유지하려면 [포크 모드를 끄고](/docs/ko/sub-agents#turn-fork-mode-on-or-off) Claude에 서브에이전트를 포그라운드에서 실행하도록 요청합니다.4557* [백그라운드 서브에이전트가 제거하는](/docs/ko/sub-agents#available-tools) 도구(예: `CronCreate`)의 경우 항목을 제거합니다. 도구를 유지하려면 [포크 모드를 끄고](/docs/ko/sub-agents#turn-fork-mode-on-or-off) Claude에 서브에이전트를 포그라운드에서 실행하도록 요청합니다.

4556* 도구를 나열하는 대신 `tools` 필드를 삭제하여 서브에이전트에 [서브에이전트에서 사용 가능한 모든 도구](/docs/ko/sub-agents#available-tools)를 제공합니다.4558* 도구를 나열하는 대신 `tools` 필드를 삭제하여 서브에이전트에 [서브에이전트에서 사용 가능한 모든 도구](/docs/ko/sub-agents#available-tools)를 제공합니다.

4557* `Agent`만 포함하는 `tools` 목록의 경우 [깊이 제한](/docs/ko/sub-agents#let-subagents-spawn-their-own-subagents)을 높이거나 에이전트에 최소한 하나의 다른 도구를 제공합니다. Claude Code는 해당 제한에서 `Agent`를 보류하므로 다른 항목이 없는 목록은 도구 없음으로 해석됩니다.4559* `Agent`만 포함하는 `tools` 목록의 경우 [깊이 제한](/docs/ko/sub-agents#let-subagents-spawn-their-own-subagents)을 높이거나 에이전트에 최소한 하나의 다른 도구를 제공합니다. Claude Code는 해당 제한에서 `Agent`를 보류하므로 다른 항목이 없는 목록은 도구 없음으로 해석됩니다.

hooks.md +53 −16

Details

476| `async` | 아니요 | `true`이면 차단하지 않고 백그라운드에서 실행됩니다. [백그라운드에서 hook 실행](#run-hooks-in-the-background) 참조 |476| `async` | 아니요 | `true`이면 차단하지 않고 백그라운드에서 실행됩니다. [백그라운드에서 hook 실행](#run-hooks-in-the-background) 참조 |

477| `asyncRewake` | 아니요 | `true`이면 백그라운드에서 실행되고 종료 코드 2에서 Claude를 깨웁니다. 훅의 stderr 또는 stderr가 비어 있으면 stdout이 Claude에게 [시스템 리마인더](/docs/ko/glossary#system-reminder)로 표시되므로 장시간 실행되는 백그라운드 실패에 반응할 수 있습니다. |477| `asyncRewake` | 아니요 | `true`이면 백그라운드에서 실행되고 종료 코드 2에서 Claude를 깨웁니다. 훅의 stderr 또는 stderr가 비어 있으면 stdout이 Claude에게 [시스템 리마인더](/docs/ko/glossary#system-reminder)로 표시되므로 장시간 실행되는 백그라운드 실패에 반응할 수 있습니다. |

478| `shell` | 아니요 | 이 hook에 사용할 셸. `"bash"` 또는 `"powershell"`을 허용합니다. 기본값은 `"bash"` 또는 Git Bash가 설치되지 않은 경우 Windows에서 `"powershell"`입니다. `"powershell"`을 설정하면 Windows에서 PowerShell을 통해 명령을 실행합니다. `CLAUDE_CODE_USE_POWERSHELL_TOOL`이 필요하지 않습니다. hook이 PowerShell을 직접 생성하기 때문입니다. `args`가 설정되면 무시됩니다. |478| `shell` | 아니요 | 이 hook에 사용할 셸. `"bash"` 또는 `"powershell"`을 허용합니다. 기본값은 `"bash"` 또는 Git Bash가 설치되지 않은 경우 Windows에서 `"powershell"`입니다. `"powershell"`을 설정하면 Windows에서 PowerShell을 통해 명령을 실행합니다. `CLAUDE_CODE_USE_POWERSHELL_TOOL`이 필요하지 않습니다. hook이 PowerShell을 직접 생성하기 때문입니다. `args`가 설정되면 무시됩니다. |

479| `onFailure` | 아니요 | 훅이 실패할 때 해당 작업에 일어나는 동작: 기본값인 `"continue"` 또는 `"block"`. [훅이 실패할 때 작업 차단](#block-the-action-when-a-hook-fails)을 참조하십시오. Claude Code v2.1.295 이상이 필요합니다. |479| `onFailure` | 아니요 | 훅이 실패할 때 훅을 트리거한 작업이 계속 진행되는지 여부: `"continue"` 또는 `"block"`. `"block"` 및 필드를 설정하지 않은 경우에 대해서는 [훅이 실패할 때 작업 차단](#block-the-action-when-a-hook-fails)을 참조하십시오. Claude Code v2.1.295 이상이 필요합니다. |

480 480 

481<a id="exec-form-and-shell-form" />481<a id="exec-form-and-shell-form" />

482 482 


829 829 

830* **성공**: hook이 0으로 종료합니다. Claude Code는 hook이 출력한 [JSON 출력](#json-output) 필드를 적용하며, 해당 필드가 작업을 차단하거나 거부하지 않는 한 작업이 진행됩니다. 예외는 [백그라운드 프로세스를 시작하는 hook](#hooks-that-start-a-background-process)에서 다룹니다.830* **성공**: hook이 0으로 종료합니다. Claude Code는 hook이 출력한 [JSON 출력](#json-output) 필드를 적용하며, 해당 필드가 작업을 차단하거나 거부하지 않는 한 작업이 진행됩니다. 예외는 [백그라운드 프로세스를 시작하는 hook](#hooks-that-start-a-background-process)에서 다룹니다.

831* **차단 오류**: hook이 2로 종료합니다. [차단할 수 있는 이벤트](#exit-code-2-behavior-per-event)에서 Claude Code는 작업을 중지합니다.831* **차단 오류**: hook이 2로 종료합니다. [차단할 수 있는 이벤트](#exit-code-2-behavior-per-event)에서 Claude Code는 작업을 중지합니다.

832* **차단하지 않는 오류**: hook이 그 밖의 코드로 종료하거나, 시작되지 않거나 잘못된 JSON을 출력하는 등 다른 방식으로 실패합니다. 작업은 진행되며, `PreToolUse`와 같은 이벤트에서는 트랜스크립트에 `<hook name> hook error` 알림이 표시됩니다. 실패한 hook이 작업을 차단하게 하려면 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)을 설정합니다.832* **차단하지 않는 오류**: hook이 그 밖의 코드로 종료하거나, 시작되지 않거나 잘못된 JSON을 출력하는 등 다른 방식으로 실패합니다. 작업은 진행됩니다. 단, `onFailure`가 `"block"`으로 설정된 hook처럼 [실패 시 작업을 차단하는 hook](#block-the-action-when-a-hook-fails)은 예외입니다. `PreToolUse`와 같은 이벤트에서는 트랜스크립트에 `<hook name> hook error` 알림이 표시됩니다.

833 833 

834hook이 stdout에 출력하는 내용에 따라 결과가 달라질 수 있습니다. 예를 들어 `PreToolUse` hook이 1로 종료하지만 검증을 통과하는 JSON을 출력하면 실행은 성공이며 JSON 필드가 결과를 결정합니다. `PreToolUse`와 같은 이벤트에서 hook의 결과를 확인하려면 첫 번째 열에서 stdout에 출력한 내용을, 맨 위 행에서 종료 코드를 찾아 맞춰 봅니다:834hook이 stdout에 출력하는 내용에 따라 결과가 달라질 수 있습니다. 예를 들어 `PreToolUse` hook이 1로 종료하지만 검증을 통과하는 JSON을 출력하면 해당 JSON이 여전히 결과를 결정할 수 있습니다. `PreToolUse`와 같은 이벤트에서 hook의 결과를 확인하려면 첫 번째 열에서 stdout에 출력한 내용을, 맨 위 행에서 종료 코드를 찾아 맞춰 봅니다:

835 835 

836| Stdout | 종료 0 | 종료 2 | 그 밖의 종료 코드 |836| Stdout | 종료 0 | 종료 2 | 그 밖의 종료 코드 |

837| :- | :- | :- | :- |837| :- | :- | :- | :- |

838| [스키마 검증](#json-output)을 통과하는 JSON 객체 | 성공. 필드가 적용됩니다 | 차단 오류. Claude Code는 여전히 필드를 읽지만 필드가 차단을 재정의할 수는 없습니다 | 성공. Claude Code는 종료 코드를 무시하고 필드만으로 결과를 결정합니다. [`onFailure: "block"`](#block-the-action-when-a-hook-fails)을 설정하면 실패로 간주됩니다 |838| [스키마 검증](#json-output)을 통과하는 JSON 객체 | 성공. 필드가 적용됩니다 | 차단 오류. Claude Code는 여전히 필드를 읽지만 필드가 차단을 재정의할 수는 없습니다 | 성공. Claude Code는 종료 코드를 무시하고 필드만으로 결과를 결정합니다. [실패 시 작업을 차단하는 hook](#block-the-action-when-a-hook-fails)의 경우에는 대신 실패로 간주됩니다 |

839| [구문 분석할 수 없거나](#exit-code-0) 스키마 검증에 실패하는 JSON | 차단하지 않는 오류. 알림에 구문 분석 또는 검증 메시지가 표시됩니다 | 차단 오류. stderr이 이유가 됩니다 | 차단하지 않는 오류. 알림에 구문 분석 또는 검증 메시지가 표시됩니다 |839| [구문 분석할 수 없거나](#exit-code-0) 스키마 검증에 실패하는 JSON | 차단하지 않는 오류. 알림에 구문 분석 또는 검증 메시지가 표시됩니다 | 차단 오류. stderr이 이유가 됩니다 | 차단하지 않는 오류. 알림에 구문 분석 또는 검증 메시지가 표시됩니다 |

840| [일반 텍스트](#exit-code-0) 또는 출력 없음 | 성공 | 차단 오류. stderr이 이유가 됩니다 | 차단하지 않는 오류. 알림에 stderr의 첫 번째 줄이 표시됩니다 |840| [일반 텍스트](#exit-code-0) 또는 출력 없음 | 성공 | 차단 오류. stderr이 이유가 됩니다 | 차단하지 않는 오류. 알림에 stderr의 첫 번째 줄이 표시됩니다 |

841 841 


864* **각각 자체적으로 JSON으로 구문 분석되는 두 줄 이상이며, 첫 줄이 `{`로 시작하고 마지막 줄이 `}`로 끝나는 출력**: 필드를 설정하는 JSON 출력 객체인 줄이 없으면 일반 텍스트이고, 그러한 줄이 있으면 구문 분석 실패입니다.864* **각각 자체적으로 JSON으로 구문 분석되는 두 줄 이상이며, 첫 줄이 `{`로 시작하고 마지막 줄이 `}`로 끝나는 출력**: 필드를 설정하는 JSON 출력 객체인 줄이 없으면 일반 텍스트이고, 그러한 줄이 있으면 구문 분석 실패입니다.

865* **`{`로 시작하고 `}`로 끝나지만 유효한 JSON이 아닌 그 밖의 출력**: 구문 분석 실패입니다.865* **`{`로 시작하고 `}`로 끝나지만 유효한 JSON이 아닌 그 밖의 출력**: 구문 분석 실패입니다.

866 866 

867Claude Code가 stdout을 JSON으로 구문 분석하려고 시도했지만 실패하거나, 구문 분석된 객체가 [스키마 검증](#json-output)에 실패하면 실행은 [차단하지 않는 오류](#exit-code-output)가 됩니다. `<hook name> hook error` 알림에 구문 분석 또는 검증 메시지가 표시됩니다. 일반 텍스트 stdout을 컨텍스트로 추가하는 이벤트에서 Claude Code는 구문 분석에 실패한 stdout을 추가하지 않습니다.867[실패 시 작업을 차단하는 hook](#block-the-action-when-a-hook-fails)이 아닌 한, 구문 분석 실패 또는 [스키마 검증](#json-output)에 실패한 구문 분석된 객체는 [차단하지 않는 오류](#exit-code-output)입니다. `<hook name> hook error` 알림에 구문 분석 또는 검증 메시지가 표시됩니다. 일반 텍스트 stdout을 컨텍스트로 추가하는 이벤트에서 Claude Code는 구문 분석에 실패한 stdout을 추가하지 않습니다.

868 868 

869Claude는 0으로 종료하는 hook의 stderr을 보지 못합니다. `PreToolUse`와 같은 이벤트에서 직접 읽으려면 [디버그 로깅](#debug-hooks)을 활성화합니다. `PostToolUse` 또는 `PostToolUseFailure` hook에서 Claude에 경고를 표시하려면 대신 종료 2로 나가면 도구가 이미 실행되었더라도 [Claude가 stderr을 봅니다](#exit-code-2-behavior-per-event).869Claude는 0으로 종료하는 hook의 stderr을 보지 못합니다. `PreToolUse`와 같은 이벤트에서 직접 읽으려면 [디버그 로깅](#debug-hooks)을 활성화합니다. `PostToolUse` 또는 `PostToolUseFailure` hook에서 Claude에 경고를 표시하려면 대신 종료 2로 나가면 도구가 이미 실행되었더라도 [Claude가 stderr을 봅니다](#exit-code-2-behavior-per-event).

870 870 


907 다른 종료 코드907 다른 종료 코드

908</h4>908</h4>

909 909 

910hook이 0 또는 2 이외의 코드로 종료하고 stdout에 일반 텍스트를 출력하거나 아무것도 출력하지 않으면 실행은 [차단하지 않는 오류](#exit-code-output)가 됩니다. 트랜스크립트에는 `Failed with non-blocking status code:`와 hook의 stderr 첫 번째 줄이 포함된 `<hook name> hook error` 알림이 표시됩니다. 예를 들어 `Bash`에 대한 `PreToolUse` hook이 stderr에 `something broke`를 출력하고 1로 종료하면 `PreToolUse:Bash hook error` 알림에 다음 줄이 표시됩니다:910[실패 시 작업을 차단하는 hook](#block-the-action-when-a-hook-fails)이 아닌 한, 0 또는 2 이외의 종료 코드와 함께 stdout에 일반 텍스트를 출력하거나 아무것도 출력하지 않으면 [차단하지 않는 오류](#exit-code-output)입니다. 작업이 진행되면 트랜스크립트에 `Failed with non-blocking status code:`와 hook의 stderr 첫 번째 줄이 포함된 `<hook name> hook error` 알림이 표시됩니다.

911 

912예를 들어 `Bash`에 대한 `PreToolUse` hook이 stderr에 `something broke`를 출력하고 1로 종료하면 `PreToolUse:Bash hook error` 알림에 다음 줄이 표시됩니다:

911 913 

912```text theme={null}914```text theme={null}

913Failed with non-blocking status code: something broke915Failed with non-blocking status code: something broke


915 917 

916첫 번째 줄이 아닌 전체 stderr을 캡처하려면 [디버그 로깅](#debug-hooks)을 활성화합니다.918첫 번째 줄이 아닌 전체 stderr을 캡처하려면 [디버그 로깅](#debug-hooks)을 활성화합니다.

917 919 

918시작할 수 없는 hook도 차단하지 않는 오류입니다. 셸 형식에서 스크립트 경로가 존재하지 않거나 실행 가능하지 않으면 셸은 127과 같은 코드로 종료되고 알림에 인터프리터의 메시지가 표시됩니다. 예: `Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory`. 정책 hook을 설정할 때는 첫 번째 실행에서 이 알림을 확인하세요. `settings.json`의 경로에 오타가 있으면 hook이 전혀 실행되지 않습니다. 대신 작업을 차단하려면 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)을 설정합니다.920[실패 시 작업을 차단하는 hook](#block-the-action-when-a-hook-fails)이 아닌 한, 시작할 수 없는 hook도 차단하지 않는 오류입니다. 셸 형식에서 스크립트 경로가 존재하지 않거나 실행 가능하지 않으면 셸은 127과 같은 코드로 종료되고 알림에 인터프리터의 메시지가 표시됩니다. 예를 들어 스크립트 경로가 존재하지 않으면 알림에 다음과 같은 줄이 표시됩니다:

921 

922```text theme={null}

923Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory

924```

925 

926정책 hook을 설정할 때는 첫 번째 실행에서 이 알림을 확인하세요. `settings.json`의 경로에 오타가 있으면 hook이 전혀 실행되지 않습니다. hook을 시작할 수 없을 때 작업을 차단하려면 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)을 설정합니다.

919 927 

920<Warning>928<Warning>

921 stdout에 유효한 JSON이 없으면 Claude Code는 1이 관례적인 Unix 실패 코드임에도 불구하고 종료 코드 1을 차단하지 않는 오류로 취급합니다. hook이 정책을 적용하기 위한 것이라면 `exit 2`를 사용합니다.929 1이 관례적인 Unix 실패 코드임에도 불구하고, 유효한 JSON 출력이 없는 종료 코드 1은 [실패 시 작업을 차단하는 hook](#block-the-action-when-a-hook-fails)이 아닌 한 차단하지 않는 오류입니다. hook이 정책을 적용하기 위한 것이라면 `exit 2`를 사용합니다.

922</Warning>930</Warning>

923 931 

924<h4 id="timeouts">932<h4 id="timeouts">


929 937 

930[`PreModelSwitch`](#premodelswitch)에서는 타임아웃으로 취소된 hook이 모델 전환을 차단합니다. `PreToolUse`에서는 두 hook 유형이 다르게 동작합니다:938[`PreModelSwitch`](#premodelswitch)에서는 타임아웃으로 취소된 hook이 모델 전환을 차단합니다. `PreToolUse`에서는 두 hook 유형이 다르게 동작합니다:

931 939 

932* 시간 초과된 `command`, `http`, `mcp_tool` hook은 도구 호출을 차단하지 않습니다. 호출은 일반 [권한 흐름](/docs/ko/permissions)을 통해 계속되므로 멈춘 hook이 게이트 역할을 할 것이라고 기대하지 마세요. `command` 또는 `http` hook이 시간 초과될 때 호출을 차단하려면 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)을 설정합니다.940* 시간 초과된 `command`, `http`, `mcp_tool` hook은 도구 호출을 차단하지 않습니다. 단, [실패 시 작업을 차단하는 hook](#block-the-action-when-a-hook-fails)은 예외입니다. 호출은 일반 [권한 흐름](/docs/ko/permissions)을 통해 계속되므로 멈춘 hook이 게이트 역할을 할 것이라고 기대하지 마세요. `command` 또는 `http` hook이 시간 초과될 때 호출을 차단하려면 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)을 설정합니다.

933* 타임아웃을 초과한 [Agent SDK 콜백 hook](/docs/ko/agent-sdk/hooks)은 [도구 호출을 차단합니다](#pretooluse).941* 타임아웃을 초과한 [Agent SDK 콜백 hook](/docs/ko/agent-sdk/hooks)은 [도구 호출을 차단합니다](#pretooluse).

934 942 

935<h4 id="hooks-that-start-a-background-process">943<h4 id="hooks-that-start-a-background-process">


959 hook이 실패할 때 작업 차단967 hook이 실패할 때 작업 차단

960</h4>968</h4>

961 969 

962대부분의 이벤트에서 hook이 실패하거나 시간 초과되어도 Claude Code는 작업을 계속 수행하므로, 경로가 잘못되었거나 스크립트가 충돌하는 정책 hook은 모든 것을 통과시킵니다. 대신 작업을 차단하려면 `command` 또는 `http` hook에 `"onFailure": "block"`을 설정합니다. 기본값은 `"continue"`입니다. Claude Code v2.1.295 이상이 필요합니다.970대부분의 이벤트에서 hook이 실패하거나 시간 초과되어도 Claude Code는 작업을 계속 수행합니다. 그러면 경로가 잘못되었거나 스크립트가 충돌하는 정책 hook은 모든 것을 통과시킵니다. 대신 작업을 차단하려면 `command` 또는 `http` hook에 `"onFailure": "block"`을 설정합니다. Claude Code v2.1.295 이상이 필요합니다.

971 

972<Note>

973 Git Bash가 없는 Windows에서는 `onFailure`가 설정되지 않은 셸 형식 `PreToolUse` 또는 `PermissionRequest` 명령 hook이 실패하면 대신 [도구 호출을 차단](#failed-hooks-on-windows-without-git-bash)할 수 있습니다.

974</Note>

963 975 

964`.claude/settings.json`의 이 `PreToolUse` hook은 각 Bash 명령 전에 프로젝트 스크립트를 실행하고, 스크립트가 실패하면 명령을 차단합니다:976`.claude/settings.json`의 이 `PreToolUse` hook은 각 Bash 명령 전에 프로젝트 스크립트를 실행하고, 스크립트가 실패하면 명령을 차단합니다:

965 977 


1007* **`Stop`, `SubagentStop`, `TaskCompleted`, `TeammateIdle` hook**: 이러한 이벤트에서 종료 코드 2는 Claude가 계속 작업하도록 되돌려 보내며, Claude는 실행되지 않는 hook을 고칠 수 없습니다1019* **`Stop`, `SubagentStop`, `TaskCompleted`, `TeammateIdle` hook**: 이러한 이벤트에서 종료 코드 2는 Claude가 계속 작업하도록 되돌려 보내며, Claude는 실행되지 않는 hook을 고칠 수 없습니다

1008* **백그라운드 명령 hook**: [`async` 또는 `asyncRewake`](#run-hooks-in-the-background)를 설정한 명령 hook1020* **백그라운드 명령 hook**: [`async` 또는 `asyncRewake`](#run-hooks-in-the-background)를 설정한 명령 hook

1009 1021 

1022<h4 id="failed-hooks-on-windows-without-git-bash">

1023 Git Bash가 없는 Windows에서 실패한 hook

1024</h4>

1025 

1026차단된 도구 호출의 오류에 다음 텍스트가 포함되어 있으면 `PreToolUse` 또는 `PermissionRequest` 명령 hook이 실패하거나 시간 초과되어 호출을 차단한 것입니다:

1027 

1028```text theme={null}

1029blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.

1030```

1031 

1032`shell`이 설정되지 않은 셸 형식 hook은 Git Bash가 설치되어 있지 않으면 PowerShell에서 실행되며, Bash용으로 작성된 스크립트는 그곳에서 작성된 그대로 실행되지 않을 수 있습니다. hook에 맞는 해결 방법을 선택합니다:

1033 

1034* **hook이 Bash용으로 작성된 경우**: [Git for Windows](https://git-scm.com/downloads/win)를 설치하거나, Claude Code가 찾지 못하는 위치에 Git Bash가 설치되어 있다면 [`CLAUDE_CODE_GIT_BASH_PATH`](/docs/ko/env-vars)를 설정한 다음 새 세션을 시작합니다

1035* **hook이 `.cmd` 또는 `.bat` 파일이 아닌 하나의 `.exe`를 실행하는 경우**: [exec 형식](#exec-form-and-shell-form)을 사용하도록 프로그램을 `command`에, 인수를 `args`에 넣고 [`"onFailure": "block"`](#block-the-action-when-a-hook-fails)을 추가합니다. 그러면 Claude Code는 셸 없이 프로그램을 시작합니다. `"onFailure": "block"`이 없으면 프로그램이 실패하거나, 없거나, 시간 초과될 때 호출이 진행될 수 있습니다

1036* **hook이 PowerShell용으로 작성된 경우**: hook에 `"shell": "powershell"`과 [`"onFailure": "block"`](#block-the-action-when-a-hook-fails)을 추가합니다. `"onFailure": "block"`이 없으면 hook이 여전히 실패하거나 시간 초과될 때 호출이 진행될 수 있습니다. hook이 실패한 이유를 알아보려면 [디버그 로그](#debug-hooks)를 확인합니다

1037* **hook이 실패할 때 작업이 진행되어야 하는 경우**: hook에 `"onFailure": "continue"`를 추가합니다

1038 

1039이 오류를 표시하는 hook의 경우, hook이 호출을 거부하지 않는 JSON을 출력하더라도 0 또는 2 이외의 종료 코드는 [실패](#block-the-action-when-a-hook-fails)로 간주됩니다.

1040 

1010<h4 id="exit-code-2-behavior-per-event">1041<h4 id="exit-code-2-behavior-per-event">

1011 이벤트별 종료 코드 2 동작1042 이벤트별 종료 코드 2 동작

1012</h4>1043</h4>


1060* **빈 본문의 2xx**: 성공, 출력 없는 종료 코드 0과 동일1091* **빈 본문의 2xx**: 성공, 출력 없는 종료 코드 0과 동일

1061* **JSON 객체 본문의 2xx**: 명령 hook과 동일한 [JSON 출력](#json-output) 스키마를 사용하여 구문 분석됩니다. 스키마 검증에 실패하는 본문은 차단하지 않는 오류입니다1092* **JSON 객체 본문의 2xx**: 명령 hook과 동일한 [JSON 출력](#json-output) 스키마를 사용하여 구문 분석됩니다. 스키마 검증에 실패하는 본문은 차단하지 않는 오류입니다

1062* **일반 텍스트 등 그 밖의 본문의 2xx**: 차단하지 않는 오류이며, 2xx가 아닌 상태와 동일하게 처리됩니다. Claude Code는 텍스트를 Claude의 컨텍스트에 추가하지 않습니다1093* **일반 텍스트 등 그 밖의 본문의 2xx**: 차단하지 않는 오류이며, 2xx가 아닌 상태와 동일하게 처리됩니다. Claude Code는 텍스트를 Claude의 컨텍스트에 추가하지 않습니다

1063* **2xx가 아닌 상태**: 차단하지 않는 오류, 실행이 계속됨1094* **2xx가 아닌 상태**: 차단하지 않는 오류

1064* **연결 실패**: 차단하지 않는 오류, 실행이 계속됨1095* **연결 실패**: 차단하지 않는 오류

1065* **타임아웃**: [타임아웃](#timeouts)에 설명된 대로 hook이 취소됩니다1096* **타임아웃**: [타임아웃](#timeouts)에 설명된 대로 hook이 취소됩니다

1066 1097 

1067HTTP hook은 상태 코드만으로 차단 오류를 신호할 수 없습니다. 2xx가 아닌 상태나 실패한 연결은 [차단하지 않는 오류](#exit-code-output)입니다. 도구 호출을 차단하거나 권한을 거부하려면 적절한 결정 필드를 포함하는 JSON 본문과 함께 2xx 응답을 반환합니다. 요청이 실패하거나 2xx가 아닌 상태를 반환할 때 작업을 차단하려면 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)을 설정합니다.1098[차단하지 않는 오류](#exit-code-output) 후에는 [실패 시 작업을 차단하는 hook](#block-the-action-when-a-hook-fails)이 아닌 한 작업이 진행됩니다. 도구 호출을 차단하거나 권한을 거부하려면 적절한 [결정 필드](#decision-control)를 포함하는 JSON 본문과 함께 2xx 응답을 반환합니다. 요청이 실패하거나 2xx가 아닌 상태를 반환할 때 작업을 차단하려면 [`onFailure: "block"`](#block-the-action-when-a-hook-fails)을 설정합니다.

1068 1099 

1069<h3 id="json-output">1100<h3 id="json-output">

1070 JSON 출력1101 JSON 출력


1573}1604}

1574```1605```

1575 1606 

1607프롬프트가 `/deploy staging`처럼 사용자가 입력한 [스킬](/docs/ko/skills) 또는 사용자 지정 명령인 경우, 훅은 펼쳐진 스킬 내용이 아니라 입력한 그대로의 줄을 받습니다. 훅이 프롬프트를 차단하면 명령이 실행되지 않으므로, 스킬이 [`` !`<command>` ``로 주입하는](/docs/ko/skills#inject-dynamic-context) 셸 명령도 실행되지 않습니다. 대신 명령의 이름이나 인수로 매칭하려면 [UserPromptExpansion](#userpromptexpansion)을 사용하세요.

1608 

1576<h4 id="userpromptsubmit-decision-control">1609<h4 id="userpromptsubmit-decision-control">

1577 UserPromptSubmit 결정 제어1610 UserPromptSubmit 결정 제어

1578</h4>1611</h4>


2076 2109 

2077| 필드 | 설명 |2110| 필드 | 설명 |

2078| :- | :- |2111| :- | :- |

2079| `permissionDecision` | `"allow"`는 권한 프롬프트를 건너뜁니다. 단, [어떤 모드에서도 자동 승인되지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves), [네트워크 경로에서의 읽기](/docs/ko/permissions#network-paths), 그리고 [`updatedInput`과 함께 사용해야 하는](#allow-with-updatedinput) `AskUserQuestion` 및 `ExitPlanMode`는 예외입니다. `"deny"`는 도구 호출을 막습니다. `"ask"`는 사용자에게 확인을 요청합니다. `"defer"`는 도구를 나중에 재개할 수 있도록 정상적으로 종료합니다. 훅이 무엇을 반환하든 [거부 및 확인 규칙](/docs/ko/permissions#manage-permissions)은 여전히 평가됩니다 |2112| `permissionDecision` | `"allow"`는 권한 프롬프트를 건너뜁니다. 단, [어떤 모드도 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)과 [네트워크 경로에서의 읽기](/docs/ko/permissions#network-paths)는 예외입니다. `AskUserQuestion`과 `ExitPlanMode`에는 [`"allow"`와 함께 사용하는 `updatedInput`](#allow-with-updatedinput)이 필요합니다. 플랜 모드의 경우 [플랜 모드에서의 훅 승인](/docs/ko/permissions#hook-approvals-in-plan-mode)을 참조하세요. `"deny"`는 도구 호출을 막습니다. `"ask"`는 사용자에게 확인을 요청합니다. `"defer"`는 나중에 도구를 재개할 수 있도록 정상적으로 종료합니다. [거부 및 확인 규칙](/docs/ko/permissions#manage-permissions)은 훅이 무엇을 반환하든 여전히 평가됩니다 |

2080| `permissionDecisionReason` | `"ask"`의 경우 권한 프롬프트에서 사용자에게 표시됩니다. 아무도 해당 프롬프트에 답할 수 없는 `-p` 실행에서 Claude Code가 [호출을 거부](/docs/ko/headless#turn-off-permission-prompts-in-unattended-runs)하면, Claude가 대신 도구 결과에서 이유를 읽습니다. `"deny"`의 경우 Claude에게 표시됩니다. `"allow"` 및 `"defer"`의 경우 [디버그 로그](#debug-hooks)에만 기록됩니다 |2113| `permissionDecisionReason` | `"ask"`의 경우 권한 프롬프트에서 사용자에게 표시됩니다. 아무도 해당 프롬프트에 답할 수 없는 `-p` 실행에서 Claude Code가 [호출을 거부](/docs/ko/headless#turn-off-permission-prompts-in-unattended-runs)하면, Claude가 대신 도구 결과에서 이유를 읽습니다. `"deny"`의 경우 Claude에게 표시됩니다. `"allow"` 및 `"defer"`의 경우 [디버그 로그](#debug-hooks)에만 기록됩니다 |

2081| `updatedInput` | 실행 전에 도구의 입력 매개변수를 수정합니다. 전체 입력 객체를 대체하므로 수정된 필드와 함께 변경되지 않은 필드도 포함하십시오. Claude Code는 권한 규칙과 Bash 명령의 [자동 백그라운드 전환 적격성](/docs/ko/tools-reference#foreground-commands-that-move-to-the-background)을 Claude가 보낸 입력이 아닌 훅이 반환한 입력을 기준으로 평가합니다. 자동 승인하려면 `"allow"`와, 수정된 입력을 사용자에게 보여주려면 `"ask"`와 함께 사용하십시오. `"defer"`의 경우 무시됩니다 |2114| `updatedInput` | 실행 전에 도구의 입력 매개변수를 수정합니다. 전체 입력 객체를 대체하므로 수정된 필드와 함께 변경되지 않은 필드도 포함하십시오. Claude Code는 권한 규칙과 Bash 명령의 [자동 백그라운드 전환 적격성](/docs/ko/tools-reference#foreground-commands-that-move-to-the-background)을 Claude가 보낸 입력이 아닌 훅이 반환한 입력을 기준으로 평가합니다. 자동 승인하려면 `"allow"`와, 수정된 입력을 사용자에게 보여주려면 `"ask"`와 함께 사용하십시오. `"defer"`의 경우 무시됩니다 |

2082| `additionalContext` | 도구 결과와 함께 Claude의 컨텍스트에 추가되는 문자열입니다. `permissionDecision`이 `"defer"`일 때는 무시됩니다. [Claude를 위한 컨텍스트 추가](#add-context-for-claude)를 참조하십시오 |2115| `additionalContext` | 도구 결과와 함께 Claude의 컨텍스트에 추가되는 문자열입니다. `permissionDecision`이 `"defer"`일 때는 무시됩니다. [Claude를 위한 컨텍스트 추가](#add-context-for-claude)를 참조하십시오 |


3718 3751 

3719Claude Code는 결정과 관계없이 훅이 반환하는 모든 `systemMessage`를 사용자에게 표시하므로, 비용 보고 훅은 `{"systemMessage": "..."}`를 반환하고 0으로 종료할 수 있습니다.3752Claude Code는 결정과 관계없이 훅이 반환하는 모든 `systemMessage`를 사용자에게 표시하므로, 비용 보고 훅은 `{"systemMessage": "..."}`를 반환하고 0으로 종료할 수 있습니다.

3720 3753 

3721타임아웃 전에 응답하지 않는 PreModelSwitch 훅은 전환을 차단합니다. 다른 이벤트에서 타임아웃이 어떻게 동작하는지는 [타임아웃](#timeouts)을 참조하세요. 이 이벤트의 기본 타임아웃은 30초입니다. `PreModelSwitch`는 `command`, `http`, `mcp_tool` 훅만 실행하므로 `prompt`와 `agent`의 기본값은 적용되지 않습니다.3754<h4 id="premodelswitch-timeouts-and-other-exit-codes">

3755 PreModelSwitch 타임아웃 및 기타 종료 코드

3756</h4>

3757 

3758타임아웃 전에 응답하지 않는 PreModelSwitch 훅은 전환을 차단합니다. 이 이벤트의 기본 타임아웃은 30초입니다.

3722 3759 

37230이나 2가 아닌 코드로 종료하고 JSON 결정을 출력하지 않는 훅은 [기타 종료 코드](#other-exit-codes)에 설명된 대로 비차단 오류입니다.37600 또는 2가 아닌 종료 코드의 동작은 [기타 종료 코드](#other-exit-codes)를 참조하십시오.

3724 3761 

3725<h3 id="postmodelswitch">3762<h3 id="postmodelswitch">

3726 PostModelSwitch3763 PostModelSwitch

hooks-guide.md +17 −4

Details

633 * `PreToolUse` hook의 경우 이것은 도구 호출을 승인하지 않습니다: 정상적인 [권한 흐름](/docs/ko/permissions)이 여전히 적용됩니다.633 * `PreToolUse` hook의 경우 이것은 도구 호출을 승인하지 않습니다: 정상적인 [권한 흐름](/docs/ko/permissions)이 여전히 적용됩니다.

634 * `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` 및 `PostModelSwitch` hooks의 경우 Claude Code는 stdout을 [일반 텍스트로 처리](/docs/ko/hooks#exit-code-0)하여 Claude의 컨텍스트에 추가합니다.634 * `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` 및 `PostModelSwitch` hooks의 경우 Claude Code는 stdout을 [일반 텍스트로 처리](/docs/ko/hooks#exit-code-0)하여 Claude의 컨텍스트에 추가합니다.

635* **Exit 2**: Claude Code가 작업을 차단합니다. stderr에 이유를 작성하세요. 이것이 어디에 도달하는지는 이벤트에 따라 다릅니다: 일부 이벤트는 이를 Claude에 피드백으로 전달하여 조정할 수 있도록 하고, 다른 이벤트는 사용자에게 표시하며, `ConfigChange` 및 `Elicitation`과 같은 몇 가지는 메시지를 표시하지 않습니다. 일부 이벤트는 차단될 수 없습니다: `SessionStart` 및 기타의 경우 exit 2는 stderr를 사용자에게 표시하고 실행이 계속됩니다. 전체 목록은 [이벤트별 exit 코드 2 동작](/docs/ko/hooks#exit-code-2-behavior-per-event)을 참조하세요.635* **Exit 2**: Claude Code가 작업을 차단합니다. stderr에 이유를 작성하세요. 이것이 어디에 도달하는지는 이벤트에 따라 다릅니다: 일부 이벤트는 이를 Claude에 피드백으로 전달하여 조정할 수 있도록 하고, 다른 이벤트는 사용자에게 표시하며, `ConfigChange` 및 `Elicitation`과 같은 몇 가지는 메시지를 표시하지 않습니다. 일부 이벤트는 차단될 수 없습니다: `SessionStart` 및 기타의 경우 exit 2는 stderr를 사용자에게 표시하고 실행이 계속됩니다. 전체 목록은 [이벤트별 exit 코드 2 동작](/docs/ko/hooks#exit-code-2-behavior-per-event)을 참조하세요.

636* **다른 종료 코드**: 대부분의 이벤트의 경우 결과는 hook이 stdout에 인쇄한 내용에 따라 다릅니다:636* **다른 종료 코드**: 대부분의 이벤트에서 작업은 [차단되지 않는 오류](/docs/ko/hooks#exit-code-output)로 진행됩니다. 단, 해당 hook이 [실패 시 작업을 차단하는](/docs/ko/hooks#block-the-action-when-a-hook-fails) hook이거나 JSON 출력이 검증을 통과하는 경우는 예외입니다:

637 * 스키마 검증을 통과하는 구문 분석된 객체: Claude Code는 종료 코드를 무시하고 JSON만이 결과를 결정하며 hook은 오류로 보고되지 않습니다. `WorktreeCreate`가 0이 아닌 종료에서 실패하는 것과 같은 이벤트별 예외는 참조의 [Exit code output](/docs/ko/hooks#exit-code-output) 섹션에 나열됩니다.637 * 스키마 검증을 통과하는 구문 분석된 객체: Claude Code는 종료 코드를 무시하고 JSON만이 결과를 결정하며 hook은 오류로 보고되지 않습니다. `WorktreeCreate`가 0이 아닌 종료에서 실패하는 것과 같은 이벤트별 예외는 참조의 [Exit code output](/docs/ko/hooks#exit-code-output) 섹션에 나열됩니다.

638 * 스키마 검증에 실패하는 구문 분석된 객체 또는 Claude Code가 [JSON으로 구문 분석](/docs/ko/hooks#exit-code-0)하려고 하지만 유효한 JSON이 아닌 stdout: 차단되지 않는 오류입니다. 공지는 검증 또는 구문 분석 메시지를 포함합니다.638 * 스키마 검증에 실패하는 구문 분석된 객체 또는 Claude Code가 [JSON으로 구문 분석](/docs/ko/hooks#exit-code-0)하려고 하지만 유효한 JSON이 아닌 stdout: 차단되지 않는 오류입니다. 공지는 검증 또는 구문 분석 메시지를 포함합니다.

639 * Claude Code가 [일반 텍스트로 처리](/docs/ko/hooks#exit-code-0)하는 stdout 또는 빈 stdout: 작업이 차단되지 않는 오류로 진행됩니다. 트랜스크립트는 `<hook name> hook error` 공지를 표시한 후 `Failed with non-blocking status code:`로 접두사가 붙은 stderr의 첫 번째 줄을 표시합니다. 전체 stderr를 캡처하려면 `claude --debug`를 사용하거나 세션 중에 `/debug`를 실행하여 [디버그 로깅](/docs/ko/hooks#debug-hooks)을 활성화하세요.639 * Claude Code가 [일반 텍스트로 처리](/docs/ko/hooks#exit-code-0)하는 stdout 또는 빈 stdout: 작업이 차단되지 않는 오류로 진행됩니다. 트랜스크립트는 `<hook name> hook error` 공지를 표시한 후 `Failed with non-blocking status code:`로 접두사가 붙은 stderr의 첫 번째 줄을 표시합니다. 전체 stderr를 캡처하려면 `claude --debug`를 사용하거나 세션 중에 `/debug`를 실행하여 [디버그 로깅](/docs/ko/hooks#debug-hooks)을 활성화하세요.


664 664 

665`PreToolUse`에서 Claude Code는 각 `permissionDecision` 값을 다음과 같이 처리합니다:665`PreToolUse`에서 Claude Code는 각 `permissionDecision` 값을 다음과 같이 처리합니다:

666 666 

667* `"allow"`: 대화형 권한 프롬프트를 건너뜁니다. 엔터프라이즈 관리형 거부 목록을 포함한 거부 및 확인 규칙은 여전히 적용되며, [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기, [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구, 그리고 해당 설정이 Claude Code에 도달하는 세션에서 [조직이 `ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구에 대한 프롬프트도 마찬가지로 적용됩니다667* `"allow"`: 대화형 권한 프롬프트를 건너뜁니다. 엔터프라이즈 관리형 거부 목록을 포함한 거부 및 확인 규칙은 여전히 적용되며, 다음에 대한 프롬프트도 마찬가지로 적용됩니다:

668 

669 * [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기

670 * [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구

671 * 해당 설정이 Claude Code에 도달하는 세션에서 [조직이 `ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구

672 

673 플랜 모드에서 `"allow"`가 어떻게 동작하는지는 [플랜 모드의 hook 승인](/docs/ko/permissions#hook-approvals-in-plan-mode)을 참조하세요.

668* `"deny"`: 도구 호출을 취소하고 이유를 Claude에 전송합니다674* `"deny"`: 도구 호출을 취소하고 이유를 Claude에 전송합니다

669* `"ask"`: 일반적으로 사용자에게 권한 프롬프트를 표시합니다675* `"ask"`: 일반적으로 사용자에게 권한 프롬프트를 표시합니다

670 676 


1015 1021 

1016`PreToolUse` hooks는 모든 [권한 모드](/docs/ko/permission-modes)에서 권한 모드 확인 전에 발생하며, `dontAsk`를 포함합니다. `permissionDecision: "deny"`를 반환하는 hook은 `bypassPermissions` 모드 또는 `--dangerously-skip-permissions`에서도 도구를 차단합니다. 이를 통해 사용자가 권한 모드를 변경하여 우회할 수 없는 정책을 적용할 수 있습니다.1022`PreToolUse` hooks는 모든 [권한 모드](/docs/ko/permission-modes)에서 권한 모드 확인 전에 발생하며, `dontAsk`를 포함합니다. `permissionDecision: "deny"`를 반환하는 hook은 `bypassPermissions` 모드 또는 `--dangerously-skip-permissions`에서도 도구를 차단합니다. 이를 통해 사용자가 권한 모드를 변경하여 우회할 수 없는 정책을 적용할 수 있습니다.

1017 1023 

1018반대는 성립하지 않습니다. `"allow"`를 반환하는 훅은 설정의 거부 규칙을 우회하지 않으며, [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기, [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구, 또는 해당 설정이 Claude Code에 도달하는 세션에서 [조직이 `ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구에 대한 프롬프트를 억제할 수 없습니다. 설정 파일 및 플러그인의 `hooks/hooks.json`에 있는 훅은 제한을 강화할 수 있지만 권한 규칙이 허용하는 범위를 넘어 완화할 수는 없습니다.1024반대는 성립하지 않습니다. 설정 파일 및 플러그인의 `hooks/hooks.json`에 있는 훅은 제한을 강화할 수 있지만 권한 규칙이 허용하는 범위를 넘어 완화할 수는 없습니다. `"allow"`를 반환하는 훅은 설정의 거부 규칙을 우회하지 않으며, 다음에 대한 프롬프트를 억제할 수 없습니다:

1025 

1026* [네트워크 경로](/docs/ko/permissions#network-paths)에서의 읽기

1027* [`requiresUserInteraction`](/docs/ko/mcp#require-approval-for-a-specific-tool)으로 표시된 MCP 도구

1028* 해당 설정이 Claude Code에 도달하는 세션에서 [조직이 `ask`로 설정한](/docs/ko/mcp#organization-controls-on-connector-tools) 커넥터 도구

1029 

1030[플랜 모드](/docs/ko/permissions#hook-approvals-in-plan-mode)에서 `PreToolUse` 훅이 파일 편집에 대해 `"allow"`를 반환하면, 훅이 없을 때 해당 편집이 받았을 것과 동일한 프롬프트, 차단 또는 승인이 적용됩니다. 훅 승인에 대한 이 제한을 해제하려면 [플랜을 승인](/docs/ko/permission-modes#review-and-approve-a-plan)하거나 다른 권한 모드로 전환합니다.

1019 1031 

1020설치한 [mod](/docs/ko/plugins/mods/overview)가 `tool.check`를 처리하는 경우, 훅이 관리형 설정에 있지 않는 한 `PreToolUse` 훅이 차단한 호출을 승인할 수 있습니다. [훅으로 권한 확장](/docs/ko/permissions#extend-permissions-with-hooks)에서 어떤 규칙이 mod보다 우선하는지 나열합니다.1032설치한 [mod](/docs/ko/plugins/mods/overview)가 `tool.check`를 처리하는 경우, 훅이 관리형 설정에 있지 않는 한 `PreToolUse` 훅이 차단한 호출을 승인할 수 있습니다. 플랜 모드에서 mod는 이러한 호출이 읽기 전용인 경우 승인할 수 있지만, 파일 편집이나 읽기 전용이 아닌 다른 호출은 승인할 수 없습니다. [훅으로 권한 확장](/docs/ko/permissions#extend-permissions-with-hooks)에서 어떤 규칙이 mod보다 우선하는지 나열합니다.

1021 1033 

1022<h3 id="hook-not-firing">1034<h3 id="hook-not-firing">

1023 Hook이 발생하지 않음1035 Hook이 발생하지 않음


1042 ```1054 ```

1043* "command not found"가 표시되면 절대 경로를 사용하거나 `${CLAUDE_PROJECT_DIR}`을 사용하여 스크립트를 참조합니다. 셸 인용을 완전히 피하려면 `"args": []`를 추가하여 [exec form](/docs/ko/hooks#exec-form-and-shell-form)으로 전환하면 셸 없이 스크립트를 직접 생성합니다1055* "command not found"가 표시되면 절대 경로를 사용하거나 `${CLAUDE_PROJECT_DIR}`을 사용하여 스크립트를 참조합니다. 셸 인용을 완전히 피하려면 `"args": []`를 추가하여 [exec form](/docs/ko/hooks#exec-form-and-shell-form)으로 전환하면 셸 없이 스크립트를 직접 생성합니다

1044* "jq: command not found"가 표시되면 `jq`를 설치하거나 JSON 구문 분석을 위해 Python/Node.js를 사용합니다1056* "jq: command not found"가 표시되면 `jq`를 설치하거나 JSON 구문 분석을 위해 Python/Node.js를 사용합니다

1057* 메시지에 `blocking because Git Bash wasn't found`가 포함되어 있으면 Windows 환경에서 Claude Code가 Git Bash를 찾지 못했고, 실패하거나 시간 초과된 훅이 도구 호출을 차단한 것입니다. 해결 방법은 [Git Bash가 없는 Windows에서 실패한 훅](/docs/ko/hooks#failed-hooks-on-windows-without-git-bash)을 참조하십시오

1045* 공지에 JSON 검증 메시지가 표시되면 hook의 stdout이 JSON으로 구문 분석되었지만 스키마 검증에 실패했습니다. JSON 구문 분석 메시지가 표시되면 stdout이 JSON 객체처럼 보였지만 유효한 JSON이 아니었습니다. 둘 다 종료 0에서도 발생합니다.1058* 공지에 JSON 검증 메시지가 표시되면 hook의 stdout이 JSON으로 구문 분석되었지만 스키마 검증에 실패했습니다. JSON 구문 분석 메시지가 표시되면 stdout이 JSON 객체처럼 보였지만 유효한 JSON이 아니었습니다. 둘 다 종료 0에서도 발생합니다.

1046 1059 

1047 구문 분석 실패를 수정하려면 문자열 연결 대신 `jq`와 같은 JSON 인코더로 페이로드를 빌드하여 값 내의 따옴표와 백슬래시가 이스케이프됩니다. 참조의 [Exit code output](/docs/ko/hooks#exit-code-output) 섹션에서 종료 코드 및 JSON 조합을 다룹니다1060 구문 분석 실패를 수정하려면 문자열 연결 대신 `jq`와 같은 JSON 인코더로 페이로드를 빌드하여 값 내의 따옴표와 백슬래시가 이스케이프됩니다. 참조의 [Exit code output](/docs/ko/hooks#exit-code-output) 섹션에서 종료 코드 및 JSON 조합을 다룹니다

Details

1091* `event.sequence`: [이벤트 상관 속성](#event-correlation-attributes)에서 설명한 이벤트 순서 지정을 위한 프로세스당 카운터1091* `event.sequence`: [이벤트 상관 속성](#event-correlation-attributes)에서 설명한 이벤트 순서 지정을 위한 프로세스당 카운터

1092* `from_mode`: 이전 권한 모드, 예: `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, 또는 `"bypassPermissions"`1092* `from_mode`: 이전 권한 모드, 예: `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, 또는 `"bypassPermissions"`

1093* `to_mode`: 새로운 권한 모드1093* `to_mode`: 새로운 권한 모드

1094* `trigger`: 변경을 야기한 것. `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"`, 또는 `"auto_opt_in"` 중 하나. 전환이 SDK 또는 브리지에서 시작될 때 없음.1094* `trigger`: 변경을 일으킨 원인입니다. `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"`, `"auto_opt_in"` 중 하나입니다. SDK가 [`setPermissionMode()`](/docs/ko/agent-sdk/typescript#query-object)를 통해 권한 모드를 설정하는 경우처럼 일부 변경에서는 없습니다

1095 1095 

1096<h4 id="auth-event">1096<h4 id="auth-event">

1097 인증 이벤트1097 인증 이벤트

Details

203 스트리밍 유휴 감시견203 스트리밍 유휴 감시견

204</h2>204</h2>

205 205 

206Claude Code는 네 개의 독립적인 타이머를 실행하여 스트리밍 모델 응답이 조용해지면 중단하므로, 끊긴 연결이 중단되지 않고 대신 실패하고 재시도합니다. 첫 바이트 데드라인은 응답 헤더를 기다리는 동안 응답이 도착하기 전에 적용됩니다. 다른 세 개의 타이머는 각각 다른 신호에 대해 라이브 응답을 감시합니다.206Claude Code는 네 개의 독립적인 타이머를 실행하여 스트리밍 모델 응답이 조용해지면 중단하므로, 끊긴 연결이 중단되지 않고 대신 실패하고 재시도합니다. 응답 헤더를 전혀 받지 못한 요청은 다음 두 가지 중 하나로 종료됩니다:

207 

208* **첫 바이트 데드라인이 실행되는 곳**: 첫 번째 시도가 해당 데드라인에 종료됩니다. 이를 변경하려면 `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`를 설정하세요. 재시도의 대기 시간에 대해서는 [API에서 응답 없음](/docs/ko/errors#no-response-from-api)을 참조하세요.

209* **다른 연결에서**: 본문 유휴 타임아웃을 끄지 않았다면, 본문 유휴 타임아웃이 발동하는 5\~6분 후에 요청이 종료됩니다. 더 빨리 종료하려면 `API_TIMEOUT_MS`를 낮추세요.

207 210 

208| 타이머 | 중단 조건 | 실행 위치 | 기본 타임아웃 |211| 타이머 | 중단 조건 | 실행 위치 | 기본 타임아웃 |

209| :- | :- | :- | :- |212| :- | :- | :- | :- |

210| 첫 바이트 데드라인 | Claude Code가 요청을 보낸 후 응답 헤더가 도착하지 않음 | 직접 Anthropic API 및 [AWS의 Claude Platform](/docs/ko/claude-platform-on-aws) (HTTPS 프록시 포함), 단 `ANTHROPIC_BASE_URL` 또는 `ANTHROPIC_AWS_BASE_URL`이 [게이트웨이](/docs/ko/gateways)를 통해 라우팅하는 경우는 제외. Amazon Bedrock에서 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`로 옵트인; Google Cloud의 Agent Platform 또는 Microsoft Foundry에서는 실행되지 않음 | 직접 Anthropic API에서 180초, 다른 곳에서 300초, 요청 본문 32KB당 1초 추가 |213| 첫 바이트 데드라인 | Claude Code가 요청을 보낸 후 응답 헤더가 도착하지 않음 | 직접 Anthropic API 및 [AWS의 Claude Platform](/docs/ko/claude-platform-on-aws) (HTTPS 프록시 포함), 단 `ANTHROPIC_BASE_URL` 또는 `ANTHROPIC_AWS_BASE_URL`이 [게이트웨이](/docs/ko/gateways)를 통해 라우팅하는 경우는 제외. Amazon Bedrock에서 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`로 옵트인; Google Cloud의 Agent Platform 또는 Microsoft Foundry, 또는 [Claude 앱 게이트웨이](/docs/ko/claude-apps-gateway) 세션에서는 실행되지 않음 | 직접 Anthropic API에서 180초, 다른 곳에서 300초, 요청 본문 32KB당 1초 추가 |

211| 이벤트 수준 감시견 | 응답 이벤트가 파싱되지 않음. 바이트 수준 감시견이 Amazon Bedrock 이외의 연결에서 실행되는 경우, 도착한 바이트(keep-alive ping 포함)도 이 감시견을 재설정하며, 약 5분 동안 파싱된 이벤트가 없을 수 있음 | 모든 제공자 | 300초 |214| 이벤트 수준 감시견 | 응답 이벤트가 파싱되지 않음. 바이트 수준 감시견이 Amazon Bedrock 이외의 연결에서 실행되는 경우, 도착한 바이트(keep-alive ping 포함)도 이 감시견을 재설정하며, 약 5분 동안 파싱된 이벤트가 없을 수 있음 | 모든 제공자 | 300초 |

212| 바이트 수준 감시견 | 와이어에 바이트가 도착하지 않음 (SSE keep-alive ping 포함) | 직접 Anthropic API, [AWS의 Claude Platform](/docs/ko/claude-platform-on-aws), 및 [게이트웨이](/docs/ko/gateways) 연결 (사용자 정의 `ANTHROPIC_BASE_URL` 포함). Amazon Bedrock `vnd.amazon.eventstream` 응답에서 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`로 옵트인; Google Cloud의 Agent Platform 또는 Microsoft Foundry에서는 실행되지 않음 | 직접 Anthropic API에서 180초. AWS의 Claude Platform, Amazon Bedrock, [Claude 앱 게이트웨이](/docs/ko/claude-apps-gateway) 세션, 사용자 정의 `ANTHROPIC_BASE_URL`을 통하는 경우 300초 |215| 바이트 수준 감시견 | 와이어에 바이트가 도착하지 않음 (SSE keep-alive ping 포함) | 직접 Anthropic API, [AWS의 Claude Platform](/docs/ko/claude-platform-on-aws), 및 [게이트웨이](/docs/ko/gateways) 연결 (사용자 정의 `ANTHROPIC_BASE_URL` 포함). Amazon Bedrock `vnd.amazon.eventstream` 응답에서 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`로 옵트인; Google Cloud의 Agent Platform 또는 Microsoft Foundry에서는 실행되지 않음 | 직접 Anthropic API에서 180초. AWS의 Claude Platform, Amazon Bedrock, [Claude 앱 게이트웨이](/docs/ko/claude-apps-gateway) 세션, 사용자 정의 `ANTHROPIC_BASE_URL`을 통하는 경우 300초 |

213| 본문 유휴 타임아웃 | 5분 동안 바이트가 도착하지 않음 | 직접 Anthropic API, AWS의 Claude Platform, 및 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`이 설정된 Amazon Bedrock 이외의 제공자 (단, [`API_FORCE_IDLE_TIMEOUT`](/docs/ko/env-vars)이 이를 변경하지 않는 한) | 5분 |216| 본문 유휴 타임아웃 | 응답 헤더 대기 시간을 포함하여 5분 동안 바이트가 도착하지 않음 | 직접 Anthropic API, AWS의 Claude Platform, 및 `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`이 설정된 Amazon Bedrock 이외의 제공자 (단, [`API_FORCE_IDLE_TIMEOUT`](/docs/ko/env-vars)이 이를 변경하지 않는 한) | 5분 |

214 217 

215`CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`을 설정하면, 바이트 수준 감시견이 Bedrock에서 본문 유휴 타임아웃을 대체하며 함께 실행되지 않습니다. 그러면 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`도 Bedrock 스트림이 Claude Code가 연결을 끊긴 것으로 간주하기 전에 얼마나 오래 조용할 수 있는지를 제어하며, 아래 나열된 제한 범위 내입니다. 도착한 바이트는 여전히 Bedrock에서 이벤트 수준 감시견을 재설정하지 않습니다. 디버그 로깅이 켜져 있으면, 각 Bedrock 스트림은 `wire-heartbeat: _chunkTimes absent`로 시작하는 디버그 메시지를 기록합니다.218`CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`을 설정하면, 바이트 수준 감시견이 Bedrock에서 본문 유휴 타임아웃을 대체하며 함께 실행되지 않습니다. 그러면 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`도 Bedrock 스트림이 Claude Code가 연결을 끊긴 것으로 간주하기 전에 얼마나 오래 조용할 수 있는지를 제어하며, 아래 나열된 제한 범위 내입니다. 도착한 바이트는 여전히 Bedrock에서 이벤트 수준 감시견을 재설정하지 않습니다. 디버그 로깅이 켜져 있으면, 각 Bedrock 스트림은 `wire-heartbeat: _chunkTimes absent`로 시작하는 디버그 메시지를 기록합니다.

216 219 


220* `CLAUDE_STREAM_IDLE_TIMEOUT_MS`는 두 감시견의 타임아웃을 설정합니다. Claude Code는 5분 미만의 값을 5분으로 올리고, 바이트 수준 감시견의 값을 30분으로 제한합니다.223* `CLAUDE_STREAM_IDLE_TIMEOUT_MS`는 두 감시견의 타임아웃을 설정합니다. Claude Code는 5분 미만의 값을 5분으로 올리고, 바이트 수준 감시견의 값을 30분으로 제한합니다.

221* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS`는 이벤트 수준 감시견을 변경하지 않고 바이트 수준 감시견의 타임아웃을 설정하며, 10초에서 30분 사이로 제한되고, 해당 감시견에 대해 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`보다 우선합니다.224* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS`는 이벤트 수준 감시견을 변경하지 않고 바이트 수준 감시견의 타임아웃을 설정하며, 10초에서 30분 사이로 제한되고, 해당 감시견에 대해 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`보다 우선합니다.

222* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`는 첫 바이트 데드라인을 직접 설정합니다. 설정하지 않으면 Claude Code는 바이트 수준 감시견의 타임아웃을 사용하므로, `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 및 `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS`도 데드라인을 변경합니다. 제한, 업로드 허용량, `API_TIMEOUT_MS` 상한, 및 응답 없음 중단 후 재시도가 대기하는 시간에 대해서는 [API에서 응답 없음](/docs/ko/errors#no-response-from-api)을 참조하세요.225* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`는 첫 바이트 데드라인을 직접 설정합니다. 설정하지 않으면 Claude Code는 바이트 수준 감시견의 타임아웃을 사용하므로, `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 및 `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS`도 데드라인을 변경합니다. 제한, 업로드 허용량, `API_TIMEOUT_MS` 상한, 및 응답 없음 중단 후 재시도가 대기하는 시간에 대해서는 [API에서 응답 없음](/docs/ko/errors#no-response-from-api)을 참조하세요.

226* `API_TIMEOUT_MS`는 응답 헤더 대기 시간을 제한합니다. Claude 앱 게이트웨이 세션처럼 첫 바이트 데드라인이 실행되지 않는 곳에서는, 응답을 받지 못한 요청을 더 빨리 재시도하려면 5분에 해당하는 `300000`보다 낮게 설정하세요. 예상되는 가장 긴 헤더 대기 시간과 가장 긴 [비스트리밍 요청](/docs/ko/errors#streaming-response-ended-before-any-complete-data-was-received)보다 높게 유지하세요. 그보다 오래 걸리는 요청은 재시도할 때마다 다시 시간 초과됩니다.

223* `API_FORCE_IDLE_TIMEOUT`을 `0`으로 설정하면 본문 유휴 타임아웃이 꺼지고, `1`로 설정하면 모든 제공자에 대해 켜집니다. 감시견은 이와 독립적으로 실행되므로, 스트림이 해당 임계값보다 오래 일시 중지되도록 하려면 감시견도 올리거나 비활성화하세요.227* `API_FORCE_IDLE_TIMEOUT`을 `0`으로 설정하면 본문 유휴 타임아웃이 꺼지고, `1`로 설정하면 모든 제공자에 대해 켜집니다. 감시견은 이와 독립적으로 실행되므로, 스트림이 해당 임계값보다 오래 일시 중지되도록 하려면 감시견도 올리거나 비활성화하세요.

224 228 

225감시견이 정체된 스트림을 중단하면, Claude Code는 중단을 스트림 중간 실패로 취급하며, 표시되는 내용은 응답이 얼마나 진행되었는지에 따라 달라집니다. Claude Code는 요청을 재시도하거나 오류로 턴을 종료하고, 완료된 출력을 유지하며 [불완전한 응답 알림](/docs/ko/errors#the-response-above-may-be-incomplete)을 표시하거나, 턴을 정상적으로 종료합니다. [자동 재시도](/docs/ko/errors#automatic-retries)는 각 결과가 적용되는 위치를 설명합니다.229감시견이 정체된 스트림을 중단하면, Claude Code는 중단을 스트림 중간 실패로 취급하며, 표시되는 내용은 응답이 얼마나 진행되었는지에 따라 달라집니다. Claude Code는 요청을 재시도하거나 오류로 턴을 종료하고, 완료된 출력을 유지하며 [불완전한 응답 알림](/docs/ko/errors#the-response-above-may-be-incomplete)을 표시하거나, 턴을 정상적으로 종료합니다. [자동 재시도](/docs/ko/errors#automatic-retries)는 각 결과가 적용되는 위치를 설명합니다.

Details

627 627 

628Claude Code는 [`--restricted`](/docs/ko/cli-reference#cli-flags)로 시작한 세션에서 `bypassPermissions`를 거부합니다. `--restricted`는 Claude Code v2.1.248 이상이 필요합니다.628Claude Code는 [`--restricted`](/docs/ko/cli-reference#cli-flags)로 시작한 세션에서 `bypassPermissions`를 거부합니다. `--restricted`는 Claude Code v2.1.248 이상이 필요합니다.

629 629 

630이 모드를 활성화하여 대화형 세션을 처음 시작할 때, Claude Code는 권한 확인 없이 수행된 작업에 대한 책임을 수락하도록 요청하는 경고 대화상자를 표시합니다:630<span id="bypass-permissions-acceptance" />이 모드를 활성화하여 대화형 세션을 처음 시작할 때, Claude Code는 권한 확인 없이 수행된 작업에 대한 책임을 수락하도록 요청하는 경고 대화상자를 표시합니다:

631 631 

632* **수락하는 경우**: Claude Code는 `skipDangerousModePermissionPrompt`를 `~/.claude/settings.json`에서 `true`로 설정하므로 이후 세션은 대화상자를 건너뜁니다. 대화상자를 다시 보려면 해당 파일에서 키를 제거하거나 `false`로 설정하십시오. [`skipDangerousModePermissionPrompt` 참조](/docs/ko/settings-reference#skipdangerousmodepermissionprompt)는 사용자 또는 조직이 설정할 수 있는 다른 설정 파일을 나열합니다.632* **수락하는 경우**: Claude Code는 `skipDangerousModePermissionPrompt`를 `~/.claude/settings.json`에서 `true`로 설정하므로 이후 세션은 대화상자를 건너뜁니다. 대화상자를 다시 보려면 해당 파일에서 키를 제거하거나 `false`로 설정하십시오. [`skipDangerousModePermissionPrompt` 참조](/docs/ko/settings-reference#skipdangerousmodepermissionprompt)는 사용자 또는 조직이 설정할 수 있는 다른 설정 파일을 나열합니다.

633* **거부하는 경우**: Claude Code가 종료됩니다.633* **거부하는 경우**: Claude Code가 종료됩니다.


635[비대화형 모드](/docs/ko/headless)에서는 대화상자가 표시되지 않습니다. [백그라운드 세션](/docs/ko/agent-view)은 수락 기록이 사용자 설정 또는 관리형 설정에 있을 때 이를 적용합니다:635[비대화형 모드](/docs/ko/headless)에서는 대화상자가 표시되지 않습니다. [백그라운드 세션](/docs/ko/agent-view)은 수락 기록이 사용자 설정 또는 관리형 설정에 있을 때 이를 적용합니다:

636 636 

637* 수락 기록이 없으면, 대화형 세션에서 대화상자를 수락할 때까지 `claude --bg --permission-mode bypassPermissions`가 거부됩니다.637* 수락 기록이 없으면, 대화형 세션에서 대화상자를 수락할 때까지 `claude --bg --permission-mode bypassPermissions`가 거부됩니다.

638* `skipDangerousModePermissionPrompt`가 `.claude/settings.local.json`에만 설정되어 있으면, 백그라운드 세션은 우회 요청을 무시한 채 시작되며 `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true` 알림을 고정 표시합니다. 우회가 적용되도록 하려면 해당 키를 `~/.claude/settings.json`에 추가한 다음 새 백그라운드 세션을 시작하십시오.638* `skipDangerousModePermissionPrompt`가 `.claude/settings.local.json`에만 설정되어 있으면, 백그라운드 세션은 우회 요청을 무시한 채 시작되며 `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true` 알림을 고정 표시합니다. 해당 키를 `~/.claude/settings.json`에 추가한 다음 새 백그라운드 세션을 시작하십시오. 알림을 표시하는 세션은 계속 실행됩니다:

639 * `--allow-dangerously-skip-permissions`가 무시된 경우, `bypassPermissions`는 해당 세션의 `Shift+Tab` 순환에서 제외됩니다.

640 * `--permission-mode bypassPermissions` 또는 `--dangerously-skip-permissions`가 무시된 경우, 세션은 대신 Manual 모드로 시작됩니다.

639 641 

640Linux 및 macOS에서, Claude Code는 root 또는 `sudo` 권한으로 실행할 때 이 모드에서 시작하기를 거부합니다:642Linux 및 macOS에서, Claude Code는 root 또는 `sudo` 권한으로 실행할 때 `bypassPermissions` 모드에서 시작하기를 거부합니다:

641 643 

642```text theme={null}644```text theme={null}

643--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons645--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons


692 * `--restricted` 없이 시작된 세션에서 `~/.claude/projects/<project>/memory/` 같은 프로젝트 [자동 메모리](/docs/ko/memory#storage-location) 디렉토리에 있는 markdown 파일694 * `--restricted` 없이 시작된 세션에서 `~/.claude/projects/<project>/memory/` 같은 프로젝트 [자동 메모리](/docs/ko/memory#storage-location) 디렉토리에 있는 markdown 파일

693 * `--restricted` 없이 시작된 세션에서 `.claude/agent-memory/` 같은 [서브에이전트 메모리](/docs/ko/sub-agents#enable-persistent-memory) 디렉토리에 있는 markdown 파일695 * `--restricted` 없이 시작된 세션에서 `.claude/agent-memory/` 같은 [서브에이전트 메모리](/docs/ko/sub-agents#enable-persistent-memory) 디렉토리에 있는 markdown 파일

694* [`--plugin-dir`](/docs/ko/plugins/mods/create#change-a-mod-with-claude)로 로드한 디렉토리. Claude Code는 파일이 변경될 때 이 디렉토리에서 mod의 코드를 다시 로드하고 실행하기 때문입니다.696* [`--plugin-dir`](/docs/ko/plugins/mods/create#change-a-mod-with-claude)로 로드한 디렉토리. Claude Code는 파일이 변경될 때 이 디렉토리에서 mod의 코드를 다시 로드하고 실행하기 때문입니다.

697* `~/.claude/dev-mods/` 또는 [`CLAUDE_CONFIG_DIR`](/docs/ko/env-vars)이 가리키는 디렉토리의 `dev-mods/`. Claude가 [사용자를 위해 작성한 mod](/docs/ko/plugins/mods/create#ask-claude-for-a-mod)를 저장하는 위치입니다.

695 698 

696보호된 파일:699보호된 파일:

697 700 

permissions.md +20 −2

Details

595 MCP595 MCP

596</h3>596</h3>

597 597 

598MCP 규칙은 Claude Code에서 구성된 서버 이름을 사용하며, 선택적으로 해당 서버의 도구 이름이 뒤따릅니다.598MCP 서버의 모든 도구와 일치시키려면 `mcp__<server>__*`를 작성합니다. 하나의 도구와 일치시키려면 전체 이름인 `mcp__<server>__<tool>`을 작성합니다.

599 599 

600* `mcp__puppeteer`는 `puppeteer` 서버에서 제공하는 모든 도구와 일치합니다600* `mcp__puppeteer`는 `puppeteer` 서버에서 제공하는 모든 도구와 일치합니다

601* `mcp__puppeteer__*`는 와일드카드 구문을 사용하며 `puppeteer` 서버의 모든 도구와도 일치합니다601* `mcp__puppeteer__*`는 와일드카드 구문을 사용하며 `puppeteer` 서버의 모든 도구와도 일치합니다

602* `mcp__puppeteer__puppeteer_navigate`는 `puppeteer` 서버에서 제공하는 `puppeteer_navigate` 도구와 일치합니다602* `mcp__puppeteer__puppeteer_navigate`는 `puppeteer` 서버에서 제공하는 `puppeteer_navigate` 도구와 일치합니다

603 603 

604`<server>`에는 해당 서버의 도구 이름에 나타나는 형태 그대로 서버 이름을 작성합니다. 다음 예시는 특수 문자가 포함된 이름, 플러그인의 서버, `__`를 포함하거나 `_`로 끝나는 이름에 대해 작성할 규칙을 보여줍니다:

605 

606* **`.` 또는 공백과 같은 문자가 포함된 이름**: 해당 문자는 `_`가 되므로 `my.server`로 구성한 서버의 경우 `mcp__my_server__*`를 작성합니다

607* **플러그인이 제공하는 서버**: `<server>`는 [플러그인 범위 형식](/docs/ko/mcp#plugin-provided-mcp-servers)을 사용하므로 `my-plugin`이라는 플러그인의 `database-tools` 서버의 경우 `mcp__plugin_my-plugin_database-tools__*`를 작성합니다

608* **`__`를 포함하거나 `_`로 끝나는 `<server>`**: 전체 이름으로 와일드카드 형식 `mcp__<server>__*`를 작성합니다. `reports__v2`라는 서버의 경우 `mcp__reports__v2__*`를 작성합니다. 베어 `mcp__reports__v2`와 더 짧은 `mcp__reports`는 allow 규칙으로서 해당 서버의 도구와 일치하지 않습니다. Claude Code가 둘 다 `reports`라는 서버에 대한 규칙으로 읽기 때문입니다

609 

604조직이 [claude.ai 커넥터](/docs/ko/mcp#organization-controls-on-connector-tools) 도구를 `ask`로 설정한 경우, 해당 설정이 세션의 Claude Code에 도달하면 해당 도구에 대한 allow 규칙은 적용되지 않습니다: Claude Code는 `auto` 및 `bypassPermissions` 모드에서도 모든 호출에 대해 프롬프트합니다. 절대 프롬프트하지 않는 `dontAsk` 모드에서는 Claude Code가 호출을 거부합니다. 커넥터에서 Claude Code가 자체적으로 가져오는 도구는 `mcp__claude_ai_<server>__<tool>`로 나타납니다.610조직이 [claude.ai 커넥터](/docs/ko/mcp#organization-controls-on-connector-tools) 도구를 `ask`로 설정한 경우, 해당 설정이 세션의 Claude Code에 도달하면 해당 도구에 대한 allow 규칙은 적용되지 않습니다: Claude Code는 `auto` 및 `bypassPermissions` 모드에서도 모든 호출에 대해 프롬프트합니다. 절대 프롬프트하지 않는 `dontAsk` 모드에서는 Claude Code가 호출을 거부합니다. 커넥터에서 Claude Code가 자체적으로 가져오는 도구는 `mcp__claude_ai_<server>__<tool>`로 나타납니다.

605 611 

606Claude Desktop 앱의 [Cowork](https://claude.com/docs/cowork/overview) 세션에서 Claude는 기본 제공 `Bash` 도구 대신 Cowork의 `mcp__workspace__bash` 도구를 통해 셸 명령을 실행하고, Cowork는 마찬가지로 웹 fetch를 위해 `mcp__workspace__web_fetch`를 제공합니다. Claude Code는 또한 전체 `Bash` 또는 `WebFetch` 도구의 이름을 지정하는 deny 규칙을 이러한 Cowork 도구에 적용하므로 관리형 `Bash` deny 규칙은 Claude가 Cowork에서 셸 명령을 실행하는 것을 중지합니다. Claude Code가 이러한 호출을 차단할 때 메시지는 Cowork 도구의 이름을 지정합니다: `Permission to use mcp__workspace__bash has been denied.` Allow 규칙은 이월되지 않습니다: Claude Code는 절대 `Bash` allow 규칙을 `mcp__workspace__bash`에 적용하지 않습니다.612Claude Desktop 앱의 [Cowork](https://claude.com/docs/cowork/overview) 세션에서 Claude는 기본 제공 `Bash` 도구 대신 Cowork의 `mcp__workspace__bash` 도구를 통해 셸 명령을 실행하고, Cowork는 마찬가지로 웹 fetch를 위해 `mcp__workspace__web_fetch`를 제공합니다. Claude Code는 또한 전체 `Bash` 또는 `WebFetch` 도구의 이름을 지정하는 deny 규칙을 이러한 Cowork 도구에 적용하므로 관리형 `Bash` deny 규칙은 Claude가 Cowork에서 셸 명령을 실행하는 것을 중지합니다. Claude Code가 이러한 호출을 차단할 때 메시지는 Cowork 도구의 이름을 지정합니다: `Permission to use mcp__workspace__bash has been denied.` Allow 규칙은 이월되지 않습니다: Claude Code는 절대 `Bash` allow 규칙을 `mcp__workspace__bash`에 적용하지 않습니다.


649 655 

650[Claude Code 훅](/docs/ko/hooks-guide)을 사용하면 런타임에 권한을 평가하는 사용자 정의 셸 명령을 등록할 수 있습니다. Claude Code가 도구 호출을 수행할 때, PreToolUse 훅은 [`EndConversation`](/docs/ko/tools-reference#endconversation-tool-behavior)을 제외한 모든 도구에 대해 권한 프롬프트 전에 실행됩니다. 훅 출력은 도구 호출을 거부하거나, 프롬프트를 강제하거나, 프롬프트를 건너뛰어 호출을 진행하도록 할 수 있습니다.656[Claude Code 훅](/docs/ko/hooks-guide)을 사용하면 런타임에 권한을 평가하는 사용자 정의 셸 명령을 등록할 수 있습니다. Claude Code가 도구 호출을 수행할 때, PreToolUse 훅은 [`EndConversation`](/docs/ko/tools-reference#endconversation-tool-behavior)을 제외한 모든 도구에 대해 권한 프롬프트 전에 실행됩니다. 훅 출력은 도구 호출을 거부하거나, 프롬프트를 강제하거나, 프롬프트를 건너뛰어 호출을 진행하도록 할 수 있습니다.

651 657 

658<h3 id="precedence-among-rules-hooks-and-mods">

659 규칙, 훅, mod 간의 우선순위

660</h3>

661 

652PreToolUse 훅 결정은 권한 규칙을 우회하지 않습니다. Claude Code는 PreToolUse 훅이 반환하는 값에 관계없이 deny 및 ask 규칙을 평가합니다. 일치하는 deny 규칙은 호출을 차단하고, 일치하는 ask 규칙은 훅이 `"allow"` 또는 `"ask"`를 반환했을 때도 여전히 프롬프트합니다. 이는 [권한 관리](#manage-permissions)에서 설명한 deny 우선 우선순위를 유지하며, 관리형 설정에서 설정한 deny 규칙을 포함합니다.662PreToolUse 훅 결정은 권한 규칙을 우회하지 않습니다. Claude Code는 PreToolUse 훅이 반환하는 값에 관계없이 deny 및 ask 규칙을 평가합니다. 일치하는 deny 규칙은 호출을 차단하고, 일치하는 ask 규칙은 훅이 `"allow"` 또는 `"ask"`를 반환했을 때도 여전히 프롬프트합니다. 이는 [권한 관리](#manage-permissions)에서 설명한 deny 우선 우선순위를 유지하며, 관리형 설정에서 설정한 deny 규칙을 포함합니다.

653 663 

654이 우선순위는 설정 파일의 훅과 플러그인의 `hooks/hooks.json`에 있는 훅을 포함합니다. 설치한 [mod](/docs/ko/plugins/mods/overview)가 `tool.check`를 처리하면 규칙과 `PreToolUse` 훅이 결정한 후에 응답하며, 그 응답은 이들을 대체할 수 있습니다:664이 우선순위는 설정 파일의 훅과 플러그인의 `hooks/hooks.json`에 있는 훅을 포함합니다. 설치한 [mod](/docs/ko/plugins/mods/overview)가 `tool.check`를 처리하면 규칙과 `PreToolUse` 훅이 결정한 후에 응답합니다. [플랜 모드](#hook-approvals-in-plan-mode) 밖에서 또는 읽기 전용 호출의 경우, 그 응답은 이들을 대체할 수 있습니다:

655 665 

656* **Ask 규칙**: mod는 ask 규칙이 프롬프트할 호출을 승인할 수 있습니다666* **Ask 규칙**: mod는 ask 규칙이 프롬프트할 호출을 승인할 수 있습니다

657* **`PreToolUse` 훅의 차단**: mod는 훅이 관리형 설정에 있지 않은 경우 호출을 승인할 수 있습니다667* **`PreToolUse` 훅의 차단**: mod는 훅이 관리형 설정에 있지 않은 경우 호출을 승인할 수 있습니다


664 674 

665차단 훅은 또한 allow 규칙보다 우선합니다. 종료 코드 2로 종료되는 훅은 권한 규칙이 평가되기 전에 도구 호출을 중지하므로, allow 규칙이 호출을 허용할 수 있는 경우에도 차단이 적용됩니다. 모든 Bash 명령을 프롬프트 없이 실행하되 차단하려는 몇 가지를 제외하려면, allow 목록에 `"Bash"`를 추가하고 해당 특정 명령을 거부하는 PreToolUse 훅을 등록합니다. 적응할 수 있는 훅 스크립트는 [보호된 파일에 대한 편집 차단](/docs/ko/hooks-guide#block-edits-to-protected-files)을 참조하세요.675차단 훅은 또한 allow 규칙보다 우선합니다. 종료 코드 2로 종료되는 훅은 권한 규칙이 평가되기 전에 도구 호출을 중지하므로, allow 규칙이 호출을 허용할 수 있는 경우에도 차단이 적용됩니다. 모든 Bash 명령을 프롬프트 없이 실행하되 차단하려는 몇 가지를 제외하려면, allow 목록에 `"Bash"`를 추가하고 해당 특정 명령을 거부하는 PreToolUse 훅을 등록합니다. 적응할 수 있는 훅 스크립트는 [보호된 파일에 대한 편집 차단](/docs/ko/hooks-guide#block-edits-to-protected-files)을 참조하세요.

666 676 

677<h3 id="hook-approvals-in-plan-mode">

678 플랜 모드에서의 훅 승인

679</h3>

680 

681[플랜 모드](/docs/ko/permission-modes#analyze-before-you-edit-with-plan-mode)에서는 `ExitPlanMode`를 제외하고, `PreToolUse` 훅의 `"allow"`가 파일 편집이나 읽기 전용이 아닌 다른 호출에 아무런 영향을 주지 않습니다. 훅이 없을 때 해당 호출이 받는 것과 동일한 프롬프트, 차단 또는 승인이 적용되며, Claude Code는 훅이 반환하는 `updatedInput`을 여전히 적용합니다. 훅이 [`ExitPlanMode`](/docs/ko/hooks#allow-with-updatedinput)에 `"allow"` 및 `updatedInput`으로 응답하면 해당 도구는 여전히 프롬프트 없이 실행됩니다.

682 

683플랜 모드에서는 `tool.check`를 처리하는 mod도 파일 편집이나 읽기 전용이 아닌 다른 호출을 승인할 수 없지만, 이러한 호출을 차단할 수는 있습니다. 훅 및 mod 승인에 대한 이 제한을 해제하려면 [플랜을 승인](/docs/ko/permission-modes#review-and-approve-a-plan)하거나 다른 권한 모드로 전환하세요.

684 

667<h2 id="working-directories">685<h2 id="working-directories">

668 작업 디렉토리686 작업 디렉토리

669</h2>687</h2>

Details

30 원하는 mod를 자유롭게 요청합니다. 예를 들어 `make a mod that shows the current git branch above the prompt`와 같이 요청할 수 있습니다. Claude는 세션의 mod 폴더 안에 mod 전용 디렉터리를 만들어 mod를 작성합니다. 세션의 mod 폴더는 `~/.claude/dev-mods/` 뒤에 세션 ID가 붙은 경로입니다. mod의 전체 경로는 `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`와 같은 형태입니다.30 원하는 mod를 자유롭게 요청합니다. 예를 들어 `make a mod that shows the current git branch above the prompt`와 같이 요청할 수 있습니다. Claude는 세션의 mod 폴더 안에 mod 전용 디렉터리를 만들어 mod를 작성합니다. 세션의 mod 폴더는 `~/.claude/dev-mods/` 뒤에 세션 ID가 붙은 경로입니다. mod의 전체 경로는 `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`와 같은 형태입니다.

31 31 

32 <Note>32 <Note>

33 `default` 및 `acceptEdits` [권한 모드](/docs/ko/permission-modes#protected-paths)에서는 `~/.claude`가 보호된 경로이므로, Claude가 mod의 각 파일을 생성하기 전에 Claude Code가 확인을 요청합니다. 표시되는 각 파일을 승인하십시오.33 `default` 및 `acceptEdits` [권한 모드](/docs/ko/permission-modes)에서는 mod 폴더가 [보호된 경로](/docs/ko/permission-modes#protected-paths)이므로, Claude가 mod의 각 파일을 생성하기 전에 Claude Code가 확인을 요청합니다. 표시되는 각 파일을 승인하십시오.

34 </Note>34 </Note>

35 </Step>35 </Step>

36 36 

Details

216})216})

217```217```

218 218 

219`main`에서는 규칙이 `git push`를 허용하더라도 훅이 `deny`를 반환합니다. 다른 브랜치에서, 그리고 다른 명령에 대해서는 mod가 없을 때와 동일한 결정이 적용됩니다.219이 훅은 `main`에서 `git push`를 거부하고 그 밖의 모든 호출은 그대로 통과시킵니다.

220 

221* **`main`에서**: 규칙이 `git push`를 허용하더라도 훅이 `deny`를 반환합니다

222* **다른 브랜치에서, 그리고 다른 명령의 경우**: 호출에는 mod가 없을 때와 동일한 결정이 적용됩니다

220 223 

221이 훅은 명령의 텍스트를 대조하므로 Claude를 위한 알림 정도로 취급해야 합니다. 모든 사람의 `main` 푸시를 차단하려면 Git 호스트에서 브랜치를 보호하세요.224이 훅은 명령의 텍스트를 대조하므로 Claude를 위한 알림 정도로 취급해야 합니다. 모든 사람의 `main` 푸시를 차단하려면 Git 호스트에서 브랜치를 보호하세요.

222 225 

223훅은 `allow`, `ask`, `deny`를 반환할 수 있으므로, 관리형 설정 외부의 `PreToolUse` 훅이 차단한 호출을 승인할 수도 있습니다. [훅으로 권한 확장하기](/docs/ko/permissions#extend-permissions-with-hooks)에서 mod보다 우선하는 결정을 확인할 수 있습니다.226훅은 `allow`, `ask`, `deny`를 반환할 수 있으므로, 관리형 설정 외부의 `PreToolUse` 훅이 차단한 호출을 승인할 수도 있습니다. [플랜 모드](/docs/ko/permissions#hook-approvals-in-plan-mode)에서 파일 편집처럼 읽기 전용이 아닌 호출의 경우, 훅은 `next(e)`가 반환하는 결정을 더 엄격하게 만들 수는 있지만 완화할 수는 없습니다. [훅으로 권한 확장하기](/docs/ko/permissions#extend-permissions-with-hooks)에서 mod보다 우선하는 결정을 확인할 수 있습니다.

224 227 

225<h3 id="rewrite-or-add-to-a-prompt">228<h3 id="rewrite-or-add-to-a-prompt">

226 프롬프트 다시 작성하거나 내용 추가하기229 프롬프트 다시 작성하거나 내용 추가하기


337* **관리형 설정의 `PreToolUse` 훅**: 첫 번째 mod의 `tool.call` 훅보다 먼저 실행되며, 이 훅 중 하나가 차단하면 그 결정이 최종이므로 어떤 mod도 해당 호출을 보지 못합니다.340* **관리형 설정의 `PreToolUse` 훅**: 첫 번째 mod의 `tool.call` 훅보다 먼저 실행되며, 이 훅 중 하나가 차단하면 그 결정이 최종이므로 어떤 mod도 해당 호출을 보지 못합니다.

338* **그 밖의 모든 설정 파일과 플러그인의 `hooks/hooks.json`에 있는 `PreToolUse` 훅**: Claude Code 자체 동작의 일부로서 마지막 mod가 `next`를 호출한 후에 실행됩니다. `next`를 호출하지 않고 `tool.call`에 응답하는 mod는 이 훅의 실행을 막으며, `next`를 호출하는 mod는 반환되는 결과에서 이 훅의 결정을 확인할 수 있습니다.341* **그 밖의 모든 설정 파일과 플러그인의 `hooks/hooks.json`에 있는 `PreToolUse` 훅**: Claude Code 자체 동작의 일부로서 마지막 mod가 `next`를 호출한 후에 실행됩니다. `next`를 호출하지 않고 `tool.call`에 응답하는 mod는 이 훅의 실행을 막으며, `next`를 호출하는 mod는 반환되는 결과에서 이 훅의 결정을 확인할 수 있습니다.

339 342 

340[`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked)는 이러한 훅과 권한 규칙이 결정을 내린 후에 발생하므로, 여기에 연결된 훅은 두 번째 그룹의 훅이 차단한 호출을 승인할 수 있습니다.343[`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) 훅은 관리형 설정 외부의 `PreToolUse` 훅이 차단한 호출을 승인할 수 있습니다. `tool.check`는 이러한 훅과 권한 규칙이 결정을 내린 후에 발생하기 때문입니다. 플랜 모드에서는 `tool.check` 훅이 이러한 호출을 읽기 전용인 경우에는 승인할 수 있지만, 파일 편집이나 읽기 전용이 아닌 다른 호출은 승인할 수 없습니다.

341 344 

342<h3 id="handle-a-hook-that-fails">345<h3 id="handle-a-hook-that-fails">

343 실패한 훅 처리하기346 실패한 훅 처리하기

Details

205 205 

206요약을 생성하기 위해 Claude Code는 대화와 같은 시스템 프롬프트, 도구, 기록을 가진 별도의 요청을 보내고 최종 사용자 메시지로 요약 지침을 추가합니다. 캐시가 따뜻한 동안 해당 요청은 캐시에서 접두사를 읽으므로 세션 중간 `/compact`는 컨텍스트 크기가 제안하는 것의 일부 비용이 들고 대부분의 시간을 요약 생성에 소비합니다.206요약을 생성하기 위해 Claude Code는 대화와 같은 시스템 프롬프트, 도구, 기록을 가진 별도의 요청을 보내고 최종 사용자 메시지로 요약 지침을 추가합니다. 캐시가 따뜻한 동안 해당 요청은 캐시에서 접두사를 읽으므로 세션 중간 `/compact`는 컨텍스트 크기가 제안하는 것의 일부 비용이 들고 대부분의 시간을 요약 생성에 소비합니다.

207 207 

208[캐시 수명](#cache-lifetime)보다 긴 휴식 후에는 읽을 캐시가 남아 있지 않으므로 요약 요청은 전체 기록을 캐시되지 않은 입력으로 다시 처리합니다. 이것이 [이전 세션을 재개](/docs/ko/sessions#resume-from-a-summary)할 때 `/compact`의 비용이 가장 많이 드는 이유입니다. 따뜻한 경우와 차가운 경우 모두에서 압축 후 턴은 훨씬 더 짧은 요약에 대해서만 대화 캐시를 다시 빌드하므로 해당 턴이 느린 부분이 아닙니다.208[캐시 수명](#cache-lifetime)보다 긴 휴식 후에는 읽을 캐시가 남아 있지 않으므로 요약 요청은 전체 기록을 캐시되지 않은 입력으로 다시 처리합니다. 이것이 [이전 세션을 재개](/docs/ko/sessions#resume-a-session)할 때 `/compact`의 비용이 가장 많이 드는 이유입니다. 따뜻한 경우와 차가운 경우 모두에서 압축 후 턴은 훨씬 더 짧은 요약에 대해서만 대화 캐시를 다시 빌드하므로 해당 턴이 느린 부분이 아닙니다.

209 209 

210<Tip>210<Tip>

211 압축은 더 이상 필요하지 않은 콘텐츠를 버릴 때 유리합니다. 오버헤드가 발생하는 시기를 선택하려면 작업 중간에 자동 압축이 트리거되기를 기다리는 대신 작업 간 자연스러운 휴식 시간에 `/compact`를 실행합니다. 완전히 포기하고 싶은 경로로 들어섰다면 대신 [`/rewind`](#rewinding-the-conversation)로 이전 턴으로 되돌아갑니다. 되감기는 압축처럼 새 접두사를 빌드하는 대신 이미 캐시된 접두사로 다시 잘라냅니다.211 압축은 더 이상 필요하지 않은 콘텐츠를 버릴 때 유리합니다. 오버헤드가 발생하는 시기를 선택하려면 작업 중간에 자동 압축이 트리거되기를 기다리는 대신 작업 간 자연스러운 휴식 시간에 `/compact`를 실행합니다. 완전히 포기하고 싶은 경로로 들어섰다면 대신 [`/rewind`](#rewinding-the-conversation)로 이전 턴으로 되돌아갑니다. 되감기는 압축처럼 새 접두사를 빌드하는 대신 이미 캐시된 접두사로 다시 잘라냅니다.


310 310 

311캐시된 접두사는 비활성 기간 후에 만료됩니다. 캐시에 도달하는 각 요청은 타이머를 재설정하므로 계속 작업하는 한 캐시는 따뜻한 상태로 유지됩니다. 충분히 긴 간격 후에는 다음 요청이 전체 입력을 다시 계산하고 캐시를 다시 설정하므로, 한동안 떠난 후 돌아온 첫 번째 턴이 눈에 띄게 느릴 수 있습니다.311캐시된 접두사는 비활성 기간 후에 만료됩니다. 캐시에 도달하는 각 요청은 타이머를 재설정하므로 계속 작업하는 한 캐시는 따뜻한 상태로 유지됩니다. 충분히 긴 간격 후에는 다음 요청이 전체 입력을 다시 계산하고 캐시를 다시 설정하므로, 한동안 떠난 후 돌아온 첫 번째 턴이 눈에 띄게 느릴 수 있습니다.

312 312 

313Pro 또는 Max 플랜에서 긴 휴식 후 대규모 세션을 재개할 때 Claude Code는 [요약에서 재개할 수 있도록 제안](/docs/ko/sessions#resume-from-a-summary)하므로 이후 요청이 전체 기록을 전달하지 않습니다.

314 

315TTL(Time to Live)은 캐시가 유지되는 간격의 길이를 제어합니다. API는 두 가지를 제공합니다: 5분 TTL과 [1시간 TTL](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration)로, 더 긴 휴식 시간 동안 캐시를 따뜻하게 유지하지만 [캐시 쓰기를 더 높은 요금으로 청구합니다](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). 더 긴 TTL은 세션을 유휴 상태로 두었다가 돌아올 때 도움이 됩니다. 만료된 접두사가 비용이 드는 재처리를 건너뛸 수 있기 때문입니다. 5분을 초과하여 유휴 상태가 되지 않는 짧은 작업 버스트에서는 더 비용이 많이 듭니다. 여기서 더 높은 쓰기 요금이 적용되고 더 긴 캐시 수명이 사용되지 않습니다.313TTL(Time to Live)은 캐시가 유지되는 간격의 길이를 제어합니다. API는 두 가지를 제공합니다: 5분 TTL과 [1시간 TTL](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration)로, 더 긴 휴식 시간 동안 캐시를 따뜻하게 유지하지만 [캐시 쓰기를 더 높은 요금으로 청구합니다](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). 더 긴 TTL은 세션을 유휴 상태로 두었다가 돌아올 때 도움이 됩니다. 만료된 접두사가 비용이 드는 재처리를 건너뛸 수 있기 때문입니다. 5분을 초과하여 유휴 상태가 되지 않는 짧은 작업 버스트에서는 더 비용이 많이 듭니다. 여기서 더 높은 쓰기 요금이 적용되고 더 긴 캐시 수명이 사용되지 않습니다.

316 314 

317<h3 id="which-ttl-each-request-gets">315<h3 id="which-ttl-each-request-gets">

sandboxing.md +14 −0

Details

1080* **`Command line arguments`**: [`--settings`](/docs/ko/settings#change-a-setting-for-one-session)로 Claude Code를 시작한 경우 전달한 파일 또는 JSON이 해당 키 중 하나를 설정하는지 확인합니다. 설정한다면 그곳에서 값을 변경하거나, 해당 키 없이 Claude Code를 다시 시작합니다.1080* **`Command line arguments`**: [`--settings`](/docs/ko/settings#change-a-setting-for-one-session)로 Claude Code를 시작한 경우 전달한 파일 또는 JSON이 해당 키 중 하나를 설정하는지 확인합니다. 설정한다면 그곳에서 값을 변경하거나, 해당 키 없이 Claude Code를 다시 시작합니다.

1081* **`Enterprise managed settings`**: 조직의 관리형 설정이 로드되어 있습니다. 이 설정이 해당 키 중 하나를 설정한다면 `/sandbox`나 사용자가 제어하는 어떤 설정 파일에서도 해당 키를 변경할 수 없으므로 관리자에게 요청합니다.1081* **`Enterprise managed settings`**: 조직의 관리형 설정이 로드되어 있습니다. 이 설정이 해당 키 중 하나를 설정한다면 `/sandbox`나 사용자가 제어하는 어떤 설정 파일에서도 해당 키를 변경할 수 없으므로 관리자에게 요청합니다.

1082 1082 

1083<h3 id="/sandbox-prints-sandbox-settings-not-changed">

1084 `/sandbox`가 `Sandbox settings not changed`를 출력

1085</h3>

1086 

1087이 줄은 `/sandbox`가 패널에서 선택한 내용을 프로젝트의 `.claude/settings.local.json`에 저장하지 못했다는 의미입니다.

1088 

1089```text theme={null}

1090✗ Sandbox settings not changed: /home/you/project/.claude/settings.local.json couldn't be updated (EACCES). Start Claude Code in a project folder you can write to.

1091```

1092 

1093괄호 안의 이유가 `EACCES`, `EPERM` 또는 `EROFS`인 경우 쓰기 권한이 있는 프로젝트 폴더에서 Claude Code를 시작한 다음 해당 세션에서 `/sandbox`를 다시 실행합니다.

1094 

1095이유가 `Invalid JSON syntax in settings file`로 시작하는 경우 프로젝트의 `.claude/settings.local.json`에 있는 JSON을 수정한 다음 `/sandbox`를 다시 실행합니다.

1096 

1083<h2 id="limitations">1097<h2 id="limitations">

1084 제한 사항1098 제한 사항

1085</h2>1099</h2>

sessions.md +0 −14

Details

102* 실행이 [채널](/docs/ko/channels)을 통해 시작되지 않습니다102* 실행이 [채널](/docs/ko/channels)을 통해 시작되지 않습니다

103* [거부 규칙](/docs/ko/permissions#manage-permissions)이 `ExitPlanMode` 도구를 제거하지 않습니다103* [거부 규칙](/docs/ko/permissions#manage-permissions)이 `ExitPlanMode` 도구를 제거하지 않습니다

104 104 

105<h3 id="resume-from-a-summary">

106 요약에서 재개

107</h3>

108 

109Pro 또는 Max 플랜에서 약 1시간 이상 비활성 상태이고 100,000토큰을 초과하는 세션을 재개하면 Claude Code는 대화를 복원한 다음 첫 번째 메시지를 보내기 전에 대화 상자를 엽니다. 세션의 [프롬프트 캐시](/docs/ko/prompt-caching#cache-lifetime)는 그때쯤 만료되므로 다음 요청은 대화 상자의 옵션 중 어느 것을 선택하든 전체 기록을 한 번 처리합니다.

110 

111대화 상자는 세션을 계속하는 세 가지 방법을 제공합니다:

112 

113* **요약에서 재개**: [`/compact`](/docs/ko/context-window#what-survives-compaction)를 즉시 실행합니다. 이후 요청은 전체 기록 대신 요약을 전달합니다.

114* **전체 세션을 그대로 재개**: 대화를 변경하지 않고 로드합니다.

115* **다시 묻지 않기**: 전체 세션을 재개하고 모든 향후 재개에서 대화 상자 표시를 중지합니다.

116 

117그대로 재개하면 대화의 모든 세부 사항을 사용할 수 있으며, 요청당 비용은 대화의 크기에 따라 확장됩니다. 요약에서 재개하면 요약이 전체 기록 대신 전달되므로 이후 각 요청에서 비용이 적게 들지만 요약이 생략한 것은 더 이상 Claude의 컨텍스트에 없습니다. [긴 세션에서 사용량이 증가하는 이유](/docs/ko/costs#why-usage-climbs-in-a-long-session)를 참조하여 요청당 비용이 어디서 나오는지 확인하세요.

118 

119<h3 id="where-the-session-picker-looks">105<h3 id="where-the-session-picker-looks">

120 세션 선택기가 찾는 위치106 세션 선택기가 찾는 위치

121</h3>107</h3>

sub-agents.md +17 −5

Details

316| `name` | 예 | `code-reviewer` 또는 `reviewer-v2`와 같은 최대 256자의 고유 식별자. [훅](/docs/ko/hooks#subagentstart)은 이 값을 `agent_type`으로 받습니다. 파일 이름이 일치할 필요는 없습니다. 이름은 `:`를 포함할 수 없습니다. `:`는 `my-plugin:reviewer`와 같은 [플러그인 범위 식별자](/docs/ko/plugins/overview)에 예약되어 있습니다 |316| `name` | 예 | `code-reviewer` 또는 `reviewer-v2`와 같은 최대 256자의 고유 식별자. [훅](/docs/ko/hooks#subagentstart)은 이 값을 `agent_type`으로 받습니다. 파일 이름이 일치할 필요는 없습니다. 이름은 `:`를 포함할 수 없습니다. `:`는 `my-plugin:reviewer`와 같은 [플러그인 범위 식별자](/docs/ko/plugins/overview)에 예약되어 있습니다 |

317| `description` | 예 | Claude가 이 서브에이전트에 위임해야 할 때 |317| `description` | 예 | Claude가 이 서브에이전트에 위임해야 할 때 |

318| `tools` | 아니오 | 서브에이전트가 사용할 수 있는 [도구](#available-tools). `Read, Grep, Bash`와 같은 쉼표로 구분된 문자열 또는 YAML 목록입니다. 생략하면 서브에이전트가 사용 가능한 모든 도구를 상속합니다. 목록의 항목이 도구로 확인되지 않으면, 서브에이전트는 일반적으로 항목을 이름 지정하는 오류로 [시작에 실패](/docs/ko/errors#agent-would-be-spawned-with-zero-tools)합니다. 스킬을 컨텍스트에 미리 로드하려면 여기에 `Skill`을 나열하는 대신 `skills` 필드를 사용하세요 |318| `tools` | 아니오 | 서브에이전트가 사용할 수 있는 [도구](#available-tools). `Read, Grep, Bash`와 같은 쉼표로 구분된 문자열 또는 YAML 목록입니다. 생략하면 서브에이전트가 사용 가능한 모든 도구를 상속합니다. 목록의 항목이 도구로 확인되지 않으면, 서브에이전트는 일반적으로 항목을 이름 지정하는 오류로 [시작에 실패](/docs/ko/errors#agent-would-be-spawned-with-zero-tools)합니다. 스킬을 컨텍스트에 미리 로드하려면 여기에 `Skill`을 나열하는 대신 `skills` 필드를 사용하세요 |

319| `disallowedTools` | 아니오 | 거부할 도구. 상속되거나 지정된 목록에서 제거됩니다. `tools`와 동일한 형식입니다. `Bash(git push *)`와 같은 지정자가 있는 항목은 여전히 [전체 도구를 제거합니다](#available-tools) |319| `disallowedTools` | 아니오 | 거부할 도구. 상속되거나 지정된 목록에서 제거됩니다. `tools`와 동일한 형식입니다. `Bash(git push *)`와 같은 지정자가 있는 항목은 여전히 [전체 도구를 제거합니다](#restrict-which-tools-a-subagent-can-use) |

320| `model` | 아니오 | 사용할 [모델](#choose-a-model): `sonnet`, `opus`, `haiku`, `fable`, `claude-opus-5-5`와 같은 전체 모델 ID, 또는 `inherit`. 생략하면 Claude Code는 [서브에이전트 모델 순서](#choose-a-model)에서 모델을 선택합니다 |320| `model` | 아니오 | 사용할 [모델](#choose-a-model): `sonnet`, `opus`, `haiku`, `fable`, `claude-opus-5-5`와 같은 전체 모델 ID, 또는 `inherit`. 생략하면 Claude Code는 [서브에이전트 모델 순서](#choose-a-model)에서 모델을 선택합니다 |

321| `permissionMode` | 아니오 | [권한 모드](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan`, 또는 `default`의 별칭인 `manual`. [플러그인 서브에이전트](#choose-the-subagent-scope)에서 무시됩니다 |321| `permissionMode` | 아니오 | [권한 모드](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan`, 또는 `default`의 별칭인 `manual`. [플러그인 서브에이전트](#choose-the-subagent-scope)에서 무시됩니다 |

322| `maxTurns` | 아니오 | 서브에이전트가 중지되기 전의 최대 에이전트 턴 수입니다. 서브에이전트가 한계에 도달하면, Claude Code는 부분으로 표시된 출력을 반환하고, Claude는 [재개](#resume-subagents)하여 계속할 수 있습니다. 부분 표시는 Claude Code v2.1.246 이상이 필요합니다 |322| `maxTurns` | 아니오 | 서브에이전트가 중지되기 전의 최대 에이전트 턴 수입니다. 서브에이전트가 한계에 도달하면, Claude Code는 부분으로 표시된 출력을 반환하고, Claude는 [재개](#resume-subagents)하여 계속할 수 있습니다. 부분 표시는 Claude Code v2.1.246 이상이 필요합니다 |


475 475 

476[작업 도구가 없는 세션](/docs/ko/tools-reference#task-tool-availability)에서, Claude Code는 서브에이전트가 다른 모델을 실행하더라도 서브에이전트에 작업 도구를 제공하지 않습니다. 프로세스 내 팀원은 세션을 따르는 동일한 방식이며, [분할 창](/docs/ko/agent-teams#choose-a-display-mode)에서 자신의 팀원은 별도의 Claude Code 프로세스로 실행되므로 자신의 모델이 결정합니다.476[작업 도구가 없는 세션](/docs/ko/tools-reference#task-tool-availability)에서, Claude Code는 서브에이전트가 다른 모델을 실행하더라도 서브에이전트에 작업 도구를 제공하지 않습니다. 프로세스 내 팀원은 세션을 따르는 동일한 방식이며, [분할 창](/docs/ko/agent-teams#choose-a-display-mode)에서 자신의 팀원은 별도의 Claude Code 프로세스로 실행되므로 자신의 모델이 결정합니다.

477 477 

478도구를 제한하려면 `tools` 필드를 허용 목록으로 또는 `disallowedTools` 필드를 거부 목록으로 사용하세요. 이 예제는 `tools`를 사용하여 Read, Grep, Glob, 및 Bash만 허용합니다. 서브에이전트는 파일을 편집하거나, 파일을 작성하거나, MCP 도구를 사용할 수 없습니다:478<h4 id="restrict-which-tools-a-subagent-can-use">

479 서브에이전트가 사용할 수 있는 도구 제한

480</h4>

481 

482도구를 제한하려면 `tools` 필드를 허용 목록으로 또는 `disallowedTools` 필드를 거부 목록으로 사용하세요. 둘 다 설정되면, `disallowedTools`가 먼저 적용되고, `tools`는 남은 풀을 기준으로 확인됩니다. 둘 다에 나열된 도구는 제거됩니다.

483 

484이 예제는 `tools`를 사용하여 Read, Grep, Glob, 및 Bash만 허용합니다. 서브에이전트는 파일을 편집하거나, 파일을 작성하거나, MCP 도구를 사용할 수 없습니다:

479 485 

480```yaml theme={null}486```yaml theme={null}

481---487---


495---501---

496```502```

497 503 

498둘 다 설정되면, `disallowedTools`가 먼저 적용되고, `tools`는 남은 풀에 대해 확인됩니다. 둘 다에 나열된 도구는 제거됩니다.

499 

500`tools` 목록의 아무것도 도구로 확인되지 않을 때(예: 모든 항목이 철자가 틀렸거나 서브에이전트가 사용할 수 없는 도구를 이름 지을 때), Claude Code는 일반적으로 서브에이전트 시작을 거부하고 Agent 도구는 확인되지 않은 항목을 이름 지정하는 오류를 반환합니다. [에이전트가 0개 도구로 생성될 것입니다](/docs/ko/errors#agent-would-be-spawned-with-zero-tools)를 참조하여 메시지와 각 항목을 수정하는 방법을 확인하세요. v2.1.208 이전에는 해당 서브에이전트가 도구 없이 시작되고 빈 또는 혼란스러운 결과를 반환할 수 있었습니다.504`tools` 목록의 아무것도 도구로 확인되지 않을 때(예: 모든 항목이 철자가 틀렸거나 서브에이전트가 사용할 수 없는 도구를 이름 지을 때), Claude Code는 일반적으로 서브에이전트 시작을 거부하고 Agent 도구는 확인되지 않은 항목을 이름 지정하는 오류를 반환합니다. [에이전트가 0개 도구로 생성될 것입니다](/docs/ko/errors#agent-would-be-spawned-with-zero-tools)를 참조하여 메시지와 각 항목을 수정하는 방법을 확인하세요. v2.1.208 이전에는 해당 서브에이전트가 도구 없이 시작되고 빈 또는 혼란스러운 결과를 반환할 수 있었습니다.

501 505 

502두 필드는 정확한 도구 이름 외에도 MCP 서버 수준 패턴을 허용합니다: `mcp__<server>` 또는 `mcp__<server>__*`는 이름이 지정된 서버의 모든 도구를 부여하거나 제거합니다. `disallowedTools`에서 `mcp__*`는 모든 서버의 모든 MCP 도구를 제거합니다. 이 예제는 `github` MCP 서버의 모든 도구를 제거하면서 다른 서버의 도구와 풀의 기본 제공 도구를 유지합니다:506`tools` 및 `disallowedTools` 필드는 MCP 서버 전체에 대한 항목도 허용합니다:

507 

508| 목표 | 필드 | 항목 예시 |

509| :- | :- | :- |

510| 한 서버의 모든 도구를 서브에이전트에 부여 | `tools` | `mcp__github__*` |

511| 한 서버의 도구를 제외 | `disallowedTools` | `mcp__github` 또는 `mcp__github__*` |

512| 모든 서버의 모든 MCP 도구를 제외 | `disallowedTools` | `mcp__*` |

513 

514이 예제는 `github` MCP 서버의 모든 도구를 제거하면서 다른 서버의 도구와 서브에이전트 풀의 기본 제공 도구는 유지합니다:

503 515 

504```yaml theme={null}516```yaml theme={null}

505---517---