527```527```
528 528
529<h2 id="types">529<h2 id="types">
530 유형530 타입
531</h2>531</h2>
532 532
533<h3 id="options">533<h3 id="options">
536 536
537`query()` 함수의 구성 객체입니다.537`query()` 함수의 구성 객체입니다.
538 538
539| 속성 | 유형 | 기본값 | 설명 |539| 속성 | 타입 | 기본값 | 설명 |
540| :- | :- | :- | :- |540| :- | :- | :- | :- |
541| `abortController` | `AbortController` | `new AbortController()` | 작업 취소를 위한 컨트롤러 |541| `abortController` | `AbortController` | `new AbortController()` | 작업 취소를 위한 컨트롤러 |
542| `additionalDirectories` | `string[]` | `[]` | Claude가 접근할 수 있는 추가 디렉토리입니다. SDK는 각 항목을 Claude Code에 `--add-dir`로 전달하므로, `project` 설정 소스를 사용하면 Claude Code도 [디렉토리의 스킬, 명령어 및 서브에이전트를 로드합니다](/docs/ko/permissions#additional-directories-grant-file-access-not-configuration) |542| `additionalDirectories` | `string[]` | `[]` | Claude가 접근할 수 있는 추가 디렉터리입니다. SDK는 각 항목을 `--add-dir`로 Claude Code에 전달하므로, `project` 설정 소스를 사용하면 Claude Code는 [해당 디렉터리의 스킬, 명령, 서브에이전트도 로드합니다](/docs/ko/permissions#additional-directories-grant-file-access-not-configuration) |
543| `agent` | `string` | `undefined` | 메인 스레드의 에이전트 이름입니다. 에이전트는 `agents` 옵션이나 설정에서 정의되어야 합니다 |543| `agent` | `string` | `undefined` | 메인 스레드의 에이전트 이름입니다. 에이전트는 `agents` 옵션 또는 설정에 정의되어 있어야 합니다 |
544| `agents` | `Record<string, [`AgentDefinition`](#agentdefinition)>` | `undefined` | 프로그래밍 방식으로 서브에이전트를 정의합니다 |544| `agents` | `Record<string, [`AgentDefinition`](#agentdefinition)>` | `undefined` | 프로그래밍 방식으로 서브에이전트를 정의합니다 |
545| `agentProgressSummaries` | `boolean` | `false` | `true`일 때, 서브에이전트에 대한 한 줄 진행 요약을 생성하고 [`task_progress`](#sdktaskprogressmessage) 이벤트의 `summary` 필드를 통해 전달합니다. 포그라운드 및 백그라운드 서브에이전트에 적용됩니다 |545| `agentProgressSummaries` | `boolean` | `false` | `true`이면 서브에이전트에 대한 한 줄 진행 상황 요약을 생성하고 `summary` 필드를 통해 [`task_progress`](#sdktaskprogressmessage) 이벤트로 전달합니다. 포그라운드 및 백그라운드 서브에이전트에 적용됩니다 |
546| `allowDangerouslySkipPermissions` | `boolean` | `false` | 권한 우회를 활성화합니다. `permissionMode: 'bypassPermissions'`를 사용할 때 필요하며, 시작 시 또는 나중에 `setPermissionMode()`를 통해 설정할 수 있습니다. [플랜 모드](/docs/ko/agent-sdk/permissions#plan-mode-plan)에서 `permissionMode: 'plan'`과 상호작용하는 방식을 참조하세요 |546| `allowDangerouslySkipPermissions` | `boolean` | `false` | 권한 우회를 활성화합니다. 시작 시 또는 이후 `setPermissionMode()`를 통해 `permissionMode: 'bypassPermissions'`를 사용할 때 필요합니다. `permissionMode: 'plan'`과의 상호작용은 [플랜 모드](/docs/ko/agent-sdk/permissions#plan-mode-plan)를 참조하세요 |
547| `allowedTools` | `string[]` | `[]` | 프롬프트 없이 자동 승인할 도구입니다. 이것은 Claude를 이 도구들로만 제한하지 않습니다. [작업 추적 도구](/docs/ko/agent-sdk/todo-tracking#model-availability) 중 하나를 여기에 명시하면 Claude Code도 세션을 옵트인합니다. 나열되지 않은 다른 도구는 `permissionMode` 및 `canUseTool`로 전달됩니다. `disallowedTools`를 사용하여 도구를 차단합니다. [권한](/docs/ko/agent-sdk/permissions#allow-and-deny-rules)을 참조하세요 |547| `allowedTools` | `string[]` | `[]` | 확인 요청 없이 자동 승인할 도구입니다. Claude가 이 도구만 사용하도록 제한하지는 않습니다. 여기에 [작업 추적 도구](/docs/ko/agent-sdk/todo-tracking#model-availability) 중 하나를 지정하면 Claude Code는 해당 세션에서도 이를 활성화합니다. 목록에 없는 다른 도구는 `permissionMode`와 `canUseTool`로 넘어갑니다. 도구를 차단하려면 `disallowedTools`를 사용하세요. [권한](/docs/ko/agent-sdk/permissions#allow-and-deny-rules)을 참조하세요 |
548| `betas` | [`SdkBeta`](#sdkbeta)`[]` | `[]` | 베타 기능을 활성화합니다 |548| `betas` | [`SdkBeta`](#sdkbeta)`[]` | `[]` | 베타 기능을 활성화합니다 |
549| `canUseTool` | [`CanUseTool`](#canusetool) | `undefined` | 사용자 정의 권한 함수로, [권한 흐름](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated)이 프롬프트로 전달될 때만 호출됩니다. `allowedTools`, 허용 규칙 또는 `permissionMode`에 의해 자동 승인된 호출에 대해서는 호출되지 않습니다. 허용 규칙은 [모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)을 사전 승인하지 않습니다. 자세한 내용은 [`CanUseTool`](#canusetool)을 참조하세요 |549| `canUseTool` | [`CanUseTool`](#canusetool) | `undefined` | 사용자 지정 권한 함수로, [권한 흐름](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated)이 프롬프트로 넘어갈 때만 호출됩니다. `allowedTools`, 허용 규칙 또는 `permissionMode`로 자동 승인된 호출에는 호출되지 않습니다. 허용 규칙은 [어떤 모드도 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)을 사전 승인하지 않습니다. 자세한 내용은 [`CanUseTool`](#canusetool)을 참조하세요 |
550| `continue` | `boolean` | `false` | 가장 최근 대화를 계속합니다 |550| `continue` | `boolean` | `false` | 가장 최근 대화를 이어갑니다 |
551| `cwd` | `string` | `process.cwd()` | 현재 작업 디렉토리 |551| `cwd` | `string` | `process.cwd()` | 현재 작업 디렉터리 |
552| `debug` | `boolean` | `false` | Claude Code 프로세스에 대한 디버그 모드를 활성화합니다 |552| `debug` | `boolean` | `false` | Claude Code 프로세스의 디버그 모드를 활성화합니다 |
553| `debugFile` | `string` | `undefined` | 디버그 로그를 특정 파일 경로에 작성합니다. 암묵적으로 디버그 모드를 활성화합니다 |553| `debugFile` | `string` | `undefined` | 디버그 로그를 특정 파일 경로에 기록합니다. 디버그 모드가 암묵적으로 활성화됩니다 |
554| `disallowedTools` | `string[]` | `[]` | 거부할 도구입니다. `"Bash"`와 같은 단순 이름은 Claude의 컨텍스트에서 도구를 제거합니다. `"Bash(rm *)"` 같은 범위 지정 규칙은 도구를 사용 가능하게 두고 [작성된 대로](/docs/ko/permissions#bash-rule-limits) 모든 권한 모드(bypassPermissions 포함)에서 일치하는 호출을 거부합니다. [권한](/docs/ko/agent-sdk/permissions#allow-and-deny-rules)을 참조하세요 |554| `disallowedTools` | `string[]` | `[]` | 거부할 도구입니다. `"Bash"`와 같은 단순 이름은 Claude의 컨텍스트에서 도구를 제거합니다. `"Bash(rm *)"`와 같은 범위 지정 규칙은 도구를 사용 가능한 상태로 두고, `bypassPermissions`를 포함한 모든 권한 모드에서 [작성된 그대로의](/docs/ko/permissions#bash-rule-limits) 명령과 일치하는 호출을 거부합니다. [권한](/docs/ko/agent-sdk/permissions#allow-and-deny-rules)을 참조하세요 |
555| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max'` | `undefined` | Claude가 응답에 투입하는 노력의 정도를 제어합니다. 적응형 사고와 함께 작동하여 사고 깊이를 안내합니다. [노력 수준 조정](/docs/ko/model-config#adjust-effort-level)을 참조하세요 |555| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max'` | `undefined` | Claude가 응답에 들이는 노력의 정도를 제어합니다. 적응형 사고와 함께 작동하여 사고 깊이를 안내합니다. [effort 수준 조정](/docs/ko/model-config#adjust-effort-level)을 참조하세요 |
556| `enableFileCheckpointing` | `boolean` | `false` | 되감기를 위한 파일 변경 추적을 활성화합니다. [파일 체크포인팅](/docs/ko/agent-sdk/file-checkpointing)을 참조하세요 |556| `enableFileCheckpointing` | `boolean` | `false` | 되감기를 위한 파일 변경 추적을 활성화합니다. [파일 체크포인트](/docs/ko/agent-sdk/file-checkpointing)를 참조하세요 |
557| `env` | `Record<string, string \| undefined>` | `process.env` | 환경 변수입니다. 설정하면 `process.env`와 병합하는 대신 서브프로세스 환경을 대체하므로, 상속된 변수(예: `PATH`)를 유지하려면 `{ ...process.env, YOUR_VAR: 'value' }`를 전달하세요. 이 패턴의 예는 [느리거나 정지된 API 응답 처리](#handle-slow-or-stalled-api-responses)를 참조하고, 기본 CLI가 읽는 변수는 [환경 변수](/docs/ko/env-vars)를 참조하세요. User-Agent 헤더에서 앱을 식별하려면 `CLAUDE_AGENT_SDK_CLIENT_APP`을 설정하세요 |557| `env` | `Record<string, string \| undefined>` | `process.env` | 환경 변수입니다. 설정하면 `process.env`와 병합되는 대신 하위 프로세스 환경을 대체하므로, `PATH`와 같은 상속된 변수를 유지하려면 `{ ...process.env, YOUR_VAR: 'value' }`를 전달하세요. 이 패턴의 예시는 [느리거나 멈춘 API 응답 처리](#handle-slow-or-stalled-api-responses)를, 기본 CLI가 읽는 변수는 [환경 변수](/docs/ko/env-vars)를 참조하세요. User-Agent 헤더에서 앱을 식별하려면 `CLAUDE_AGENT_SDK_CLIENT_APP`을 설정하세요 |
558| `executable` | `'bun' \| 'deno' \| 'node'` | 자동 감지 | 사용할 JavaScript 런타임 |558| `executable` | `'bun' \| 'deno' \| 'node'` | 자동 감지 | 사용할 JavaScript 런타임 |
559| `executableArgs` | `string[]` | `[]` | 실행 파일에 전달할 인수 |559| `executableArgs` | `string[]` | `[]` | 실행 파일에 전달할 인수 |
560| `extraArgs` | `Record<string, string \| null>` | `{}` | 추가 인수 |560| `extraArgs` | `Record<string, string \| null>` | `{}` | 추가 인수 |
561| `fallbackModel` | `string` | `undefined` | 기본 모델이 실패할 경우 사용할 모델입니다. 쉼표로 구분된 목록을 허용합니다. 순서 및 상한에 대해서는 [폴백 모델 체인](/docs/ko/model-config#fallback-model-chains)을 참조하세요. 지침은 [모델 선택](/docs/ko/agent-sdk/configuration#choose-a-model)을 참조하세요 |561| `fallbackModel` | `string` | `undefined` | 기본 모델이 실패할 경우 사용할 모델입니다. 쉼표로 구분된 목록을 허용합니다. 순서와 상한은 [폴백 모델 체인](/docs/ko/model-config#fallback-model-chains)을 참조하세요. 안내는 [모델 선택](/docs/ko/agent-sdk/configuration#choose-a-model)을 참조하세요 |
562| `forkSession` | `boolean` | `false` | `resume`으로 재개할 때 원래 세션을 계속하는 대신 새 세션 ID로 포크합니다 |562| `forkSession` | `boolean` | `false` | `resume`으로 재개할 때 원래 세션을 이어가는 대신 새 세션 ID로 포크합니다 |
563| `forwardSubagentText` | `boolean` | `false` | 서브에이전트 텍스트 및 사고 블록을 `parent_tool_use_id`가 설정된 어시스턴트 및 사용자 메시지로 전달하여 소비자가 중첩된 대화를 렌더링할 수 있도록 합니다. 이 옵션이 없으면 Claude Code는 서브에이전트 `tool_use` 및 `tool_result` 블록을 내보내지만 텍스트나 사고는 내보내지 않습니다. Claude Code v2.1.219 이상에서는 모든 중첩 깊이의 서브에이전트 메시지가 전달됩니다. v2.1.219 이전에는 깊이 1의 서브에이전트 메시지만 나타났습니다. 포크된 스킬이 생성하는 서브에이전트의 메시지 및 중첩된 포크된 스킬은 v2.1.275 이상이 필요합니다 |563| `forwardSubagentText` | `boolean` | `false` | 서브에이전트의 텍스트 및 thinking 블록을 `parent_tool_use_id`가 설정된 어시스턴트 및 사용자 메시지로 전달하여, 소비자가 중첩된 트랜스크립트를 렌더링할 수 있도록 합니다. 이 옵션이 없으면 Claude Code는 서브에이전트의 `tool_use` 및 `tool_result` 블록은 내보내지만 텍스트나 사고는 내보내지 않습니다. Claude Code v2.1.219 이상에서는 모든 중첩 깊이의 서브에이전트 메시지가 전달되며, v2.1.219 이전에는 깊이 1 서브에이전트의 메시지만 표시되었습니다. 포크된 스킬이 생성한 서브에이전트와 중첩된 포크 스킬의 메시지는 v2.1.275 이상이 필요합니다 |
564| `hooks` | `Partial<Record<`[`HookEvent`](#hookevent)`, `[`HookCallbackMatcher`](#hookcallbackmatcher)`[]>>` | `{}` | 이벤트에 대한 훅 콜백 |564| `hooks` | `Partial<Record<`[`HookEvent`](#hookevent)`, `[`HookCallbackMatcher`](#hookcallbackmatcher)`[]>>` | `{}` | 이벤트에 대한 훅 콜백 |
565| `includeHookEvents` | `boolean` | `false` | 훅 라이프사이클 이벤트를 메시지 스트림에 [`SDKHookStartedMessage`](#sdkhookstartedmessage), [`SDKHookProgressMessage`](#sdkhookprogressmessage) 및 [`SDKHookResponseMessage`](#sdkhookresponsemessage)로 포함합니다. `SessionStart` 및 `Setup` 훅의 라이프사이클 이벤트는 항상 포함되며 이 옵션이 필요하지 않습니다. `Notification`, `SessionEnd`, `PreCompact` 및 `PostCompact` 같은 일부 훅 이벤트는 이 옵션을 사용하더라도 `SDKHookStartedMessage`를 생성하지 않습니다. 이러한 이벤트의 경우 Claude Code는 여전히 1초 이상 실행되는 명령어 훅이 출력을 생성하는 동안 `SDKHookProgressMessage`를 내보내고, [백그라운드에서 실행되는](/docs/ko/hooks#run-hooks-in-the-background) 훅이 완료될 때만 `SDKHookResponseMessage`를 내보냅니다 |565| `includeHookEvents` | `boolean` | `false` | 훅 수명 주기 이벤트를 [`SDKHookStartedMessage`](#sdkhookstartedmessage), [`SDKHookProgressMessage`](#sdkhookprogressmessage), [`SDKHookResponseMessage`](#sdkhookresponsemessage)로 메시지 스트림에 포함합니다. `SessionStart` 및 `Setup` 훅의 수명 주기 이벤트는 항상 포함되며 이 옵션이 필요하지 않습니다. `Notification`, `SessionEnd`, `PreCompact`, `PostCompact`와 같은 일부 훅 이벤트는 이 옵션을 사용해도 `SDKHookStartedMessage`를 생성하지 않습니다. 이러한 이벤트의 경우에도 Claude Code는 1초 이상 실행되는 명령 훅이 출력을 생성하는 동안 `SDKHookProgressMessage`를 내보내며, [백그라운드에서 실행되는](/docs/ko/hooks#run-hooks-in-the-background) 훅이 완료될 때만 `SDKHookResponseMessage`를 내보냅니다 |
566| `includePartialMessages` | `boolean` | `false` | 부분 메시지 이벤트를 포함합니다 |566| `includePartialMessages` | `boolean` | `false` | 부분 메시지 이벤트를 포함합니다 |
567| `loadTimeoutMs` | `number` | `60000` | *알파.* 재개 구체화 중 각 `sessionStore.load()` 및 `sessionStore.listSubkeys()` 호출에 대한 밀리초 단위 시간 초과입니다. 어댑터가 이 창 내에 정착하지 않으면 쿼리가 중단되는 대신 실패합니다. `sessionStore`가 설정되지 않으면 무시됩니다 |567| `loadTimeoutMs` | `number` | `60000` | *Alpha.* 재개 구체화 중 각 `sessionStore.load()` 및 `sessionStore.listSubkeys()` 호출의 타임아웃(밀리초)입니다. 어댑터가 이 시간 내에 완료되지 않으면 쿼리는 멈추지 않고 실패합니다. `sessionStore`가 설정되지 않은 경우 무시됩니다 |
568| `managedSettings` | `Settings` | `undefined` | 호스트 프로세스가 생성된 세션에 제공하는 정책 계층 설정입니다. 관리자가 배포한 관리 설정이 있는 머신에서 Claude Code는 관리자의 최우선 관리 소스가 `parentSettingsBehavior: 'merge'`를 설정하지 않는 한 이를 무시하며, [`policyHelper`](/docs/ko/settings-reference#policyhelper)가 관리 설정을 제공하는 동안 병합하지 않습니다. 병합된 값은 제한적 필터를 통과합니다. [부모 설정 제한](/docs/ko/claude-apps-gateway#restrict-parent-settings)은 필터가 허용하는 것과 `allowManaged*Only` 잠금을 다룹니다. [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/ko/env-vars)를 설정하는 호스트는 이 페이로드에서 직접 읽는 세 가지 키가 있습니다. Claude Code v2.1.222 이상의 [모델 구성](/docs/ko/model-config#restrict-model-selection), 관리 소스가 v2.1.246 이상에서 설정하지 않을 때 [`modelPricing`](/docs/ko/settings-reference#modelpricing), v2.1.247 이상에서 `ENABLE_TOOL_SEARCH` env 항목 |568| `managedSettings` | `Settings` | `undefined` | 호스트 프로세스가 생성된 세션에 제공하는 정책 계층 설정입니다. 관리자가 배포한 관리형 설정이 있는 머신에서는 관리자의 최우선 관리 소스가 `parentSettingsBehavior: 'merge'`를 설정하지 않는 한 Claude Code는 이를 무시하며, [`policyHelper`](/docs/ko/settings-reference#policyhelper)가 관리형 설정을 제공하는 동안에는 절대 병합하지 않습니다. 병합된 값은 제한 전용 필터를 통과합니다. 필터가 허용하는 항목과 `allowManaged*Only` 잠금은 [상위 설정 제한](/docs/ko/claude-apps-gateway#restrict-parent-settings)에서 다룹니다. [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/ko/env-vars)를 설정한 호스트는 대신 세 가지 키를 이 페이로드에서 직접 읽습니다: Claude Code v2.1.222 이상에서 [모델 구성](/docs/ko/model-config#restrict-model-selection), v2.1.246 이상에서 관리 소스가 설정하지 않은 경우 [`modelPricing`](/docs/ko/settings-reference#modelpricing), v2.1.247 이상에서 `ENABLE_TOOL_SEARCH` env 항목입니다 |
569| `maxBudgetUsd` | `number` | `undefined` | 클라이언트 측 비용 추정이 이 USD 값에 도달하면 쿼리를 중지합니다. 호출 자체의 지출만 계산합니다. 재개된 세션에서 복원된 합계는 계산되지 않습니다. 정확도 주의사항 및 재설정 동작은 [비용 및 사용량 추적](/docs/ko/agent-sdk/cost-tracking)을 참조하세요 |569| `maxBudgetUsd` | `number` | `undefined` | 클라이언트 측 비용 추정치가 이 USD 값에 도달하면 쿼리를 중지합니다. 해당 호출 자체의 지출만 계산하며, 재개된 세션에서 복원된 합계는 포함되지 않습니다. 정확도 관련 주의 사항과 재설정 동작은 [비용 및 사용량 추적](/docs/ko/agent-sdk/cost-tracking)을 참조하세요 |
570| `maxThinkingTokens` | `number` | `undefined` | *더 이상 사용되지 않음:* 대신 `thinking`을 사용하세요. 사고 프로세스의 최대 토큰 |570| `maxThinkingTokens` | `number` | `undefined` | *Deprecated:* 대신 `thinking`을 사용하세요. 사고 과정의 최대 토큰 수 |
571| `maxTurns` | `number` | `undefined` | 최대 에이전트 턴(도구 사용 왕복) |571| `maxTurns` | `number` | `undefined` | 최대 에이전트 턴 수(도구 사용 왕복) |
572| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | MCP 서버 구성 |572| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | MCP 서버 구성 |
573| `model` | `string` | CLI의 기본값 | Claude 모델 별칭 또는 전체 모델 이름입니다. [허용되는 값 및 공급자별 ID](/docs/ko/model-config#available-models)를 참조하세요 |573| `model` | `string` | CLI 기본값 | Claude 모델 별칭 또는 전체 모델 이름입니다. [허용되는 값 및 제공자별 ID](/docs/ko/model-config#available-models)를 참조하세요 |
574| `onElicitation` | `(request: ElicitationRequest, options: { signal: AbortSignal }) => Promise<ElicitationResult>` | `undefined` | MCP 유도 요청 처리를 위한 콜백입니다. MCP 서버가 사용자 입력을 요청하고 훅이 먼저 처리하지 않을 때 호출됩니다. 제공되지 않으면 처리되지 않은 유도 요청이 자동으로 거부됩니다 |574| `onElicitation` | `(request: ElicitationRequest, options: { signal: AbortSignal }) => Promise<ElicitationResult>` | `undefined` | MCP elicitation 요청을 처리하는 콜백입니다. MCP 서버가 사용자 입력을 요청하고 이를 먼저 처리하는 훅이 없을 때 호출됩니다. 제공되지 않으면 처리되지 않은 elicitation 요청은 자동으로 거절됩니다 |
575| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | 에이전트 결과의 출력 형식을 정의합니다. 자세한 내용은 [구조화된 출력](/docs/ko/agent-sdk/structured-outputs)을 참조하세요 |575| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | 에이전트 결과의 출력 형식을 정의합니다. 자세한 내용은 [구조화된 출력](/docs/ko/agent-sdk/structured-outputs)을 참조하세요 |
576| `outputStyle` | `string` | `undefined` | `Options` 필드가 아닙니다. 인라인 [`settings`](/docs/ko/settings) 객체 또는 설정 파일에서 `outputStyle`을 설정하세요. [출력 스타일 활성화](/docs/ko/agent-sdk/modifying-system-prompts#activate-an-output-style)를 참조하세요 |576| `outputStyle` | `string` | `undefined` | `Options` 필드가 아닙니다. 대신 인라인 [`settings`](/docs/ko/settings) 객체나 설정 파일에서 `outputStyle`을 설정하세요. [출력 스타일 활성화](/docs/ko/agent-sdk/modifying-system-prompts#activate-an-output-style)를 참조하세요 |
577| `pathToClaudeCodeExecutable` | `string` | 번들된 네이티브 바이너리에서 자동 해결 | Claude Code 실행 파일의 경로입니다. 설치 중에 선택적 종속성을 건너뛰었거나 플랫폼이 지원되는 집합에 없는 경우에만 필요합니다 |577| `pathToClaudeCodeExecutable` | `string` | 번들된 네이티브 바이너리에서 자동 확인 | Claude Code 실행 파일 경로입니다. 설치 중 선택적 의존성을 건너뛰었거나 플랫폼이 지원 목록에 없는 경우에만 필요합니다 |
578| `permissionMode` | [`PermissionMode`](#permissionmode) | `undefined` | 세션의 권한 모드입니다. 생략하면 세션이 자동 모드로 시작될 수 있습니다. Claude Code가 시작 권한 모드를 선택하는 방식은 [권한 모드](/docs/ko/agent-sdk/permissions#permission-modes)를 참조하세요 |578| `permissionMode` | [`PermissionMode`](#permissionmode) | `undefined` | 세션의 권한 모드입니다. 생략하면 세션이 자동 모드로 시작될 수 있습니다. Claude Code가 시작 권한 모드를 선택하는 방법은 [권한 모드](/docs/ko/agent-sdk/permissions#permission-modes)를 참조하세요 |
579| `permissionPromptToolName` | `string` | `undefined` | 권한 프롬프트의 MCP 도구 이름 |579| `permissionPromptToolName` | `string` | `undefined` | 권한 프롬프트용 MCP 도구 이름 |
580| `permissionPrompts` | `'host' \| 'none'` | `'host'` | 권한 프롬프트에 응답하는 사람: `'host'`는 [`canUseTool`](#canusetool) 콜백 또는 `permissionPromptToolName` 도구로 라우팅하고, `'none'`은 [프롬프트가 표시되었을 호출을 거부합니다](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated). Claude Code v2.1.259 이상이 필요합니다 |580| `permissionPrompts` | `'host' \| 'none'` | `'host'` | 권한 프롬프트에 응답하는 주체입니다. `'host'`는 프롬프트를 [`canUseTool`](#canusetool) 콜백 또는 `permissionPromptToolName` 도구로 라우팅하고, `'none'`은 [프롬프트가 표시되었을 호출을 거부합니다](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated). Claude Code v2.1.259 이상이 필요합니다 |
581| `persistSession` | `boolean` | `true` | `false`일 때, 디스크에 대한 세션 지속성을 비활성화합니다. 세션을 나중에 재개할 수 없습니다 |581| `persistSession` | `boolean` | `true` | `false`이면 디스크에 대한 세션 영속화를 비활성화합니다. 세션을 나중에 재개할 수 없습니다 |
582| `planModeInstructions` | `string` | `undefined` | 플랜 모드의 사용자 정의 워크플로우 지침입니다. `permissionMode`가 `'plan'`일 때, 이 문자열은 기본 플랜 모드 워크플로우 본문을 대체합니다. CLI는 여전히 읽기 전용 적용 프리앰블과 ExitPlanMode 프로토콜 바닥글로 래핑합니다 |582| `planModeInstructions` | `string` | `undefined` | 플랜 모드를 위한 사용자 지정 워크플로 지침입니다. `permissionMode`가 `'plan'`이면 이 문자열이 기본 플랜 모드 워크플로 본문을 대체합니다. CLI는 여전히 읽기 전용 강제 서두와 ExitPlanMode 프로토콜 꼬리말로 이를 감쌉니다 |
583| `plugins` | [`SdkPluginConfig`](#sdkpluginconfig)`[]` | `[]` | 로컬 경로에서 사용자 정의 플러그인을 로드합니다. 자세한 내용은 [플러그인](/docs/ko/agent-sdk/plugins)을 참조하세요 |583| `plugins` | [`SdkPluginConfig`](#sdkpluginconfig)`[]` | `[]` | 로컬 경로에서 사용자 지정 플러그인을 로드합니다. 자세한 내용은 [플러그인](/docs/ko/agent-sdk/plugins)을 참조하세요 |
584| `projectConfigRoot` | `string` | `undefined` | `cwd`가 워크트리인 신뢰할 수 있는 체크아웃의 절대 경로입니다. Claude Code는 프로젝트 설정, `.mcp.json` 및 프로젝트의 `.claude/` 명령어, 에이전트, 스킬, 워크플로우, 루틴 및 출력 스타일을 `cwd` 대신 이 디렉토리에서 읽고 `CLAUDE_PROJECT_DIR`을 설정합니다. 훅, `apiKeyHelper` 같은 도우미 스크립트 및 stdio MCP 서버는 이 디렉토리를 작업 디렉토리로 시작합니다. `CLAUDE.md` 파일 및 `.claude/rules/`는 여전히 `cwd`에서 로드됩니다. Claude Code v2.1.275 이상이 필요합니다 |584| `projectConfigRoot` | `string` | `undefined` | `cwd`가 worktree로 속한 신뢰할 수 있는 체크아웃의 절대 경로입니다. Claude Code는 프로젝트 설정, `.mcp.json`, 프로젝트의 `.claude/` 명령, 에이전트, 스킬, 워크플로, 루틴, 출력 스타일을 `cwd` 대신 이 디렉터리에서 읽고, `CLAUDE_PROJECT_DIR`을 이 경로로 설정합니다. 훅, `apiKeyHelper`와 같은 헬퍼 스크립트, stdio MCP 서버는 이 디렉터리를 작업 디렉터리로 하여 시작됩니다. `CLAUDE.md` 파일과 `.claude/rules/`는 여전히 `cwd`에서 로드됩니다. Claude Code v2.1.275 이상이 필요합니다 |
585| `promptSuggestions` | `boolean` | `false` | 프롬프트 제안을 활성화합니다. 턴 후 Claude Code는 예측된 다음 사용자 프롬프트를 전달하는 `prompt_suggestion` 메시지를 내보냅니다. Claude Code는 계정이 사용량 한계에 가깝거나 도달했을 때와 같은 일부 턴에 대해 제안을 생성하지 않습니다. [Claude Code가 제안을 건너뛸 때](/docs/ko/interactive-mode#when-claude-code-skips-suggestions)를 참조하세요 |585| `promptSuggestions` | `boolean` | `false` | 프롬프트 제안을 활성화합니다. 턴이 끝난 후 Claude Code는 예측된 다음 사용자 프롬프트를 담은 `prompt_suggestion` 메시지를 내보냅니다. 계정이 사용 한도에 가깝거나 도달한 경우와 같이 일부 턴에서는 Claude Code가 제안을 생성하지 않습니다. [Claude Code가 제안을 건너뛰는 경우](/docs/ko/interactive-mode#when-claude-code-skips-suggestions)를 참조하세요 |
586| `resume` | `string` | `undefined` | 재개할 세션 ID |586| `resume` | `string` | `undefined` | 재개할 세션 ID |
587| `resumeDropsTurn` | `string` | `undefined` | `resumeSessionAt`과 함께: 자르는 재개가 버릴 의도의 턴의 프롬프트 UUID입니다. Claude Code는 버려진 범위에 해당 턴에 귀속될 수 없는 것(예: 흡수된 대기 메시지 또는 작업 알림)이 포함되면 재개를 거부하고 거부 메시지에서 `--resume-drops-turn` 플래그를 명시합니다. Agent SDK 및 인쇄 모드 재개만 쌍을 읽습니다. Claude Code v2.1.223 이상이 필요합니다 |587| `resumeDropsTurn` | `string` | `undefined` | `resumeSessionAt`과 함께 사용: 잘라내는 재개가 폐기하려는 턴의 프롬프트 UUID입니다. 폐기 범위에 흡수된 대기 메시지나 작업 알림처럼 해당 턴에 귀속되지 않는 항목이 포함되어 있으면 Claude Code는 재개를 거부하고, 거부 메시지에 `--resume-drops-turn` 플래그를 명시합니다. Agent SDK와 print 모드 재개만 이 쌍을 읽습니다. Claude Code v2.1.223 이상이 필요합니다 |
588| `resumeSessionAt` | `string` | `undefined` | 특정 메시지 UUID에서 세션을 재개합니다 |588| `resumeSessionAt` | `string` | `undefined` | 특정 메시지 UUID에서 세션을 재개합니다 |
589| `sandbox` | [`SandboxSettings`](#sandboxsettings) | `undefined` | 프로그래밍 방식으로 샌드박스 동작을 구성합니다. 자세한 내용은 [샌드박스 설정](#sandboxsettings)을 참조하세요 |589| `sandbox` | [`SandboxSettings`](#sandboxsettings) | `undefined` | 프로그래밍 방식으로 샌드박스 동작을 구성합니다. 자세한 내용은 [샌드박스 설정](#sandboxsettings)을 참조하세요 |
590| `sessionId` | `string` | 자동 생성 | 자동 생성하는 대신 세션에 특정 UUID를 사용합니다 |590| `sessionId` | `string` | 자동 생성 | 자동 생성 대신 세션에 특정 UUID를 사용합니다 |
591| `sessionStore` | [`SessionStore`](/docs/ko/agent-sdk/session-storage#the-sessionstore-interface) | `undefined` | 세션 대화를 외부 백엔드로 미러링하여 다른 호스트가 재개할 수 있도록 합니다. [외부 저장소에 세션 지속](/docs/ko/agent-sdk/session-storage)을 참조하세요 |591| `sessionStore` | [`SessionStore`](/docs/ko/agent-sdk/session-storage#the-sessionstore-interface) | `undefined` | 다른 호스트가 재개할 수 있도록 세션 트랜스크립트를 외부 백엔드에 미러링합니다. [외부 스토리지에 세션 영속화](/docs/ko/agent-sdk/session-storage)를 참조하세요 |
592| `sessionStoreFlush` | `'batched' \| 'eager'` | `'batched'` | *알파.* `sessionStore`의 플러시 모드입니다. `sessionStore`가 설정되지 않으면 무시됩니다 |592| `sessionStoreFlush` | `'batched' \| 'eager'` | `'batched'` | *Alpha.* `sessionStore`의 플러시 모드입니다. `sessionStore`가 설정되지 않은 경우 무시됩니다 |
593| `settings` | `string \| Settings` | `undefined` | 인라인 [설정](/docs/ko/settings) 객체, 설정 파일 경로 또는 인라인 JSON 문자열입니다. [우선순위 순서](/docs/ko/settings#settings-precedence)에서 플래그 설정 계층을 채웁니다. [`applyFlagSettings()`](#applyflagsettings)로 런타임에 변경합니다 |593| `settings` | `string \| Settings` | `undefined` | 인라인 [설정](/docs/ko/settings) 객체, 설정 파일 경로 또는 인라인 JSON 문자열입니다. [우선순위](/docs/ko/settings#settings-precedence)에서 플래그 설정 계층을 채웁니다. 런타임에 [`applyFlagSettings()`](#applyflagsettings)로 변경할 수 있습니다 |
594| `settingSources` | [`SettingSource`](#settingsource)`[]` | CLI 기본값(모든 소스) | 로드할 파일 시스템 설정을 제어합니다. `[]`를 전달하여 사용자, 프로젝트 및 로컬 설정을 비활성화합니다. [엔드포인트 관리 정책](/docs/ko/managed-settings#delivery-mechanisms)은 관계없이 로드됩니다. 서버 관리 설정은 세션이 [적격 구성](/docs/ko/server-managed-settings#platform-availability)에서 조직 자격증으로 인증할 때 가져옵니다. [Claude Code 기능 사용](/docs/ko/agent-sdk/claude-code-features#what-settingsources-does-not-control)을 참조하세요 |594| `settingSources` | [`SettingSource`](#settingsource)`[]` | CLI 기본값(모든 소스) | 로드할 파일 시스템 설정을 제어합니다. 사용자, 프로젝트, 로컬 설정을 비활성화하려면 `[]`를 전달하세요. [엔드포인트 관리 정책](/docs/ko/managed-settings#delivery-mechanisms)은 관계없이 로드되며, 서버 관리 설정은 세션이 [적격 구성](/docs/ko/server-managed-settings#platform-availability)에서 조직 자격 증명으로 인증할 때 가져옵니다. [Claude Code 기능 사용](/docs/ko/agent-sdk/claude-code-features#what-settingsources-does-not-control)을 참조하세요 |
595| `skills` | `string[] \| 'all'` | `undefined` | 세션에서 사용 가능한 스킬입니다. 모든 발견된 스킬을 활성화하려면 `'all'`을 전달하거나 스킬 이름 목록을 전달합니다. 정확한 이름만 전달하세요. Agent SDK v0.3.221 이상에서 SDK는 Claude Code 프로세스를 시작하기 전에 잘못된 형식 및 와일드카드 형식 이름을 오류로 거부합니다. 설정하면 SDK는 Skill 도구를 `allowedTools`에 자동으로 추가합니다. `tools`도 전달하면 해당 목록에 `'Skill'`을 포함하세요. [스킬](/docs/ko/agent-sdk/skills)을 참조하세요 |595| `skills` | `string[] \| 'all'` | `undefined` | 세션에서 사용할 수 있는 스킬입니다. 발견된 모든 스킬을 활성화하려면 `'all'`을, 또는 스킬 이름 목록을 전달하세요. 정확한 이름만 전달하세요. Agent SDK v0.3.221 이상에서 SDK는 Claude Code 프로세스를 시작하기 전에 잘못된 형식 및 와일드카드 형식의 이름을 오류와 함께 거부합니다. 설정하면 SDK가 Skill 도구를 `allowedTools`에 자동으로 추가합니다. `tools`도 전달하는 경우 해당 목록에 `'Skill'`을 포함하세요. [스킬](/docs/ko/agent-sdk/skills)을 참조하세요 |
596| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | Claude Code 프로세스를 생성하는 사용자 정의 함수입니다. VM, 컨테이너 또는 원격 환경에서 Claude Code를 실행하는 데 사용합니다 |596| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | Claude Code 프로세스를 생성하는 사용자 지정 함수입니다. VM, 컨테이너 또는 원격 환경에서 Claude Code를 실행할 때 사용합니다 |
597| `stderr` | `(data: string) => void` | `undefined` | stderr 출력에 대한 콜백 |597| `stderr` | `(data: string) => void` | `undefined` | stderr 출력 콜백 |
598| `strictMcpConfig` | `boolean` | `false` | `mcpServers`에 전달된 서버만 사용하고 프로젝트 `.mcp.json`, 사용자 설정, 플러그인 제공 MCP 서버 및 [claude.ai 커넥터](/docs/ko/mcp#use-mcp-servers-from-claude-ai)를 무시합니다 |598| `strictMcpConfig` | `boolean` | `false` | `mcpServers`에 전달된 서버만 사용하고 프로젝트 `.mcp.json`, 사용자 설정, 플러그인 제공 MCP 서버, [claude.ai 커넥터](/docs/ko/mcp#use-mcp-servers-from-claude-ai)를 무시합니다 |
599| `systemPrompt` | `string \| string[] \| { type: 'custom'; prompt: string \| string[]; snapshot?: boolean } \| { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean; snapshot?: boolean }` | `undefined`(최소 프롬프트) | 시스템 프롬프트 구성입니다. 사용자 정의 프롬프트의 경우 문자열을 전달하거나, Claude Code의 시스템 프롬프트를 사용하려면 `{ type: 'preset', preset: 'claude_code' }`를 전달합니다. 내보낸 `SYSTEM_PROMPT_DYNAMIC_BOUNDARY` 상수를 정적 및 요청별 부분 사이에 포함하는 문자열 배열을 전달하여 [사용자 정의 프롬프트의 정적 부분을 캐시합니다](/docs/ko/agent-sdk/modifying-system-prompts#cache-the-static-part-of-a-custom-prompt). 프리셋 객체 형식을 사용할 때 추가 지침으로 확장하려면 `append`를 추가하고, [머신 간 더 나은 프롬프트 캐시 재사용](/docs/ko/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines)을 위해 세션별 컨텍스트를 첫 번째 사용자 메시지로 이동하려면 `excludeDynamicSections: true`를 설정합니다. 세션이 첫 번째 요청에서 기록한 프롬프트를 재사용하는 대신 [모든 요청에서 프롬프트를 다시 빌드](/docs/ko/agent-sdk/modifying-system-prompts#change-the-prompt-of-an-existing-session)하려면 `snapshot: false`를 설정합니다. 사용자 정의 프롬프트에서 `snapshot`을 설정하려면 `{ type: 'custom', prompt }` 형식을 전달합니다. `{ type: 'custom' }` 형식과 `snapshot` 필드는 TypeScript Agent SDK v0.3.257 이상이 필요합니다 |599| `systemPrompt` | `string \| string[] \| { type: 'custom'; prompt: string \| string[]; snapshot?: boolean } \| { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean; snapshot?: boolean }` | `undefined` (최소 프롬프트) | 시스템 프롬프트 구성입니다. 사용자 지정 프롬프트에는 문자열을, Claude Code의 시스템 프롬프트를 사용하려면 `{ type: 'preset', preset: 'claude_code' }`를 전달하세요. 정적 부분과 요청별 부분 사이에 내보낸 `SYSTEM_PROMPT_DYNAMIC_BOUNDARY` 상수를 넣은 문자열 배열을 전달하면 [사용자 지정 프롬프트의 정적 부분을 캐시](/docs/ko/agent-sdk/modifying-system-prompts#cache-the-static-part-of-a-custom-prompt)할 수 있습니다. 프리셋 객체 형식을 사용할 때 `append`를 추가하여 추가 지침으로 확장하고, `excludeDynamicSections: true`를 설정하여 세션별 컨텍스트를 첫 번째 사용자 메시지로 옮기면 [머신 간 프롬프트 캐시 재사용을 개선](/docs/ko/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines)할 수 있습니다. [세션이 첫 요청에서 기록한 프롬프트를 재사용](/docs/ko/agent-sdk/modifying-system-prompts#change-the-prompt-of-an-existing-session)하는 대신 매 요청마다 프롬프트를 다시 빌드하려면 `snapshot: false`를 설정하세요. 사용자 지정 프롬프트에 `snapshot`을 설정하려면 `{ type: 'custom', prompt }` 형식을 전달하세요. `{ type: 'custom' }` 형식과 `snapshot` 필드는 TypeScript Agent SDK v0.3.257 이상이 필요합니다 |
600| `taskBudget` | `{ total: number }` | `undefined` | *알파.* API 측 작업 예산(토큰 단위)입니다. 설정하면 모델에 남은 토큰 예산이 알려져 도구 사용 속도를 조절하고 한계 전에 마무리할 수 있습니다 |600| `taskBudget` | `{ total: number }` | `undefined` | *Alpha.* 토큰 단위의 API 측 작업 예산입니다. 설정하면 모델에 남은 토큰 예산이 전달되어 도구 사용 속도를 조절하고 한도 전에 마무리할 수 있습니다 |
601| `thinking` | [`ThinkingConfig`](#thinkingconfig) | 지원되는 모델의 경우 `{ type: 'adaptive' }` | Claude의 사고/추론 동작을 제어합니다. 옵션은 [`ThinkingConfig`](#thinkingconfig)를 참조하세요 |601| `thinking` | [`ThinkingConfig`](#thinkingconfig) | 지원되는 모델의 경우 `{ type: 'adaptive' }` | Claude의 사고/추론 동작을 제어합니다. 옵션은 [`ThinkingConfig`](#thinkingconfig)를 참조하세요 |
602| `title` | `string` | `undefined` | 세션의 표시 제목입니다. `resume` 또는 `continue`를 통해 재개할 때 재개된 세션의 지속된 제목이 우선합니다. [`renameSession()`](#renamesession)을 사용하여 기존 세션의 제목을 변경합니다 |602| `title` | `string` | `undefined` | 세션의 표시 제목입니다. `resume` 또는 `continue`로 재개할 때는 재개된 세션에 저장된 제목이 우선합니다. 기존 세션의 제목을 변경하려면 [`renameSession()`](#renamesession)을 사용하세요 |
603| `toolAliases` | `Record<string, string>` | `undefined` | 기본 제공 도구 이름을 MCP 도구 이름으로 매핑하여 Claude가 기본 제공 대신 MCP 구현을 호출하도록 합니다. 예를 들어 `{ Bash: 'mcp__workspace__bash' }` |603| `toolAliases` | `Record<string, string>` | `undefined` | 기본 제공 도구 이름을 MCP 도구 이름에 매핑하여 Claude가 기본 제공 도구 대신 사용자의 MCP 구현을 호출하도록 합니다. 예: `{ Bash: 'mcp__workspace__bash' }` |
604| `toolConfig` | [`ToolConfig`](#toolconfig) | `undefined` | 기본 제공 도구 동작의 구성입니다. 자세한 내용은 [`ToolConfig`](#toolconfig)를 참조하세요 |604| `toolConfig` | [`ToolConfig`](#toolconfig) | `undefined` | 기본 제공 도구 동작에 대한 구성입니다. 자세한 내용은 [`ToolConfig`](#toolconfig)를 참조하세요 |
605| `tools` | `string[] \| { type: 'preset'; preset: 'claude_code' }` | `undefined` | 도구 구성입니다. 도구 이름 배열을 전달하거나 프리셋을 사용하여 Claude Code의 기본 도구를 가져옵니다 |605| `tools` | `string[] \| { type: 'preset'; preset: 'claude_code' }` | `undefined` | 도구 구성입니다. 도구 이름 배열을 전달하거나 프리셋을 사용하여 Claude Code의 기본 도구를 가져옵니다 |
606| `verbatimPrompts` | `boolean` | `false` | 모든 프롬프트를 작성된 대로 전달합니다. SDK는 각 사용자 메시지를 `client_composed: true`로 보냅니다. Claude Code가 이러한 메시지에서 건너뛰는 것은 [`client_composed`](#sdkusermessage)를 참조하세요. 프롬프트 텍스트에 최종 사용자가 입력하지 않은 콘텐츠가 포함될 때 이 옵션을 사용합니다. 턴별 제어의 경우 이를 끄고 대신 스트리밍된 개별 메시지에서 `client_composed`를 설정합니다. TypeScript Agent SDK v0.3.280 이상 및 Claude Code v2.1.248 이상이 필요합니다. 이러한 SDK 버전과 함께 번들된 Claude Code 버전이 Claude Code 요구사항을 충족합니다 |606| `verbatimPrompts` | `boolean` | `false` | 모든 프롬프트를 작성된 그대로 전달합니다. SDK는 각 사용자 메시지를 `client_composed: true`와 함께 보냅니다. 해당 메시지에서 Claude Code가 건너뛰는 항목은 [`client_composed`](#sdkusermessage)를 참조하세요. 프롬프트 텍스트에 최종 사용자가 입력하지 않은 콘텐츠가 포함된 경우 이 옵션을 사용하세요. 턴별로 제어하려면 이 옵션을 끄고 대신 개별 스트리밍 메시지에 `client_composed`를 설정하세요. TypeScript Agent SDK v0.3.280 이상과 Claude Code v2.1.248 이상이 필요하며, 해당 SDK 버전에 번들된 Claude Code 버전은 Claude Code 요구 사항을 충족합니다 |
607 607
608<h4 id="handle-slow-or-stalled-api-responses">608<h4 id="handle-slow-or-stalled-api-responses">
609 느리거나 정지된 API 응답 처리609 느리거나 멈춘 API 응답 처리
610</h4>610</h4>
611 611
612CLI 서브프로세스는 API 시간 초과 및 정지 감지를 제어하는 여러 환경 변수를 읽습니다. `env` 옵션을 통해 전달합니다:612CLI 하위 프로세스는 API 타임아웃과 정체 감지를 제어하는 여러 환경 변수를 읽습니다. `env` 옵션을 통해 전달하세요:
613 613
614```typescript theme={null}614```typescript theme={null}
615import { query } from "@anthropic-ai/claude-agent-sdk";615import { query } from "@anthropic-ai/claude-agent-sdk";
627});627});
628```628```
629 629
630* `API_TIMEOUT_MS`: Anthropic 클라이언트의 요청별 시간 초과(밀리초 단위). 기본값 `600000`. 메인 루프 및 모든 서브에이전트에 적용됩니다.630* `API_TIMEOUT_MS`: Anthropic 클라이언트의 요청별 타임아웃(밀리초)입니다. 기본값은 `600000`입니다. 메인 루프와 모든 서브에이전트에 적용됩니다.
631* `CLAUDE_CODE_MAX_RETRIES`: 최대 API 재시도 횟수. 기본값 `10`, 상한 `15`. 각 재시도는 자체 `API_TIMEOUT_MS` 창을 가지므로 최악의 경우 벽시간은 대략 `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` 더하기 백오프입니다. 더 긴 중단을 기다려야 하는 무인 실행의 경우 [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/ko/errors#tune-retry-behavior)을 설정합니다. 일시적 용량 오류를 무한정 재시도하고, Claude Code v2.1.199 이상에서는 다른 일시적 오류의 기본값을 `300`으로 올리고 이 변수의 상한을 제거합니다.631* `CLAUDE_CODE_MAX_RETRIES`: 최대 API 재시도 횟수입니다. 기본값은 `10`이며 상한은 `15`입니다. 각 재시도마다 고유한 `API_TIMEOUT_MS` 시간이 주어지므로, 최악의 경우 소요 시간은 대략 `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)`에 백오프를 더한 값입니다. 더 긴 장애를 기다려야 하는 무인 실행의 경우 [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/ko/errors#tune-retry-behavior)을 설정하세요. 이 설정은 일시적인 용량 오류를 무기한 재시도하며, Claude Code v2.1.199 이상에서는 다른 일시적 오류에 대한 기본값을 `300`으로 높이고 이 변수의 상한을 제거합니다.
632* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: 서브에이전트의 정지 감시견입니다. 스트림 감시견이 켜져 있는 동안 기본값은 `CLAUDE_STREAM_IDLE_TIMEOUT_MS` 더하기 5분이며, 이는 해당 변수를 올리지 않는 한 `600000`입니다. 스트림 감시견이 꺼져 있으면 기본값은 `600000`입니다. v2.1.257 이전에는 기본값이 항상 `600000`이었습니다.632* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: 서브에이전트용 정체 감시기입니다. 스트림 감시기가 켜져 있는 동안 기본값은 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`에 5분을 더한 값이며, 해당 변수를 높이지 않는 한 `600000`이 됩니다. 스트림 감시기가 꺼져 있으면 기본값은 `600000`입니다. v2.1.257 이전에는 기본값이 항상 `600000`이었습니다.
633 633
634 타이머는 각 스트림 이벤트에서 재설정됩니다. 정지 시 Claude Code는 서브에이전트를 중단하고 정지를 부모에 보고합니다. 백그라운드 서브에이전트의 경우 작업을 실패로 표시하고 부분 결과를 첨부합니다.634 타이머는 각 스트림 이벤트마다 재설정됩니다. 정체가 발생하면 Claude Code는 서브에이전트를 중단하고 상위에 정체를 보고합니다. 백그라운드 서브에이전트의 경우 작업을 실패로 표시하고 부분 결과도 첨부합니다.
635* `CLAUDE_ENABLE_STREAM_WATCHDOG`과 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`: 헤더가 도착했지만 응답 본문이 스트리밍을 중지할 때 요청을 중단하는 스트림 감시견입니다. 감시견은 모든 공급자에 대해 기본적으로 켜져 있습니다. `CLAUDE_ENABLE_STREAM_WATCHDOG=0`으로 설정하여 비활성화합니다. `CLAUDE_STREAM_IDLE_TIMEOUT_MS`는 기본값 `300000`이고 해당 최소값으로 고정됩니다. 중단 후 [자동 재시도](/docs/ko/errors#automatic-retries)는 응답이 얼마나 진행되었는지에 따라 Claude Code가 수행하는 작업을 다룹니다.635* `CLAUDE_ENABLE_STREAM_WATCHDOG`와 `CLAUDE_STREAM_IDLE_TIMEOUT_MS`: 헤더는 도착했지만 응답 본문의 스트리밍이 멈췄을 때 요청을 중단하는 스트림 감시기입니다. 감시기는 모든 제공자에서 기본적으로 켜져 있으며, 비활성화하려면 `CLAUDE_ENABLE_STREAM_WATCHDOG=0`을 설정하세요. `CLAUDE_STREAM_IDLE_TIMEOUT_MS`의 기본값은 `300000`이며 이 최솟값으로 고정됩니다. 중단 후 Claude Code가 응답 진행 정도에 따라 무엇을 하는지는 [자동 재시도](/docs/ko/errors#automatic-retries)에서 다룹니다.
636 636
637 감시견이 `ANTHROPIC_BASE_URL` 뒤의 게이트웨이가 keep-alive 핑으로 열어두는 응답을 기다리는 동안, `includePartialMessages`를 설정하는 호스트는 계속 `ping` [스트림 이벤트](#sdkpartialassistantmessage)를 수신하므로 이러한 프레임을 생존성으로 읽고 침묵에 대한 세션 시간 초과를 하지 마세요. v2.1.257 이전에는 마지막 실제 스트림 이벤트 후 5분 후에 프레임이 중지되었습니다.637 `ANTHROPIC_BASE_URL` 뒤의 게이트웨이가 keep-alive 핑으로 열어 둔 응답을 감시기가 기다리는 동안, `includePartialMessages`를 설정한 호스트는 `ping` [스트림 이벤트](#sdkpartialassistantmessage)를 계속 수신하므로, 무응답을 이유로 세션을 타임아웃시키는 대신 이 프레임을 활성 상태 신호로 읽으세요. v2.1.257 이전에는 마지막 실제 스트림 이벤트 후 5분이 지나면 이 프레임이 중단되었습니다.
638 638
639<h3 id="query-object">639<h3 id="query-object">
640 `Query` 객체640 `Query` 객체
641</h3>641</h3>
642 642
643`query()` 함수에서 반환하는 인터페이스입니다.643`query()` 함수가 반환하는 인터페이스입니다.
644 644
645```typescript theme={null}645```typescript theme={null}
646interface Query extends AsyncGenerator<SDKMessage, void> {646interface Query extends AsyncGenerator<SDKMessage, void> {
696 696
697| 메서드 | 설명 |697| 메서드 | 설명 |
698| :- | :- |698| :- | :- |
699| `interrupt()` | 쿼리를 중단합니다. 스트리밍 입력 모드에서만 사용 가능합니다. CLI가 [`SDKSystemMessage.capabilities`](#sdksystemmessage)에서 `interrupt_receipt_v1` 기능을 광고할 때, 중단이 도착했을 때 대기 중이던 메시지를 나열하는 [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse)로 해결됩니다. v2.1.205 이전의 CLI에서는 `undefined`로 해결됩니다 |699| `interrupt()` | 쿼리를 중단합니다. 스트리밍 입력 모드에서만 사용할 수 있습니다. CLI가 [`SDKSystemMessage.capabilities`](#sdksystemmessage)에서 `interrupt_receipt_v1` 기능을 알리면, 중단이 도착했을 때 대기 중이던 메시지를 나열하는 [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse)로 resolve됩니다. v2.1.205 이전 CLI에서는 `undefined`로 resolve됩니다 |
700| `rewindFiles(userMessageId, options?)` | 파일을 지정된 사용자 메시지의 상태로 복원합니다. 변경 사항을 미리 보려면 `{ dryRun: true }`를 전달합니다. `enableFileCheckpointing: true`가 필요합니다. [파일 체크포인팅](/docs/ko/agent-sdk/file-checkpointing)을 참조하세요 |700| `rewindFiles(userMessageId, options?)` | 지정된 사용자 메시지 시점의 상태로 파일을 복원합니다. 변경 사항을 미리 보려면 `{ dryRun: true }`를 전달하세요. `enableFileCheckpointing: true`가 필요합니다. [파일 체크포인트](/docs/ko/agent-sdk/file-checkpointing)를 참조하세요 |
701| `setPermissionMode()` | 권한 모드를 변경합니다(스트리밍 입력 모드에서만 사용 가능) |701| `setPermissionMode()` | 권한 모드를 변경합니다(스트리밍 입력 모드에서만 사용 가능) |
702| `setModel()` | 모델을 변경합니다(스트리밍 입력 모드에서만 사용 가능). `undefined` 또는 문자열 `"default"`를 전달하면 [Claude Code의 기본 모델](/docs/ko/model-config)로 재설정됩니다 |702| `setModel()` | 모델을 변경합니다(스트리밍 입력 모드에서만 사용 가능). `undefined` 또는 문자열 `"default"`를 전달하면 [Claude Code의 기본 모델](/docs/ko/model-config)로 재설정됩니다 |
703| `setMaxThinkingTokens()` | *더 이상 사용되지 않음:* 대신 `thinking` 옵션을 사용하세요. 최대 사고 토큰을 변경합니다. `null`을 전달하면 사고를 세션 기본값으로 재설정합니다. 중간 세션 재정의가 지워지고, 사고가 비활성화된 세션의 경우 사고가 비활성화된 상태로 유지됩니다 |703| `setMaxThinkingTokens()` | *Deprecated:* 대신 `thinking` 옵션을 사용하세요. 최대 사고 토큰 수를 변경합니다. `null`을 전달하면 사고가 세션 기본값으로 재설정됩니다. 세션 중 재정의는 지워지며, 사고가 비활성화된 세션에서는 사고가 계속 꺼진 상태로 유지됩니다 |
704| `applyFlagSettings(settings)` | 런타임에 세션의 플래그 설정 계층에 설정을 병합합니다(스트리밍 입력 모드에서만 사용 가능). [`applyFlagSettings()`](#applyflagsettings)를 참조하세요 |704| `applyFlagSettings(settings)` | 런타임에 세션의 플래그 설정 계층에 설정을 병합합니다(스트리밍 입력 모드에서만 사용 가능). [`applyFlagSettings()`](#applyflagsettings)를 참조하세요 |
705| `updateSettings(source, settings)` | 프로젝트의 로컬 설정 파일 또는 사용자 설정 파일에 허용 목록에 있는 하나의 키를 작성하여 값이 나중 세션에 지속되도록 합니다. [`updateSettings()`](#updatesettings)를 참조하세요. TypeScript SDK v0.3.257 이상이 필요하며, Claude Code v2.1.257을 번들합니다 |705| `updateSettings(source, settings)` | 허용 목록에 있는 키 하나를 프로젝트의 로컬 설정 파일 또는 사용자 설정 파일에 기록하여 이후 세션에서도 값이 유지되도록 합니다. [`updateSettings()`](#updatesettings)를 참조하세요. Claude Code v2.1.257이 번들된 TypeScript SDK v0.3.257 이상이 필요합니다 |
706| `initializationResult()` | 지원되는 명령어, 모델, 계정 정보 및 출력 스타일 구성을 포함한 전체 초기화 결과를 반환합니다 |706| `initializationResult()` | 지원되는 명령, 모델, 계정 정보, 출력 스타일 구성을 포함한 전체 초기화 결과를 반환합니다 |
707| `reinitialize()` | 실행 중인 CLI에 `initialize` 제어 요청을 다시 보내고 캐시된 첫 연결 결과 대신 새로운 결과를 반환합니다. 재연결 후 세션에 다시 연결하는 것과 같은 전송 간격 후에 사용하여 대기 중인 권한 요청이 `canUseTool` 콜백에 다시 도달하도록 합니다. 응답이 손실된 요청은 다시 발송되므로 요청 ID별로 콜백을 멱등성으로 만듭니다. Claude Code v2.1.195 이상이 필요합니다 |707| `reinitialize()` | 실행 중인 CLI에 `initialize` 제어 요청을 다시 보내고, 캐시된 최초 연결 결과 대신 새로운 결과를 반환합니다. 연결 끊김 후 세션에 다시 연결하는 경우처럼 전송 공백이 생긴 뒤에 사용하면, 대기 중인 권한 요청이 `canUseTool` 콜백에 다시 도달합니다. 응답이 유실된 요청은 다시 전달되므로 콜백을 요청 ID별로 멱등하게 만드세요. Claude Code v2.1.195 이상이 필요합니다 |
708| `supportedCommands()` | 사용 가능한 명령어를 반환합니다. Agent SDK v0.3.216부터 목록은 중간 세션 명령어 변경을 반영합니다. [`SDKCommandsChangedMessage`](#sdkcommandschangedmessage)를 참조하세요 |708| `supportedCommands()` | 사용 가능한 명령을 반환합니다. Agent SDK v0.3.216부터 목록에 세션 중 명령 변경 사항이 반영됩니다. [`SDKCommandsChangedMessage`](#sdkcommandschangedmessage)를 참조하세요 |
709| `supportedModels()` | 표시 정보가 있는 사용 가능한 모델을 반환합니다 |709| `supportedModels()` | 표시 정보와 함께 사용 가능한 모델을 반환합니다 |
710| `supportedAgents()` | [`AgentInfo`](#agentinfo)`[]`로 사용 가능한 서브에이전트를 반환합니다 |710| `supportedAgents()` | 사용 가능한 서브에이전트를 [`AgentInfo`](#agentinfo)`[]`로 반환합니다 |
711| `mcpServerStatus()` | [`McpServerStatus`](#mcpserverstatus)`[]`로 연결된 MCP 서버의 상태를 반환합니다 |711| `mcpServerStatus()` | 연결된 MCP 서버의 상태를 [`McpServerStatus`](#mcpserverstatus)`[]`로 반환합니다 |
712| `getContextUsage(opts?)` | 세션의 컨텍스트 창 사용량을 카테고리, 스킬 및 도구별로 분류하는 [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse)를 반환합니다. 기본 `detail`을 사용하면 대화형 세션에서 `/context`가 표시하는 것과 동일한 데이터이며, 메시지 스트림에 나타나지 않는 토큰 계산 API 요청으로 계산됩니다. [이러한 요청이 처리되는 방식](#sdkcontrolgetcontextusageresponse)을 참조하세요. [`detail` 옵션](#sdkcontrolgetcontextusageresponse)은 Agent SDK v0.3.257 이상이 필요합니다 |712| `getContextUsage(opts?)` | 세션의 컨텍스트 윈도우 사용량을 카테고리, 스킬, 도구별로 분류한 [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse)를 반환합니다. 기본 `detail`에서는 대화형 세션에서 `/context`가 보여 주는 것과 동일한 데이터이며, 메시지 스트림에 나타나지 않는 토큰 계산 API 요청으로 계산됩니다. [이러한 요청이 처리되는 방식](#sdkcontrolgetcontextusageresponse)을 참조하세요. [`detail` 옵션](#sdkcontrolgetcontextusageresponse)은 Agent SDK v0.3.257 이상이 필요합니다 |
713| `readFile(path, options?)` | 세션의 파일 시스템에서 파일을 읽습니다. Claude Code는 `cwd`에 대해 경로를 해결합니다. [readFile()이 읽을 수 있는 것](#what-readfile-can-read)은 제공하는 파일을 나열합니다. `{ maxBytes }`를 전달하여 읽기 상한을 변경하고(기본값 1 MB, 상한 10 MB) `{ encoding: 'base64' }`를 이미지 같은 바이너리 파일에 전달합니다. [`SDKControlReadFileResponse`](#sdkcontrolreadfileresponse)로 해결하거나, 권한 거부, 누락된 파일 또는 전송 오류 시 `null`로 해결합니다. TypeScript SDK v0.2.121 이상이 필요합니다 |713| `readFile(path, options?)` | 세션의 파일 시스템에서 파일을 읽습니다. Claude Code는 경로를 `cwd` 기준으로 확인하며, 제공하는 파일 목록은 [`readFile()`이 읽을 수 있는 항목](#what-readfile-can-read)에 나와 있습니다. 읽기 상한을 변경하려면 `{ maxBytes }`를(기본값 1 MB, 최대 10 MB), 이미지와 같은 바이너리 파일에는 `{ encoding: 'base64' }`를 전달하세요. [`SDKControlReadFileResponse`](#sdkcontrolreadfileresponse)로 resolve되며, 권한 거부, 파일 없음 또는 전송 오류 시에는 `null`로 resolve됩니다. TypeScript SDK v0.2.121 이상이 필요합니다 |
714| `reloadPlugins(options?)` | 디스크에서 플러그인을 다시 로드하여 중간 세션에 설치하거나 편집한 플러그인이 실행 중인 세션에 도달하도록 합니다. 세션의 명령어, 서브에이전트, 플러그인 및 MCP 서버 상태를 나열하는 [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse)로 해결합니다. Agent SDK v0.2.85 이상이 필요합니다. [`holdOnCacheImpact` 옵션](#sdkcontrolreloadpluginsresponse)은 Agent SDK v0.3.268 이상이 필요합니다 |714| `reloadPlugins(options?)` | 디스크에서 플러그인을 다시 로드하여, 세션 중에 설치하거나 편집한 플러그인이 실행 중인 세션에 반영되도록 합니다. 세션의 명령, 서브에이전트, 플러그인, MCP 서버 상태를 나열하는 [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse)로 resolve됩니다. Agent SDK v0.2.85 이상이 필요합니다. [`holdOnCacheImpact` 옵션](#sdkcontrolreloadpluginsresponse)은 Agent SDK v0.3.268 이상이 필요합니다 |
715| `reloadSkills()` | 디스크에서 스킬을 다시 로드하여 중간 세션에 추가하거나 편집한 스킬이 실행 중인 세션에서 사용 가능하게 됩니다. 다시 로드 후 사용 가능한 스킬을 나열하는 [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse)로 해결합니다. Agent SDK v0.3.163 이상이 필요합니다 |715| `reloadSkills()` | 디스크에서 스킬을 다시 로드하여, 세션 중에 추가하거나 편집한 스킬을 실행 중인 세션에서 사용할 수 있도록 합니다. 다시 로드한 후 사용 가능한 스킬을 나열하는 [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse)로 resolve됩니다. Agent SDK v0.3.163 이상이 필요합니다 |
716| `reloadOutputStyles()` | 디스크에서 [출력 스타일](/docs/ko/output-styles)을 다시 읽어 중간 세션에 추가하거나 편집한 스타일 파일이 실행 중인 세션에서 사용 가능하게 됩니다. 다시 로드 후 사용 가능한 스타일 이름을 나열하는 [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse)로 해결합니다. Agent SDK v0.3.261 이상이 필요합니다 |716| `reloadOutputStyles()` | 디스크에서 [출력 스타일](/docs/ko/output-styles)을 다시 읽어, 세션 중에 추가하거나 편집한 스타일 파일을 실행 중인 세션에서 사용할 수 있도록 합니다. 다시 로드한 후 사용 가능한 스타일 이름을 나열하는 [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse)로 resolve됩니다. Agent SDK v0.3.261 이상이 필요합니다 |
717| `accountInfo()` | 계정 정보를 반환합니다 |717| `accountInfo()` | 계정 정보를 반환합니다 |
718| `reconnectMcpServer(serverName)` | MCP 서버를 이름으로 다시 연결합니다. 이름이 `.mcp.json` 또는 `~/.claude.json` 같은 설정 파일의 항목과도 일치하면 Claude Code는 [`mcpServers`](#options) 또는 `setMcpServers()`를 통해 구성한 서버를 다시 연결하며, 설정 파일 항목은 아닙니다. 해당 해결 순서는 Claude Code v2.1.257 이상이 필요합니다 |718| `reconnectMcpServer(serverName)` | 이름으로 MCP 서버를 다시 연결합니다. 이름이 `.mcp.json` 또는 `~/.claude.json`과 같은 설정 파일의 항목과도 일치하는 경우, Claude Code는 설정 파일 항목이 아니라 [`mcpServers`](#options) 또는 `setMcpServers()`를 통해 구성한 서버를 다시 연결합니다. 이 확인 순서는 Claude Code v2.1.257 이상이 필요합니다 |
719| `toggleMcpServer(serverName, enabled)` | `reconnectMcpServer()`와 동일한 이름 확인 방식으로 이름을 사용해 MCP 서버를 활성화하거나 비활성화합니다. 서버를 비활성화하면 연결이 끊기고 해당 도구가 제거됩니다. 서버 종류별로 필요한 Claude Code 버전은 [`toggleMcpServer()`](#togglemcpserver)를 참조하세요 |719| `toggleMcpServer(serverName, enabled)` | `reconnectMcpServer()`와 동일한 이름 확인 방식으로, 이름으로 MCP 서버를 활성화하거나 비활성화합니다. 서버를 비활성화하면 연결이 끊기고 해당 도구가 제거됩니다. 서버 종류별로 필요한 Claude Code 버전은 [`toggleMcpServer()`](#togglemcpserver)를 참조하세요 |
720| `setMcpServers(servers)` | 이 세션의 MCP 서버 집합을 동적으로 대체합니다. 추가되고 제거된 서버를 명시하고 오류가 있는 [`McpSetServersResult`](#mcpsetserversresult)로 해결합니다 |720| `setMcpServers(servers)` | 이 세션의 MCP 서버 집합을 동적으로 교체합니다. 추가 및 제거된 서버와 오류를 알려 주는 [`McpSetServersResult`](#mcpsetserversresult)로 resolve됩니다 |
721| `readMcpResource(serverName, uri)` | *알파.* 연결된 MCP 서버에서 하나의 MCP Apps `ui://` 리소스를 읽어 애플리케이션이 도구의 위젯을 렌더링할 수 있도록 합니다. [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse)로 해결합니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다 |721| `readMcpResource(serverName, uri)` | *Alpha.* 애플리케이션이 도구의 위젯을 렌더링할 수 있도록 연결된 MCP 서버에서 MCP Apps `ui://` 리소스 하나를 읽습니다. [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse)로 resolve됩니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다 |
722| `streamInput(stream)` | 다중 턴 대화를 위해 쿼리에 입력 메시지를 스트리밍합니다 |722| `streamInput(stream)` | 멀티턴 대화를 위해 입력 메시지를 쿼리로 스트리밍합니다 |
723| `stopTask(taskId)` | ID별로 실행 중인 백그라운드 작업을 중지합니다 |723| `stopTask(taskId)` | ID로 실행 중인 백그라운드 작업을 중지합니다 |
724| `close()` | 쿼리를 닫고 기본 프로세스를 종료합니다. 쿼리를 강제로 종료하고 모든 리소스를 정리합니다 |724| `close()` | 쿼리를 닫고 기본 프로세스를 종료합니다. 쿼리를 강제로 종료하고 모든 리소스를 정리합니다 |
725 725
726<h4 id="applyflagsettings">726<h4 id="applyflagsettings">
727 `applyFlagSettings()`727 `applyFlagSettings()`
728</h4>728</h4>
729 729
730실행 중인 세션에서 [설정](/docs/ko/settings)을 변경하고 쿼리를 다시 시작하지 않습니다. 전용 설정자가 없는 설정이 중간 세션에서 변경되어야 할 때(예: 에이전트가 신뢰할 수 없는 입력을 읽은 후 `permissions`를 강화할 때) 사용합니다. `setModel()` 및 `setPermissionMode()`는 이 두 키에 대한 전용 설정자입니다. `applyFlagSettings()`는 설정 키의 모든 부분 집합을 허용하는 일반 형식이며, 여기에서 `model`을 전달하는 것은 `setModel()`과 동일하게 동작합니다.730쿼리를 다시 시작하지 않고 실행 중인 세션의 [설정](/docs/ko/settings)을 변경합니다. 에이전트가 신뢰할 수 없는 입력을 읽은 후 `permissions`를 강화하는 경우처럼, 전용 setter가 없는 설정을 세션 중에 변경해야 할 때 사용하세요. `setModel()`과 `setPermissionMode()`는 해당 두 키의 전용 setter이며, `applyFlagSettings()`는 설정 키의 임의 부분 집합을 받는 일반 형식입니다. 여기서 `model`을 전달하면 `setModel()`과 동일하게 동작합니다.
731 731
732일부 키만 중간 세션에서 적용됩니다:732일부 키만 세션 중에 적용됩니다:
733 733
734* **다음 턴에 적용됨**: `effortLevel`, `ultracode`, `permissions`, `hooks`, `skillOverrides`, `fastMode`, `agent`. `agent`를 전환하면 해당 에이전트의 모델 재정의 및 훅도 다음 턴에 적용됩니다. 시스템 프롬프트는 다음 턴에 적용되거나, [기록된 시스템 프롬프트를 재사용](/docs/ko/agent-sdk/modifying-system-prompts#change-the-prompt-of-an-existing-session)하는 세션에서는 세션이 압축된 후에 적용됩니다.734* **다음 턴에 적용**: `effortLevel`, `ultracode`, `permissions`, `hooks`, `skillOverrides`, `fastMode`, `agent`. `agent`를 전환하면 해당 에이전트의 모델 재정의와 훅도 다음 턴에 적용됩니다. 시스템 프롬프트는 다음 턴에 적용되거나, [기록된 시스템 프롬프트를 재사용하는](/docs/ko/agent-sdk/modifying-system-prompts#change-the-prompt-of-an-existing-session) 세션에서는 세션이 압축된 후에 적용됩니다.
735* **현재 턴 중에 적용됨**: `model`. Claude가 턴에서 작업 중일 때 `model`을 전환하면, Claude가 이미 생성 중인 응답은 이전 모델에서 완료되고, 나머지 턴(Claude Code가 모델에 대해 수행하는 다음 호출부터 시작)은 새 모델을 사용합니다. 서브에이전트는 자신의 모델을 유지합니다. v2.1.212 이전에는 중간 턴 전환이 다음 턴을 기다렸습니다.735* **현재 턴 중에 적용**: `model`. Claude가 턴을 처리하는 도중 `model`을 전환하면, Claude가 이미 생성 중인 응답은 이전 모델로 완료되고, Claude Code가 모델에 보내는 다음 호출부터 턴의 나머지는 새 모델을 사용합니다. 서브에이전트는 자체 모델을 유지합니다. v2.1.212 이전에는 턴 중 전환이 다음 턴까지 기다렸습니다.
736* **중간 세션에서 효과 없음**: 시스템 프롬프트 옵션입니다. 이들은 시작 시 한 번 해결되므로 실행 중인 세션은 호출이 성공하더라도 원래 값을 유지합니다. 변경하려면 새 세션을 시작합니다.736* **세션 중 효과 없음**: 시스템 프롬프트 옵션. 이 옵션은 시작 시 한 번 확인되므로, 호출이 성공하더라도 실행 중인 세션은 원래 값을 유지합니다. 변경하려면 새 세션을 시작하세요.
737 737
738`effortLevel`은 [노력 수준](/docs/ko/model-config#adjust-effort-level) 이름을 허용합니다. 또한 `"ultracode"`를 허용하며, 이는 [ultracode](/docs/ko/workflows#let-claude-decide-with-ultracode)를 사용하여 `xhigh` 노력을 요청합니다. `applyFlagSettings()`는 `effortLevel`을 해당 값 없이 선언하므로 TypeScript에서 동일한 결과를 위해 `{ ultracode: true, effortLevel: "xhigh" }`를 전달하거나, 세션의 현재 노력 수준에서 ultracode를 켜려면 [`ultracode`](/docs/ko/settings-reference#ultracode) 키만 전달합니다. `ultracode` 값은 Claude Code v2.1.203 이상이 필요하며 설정 파일의 `effortLevel` 키가 아닌 `applyFlagSettings()`에서만 허용됩니다. v2.1.284 이전에는 `ultracode` 키만으로도 수준을 `xhigh`로 설정했습니다.738`effortLevel`은 [effort 수준](/docs/ko/model-config#adjust-effort-level) 이름을 받습니다. 또한 [ultracode](/docs/ko/workflows#let-claude-decide-with-ultracode)를 켠 상태로 `xhigh` effort를 요청하는 `"ultracode"`도 받습니다. `applyFlagSettings()`는 해당 값 없이 `effortLevel`을 선언하므로, TypeScript에서 같은 결과를 얻으려면 `{ ultracode: true, effortLevel: "xhigh" }`를 전달하거나, 세션의 현재 effort 수준에서 ultracode를 켜려면 [`ultracode`](/docs/ko/settings-reference#ultracode) 키만 전달하세요. `ultracode` 값은 Claude Code v2.1.203 이상이 필요하며, 설정 파일의 `effortLevel` 키가 아니라 `applyFlagSettings()`에서만 허용됩니다. v2.1.284 이전에는 `ultracode` 키만 전달해도 수준이 `xhigh`로 설정되었습니다.
739 739
740값은 플래그 설정 계층에 작성되며, `query()`의 인라인 `settings` 옵션이 시작 시 설정한 것 위에 병합됩니다. 이는 [페이지 우선순위 섹션](#settings-precedence)이 프로그래밍 옵션이라고 부르는 것과 동일한 계층입니다.740값은 플래그 설정 계층에 기록되며, 시작 시 `query()`의 인라인 `settings` 옵션이 설정한 값 위에 병합됩니다. 이는 [이 페이지의 우선순위 섹션](#settings-precedence)에서 프로그래밍 방식 옵션이라고 부르는 것과 같은 계층입니다.
741 741
742연속 호출은 최상위 키를 얕게 병합합니다. `{ permissions: {...} }`를 사용한 두 번째 호출은 이전 호출의 전체 `permissions` 객체를 깊게 병합하는 대신 대체합니다.742연속 호출은 최상위 키를 얕게 병합합니다. `{ permissions: {...} }`로 두 번째 호출을 하면 이전 호출의 `permissions` 객체 전체가 깊은 병합 없이 대체됩니다.
743 743
744`applyFlagSettings()`로 설정한 키를 지우려면 해당 키에 `null`을 전달합니다. 대부분의 키는 먼저 `query()`의 `settings` 옵션이 시작 시 설정한 값으로 폴백한 다음 낮은 우선순위 소스로 폴백합니다. 지워진 `model`은 설정 파일이 `model`을 설정하더라도 [Claude Code의 기본 모델](/docs/ko/model-config)로 재설정됩니다. `undefined`를 전달하면 JSON 직렬화가 이를 삭제하므로 효과가 없습니다.744`applyFlagSettings()`로 설정한 키를 지우려면 해당 키에 `null`을 전달하세요. 대부분의 키는 먼저 시작 시 `query()`의 `settings` 옵션이 설정한 값으로, 그다음 우선순위가 낮은 소스로 폴백합니다. 지워진 `model`은 설정 파일이 `model`을 설정한 경우에도 [Claude Code의 기본 모델](/docs/ko/model-config)로 재설정됩니다. `undefined`는 JSON 직렬화 시 제거되므로 전달해도 효과가 없습니다.
745 745
746`model` 외에 세 가지 키는 폴백하는 대신 세션 상태를 재설정합니다:746`model` 외에 세 가지 키는 폴백하는 대신 세션 상태를 재설정합니다:
747 747
748* `effortLevel: null`은 `query()`의 `effort` 옵션이나 설정 파일의 `effortLevel`이 아닌 모델의 기본 노력 수준으로 세션을 반환합니다.748* `effortLevel: null`은 `query()`의 `effort` 옵션이나 설정 파일의 `effortLevel`이 아니라 모델의 기본 effort 수준으로 세션을 되돌립니다.
749* `agent: null`은 다음 턴부터 메인 스레드를 에이전트 없이 실행하며, `query()`의 `agent` 옵션이나 설정 파일의 `agent`를 복원하는 대신입니다. 지워진 에이전트가 자신의 모델을 적용했다면 세션은 시작 시 해결한 모델로 돌아갑니다.749* `agent: null`은 `query()`의 `agent` 옵션이나 설정 파일의 `agent`를 복원하는 대신, 다음 턴부터 에이전트 없이 메인 스레드를 실행합니다. 지워진 에이전트가 자체 모델을 적용했다면 세션은 시작 시 확인한 모델로 돌아갑니다.
750* `ultracode: null`은 `false`처럼 ultracode를 끕니다. 설정 파일의 `ultracode` 값을 복원하는 대신입니다. 세션은 현재 노력 수준을 유지하므로 같은 호출에서 `effortLevel`을 전달하여 변경합니다.750* `ultracode: null`은 설정 파일의 `ultracode` 값을 복원하는 대신 `false`처럼 ultracode를 끕니다. 세션은 현재 effort 수준을 유지하므로, 변경하려면 같은 호출에서 `effortLevel`을 전달하세요.
751 751
752스트리밍 입력 모드에서만 사용 가능하며, `setModel()` 및 `setPermissionMode()`와 동일한 제약입니다.752`setModel()` 및 `setPermissionMode()`와 동일한 제약으로, 스트리밍 입력 모드에서만 사용할 수 있습니다.
753 753
754아래 예제는 중간 세션에서 활성 모델을 전환한 다음 재정의를 지워 모델이 [Claude Code의 기본 모델](/docs/ko/model-config)로 재설정되도록 합니다.754아래 예시는 세션 중에 활성 모델을 전환한 다음, 재정의를 지워 모델이 [Claude Code의 기본 모델](/docs/ko/model-config)로 재설정되도록 합니다.
755 755
756```typescript theme={null}756```typescript theme={null}
757import { query } from "@anthropic-ai/claude-agent-sdk";757import { query } from "@anthropic-ai/claude-agent-sdk";
766```766```
767 767
768<Note>768<Note>
769 `applyFlagSettings()`는 TypeScript 전용입니다. Python SDK는 동등한 메서드를 노출하지 않습니다.769 `applyFlagSettings()`는 TypeScript 전용입니다. Python SDK는 이에 상응하는 메서드를 제공하지 않습니다.
770</Note>770</Note>
771 771
772<h4 id="updatesettings">772<h4 id="updatesettings">
773 `updateSettings()`773 `updateSettings()`
774</h4>774</h4>
775 775
776설정 파일의 허용 목록에 있는 하나의 키를 디스크에 작성하여 값이 해당 소스를 로드하는 나중 세션에 지속되도록 합니다. 각 소스는 하나의 키를 문자열 값으로 허용합니다:776허용 목록에 있는 키 하나를 디스크의 설정 파일에 기록하여, 해당 소스를 로드하는 이후 세션에서도 값이 유지되도록 합니다. 각 소스는 문자열 값을 가진 키 하나를 받습니다:
777 777
778* **`"localSettings"`**: `outputStyle`을 허용하고 프로젝트의 로컬 설정 파일 `.claude/settings.local.json`에 병합합니다. 새 스타일은 세션의 다음 요청에서 적용됩니다.778* **`"localSettings"`**: `outputStyle`을 받아 프로젝트의 로컬 설정 파일인 `.claude/settings.local.json`에 병합합니다. 새 스타일은 세션의 다음 요청부터 적용됩니다.
779* **`"userSettings"`**: `effortLevel`을 허용하고 사용자 설정 파일의 [`modelSettings`](/docs/ko/settings-reference#modelsettings) 아래 세션의 현재 모델에 대한 기본 [노력 수준](/docs/ko/model-config#adjust-effort-level)으로 저장합니다. `max`를 전달하면 아무것도 작성하지 않습니다. `max`는 세션 전용이기 때문입니다. 실행 중인 세션은 어느 쪽이든 현재 노력 수준을 유지하므로 변경하려면 [`applyFlagSettings()`](#applyflagsettings)를 호출합니다. 이 소스는 TypeScript SDK v0.3.277 이상이 필요하며, Claude Code v2.1.277을 번들합니다.779* **`"userSettings"`**: `effortLevel`을 받아 사용자 설정 파일의 [`modelSettings`](/docs/ko/settings-reference#modelsettings) 아래에 세션의 현재 모델에 대한 기본 [effort 수준](/docs/ko/model-config#adjust-effort-level)으로 저장합니다. `max`는 세션 전용이므로 `max`를 전달하면 아무것도 기록되지 않습니다. 어느 경우든 실행 중인 세션은 현재 effort 수준을 유지하므로, 이것도 변경하려면 [`applyFlagSettings()`](#applyflagsettings)를 호출하세요. 이 소스는 Claude Code v2.1.277이 번들된 TypeScript SDK v0.3.277 이상이 필요합니다.
780 780
781호출은 다른 키를 전달할 때, 세션이 원격 전송을 통해 실행될 때, 세션의 [`settingSources`](#options)가 명시한 소스를 제외할 때 거부합니다. 키 삭제는 지원되지 않습니다.781요청에 다른 키가 포함된 경우, 세션이 원격 전송으로 실행되는 경우, 세션의 [`settingSources`](#options)가 지정한 소스를 제외하는 경우 호출이 거부됩니다. 키 삭제는 지원되지 않습니다.
782 782
783<h4 id="togglemcpserver">783<h4 id="togglemcpserver">
784 `toggleMcpServer()`784 `toggleMcpServer()`
785</h4>785</h4>
786 786
787서버를 비활성화하면 연결이 끊기고 해당 도구가 세션에서 제거됩니다. 세션 중에 추가한 서버와 인프로세스 서버의 경우, 이는 Claude Code 버전에 따라 달라집니다.787서버를 비활성화하면 연결이 끊기고 세션에서 해당 도구가 제거됩니다. 세션 중에 추가한 서버와 인프로세스 서버의 경우 Claude Code 버전에 따라 달라집니다:
788 788
789* 세션 중에 `setMcpServers()`로 추가한 stdio, SSE 또는 HTTP 서버: 도구를 제거하려면 Claude Code v2.1.285 이상이 필요합니다.789* `setMcpServers()`로 세션 중에 추가한 stdio, SSE 또는 HTTP 서버: 해당 도구를 제거하려면 Claude Code v2.1.285 이상이 필요합니다.
790* [`createSdkMcpServer()`](#createsdkmcpserver)로 만든 인프로세스 서버(`mcpServers`로 전달했든 `setMcpServers()`로 전달했든): 연결을 끊고 도구를 제거하려면 Claude Code v2.1.286 이상이 필요합니다. 이러한 서버를 비활성화하면 아직 실행 중인 해당 도구 호출도 실패하므로, 핸들러가 반환될 때까지 기다리지 않고 Claude가 각 호출에 대한 오류 결과를 즉시 받습니다.790* `mcpServers`로 전달했든 `setMcpServers()`로 전달했든 [`createSdkMcpServer()`](#createsdkmcpserver)로 생성한 인프로세스 서버: 연결을 끊고 해당 도구를 제거하려면 Claude Code v2.1.286 이상이 필요합니다. 이러한 서버를 비활성화하면 아직 실행 중인 도구 호출도 실패하므로, Claude는 핸들러가 반환될 때까지 기다리지 않고 각 호출에 대한 오류 결과를 즉시 받습니다.
791 791
792<h3 id="warmquery">792<h3 id="warmquery">
793 `WarmQuery`793 `WarmQuery`
794</h3>794</h3>
795 795
796[`startup()`](#startup)에서 반환하는 핸들입니다. 서브프로세스가 이미 생성되고 초기화되었으므로 이 핸들에서 `query()`를 호출하면 시작 지연 없이 준비된 프로세스에 프롬프트를 직접 작성합니다.796[`startup()`](#startup)이 반환하는 핸들입니다. 하위 프로세스가 이미 생성되고 초기화되어 있으므로, 이 핸들에서 `query()`를 호출하면 시작 지연 없이 준비된 프로세스에 프롬프트가 직접 기록됩니다.
797 797
798```typescript theme={null}798```typescript theme={null}
799interface WarmQuery extends AsyncDisposable {799interface WarmQuery extends AsyncDisposable {
808 808
809| 메서드 | 설명 |809| 메서드 | 설명 |
810| :- | :- |810| :- | :- |
811| `query(prompt)` | 사전 준비된 서브프로세스에 프롬프트를 보내고 [`Query`](#query-object)를 반환합니다. `WarmQuery`당 한 번만 호출할 수 있습니다 |811| `query(prompt)` | 미리 준비된 하위 프로세스에 프롬프트를 보내고 [`Query`](#query-object)를 반환합니다. `WarmQuery`당 한 번만 호출할 수 있습니다 |
812| `close()` | 프롬프트를 보내지 않고 서브프로세스를 닫습니다. 더 이상 필요하지 않은 준비된 쿼리를 버리는 데 사용합니다 |812| `close()` | 프롬프트를 보내지 않고 하위 프로세스를 닫습니다. 더 이상 필요하지 않은 warm 쿼리를 폐기할 때 사용합니다 |
813 813
814`WarmQuery`는 `AsyncDisposable`을 구현하므로 자동 정리를 위해 `await using`과 함께 사용할 수 있습니다.814`WarmQuery`는 `AsyncDisposable`을 구현하므로 자동 정리를 위해 `await using`과 함께 사용할 수 있습니다.
815 815
817 `SpareProcess`817 `SpareProcess`
818</h3>818</h3>
819 819
820*알파.* [`prewarm()`](#prewarm)에서 반환하는 핸들: 아직 세션에 바인딩되지 않은 시작된 Claude Code 프로세스로, 한 번 청구할 수 있습니다. TypeScript Agent SDK v0.3.282 이상이 필요합니다.820*Alpha.* [`prewarm()`](#prewarm)이 반환하는 핸들로, 아직 세션에 바인딩되지 않았으며 한 번 클레임할 수 있는 시작된 Claude Code 프로세스입니다. TypeScript Agent SDK v0.3.282 이상이 필요합니다.
821 821
822```typescript theme={null}822```typescript theme={null}
823interface SpareProcess extends AsyncDisposable {823interface SpareProcess extends AsyncDisposable {
837 837
838| 멤버 | 설명 |838| 멤버 | 설명 |
839| :- | :- |839| :- | :- |
840| `claim({ prompt, options })` | 스페어를 `options.cwd`의 세션에 바인딩하고 첫 번째 메시지를 보냅니다. `query()`처럼 동기적으로 [`Query`](#query-object)를 반환합니다. `SpareProcess`당 한 번만 호출할 수 있습니다 |840| `claim({ prompt, options })` | 예비 프로세스를 `options.cwd`의 세션에 바인딩하고 첫 번째 메시지를 보냅니다. `query()`와 마찬가지로 [`Query`](#query-object)를 동기적으로 반환합니다. 한 번만 호출할 수 있습니다 |
841| `claimed` | Claude Code가 청구를 수락하면 세션의 작업 디렉토리 및 ID로 해결됩니다. Claude Code가 청구를 거부할 때, 프로세스가 종료되거나 먼저 닫혔을 때, 그리고 `option_not_applied`로 시작하는 메시지와 함께 세션이 요청한 `model` 또는 `maxThinkingTokens` 없이 실행 중일 때 거부합니다 |841| `claimed` | Claude Code가 클레임을 수락하면 세션의 작업 디렉터리와 ID로 resolve됩니다. Claude Code가 클레임을 거부하는 경우, 프로세스가 먼저 종료되었거나 닫힌 경우, 그리고 요청한 `model` 또는 `maxThinkingTokens` 없이 세션이 실행 중인 경우(`option_not_applied`로 시작하는 메시지와 함께) reject됩니다 |
842| `exited` | 프로세스가 종료되면 청구 여부와 관계없이 정착합니다. 청구 전에 종료되는 스페어를 교체합니다 |842| `exited` | 클레임 여부와 관계없이 프로세스가 종료되면 settle됩니다. 클레임하기 전에 종료된 예비 프로세스는 교체하세요 |
843| `close()` | 프로세스를 종료합니다. 청구 전에 스페어를 버리고 `claimed`를 거부합니다 |843| `close()` | 프로세스를 종료합니다. 클레임 전에는 예비 프로세스를 폐기하고 `claimed`를 reject합니다 |
844 844
845`options.cwd`는 필수입니다. 청구는 또한 `additionalDirectories`, `model`, `permissionMode`, `maxThinkingTokens`, `settings`의 플래그 설정 오버레이, `appendSystemPrompt`, `title`, `agents` 및 `env`의 세션별 토큰을 설정할 수 있습니다.845`options.cwd`는 필수입니다. 클레임에서는 `additionalDirectories`, `model`, `permissionMode`, `maxThinkingTokens`, `settings`의 플래그 설정 오버레이, `appendSystemPrompt`, `title`, `agents`, `env`의 세션별 토큰도 설정할 수 있습니다.
846 846
847Claude Code는 청구를 거부할 수 있습니다. 예를 들어 존재하지 않는 폴더나 프로젝트 설정이 `env`, `agent` 또는 `model`을 설정하는 폴더의 경우입니다. `claimed`가 `option_not_applied`로 시작하는 메시지와 함께 거부할 때, 세션은 요청한 `model` 또는 `maxThinkingTokens` 없이 실행 중입니다. 다른 거부 후 프롬프트가 실행되지 않았으므로 대신 `query()`로 세션을 시작합니다.847Claude Code는 존재하지 않는 폴더나 프로젝트 설정에서 `env`, `agent` 또는 `model`을 설정하는 폴더 등에 대해 클레임을 거부할 수 있습니다. `claimed`가 `option_not_applied`로 시작하는 메시지와 함께 reject되면, 세션은 요청한 `model` 또는 `maxThinkingTokens` 없이 실행 중입니다. 그 외의 거부 이후에는 프롬프트가 실행되지 않았으므로, 대신 `query()`로 세션을 시작하세요.
848 848
849<h3 id="sdkcontrolinitializeresponse">849<h3 id="sdkcontrolinitializeresponse">
850 `SDKControlInitializeResponse`850 `SDKControlInitializeResponse`
851</h3>851</h3>
852 852
853`initializationResult()`의 반환 유형입니다. 세션 초기화 데이터를 포함합니다.853`initializationResult()`의 반환 타입입니다. 세션 초기화 데이터를 포함합니다.
854 854
855```typescript theme={null}855```typescript theme={null}
856type SDKControlInitializeResponse = {856type SDKControlInitializeResponse = {
863 fast_mode_state?: "off" | "cooldown" | "on";863 fast_mode_state?: "off" | "cooldown" | "on";
864 fast_mode_disabled_reason?: FastModeDisabledReason;864 fast_mode_disabled_reason?: FastModeDisabledReason;
865 hooks_applied?: boolean;865 hooks_applied?: boolean;
866 sdk_mcp_manifests_parked?: Record<
867 string,
868 | "parked"
869 | "already_connected"
870 | "protocol_version_mismatch"
871 | "malformed"
872 | "not_honoured"
873 >;
866};874};
867```875```
868 876
869`hooks_applied`는 Claude Code가 `initialize` 요청이 전달한 `hooks`를 등록했는지 보고합니다. SDK는 세션이 시작될 때 해당 요청을 한 번 보내고 각 [`reinitialize()`](#query-object) 호출에서 다시 보냅니다. 필드는 Agent SDK v0.3.238 이상이 필요합니다.877`hooks_applied`는 Claude Code가 `initialize` 요청에 포함된 `hooks`를 등록했는지 여부를 보고합니다. SDK는 세션이 시작될 때 한 번, 그리고 각 [`reinitialize()`](#query-object) 호출마다 이 요청을 보냅니다. 이 필드는 Agent SDK v0.3.238 이상이 필요합니다.
878
879요청에 훅이 없으면 Claude Code는 이 필드를 생략합니다. 요청에 훅이 포함된 경우, 값은 해당 요청이 세션의 첫 번째 initialize인지, 그리고 반복된 요청이라면 세션에 어떻게 도달했는지에 따라 달라집니다:
870 880
871요청이 훅을 전달하지 않으면 Claude Code는 필드를 생략합니다. 요청이 훅을 전달할 때, 값은 요청이 세션의 첫 번째 초기화인지, 반복된 요청의 경우 세션에 도달한 방식에 따라 달라집니다:881* `true`: Claude Code가 훅을 등록했습니다. 세션의 첫 번째 initialize는 이 값을 반환합니다. CLI의 stdin으로 전송된 반복 initialize도 `true`를 반환합니다. 이 경우 새 요청의 훅이 이전에 등록된 훅을 대체합니다.
882* `false`: Claude Code가 훅을 무시했습니다. 원격 세션으로 전송된 반복 initialize는 이 값을 반환하므로, 세션에 참여하는 두 번째 클라이언트는 첫 번째 클라이언트가 등록한 훅을 대체할 수 없습니다.
872 883
873* `true`: Claude Code가 훅을 등록했습니다. 세션의 첫 번째 초기화는 이 값을 반환합니다. CLI의 stdin을 통해 전송된 반복 초기화도 `true`를 반환합니다. 이 경우 새 요청의 훅이 이전에 등록된 훅을 대체합니다.884Agent SDK v0.3.238 이전에는 응답에 이 필드가 없었고, Claude Code는 모든 반복 initialize에서 `hooks`를 무시했습니다.
874* `false`: Claude Code가 훅을 무시했습니다. 원격 세션으로 전송된 반복 초기화는 이 값을 반환하므로 세션에 참여하는 두 번째 클라이언트는 첫 번째 클라이언트가 등록한 훅을 대체할 수 없습니다.
875 885
876Agent SDK v0.3.238 이전에는 응답이 필드를 전달하지 않았고, Claude Code는 모든 반복 초기화에서 `hooks`를 무시했습니다.886요청의 `sdkMcpServerManifests` 필드와 응답의 `sdk_mcp_manifests_parked` 필드는 [`createSdkMcpServer()`](#createsdkmcpserver)로 생성한 인프로세스 [SDK MCP 서버](/docs/ko/agent-sdk/custom-tools)용입니다. 애플리케이션은 두 필드 모두 설정하거나 읽지 않습니다.
877 887
878응답은 항상 `fast_mode_state`를 보고하며, [빠른 모드](/docs/ko/fast-mode)를 차단하는 것이 있으면 `fast_mode_disabled_reason`은 이유 코드를 함께 전달하여 차단된 상태를 설명할 수 있습니다. 두 동작 모두 Claude Code v2.1.219 이상이 필요합니다. v2.1.219 이전에는 빠른 모드를 사용할 수 없을 때 응답이 `fast_mode_state`를 생략했고 이유를 전달하지 않았습니다. 이유 코드 및 의미는 결과 메시지의 [`fast_mode_disabled_reason`](#sdkresultmessage)을 참조하세요.888응답은 항상 `fast_mode_state`를 보고하며, [빠른 모드](/docs/ko/fast-mode)를 차단하는 요인이 있으면 `fast_mode_disabled_reason`이 함께 사유 코드를 전달하므로, 가용성을 다시 도출하는 대신 차단된 상태를 설명할 수 있습니다. 두 동작 모두 Claude Code v2.1.219 이상이 필요합니다. v2.1.219 이전에는 빠른 모드를 사용할 수 없을 때 응답에서 `fast_mode_state`가 생략되었고 사유도 포함되지 않았습니다. 사유 코드와 그 의미는 결과 메시지의 [`fast_mode_disabled_reason`](#sdkresultmessage)을 참조하세요.
879 889
880성공한 `initialize`의 제어 응답 래퍼는 또한 `pending_permission_requests` 배열을 전달합니다. 필드는 위의 `SDKControlInitializeResponse` 페이로드가 아닌 응답 래퍼 자체에 있습니다. 각 항목은 세션이 실행 중일 때 권한 요청에 대해 스트리밍하는 것과 동일한 `{ type: "control_request", request_id, request }` 형태의 완전한 `control_request` 메시지입니다.890성공적인 `initialize`에 대한 제어 응답 래퍼에는 `pending_permission_requests` 배열도 포함됩니다. 이 필드는 위의 `SDKControlInitializeResponse` 페이로드가 아니라 응답 래퍼 자체에 있습니다. 각 항목은 세션이 실행 중 권한 요청에 대해 스트리밍하는 것과 동일한 `{ type: "control_request", request_id, request }` 형태의 완전한 `control_request` 메시지입니다.
881 891
882배열은 이 Claude Code 프로세스가 발행했고 아직 해결하지 않은 권한 요청을 나열합니다. SDK는 배열을 읽고 각 항목을 [`canUseTool`](#canusetool) 콜백으로 발송하며, 이는 전송 간격 후 [`reinitialize()`](#query-object)가 트리거하는 것과 동일한 재전달입니다. 반복된 요청 ID를 멱등성으로 처리합니다. 항목은 콜백이 연결이 끊어지기 전에 이미 받은 요청을 반복할 수 있기 때문입니다.892이 배열은 이 Claude Code 프로세스가 발행했지만 아직 해결되지 않은 권한 요청을 나열합니다. SDK는 배열을 대신 읽어 각 항목을 [`canUseTool`](#canusetool) 콜백으로 전달하며, 이는 전송 공백 이후 [`reinitialize()`](#query-object)가 트리거하는 것과 동일한 재전달입니다. 항목이 연결 끊김 전에 콜백이 이미 받은 요청을 반복할 수 있으므로, 반복된 요청 ID를 멱등하게 처리하세요.
883 893
884배열은 성공한 `initialize` 응답에서 항상 존재하며 이 프로세스에 미해결 권한 요청이 없으면 비어 있습니다. Claude Code v2.1.268 이상이 필요합니다. 이전 버전은 필드를 생략할 수 있으므로 와이어 프로토콜을 직접 파싱하면 누락된 필드를 더 오래된 CLI로 취급하고 아무것도 대기 중이 아니라는 증거로 취급하지 마세요.894이 배열은 성공적인 `initialize` 응답에 항상 존재하며, 이 프로세스에 해결되지 않은 권한 요청이 없으면 비어 있습니다. Claude Code v2.1.268 이상이 필요합니다. 이전 버전에서는 이 필드가 생략될 수 있으므로, 와이어 프로토콜을 직접 파싱하는 경우 필드가 없으면 대기 중인 것이 없다는 증거가 아니라 이전 CLI로 간주하세요.
885 895
886<h3 id="sdkcontrolinterruptresponse">896<h3 id="sdkcontrolinterruptresponse">
887 `SDKControlInterruptResponse`897 `SDKControlInterruptResponse`
888</h3>898</h3>
889 899
890중단 수신: [`interrupt()`](#query-object)가 [`SDKSystemMessage.capabilities`](#sdksystemmessage)에서 `interrupt_receipt_v1` 기능을 광고하는 CLI에서 해결하는 값입니다. Claude Code v2.1.205 이상이 필요합니다. 이전 CLI는 빈 성공 페이로드로 중단에 응답하므로 `interrupt()`는 `undefined`로 해결됩니다.900중단 영수증: [`SDKSystemMessage.capabilities`](#sdksystemmessage)에서 `interrupt_receipt_v1` 기능을 알리는 CLI에서 [`interrupt()`](#query-object)가 resolve하는 값입니다. Claude Code v2.1.205 이상이 필요합니다. 이전 CLI는 빈 성공 페이로드로 중단에 응답하므로 `interrupt()`는 `undefined`로 resolve됩니다.
891 901
892```typescript theme={null}902```typescript theme={null}
893type SDKControlInterruptResponse = {903type SDKControlInterruptResponse = {
896};906};
897```907```
898 908
899`still_queued`는 중단이 도착했을 때 대기 중이던 사용자 메시지의 UUID를 나열합니다. 대기열에 여전히 있는 메시지와 Claude Code가 이미 다음 턴을 위해 대기열에서 꺼낸 메시지입니다. 세션의 첫 턴이 시작된 후 Claude Code는 중단하지 않는 한 나열된 메시지를 처리하고 여러 메시지를 하나의 턴으로 병합할 수 있습니다. 첫 턴이 시작되기 전에 중단하면 Claude Code는 시작되는 즉시 해당 턴을 중단하고 해당 턴의 나열된 메시지는 응답을 받지 않습니다.909`still_queued`는 중단이 도착했을 때 대기 중이던 사용자 메시지의 UUID를 나열합니다. 여기에는 아직 큐에 있는 메시지와, Claude Code가 다음 턴을 위해 이미 큐에서 꺼낸 메시지가 포함됩니다. 세션의 첫 번째 턴이 시작된 후에는 먼저 취소하지 않는 한 Claude Code가 중단 이후 나열된 메시지를 처리하며, 여러 메시지를 하나의 턴으로 병합할 수 있습니다. 첫 번째 턴이 시작되기 전에 중단하면 Claude Code는 해당 턴이 시작되자마자 중단하며, 그 턴에 나열된 메시지는 응답을 받지 못합니다.
900 910
901수신을 사용하여 다시 보낼 것을 결정합니다. 나열된 메시지를 취소하지 않으면 응답을 받는지 여부와 관계없이 대화에 들어가므로 다시 보내면 Claude에 두 번 전달됩니다.911영수증을 사용하여 무언가를 다시 보낼지 결정하세요. 취소하지 않은 나열된 메시지는 응답을 받든 받지 않든 대화에 들어가므로, 다시 보내면 Claude에 두 번 전달됩니다.
902 912
903이러한 주의사항으로 목록을 해석합니다:913다음 주의 사항을 고려하여 목록을 해석하세요:
904 914
905* UUID로 대기열에 들어간 메시지만 나타납니다. 빈 배열은 다른 것이 실행되지 않음을 의미하지 않습니다.915* UUID와 함께 큐에 추가된 메시지만 나타납니다. 빈 배열이라고 해서 다른 것이 실행되지 않는다는 의미는 아닙니다.
906* 메인 스레드 메시지만 나열됩니다. 서브에이전트로 주소 지정된 메시지는 범위를 벗어납니다.916* 메인 스레드 메시지만 나열됩니다. 서브에이전트에 전달된 메시지는 범위에 포함되지 않습니다.
907* 목록에는 클라이언트가 보내지 않은 UUID(예: [예약된 작업](/docs/ko/scheduled-tasks) 트리거)가 포함될 수 있습니다. 오류로 취급하는 대신 인식하지 못하는 UUID를 무시합니다.917* 목록에는 [예약 작업](/docs/ko/scheduled-tasks) 트리거처럼 클라이언트가 보내지 않은 UUID가 포함될 수 있습니다. 인식하지 못하는 UUID는 오류로 처리하지 말고 무시하세요.
908 918
909CLI의 제어 프로토콜을 `interrupt()` 대신 직접 구동하는 클라이언트는 `interrupt` 제어 요청에서 `cancel_queued: true`를 설정할 수 있습니다. Claude Code v2.1.219 이상은 [`SDKSystemMessage.capabilities`](#sdksystemmessage)에서 `interrupt_cancel_queued_v1` 기능으로 지원을 광고합니다. 이전 CLI는 필드를 무시하고 대기 중인 메시지를 평소대로 실행합니다. 그러한 중단은 또한 `still_queued` 아래에 나열되었을 모든 메시지를 취소합니다. 대신 `cancelled` 아래에 나열되고, `still_queued`는 비어 있으며, 아무것도 실행되지 않습니다.919`interrupt()`를 통하지 않고 CLI의 제어 프로토콜을 직접 구동하는 클라이언트는 `interrupt` 제어 요청에 `cancel_queued: true`를 설정할 수 있습니다. Claude Code v2.1.219 이상은 [`SDKSystemMessage.capabilities`](#sdksystemmessage)의 `interrupt_cancel_queued_v1` 기능으로 지원을 알리며, 이전 CLI는 이 필드를 무시하고 대기 중인 메시지를 평소처럼 실행합니다. 이러한 중단은 원래 `still_queued` 아래에 나열되었을 모든 메시지도 취소합니다. 영수증은 이들을 대신 `cancelled` 아래에 나열하고, `still_queued`는 비어 있으며, 그중 어느 것도 실행되지 않습니다.
910 920
911`cancelled` 목록은 `still_queued`와 동일한 주의사항을 전달합니다. `interrupt()` 메서드는 `cancel_queued`를 보내지 않으므로 해결하는 수신은 `cancelled`를 전달하지 않습니다.921`cancelled` 목록에는 `still_queued`와 동일한 주의 사항이 적용됩니다. `interrupt()` 메서드는 `cancel_queued`를 보내지 않으므로, 이 메서드가 resolve하는 영수증에는 `cancelled`가 포함되지 않습니다.
912 922
913수신은 중단이 처리되는 순간의 스냅샷이며, 깨끗한 중단에서 중단된 턴의 [`SDKResultMessage`](#sdkresultmessage) 전에 도착합니다. 해당 결과 후 수신을 읽습니다. 루프는 즉시 다음 대기 중인 턴을 시작하므로 결과 후 검사하는 대기열이 이미 변경되었습니다.923영수증은 중단이 처리되는 순간의 스냅샷이며, 정상적인 중단에서는 중단된 턴의 [`SDKResultMessage`](#sdkresultmessage)보다 먼저 도착합니다. 해당 결과 이후에 큐를 검사하지 말고 영수증을 읽으세요. 루프는 다음 대기 턴을 즉시 시작하므로 결과 이후에 검사하는 큐는 이미 변경되어 있습니다.
914 924
915<h3 id="sdkcontrolgetcontextusageresponse">925<h3 id="sdkcontrolgetcontextusageresponse">
916 `SDKControlGetContextUsageResponse`926 `SDKControlGetContextUsageResponse`
917</h3>927</h3>
918 928
919[`getContextUsage()`](#query-object)의 반환 유형입니다. 기본 `detail`을 사용하면 이는 대화형 세션에서 `/context` 명령어가 렌더링하는 것과 동일한 페이로드이므로 토큰 계산과 함께 Claude Code가 `/context` 사용량 그리드를 그리는 데 사용하는 `color` 및 `gridRows` 같은 표시 필드를 전달합니다.929[`getContextUsage()`](#query-object)의 반환 타입입니다. 기본 `detail`에서는 Claude Code가 대화형 세션에서 `/context` 명령에 대해 렌더링하는 것과 동일한 페이로드이므로, 토큰 수와 함께 Claude Code가 `/context` 사용량 그리드를 그리는 데 사용하는 `color` 및 `gridRows`와 같은 표시 필드를 포함합니다.
920 930
921메서드의 선택적 `detail` 인수는 Claude Code가 각 카테고리를 계산하는 방식을 선택합니다. `detail` 인수는 Agent SDK v0.3.257 이상이 필요합니다.931메서드의 선택적 `detail` 인수는 Claude Code가 각 카테고리를 계산하는 방식을 선택합니다. `detail` 인수는 Agent SDK v0.3.257 이상이 필요합니다.
922 932
923* **`'full'`**: 기본값입니다. Claude Code는 [토큰 계산](https://platform.claude.com/docs/en/build-with-claude/token-counting) API 요청으로 각 카테고리를 계산합니다. 이러한 요청은 메시지 스트림에 나타나지 않으므로 스트림을 읽는 비용 추적이 이를 보지 못합니다. Anthropic API에서 토큰 계산은 청구되지 않습니다.933* **`'full'`**: 기본값입니다. Claude Code는 [토큰 계산](https://platform.claude.com/docs/en/build-with-claude/token-counting) API 요청으로 각 카테고리를 계산합니다. 이러한 요청은 메시지 스트림에 나타나지 않으므로, 스트림을 읽는 비용 추적에서는 보이지 않습니다. Anthropic API에서 토큰 계산은 과금되지 않습니다.
924* **`'summary'`**: 대신 마지막 응답의 사용량 및 로컬 추정에서 답변을 얻으려면 `{ detail: 'summary' }`를 전달합니다. 토큰 계산 요청이 나가지 않으며 카테고리별 숫자는 대략적입니다.934* **`'summary'`**: `{ detail: 'summary' }`를 전달하면 대신 마지막 응답의 사용량과 로컬 추정치로 답을 얻습니다. 토큰 계산 요청이 전송되지 않으며, 카테고리별 수치는 근사치입니다.
925 935
926메서드를 호출하는 대신 `/context`를 프롬프트로 보내면 Claude Code는 결과를 전달하는 어시스턴트 메시지의 `context_usage` 필드에 [`SDKContextUsage`](#sdkcontextusage) 페이로드를 첨부합니다. 해당 필드는 Agent SDK v0.3.232 이상이 필요합니다.936메서드를 호출하는 대신 `/context`를 프롬프트로 보내면, Claude Code는 결과를 전달하는 어시스턴트 메시지의 `context_usage` 필드에 [`SDKContextUsage`](#sdkcontextusage) 페이로드를 첨부합니다. 이 필드는 Agent SDK v0.3.232 이상이 필요합니다.
927 937
928```typescript theme={null}938```typescript theme={null}
929type SDKControlGetContextUsageResponse = {939type SDKControlGetContextUsageResponse = {
1020};1030};
1021```1031```
1022 1032
1023토큰 귀속을 수집 필드에서 읽습니다:1033컬렉션 필드에서 토큰 귀속을 읽으세요:
1024 1034
1025* `categories`는 카테고리별 합계를 보유합니다. 각 항목의 `kind`는 [`SDKContextUsageCategory`](#sdkcontextusagecategory)와 동일한 값으로 행을 분류합니다. 표시 `name` 대신 이를 기반으로 행을 분류합니다. 필드는 Agent SDK v0.3.268 이상이 필요합니다.1035* `categories`는 카테고리별 합계를 담고 있습니다. 각 항목의 `kind`는 [`SDKContextUsageCategory`](#sdkcontextusagecategory)와 동일한 값으로 행을 분류합니다. 표시용 `name`이 아니라 이 필드로 행을 분류하세요. 이 필드는 Agent SDK v0.3.268 이상이 필요합니다.
1026* `mcpTools` 및 `agents`는 개별 MCP 도구 및 서브에이전트에 토큰을 귀속합니다.1036* `mcpTools`와 `agents`는 토큰을 개별 MCP 도구와 서브에이전트에 귀속합니다.
1027* `memoryFiles`는 각 로드된 메모리 파일을 비용과 함께 나열합니다.1037* `memoryFiles`는 로드된 각 메모리 파일과 그 비용을 나열합니다.
1028* `skills.skillFrontmatter`는 스킬 목록의 토큰을 포함된 각 스킬에 귀속합니다. 스킬별 계산은 각 스킬의 목록 항목을 Claude Code가 실제로 보내는 대로 측정하며, 스킬의 전체 프론트매터보다 짧을 수 있습니다. `skills.totalSkills`를 `skills.includedSkills`와 비교하여 발견된 모든 스킬이 목록에 들어갔는지 확인합니다.1038* `skills.skillFrontmatter`는 스킬 목록의 토큰을 포함된 각 스킬에 귀속합니다. 스킬별 수치는 Claude Code가 실제로 보내는 각 스킬의 목록 항목을 측정하며, 이는 스킬의 전체 frontmatter보다 짧을 수 있습니다. 발견된 모든 스킬이 목록에 포함되었는지 확인하려면 `skills.totalSkills`와 `skills.includedSkills`를 비교하세요.
1029 1039
1030`totalTokens`는 세션의 현재 컨텍스트 사용량이고 `maxTokens`는 사용량이 측정되는 창입니다. 해당 창은 모델의 컨텍스트 창이거나 적용되는 경우 더 낮은 자동 압축 창입니다. `rawMaxTokens`는 `maxTokens`와 동일한 값을 전달하고 `percentage`는 해당 창의 반올림된 백분율로 `totalTokens`입니다. `apiUsage`는 세션의 실행 합계가 아닌 최신 API 응답의 사용량을 보유합니다.1040`totalTokens`는 세션의 현재 컨텍스트 사용량이고, `maxTokens`는 해당 사용량을 측정하는 기준 윈도우입니다. 이 윈도우는 모델의 컨텍스트 윈도우이거나, 해당되는 경우 더 낮은 자동 압축 윈도우입니다. `rawMaxTokens`는 `maxTokens`와 같은 값을 담고 있으며, `percentage`는 해당 윈도우 대비 `totalTokens`를 반올림한 백분율입니다. `apiUsage`는 세션의 누적 합계가 아니라 최신 API 응답의 사용량을 담고 있습니다.
1031 1041
1032Claude Code는 선택적 `deferredBuiltinTools`, `systemTools` 및 `systemPromptSections` 진단을 설정하지 않으므로 유형이 선언하더라도 없을 것으로 예상합니다.1042Claude Code는 선택적 진단 필드인 `deferredBuiltinTools`, `systemTools`, `systemPromptSections`를 설정하지 않으므로, 타입에 선언되어 있더라도 없을 것으로 예상하세요.
1033 1043
1034<h3 id="sdkcontrolreadfileresponse">1044<h3 id="sdkcontrolreadfileresponse">
1035 `SDKControlReadFileResponse`1045 `SDKControlReadFileResponse`
1036</h3>1046</h3>
1037 1047
1038[`readFile()`](#query-object)의 반환 유형입니다.1048[`readFile()`](#query-object)의 반환 타입입니다.
1039 1049
1040```typescript theme={null}1050```typescript theme={null}
1041type SDKControlReadFileResponse = {1051type SDKControlReadFileResponse = {
1046};1056};
1047```1057```
1048 1058
1049`contents`는 파일 텍스트를 보유하거나 `encoding: 'base64'`를 요청했을 때 base64 데이터를 보유합니다. 응답의 `encoding` 필드는 그 경우 `'base64'`로 설정됩니다. `absPath`는 해결된 절대 경로입니다. `truncated`는 파일이 `maxBytes` 상한보다 길었고 내용이 해당 한계에서 잘렸을 때 설정됩니다.1059`contents`는 파일 텍스트를 담고 있으며, `encoding: 'base64'`를 요청한 경우 base64 데이터를 담습니다. 이 경우 응답의 `encoding` 필드는 `'base64'`로 설정됩니다. `absPath`는 확인된 절대 경로입니다. `truncated`는 파일이 `maxBytes` 상한보다 길어 내용이 그 한도에서 잘린 경우에 설정됩니다.
1050 1060
1051<h4 id="what-readfile-can-read">1061<h4 id="what-readfile-can-read">
1052 readFile()이 읽을 수 있는 것1062 `readFile()`이 읽을 수 있는 항목
1053</h4>1063</h4>
1054 1064
1055`readFile()`은 Read 도구보다 더 좁은 파일 집합을 제공합니다:1065`readFile()`은 Read 도구보다 좁은 범위의 파일을 제공합니다:
1056 1066
1057* `cwd` 및 `additionalDirectories` 같은 세션의 작업 디렉토리 중 하나 내의 일반 파일1067* `cwd` 및 `additionalDirectories`와 같은 세션의 작업 디렉터리 중 하나에 있는 일반 파일
1058* 세션의 도구 결과 같은 Claude Code 자체의 몇 가지 파일1068* 도구 결과와 같이 세션에 대한 Claude Code 자체 파일 일부
1059 1069
1060Read 거부 및 요청 규칙은 여전히 일치하는 경로를 차단하고, 광범위한 Read 허용 규칙은 나머지 파일 시스템을 `readFile()`에 열지 않습니다. 다른 것의 경우 호출은 `null`로 해결됩니다.1070`Read` 거부 및 확인 규칙은 여전히 일치하는 경로를 차단하며, 광범위한 `Read` 허용 규칙이 나머지 파일 시스템을 `readFile()`에 열어 주지는 않습니다. 그 외의 경우 호출은 `null`로 resolve됩니다.
1061 1071
1062<h3 id="sdkcontrolreloadpluginsresponse">1072<h3 id="sdkcontrolreloadpluginsresponse">
1063 `SDKControlReloadPluginsResponse`1073 `SDKControlReloadPluginsResponse`
1064</h3>1074</h3>
1065 1075
1066[`reloadPlugins()`](#query-object)의 반환 유형입니다.1076[`reloadPlugins()`](#query-object)의 반환 타입입니다.
1067 1077
1068```typescript theme={null}1078```typescript theme={null}
1069type SDKControlReloadPluginsResponse = {1079type SDKControlReloadPluginsResponse = {
1086};1096};
1087```1097```
1088 1098
1089수집 필드는 호출 후 세션을 설명합니다:1099컬렉션 필드는 호출 이후의 세션을 설명합니다:
1090 1100
1091* `commands`, `agents` 및 `mcpServers`: 세션의 명령어, 서브에이전트 및 MCP 서버 상태(동일한 형태로 `supportedCommands()`, `supportedAgents()` 및 `mcpServerStatus()`가 반환). `supportedAgents()`는 초기화 시 캡처된 목록을 계속 반환하므로 다시 로드 후 집합에 대해 여기서 `agents`를 읽습니다1101* `commands`, `agents`, `mcpServers`: `supportedCommands()`, `supportedAgents()`, `mcpServerStatus()`가 반환하는 것과 동일한 형태의 세션 명령, 서브에이전트, MCP 서버 상태입니다. `supportedAgents()`는 초기화 시 캡처된 목록을 계속 반환하므로, 다시 로드한 후의 집합은 여기의 `agents`를 읽으세요
1092* `plugins`: 각 로드된 플러그인의 `name` 및 설치 `path`입니다. `version`은 플러그인의 매니페스트가 선언하는 것을 반복하며 플러그인 작성자가 제어하므로 신뢰하기 전에 검증합니다. 매니페스트가 선언하지 않으면 생략됩니다1102* `plugins`: 로드된 각 플러그인과 그 `name` 및 설치 `path`입니다. `version`은 플러그인 매니페스트에 선언된 내용을 반복하며 플러그인 작성자가 제어하므로, 신뢰하기 전에 검증하세요. 매니페스트에 선언된 것이 없으면 생략됩니다
1093* `error_count`: 플러그인 로드의 오류 수1103* `error_count`: 플러그인 로드 중 발생한 오류 수
1094 1104
1095`reloadPlugins()`에 `{ holdOnCacheImpact: true }`를 전달하여 대화의 프롬프트 캐시를 무효화할 다시 로드를 적용하는 대신 보류합니다. Claude Code는 대화형 `/reload-plugins` 명령어가 [캐시 비용에 대해 경고](/docs/ko/prompt-caching#enabling-or-disabling-a-plugin)하기 전에 수행하는 검사를 실행합니다. 옵션은 Agent SDK v0.3.268 이상이 필요합니다. v2.1.268보다 오래된 Claude Code 실행 파일(예: `pathToClaudeCodeExecutable`이 가리키는 것)은 옵션을 무시하고 다시 로드를 적용합니다.1105대화의 프롬프트 캐시를 무효화할 다시 로드를 적용하는 대신 보류하려면 `reloadPlugins()`에 `{ holdOnCacheImpact: true }`를 전달하세요. Claude Code는 대화형 `/reload-plugins` 명령이 [캐시 비용에 대해 경고](/docs/ko/prompt-caching#enabling-or-disabling-a-plugin)하기 전에 수행하는 검사를 실행합니다. 이 옵션은 Agent SDK v0.3.268 이상이 필요합니다. `pathToClaudeCodeExecutable`로 지정한 실행 파일처럼 v2.1.268보다 오래된 Claude Code 실행 파일은 이 옵션을 무시하고 다시 로드를 적용합니다.
1096 1106
1097옵션을 전달하면 `held`를 읽어 무슨 일이 일어났는지 알아봅니다:1107옵션을 전달한 경우 `held`를 읽어 결과를 확인하세요:
1098 1108
1099* `true`: 다시 로드가 적용되지 않았고 수집 필드는 여전히 세션을 설명합니다. `cache_impact`는 적용이 변경할 것을 말합니다. 어쨌든 적용하려면 옵션 없이 `reloadPlugins()`를 다시 호출합니다.1109* `true`: 다시 로드가 적용되지 않았으며, 컬렉션 필드는 현재 그대로의 세션을 설명합니다. `cache_impact`는 적용 시 무엇이 변경될지를 알려 줍니다. 그래도 적용하려면 옵션 없이 `reloadPlugins()`를 다시 호출하세요.
1100* `false`: 검사가 캐시 영향을 찾지 못했고 다시 로드가 적용되었습니다.1110* `false`: 검사에서 캐시 영향이 발견되지 않았으며 다시 로드가 적용되었습니다.
1101* 없음: 옵션을 전달하지 않았거나 Claude Code 실행 파일이 v2.1.268보다 오래되어 다시 로드를 적용했습니다.1111* 없음: 옵션을 전달하지 않았거나, Claude Code 실행 파일이 v2.1.268보다 오래되어 다시 로드를 적용했습니다.
1102 1112
1103`cache_impact`는 `held: true`와 함께만 존재합니다. `mcp_servers_added` 및 `mcp_servers_removed`는 다시 로드가 등록하거나 삭제할 플러그인 MCP 서버를 범위 지정된 `plugin:<plugin>:<server>` 이름으로 명시합니다. 이름은 플러그인 작성자가 작성했으므로 표시하기 전에 검증합니다. `lsp_tool_change`는 적용이 LSP 도구를 추가하거나 제거할지, 또는 둘 다 하지 않을 때 `null`을 말합니다. `may-` 형식은 검사가 대기 중인 플러그인 집합을 완전히 볼 수 없음을 의미합니다.1113`cache_impact`는 `held: true`와 함께일 때만 존재합니다. `mcp_servers_added`와 `mcp_servers_removed`는 다시 로드가 등록하거나 제거할 플러그인 MCP 서버를 범위가 지정된 `plugin:<plugin>:<server>` 이름으로 나타냅니다. 이름은 플러그인 작성자가 정하므로 표시하기 전에 검증하세요. `lsp_tool_change`는 적용 시 LSP 도구가 추가되는지 제거되는지를 나타내며, 둘 다 아니면 `null`입니다. `may-` 형식은 검사가 대기 중인 플러그인 집합을 완전히 파악하지 못했음을 의미합니다.
1104 1114
1105<h3 id="sdkcontrolreloadskillsresponse">1115<h3 id="sdkcontrolreloadskillsresponse">
1106 `SDKControlReloadSkillsResponse`1116 `SDKControlReloadSkillsResponse`
1107</h3>1117</h3>
1108 1118
1109[`reloadSkills()`](#query-object)의 반환 유형입니다.1119[`reloadSkills()`](#query-object)의 반환 타입입니다.
1110 1120
1111```typescript theme={null}1121```typescript theme={null}
1112type SDKControlReloadSkillsResponse = {1122type SDKControlReloadSkillsResponse = {
1114};1124};
1115```1125```
1116 1126
1117`skills`는 다시 로드 후 사용 가능한 스킬을 `supportedCommands()`가 반환하는 것과 동일한 [`SlashCommand`](#slashcommand) 형태로 나열합니다.1127`skills`는 다시 로드한 후 사용 가능한 스킬을 `supportedCommands()`가 반환하는 것과 동일한 [`SlashCommand`](#slashcommand) 형태로 나열합니다.
1118 1128
1119<h3 id="sdkcontrolreloadoutputstylesresponse">1129<h3 id="sdkcontrolreloadoutputstylesresponse">
1120 `SDKControlReloadOutputStylesResponse`1130 `SDKControlReloadOutputStylesResponse`
1121</h3>1131</h3>
1122 1132
1123[`reloadOutputStyles()`](#query-object)의 반환 유형입니다.1133[`reloadOutputStyles()`](#query-object)의 반환 타입입니다.
1124 1134
1125```typescript theme={null}1135```typescript theme={null}
1126type SDKControlReloadOutputStylesResponse = {1136type SDKControlReloadOutputStylesResponse = {
1128};1138};
1129```1139```
1130 1140
1131`available_output_styles`는 다시 로드 후 사용 가능한 기본 제공 및 사용자 정의 출력 스타일의 이름을 나열합니다.1141`available_output_styles`는 다시 로드한 후 사용 가능한 기본 제공 및 사용자 지정 출력 스타일의 이름을 나열합니다.
1132 1142
1133<h3 id="sdkcontrolmcpreadresourceresponse">1143<h3 id="sdkcontrolmcpreadresourceresponse">
1134 `SDKControlMcpReadResourceResponse`1144 `SDKControlMcpReadResourceResponse`
1135</h3>1145</h3>
1136 1146
1137[`readMcpResource()`](#query-object)의 반환 유형으로, MCP 서버의 `resources/read` 결과를 전달합니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다.1147[`readMcpResource()`](#query-object)의 반환 타입으로, MCP 서버의 `resources/read` 결과를 담고 있습니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다.
1138 1148
1139```typescript theme={null}1149```typescript theme={null}
1140type SDKControlMcpReadResourceResponse = {1150type SDKControlMcpReadResourceResponse = {
1148};1158};
1149```1159```
1150 1160
1151`readMcpResource()`에 `mcpServerStatus()`가 보고하는 서버 이름과 `ui://` URI(예: 도구가 [`_meta`](#mcpserverstatus)에서 선언하는 `ui.resourceUri`)를 전달합니다. 호출은 다른 URI 스킴, 애플리케이션이 자체 호스팅하는 [SDK MCP 서버](#createsdkmcpserver) 및 연결되지 않은 서버에 대해 거부합니다. 초기화 메시지의 [`capabilities`](#sdksystemmessage)에 `mcp_read_resource_v1`이 포함될 때 사용 가능합니다.1161`readMcpResource()`에는 `mcpServerStatus()`가 보고하는 서버 이름과, 도구가 [`_meta`](#mcpserverstatus)에 선언한 `ui.resourceUri`와 같은 `ui://` URI를 전달하세요. 다른 URI 스킴, 애플리케이션이 직접 호스팅하는 [SDK MCP 서버](#createsdkmcpserver), 연결되지 않은 서버에 대해서는 호출이 거부됩니다. init 메시지의 [`capabilities`](#sdksystemmessage)에 `mcp_read_resource_v1`이 포함된 경우 사용할 수 있습니다.
1152 1162
1153각 `contents` 항목은 서버가 보낸 하나의 콘텐츠 항목이며, `com.anthropic/` 접두사 아래의 `_meta` 키는 제외합니다. 이는 Claude Code용으로 예약되어 있습니다. `blob`은 바이너리 항목의 base64 데이터를 보유하고 `_meta`는 항목 자체의 `_meta`이며, MCP Apps 서버는 리소스의 `ui.csp` 및 `ui.permissions`를 여기에 넣습니다.1163각 `contents` 항목은 서버가 보낸 그대로의 콘텐츠 항목 하나이며, Claude Code용으로 예약된 `com.anthropic/` 접두사 아래의 `_meta` 키는 제외됩니다. `blob`은 바이너리 항목의 base64 데이터를 담고, `_meta`는 항목 자체의 `_meta`로, MCP Apps 서버가 리소스의 `ui.csp`와 `ui.permissions`를 넣는 곳입니다.
1154 1164
1155콘텐츠는 신뢰할 수 없는 제3자 HTML이므로 샌드박스에서 렌더링합니다.1165콘텐츠는 신뢰할 수 없는 서드파티 HTML이므로 샌드박스에서 렌더링하세요.
1156 1166
1157<h3 id="agentdefinition">1167<h3 id="agentdefinition">
1158 `AgentDefinition`1168 `AgentDefinition`
1182 1192
1183| 필드 | 필수 | 설명 |1193| 필드 | 필수 | 설명 |
1184| :- | :- | :- |1194| :- | :- | :- |
1185| `description` | 예 | 이 에이전트를 사용할 때를 설명하는 자연어 |1195| `description` | 예 | 이 에이전트를 언제 사용해야 하는지에 대한 자연어 설명 |
1186| `tools` | 아니오 | 허용된 도구 이름의 배열입니다. 생략하면 [서브에이전트에서 사용 가능한 모든 도구](/docs/ko/sub-agents#available-tools)를 상속합니다. 스킬을 에이전트의 컨텍스트에 미리 로드하려면 여기에 `'Skill'`을 나열하는 대신 `skills` 필드를 사용합니다 |1196| `tools` | 아니요 | 허용된 도구 이름의 배열입니다. 생략하면 [서브에이전트가 사용할 수 있는 모든 도구](/docs/ko/sub-agents#available-tools)를 상속합니다. 에이전트의 컨텍스트에 스킬을 미리 로드하려면 여기에 `'Skill'`을 나열하는 대신 `skills` 필드를 사용하세요 |
1187| `disallowedTools` | 아니오 | 이 에이전트에 대해 명시적으로 허용하지 않을 도구 이름의 배열입니다. MCP 서버 수준 패턴도 허용됩니다: `mcp__server` 또는 `mcp__server__*`는 해당 서버의 모든 도구를 제거하고 `mcp__*`는 모든 서버의 모든 MCP 도구를 제거합니다 |1197| `disallowedTools` | 아니요 | 이 에이전트에 대해 명시적으로 허용하지 않을 도구 이름의 배열입니다. MCP 서버 수준 패턴도 허용됩니다. `mcp__server` 또는 `mcp__server__*`는 해당 서버의 모든 도구를 제거하고, `mcp__*`는 모든 서버의 모든 MCP 도구를 제거합니다 |
1188| `prompt` | 예 | 에이전트의 시스템 프롬프트 |1198| `prompt` | 예 | 에이전트의 시스템 프롬프트 |
1189| `model` | 아니오 | 이 에이전트의 모델 재정의입니다. `'fable'`, `'opus'`, `'sonnet'`, `'haiku'`, `'inherit'` 같은 별칭 또는 전체 모델 ID를 허용합니다. `'inherit'`는 메인 모델을 사용합니다. 생략하면 Claude Code는 [서브에이전트 모델 순서](/docs/ko/sub-agents#choose-a-model)에서 모델을 선택합니다 |1199| `model` | 아니요 | 이 에이전트의 모델 재정의입니다. `'fable'`, `'opus'`, `'sonnet'`, `'haiku'`, `'inherit'`와 같은 별칭 또는 전체 모델 ID를 받습니다. `'inherit'`는 메인 모델을 사용합니다. 생략하면 Claude Code가 [서브에이전트 모델 순서](/docs/ko/sub-agents#choose-a-model)에 따라 모델을 선택합니다 |
1190| `mcpServers` | 아니오 | 이 에이전트의 MCP 서버 사양 |1200| `mcpServers` | 아니요 | 이 에이전트의 MCP 서버 사양 |
1191| `skills` | 아니오 | 에이전트 컨텍스트에 미리 로드할 스킬 이름의 배열 |1201| `skills` | 아니요 | 에이전트 컨텍스트에 미리 로드할 스킬 이름의 배열 |
1192| `initialPrompt` | 아니오 | 이 에이전트가 메인 스레드 에이전트로 실행될 때 첫 번째 사용자 턴으로 자동 제출됩니다 |1202| `initialPrompt` | 아니요 | 이 에이전트가 메인 스레드 에이전트로 실행될 때 첫 번째 사용자 턴으로 자동 제출됩니다 |
1193| `maxTurns` | 아니오 | 중지하기 전의 최대 에이전트 턴(API 왕복) 수 |1203| `maxTurns` | 아니요 | 중지하기 전 최대 에이전트 턴 수(API 왕복) |
1194| `background` | 아니오 | 호출될 때 이 에이전트를 비차단 백그라운드 작업으로 실행합니다 |1204| `background` | 아니요 | 호출 시 이 에이전트를 비차단 백그라운드 작업으로 실행합니다 |
1195| `omitClaudeMd` | 아니오 | 이 에이전트가 서브에이전트로 실행될 때 사용자, 프로젝트 및 로컬 CLAUDE.md 파일 없이 실행합니다. 관리 정책 파일은 여전히 로드됩니다. Agent 도구 프롬프트에서 필요한 모든 것을 가져오는 에이전트에 사용합니다. 이 에이전트가 메인 스레드 에이전트로 실행될 때는 무시됩니다. TypeScript Agent SDK v0.3.271 이상이 필요합니다 |1205| `omitClaudeMd` | 아니요 | 이 에이전트가 서브에이전트로 실행될 때 사용자, 프로젝트, 로컬 CLAUDE.md 파일 없이 실행합니다. 관리형 정책 파일은 여전히 로드됩니다. 필요한 모든 것을 Agent 도구 프롬프트에서 받는 에이전트에 사용하세요. 이 에이전트가 메인 스레드 에이전트로 실행될 때는 무시됩니다. TypeScript Agent SDK v0.3.271 이상이 필요합니다 |
1196| `memory` | 아니오 | 이 에이전트의 메모리 소스: `'user'`, `'project'` 또는 `'local'` |1206| `memory` | 아니요 | 이 에이전트의 메모리 소스: `'user'`, `'project'` 또는 `'local'` |
1197| `effort` | 아니오 | 이 에이전트의 추론 노력 수준입니다. 명명된 수준 또는 정수를 허용합니다 |1207| `effort` | 아니요 | 이 에이전트의 추론 effort 수준입니다. 이름이 지정된 수준 또는 정수를 받습니다 |
1198| `permissionMode` | 아니오 | 이 에이전트 내의 도구 실행을 위한 권한 모드입니다. [서브에이전트 상속 규칙](/docs/ko/agent-sdk/permissions#available-modes)은 적용 시기를 결정합니다. [`PermissionMode`](#permissionmode)를 참조하세요 |1208| `permissionMode` | 아니요 | 이 에이전트 내 도구 실행의 권한 모드입니다. 적용 시점은 [서브에이전트 상속 규칙](/docs/ko/agent-sdk/permissions#available-modes)에 따라 결정됩니다. [`PermissionMode`](#permissionmode)를 참조하세요 |
1199| `criticalSystemReminder_EXPERIMENTAL` | 아니오 | 실험적: 시스템 프롬프트에 추가된 중요 알림 |1209| `criticalSystemReminder_EXPERIMENTAL` | 아니요 | 실험적 기능: 시스템 프롬프트에 추가되는 중요 알림 |
1200 1210
1201<h3 id="agentmcpserverspec">1211<h3 id="agentmcpserverspec">
1202 `AgentMcpServerSpec`1212 `AgentMcpServerSpec`
1203</h3>1213</h3>
1204 1214
1205서브에이전트에서 사용 가능한 MCP 서버를 지정합니다. 서버 이름(부모의 `mcpServers` 구성에서 서버를 참조하는 문자열) 또는 서버 이름을 구성에 매핑하는 인라인 서버 구성 레코드일 수 있습니다.1215서브에이전트가 사용할 수 있는 MCP 서버를 지정합니다. 서버 이름(상위의 `mcpServers` 구성에 있는 서버를 참조하는 문자열) 또는 서버 이름을 구성에 매핑하는 인라인 서버 구성 레코드일 수 있습니다.
1206 1216
1207```typescript theme={null}1217```typescript theme={null}
1208type AgentMcpServerSpec = string | Record<string, McpServerConfigForProcessTransport>;1218type AgentMcpServerSpec = string | Record<string, McpServerConfigForProcessTransport>;
1214 `SettingSource`1224 `SettingSource`
1215</h3>1225</h3>
1216 1226
1217SDK가 설정을 로드하는 파일 시스템 기반 구성 소스를 제어합니다.1227SDK가 설정을 로드할 파일 시스템 기반 구성 소스를 제어합니다.
1218 1228
1219```typescript theme={null}1229```typescript theme={null}
1220type SettingSource = "user" | "project" | "local";1230type SettingSource = "user" | "project" | "local";
1223| 값 | 설명 | 위치 |1233| 값 | 설명 | 위치 |
1224| :- | :- | :- |1234| :- | :- | :- |
1225| `'user'` | 전역 사용자 설정 | `~/.claude/settings.json` |1235| `'user'` | 전역 사용자 설정 | `~/.claude/settings.json` |
1226| `'project'` | 공유 프로젝트 설정(버전 제어됨) | `.claude/settings.json` |1236| `'project'` | 공유 프로젝트 설정(버전 관리됨) | `.claude/settings.json` |
1227| `'local'` | 로컬 프로젝트 설정, Claude Code가 설정을 저장할 때 gitignored | `.claude/settings.local.json` |1237| `'local'` | 로컬 프로젝트 설정. Claude Code가 이 파일에 설정을 저장할 때 gitignore 처리됨 | `.claude/settings.local.json` |
1228 1238
1229<h4 id="default-behavior">1239<h4 id="default-behavior">
1230 기본 동작1240 기본 동작
1231</h4>1241</h4>
1232 1242
1233`settingSources`가 생략되거나 `undefined`일 때 `query()`는 Claude Code CLI와 동일한 파일 시스템 설정을 로드합니다: 사용자, 프로젝트 및 로컬. [settingSources가 제어하지 않는 것](/docs/ko/agent-sdk/claude-code-features#what-settingsources-does-not-control)을 참조하여 이 옵션과 관계없이 읽히는 입력과 비활성화 방법을 확인하세요.1243`settingSources`를 생략하거나 `undefined`로 두면 `query()`는 Claude Code CLI와 동일한 파일 시스템 설정(user, project, local)을 로드합니다. 이 옵션과 관계없이 읽히는 입력과 이를 비활성화하는 방법은 [settingSources가 제어하지 않는 항목](/docs/ko/agent-sdk/claude-code-features#what-settingsources-does-not-control)을 참조하세요.
1234 1244
1235<h4 id="why-use-settingsources">1245<h4 id="why-use-settingsources">
1236 settingSources를 사용하는 이유1246 settingSources를 사용하는 이유
1262});1272});
1263```1273```
1264 1274
1265CLAUDE.md 프로젝트 지침을 로드하려면 `settingSources`에 `"project"`를 포함합니다. CLAUDE.md 로드가 시스템 프롬프트 옵션과 상호작용하는 방식은 [시스템 프롬프트 수정](/docs/ko/agent-sdk/modifying-system-prompts#claude-md-files-for-project-level-instructions)을 참조하세요.1275CLAUDE.md 프로젝트 지침을 로드하려면 `settingSources`에 `"project"`를 포함하세요. CLAUDE.md 로딩이 시스템 프롬프트 옵션과 어떻게 상호 작용하는지는 [시스템 프롬프트 수정](/docs/ko/agent-sdk/modifying-system-prompts#claude-md-files-for-project-level-instructions)을 참조하세요.
1266 1276
1267<h4 id="settings-precedence">1277<h4 id="settings-precedence">
1268 설정 우선순위1278 설정 우선순위
1269</h4>1279</h4>
1270 1280
1271여러 소스가 로드될 때 설정은 이 우선순위(높음에서 낮음)로 병합됩니다:1281여러 소스가 로드되면 설정은 다음 우선순위(높은 순에서 낮은 순)로 병합됩니다.
1272 1282
12731. 로컬 설정(`.claude/settings.local.json`)12831. 로컬 설정(`.claude/settings.local.json`)
12742. 프로젝트 설정(`.claude/settings.json`)12842. 프로젝트 설정(`.claude/settings.json`)
12753. 사용자 설정(`~/.claude/settings.json`)12853. 사용자 설정(`~/.claude/settings.json`)
1276 1286
1277`agents`, `allowedTools` 및 `settings` 같은 프로그래밍 옵션은 사용자, 프로젝트 및 로컬 파일 시스템 설정을 재정의합니다. 관리 정책 설정은 프로그래밍 옵션보다 우선합니다.1287`agents`, `allowedTools`, `settings`와 같은 프로그래밍 방식 옵션은 사용자, 프로젝트, 로컬 파일 시스템 설정을 재정의합니다. 관리형 정책 설정은 프로그래밍 방식 옵션보다 우선합니다.
1278 1288
1279<h3 id="permissionmode">1289<h3 id="permissionmode">
1280 `PermissionMode`1290 `PermissionMode`
1282 1292
1283```typescript theme={null}1293```typescript theme={null}
1284type PermissionMode =1294type PermissionMode =
1285 | "default" // 표준 권한 동작1295 | "default" // Standard permission behavior
1286 | "acceptEdits" // 파일 편집 자동 수락1296 | "acceptEdits" // Auto-accept file edits
1287 | "bypassPermissions" // 권한 검사 우회; 명시적 요청 규칙은 여전히 프롬프트1297 | "bypassPermissions" // Bypass permission checks; explicit ask rules still prompt
1288 | "plan" // 계획 모드 - 편집 없이 탐색1298 | "plan" // Planning mode - explore without editing
1289 | "dontAsk" // 권한에 대해 프롬프트하지 않음, 사전 승인되지 않으면 거부1299 | "dontAsk" // Don't prompt for permissions, deny if not pre-approved
1290 | "auto"; // 모델 분류자가 셸 명령어 및 네트워크 요청 같은 작업을 검토1300 | "auto"; // A model classifier reviews actions such as shell commands and network requests
1291```1301```
1292 1302
1293<h3 id="canusetool">1303<h3 id="canusetool">
1294 `CanUseTool`1304 `CanUseTool`
1295</h3>1305</h3>
1296 1306
1297도구 사용을 제어하기 위한 사용자 정의 권한 함수 유형입니다.1307도구 사용을 제어하기 위한 사용자 정의 권한 함수 타입입니다.
1298 1308
1299함수는 대화형 권한 프롬프트의 SDK 대체입니다. [권한 평가 흐름](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated)이 프롬프트로 해결될 때만 호출됩니다. `allowedTools` 항목, 설정 허용 규칙 또는 `acceptEdits` 또는 `bypassPermissions` 같은 권한 모드에 의해 이미 승인된 도구 호출은 호출하지 않습니다. 모든 도구 호출을 게이트하려면 [`PreToolUse` 훅](/docs/ko/agent-sdk/hooks)을 대신 사용합니다.1309이 함수는 대화형 권한 프롬프트를 대체하는 SDK 기능으로, [권한 평가 흐름](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated)이 프롬프트로 귀결될 때만 호출됩니다. `allowedTools` 항목, 설정의 허용 규칙, 또는 `acceptEdits`나 `bypassPermissions` 같은 권한 모드로 이미 승인된 도구 호출은 이 함수를 호출하지 않습니다. 모든 도구 호출을 제어하려면 대신 [`PreToolUse` 훅](/docs/ko/agent-sdk/hooks)을 사용하세요.
1300 1310
1301허용 규칙은 [모드가 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)을 사전 승인하지 않습니다. [권한이 평가되는 방식](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated)을 참조하여 콜백에 도달하는 것과 `dontAsk` 및 `auto` 모드에서 발생하는 것을 확인하세요.1311허용 규칙은 [어떤 모드도 자동 승인하지 않는 작업](/docs/ko/permission-modes#actions-no-mode-auto-approves)을 사전 승인하지 않습니다. 이러한 작업 중 어떤 것이 콜백에 도달하는지, 그리고 `dontAsk` 및 `auto` 모드에서 어떻게 처리되는지는 [권한 평가 방식](/docs/ko/agent-sdk/permissions#how-permissions-are-evaluated)을 참조하세요.
1302 1312
1303```typescript theme={null}1313```typescript theme={null}
1304type CanUseTool = (1314type CanUseTool = (
1319) => Promise<PermissionResult | null>;1329) => Promise<PermissionResult | null>;
1320```1330```
1321 1331
1322| 옵션 | 유형 | 설명 |1332| 옵션 | 타입 | 설명 |
1323| :- | :- | :- |1333| :- | :- | :- |
1324| `signal` | `AbortSignal` | 작업을 중단해야 하면 신호됩니다 |1334| `signal` | `AbortSignal` | 작업을 중단해야 하는 경우 신호가 전달됨 |
1325| `suggestions` | [`PermissionUpdate`](#permissionupdate)`[]` | 사용자가 이 도구에 대해 다시 프롬프트되지 않도록 제안된 권한 업데이트입니다. Bash 프롬프트는 `localSettings` [대상](#permissionupdatedestination)을 사용하는 제안을 포함하므로 `updatedPermissions`에서 반환하면 규칙을 `.claude/settings.local.json`에 작성하고 세션 간에 지속됩니다. |1335| `suggestions` | [`PermissionUpdate`](#permissionupdate)`[]` | 이 도구에 대해 사용자에게 다시 확인을 요청하지 않도록 제안된 권한 업데이트. Bash 프롬프트에는 `localSettings` [대상](#permissionupdatedestination)이 포함된 제안이 있으므로, 이를 `updatedPermissions`로 반환하면 규칙이 `.claude/settings.local.json`에 기록되어 세션 간에 유지됩니다. |
1326| `blockedPath` | `string` | 해당하는 경우 권한 요청을 트리거한 파일 경로입니다 |1336| `blockedPath` | `string` | 해당하는 경우, 권한 요청을 트리거한 파일 경로 |
1327| `mcpServer` | `{ name: string; source: string }` | `mcp__*` 도구의 경우 해당 도구를 제공하는 MCP 서버 및 해당 서버의 정의가 나온 위치([`McpServerProvenance`](#mcpserverprovenance)의 필드 포함). 다른 도구의 경우 없습니다. Agent SDK v0.3.274 이상이 필요합니다 |1337| `mcpServer` | `{ name: string; source: string }` | `mcp__*` 도구의 경우, 해당 도구를 제공하는 MCP 서버와 그 서버 정의의 출처로, [`McpServerProvenance`](#mcpserverprovenance)의 필드를 가집니다. 다른 도구에서는 없습니다. Agent SDK v0.3.274 이상이 필요합니다 |
1328| `decisionReason` | `string` | 이 권한 요청이 트리거된 이유를 설명합니다 |1338| `decisionReason` | `string` | 이 권한 요청이 트리거된 이유를 설명 |
1329| `defaultToNo` | `boolean` | true\`일 때, 단일 잘못된 키 입력이 이 요청을 승인하면 안 됩니다. 거부 옵션에서 프롬프트를 열고 승인을 사전 선택하지 않으며 일회성 승인 바로가기를 제공하지 마세요. Agent SDK v0.3.268 이상이 필요합니다 |1339| `defaultToNo` | `boolean` | `true`이면 실수로 누른 키 하나로 이 요청이 승인되어서는 안 됩니다. 프롬프트를 거부 옵션에 포커스된 상태로 열고, 승인을 미리 선택하지 말며, 한 번의 키 입력으로 승인하는 단축키를 제공하지 마세요. Agent SDK v0.3.268 이상이 필요합니다 |
1330| `suppressAlwaysAllowRule` | `boolean` | true\`일 때, 이 요청에 대한 영구적 항상 허용 선택을 제공하지 마세요. 작성할 규칙이 요청 자체의 작업보다 더 많이 부여하기 때문입니다. Agent SDK v0.3.268 이상이 필요합니다 |1340| `suppressAlwaysAllowRule` | `boolean` | `true`이면 이 요청에 대해 영구적인 항상 허용 선택지를 제공하지 마세요. 해당 선택지가 기록할 규칙이 요청 자체의 작업보다 더 많은 권한을 부여하기 때문입니다. Agent SDK v0.3.268 이상이 필요합니다 |
1331| `toolUseID` | `string` | 어시스턴트 메시지 내 이 특정 도구 호출의 고유 식별자 |1341| `toolUseID` | `string` | 어시스턴트 메시지 내에서 이 특정 도구 호출의 고유 식별자 |
1332| `agentID` | `string` | 서브 에이전트 내에서 실행 중인 경우 서브 에이전트의 ID |1342| `agentID` | `string` | 서브에이전트 내에서 실행 중인 경우, 서브에이전트의 ID |
1333| `requestId` | `string` | `control_request` 봉투의 `request_id`입니다. 애플리케이션이 자신의 채널(예: 서명된 HTTP POST)을 통해 보내는 `control_response`는 이 값을 에코해야 하므로 Claude Code 프로세스가 회신을 요청과 일치시킬 수 있습니다 |1343| `requestId` | `string` | `control_request` 엔벨로프의 `request_id`. 서명된 HTTP POST처럼 애플리케이션이 SDK 외부에서 보내는 `control_response`는 Claude Code 프로세스가 응답을 요청과 매칭할 수 있도록 이 값을 그대로 포함해야 합니다 |
1334 1344
1335콜백은 일반적으로 [`PermissionResult`](#permissionresult)를 반환하여 요청을 해결하며, SDK는 이를 전송으로 `control_response`로 다시 작성합니다. 애플리케이션이 이미 자신의 채널을 통해 이 요청에 대한 `control_response`를 보냈고 `requestId`를 에코할 때만 `null`을 반환합니다. 그러면 SDK는 전송에 응답을 작성하는 것을 건너뜁니다. 다른 경우에 `null`을 반환하면 `control_response`가 보내지지 않고 권한 프롬프트가 시간 초과되지 않으므로 도구 호출이 무한정 차단됩니다.1345콜백은 일반적으로 [`PermissionResult`](#permissionresult)를 반환하여 요청을 처리하며, SDK는 이를 `control_response`로서 자체 전송 계층을 통해 다시 기록합니다. 애플리케이션이 `requestId`를 포함하여 자체 채널로 이 요청에 대한 `control_response`를 이미 보낸 경우에만 `null`을 반환하세요. 그러면 SDK는 전송 계층에 응답을 기록하는 것을 건너뜁니다. 그 외의 경우에 `null`을 반환하면 `control_response`가 전혀 전송되지 않고 권한 프롬프트는 시간 초과되지 않으므로, 도구 호출이 무기한 차단된 상태로 남습니다.
1336 1346
1337`requestId` 옵션과 `null` 반환 값은 Claude Code v2.1.199 이상이 필요합니다.1347`requestId` 옵션과 `null` 반환 값은 Claude Code v2.1.199 이상이 필요합니다.
1338 1348
1340 `PermissionResult`1350 `PermissionResult`
1341</h3>1351</h3>
1342 1352
1343권한 검사의 결과입니다.1353권한 확인 결과입니다.
1344 1354
1345```typescript theme={null}1355```typescript theme={null}
1346type PermissionResult =1356type PermissionResult =
1362 `ToolConfig`1372 `ToolConfig`
1363</h3>1373</h3>
1364 1374
1365기본 제공 도구 동작의 구성입니다.1375내장 도구 동작에 대한 구성입니다.
1366 1376
1367```typescript theme={null}1377```typescript theme={null}
1368type ToolConfig = {1378type ToolConfig = {
1372};1382};
1373```1383```
1374 1384
1375| 필드 | 유형 | 설명 |1385| 필드 | 타입 | 설명 |
1376| :- | :- | :- |1386| :- | :- | :- |
1377| `askUserQuestion.previewFormat` | `'markdown' \| 'html'` | [`AskUserQuestion`](/docs/ko/agent-sdk/user-input#question-format) 옵션의 `preview` 필드를 옵트인하고 콘텐츠 형식을 설정합니다. 설정하지 않으면 Claude는 미리보기를 내보내지 않습니다 |1387| `askUserQuestion.previewFormat` | `'markdown' \| 'html'` | [`AskUserQuestion`](/docs/ko/agent-sdk/user-input#question-format) 옵션의 `preview` 필드를 활성화하고 해당 콘텐츠 형식을 설정합니다. 설정하지 않으면 Claude는 미리보기를 생성하지 않습니다 |
1378 1388
1379<h3 id="mcpserverconfig">1389<h3 id="mcpserverconfig">
1380 `McpServerConfig`1390 `McpServerConfig`
1381</h3>1391</h3>
1382 1392
1383MCP 서버의 구성입니다.1393MCP 서버에 대한 구성입니다.
1384 1394
1385```typescript theme={null}1395```typescript theme={null}
1386type McpServerConfig =1396type McpServerConfig =
1466};1476};
1467```1477```
1468 1478
1469| 필드 | 유형 | 설명 |1479| 필드 | 타입 | 설명 |
1470| :- | :- | :- |1480| :- | :- | :- |
1471| `type` | `'local'` | `'local'`이어야 합니다(현재 로컬 플러그인만 지원됨) |1481| `type` | `'local'` | 반드시 `'local'`이어야 합니다(현재 로컬 플러그인만 지원됨) |
1472| `path` | `string` | 플러그인 디렉토리의 절대 또는 상대 경로 |1482| `path` | `string` | 플러그인 디렉터리의 절대 또는 상대 경로 |
1473| `skipMcpDiscovery` | `boolean` | `true`일 때 SDK는 이 플러그인에서 스킬, 훅, 에이전트 및 명령어를 로드하지만 `.mcp.json` 또는 매니페스트 `mcpServers`를 읽지 않습니다. 애플리케이션이 플러그인의 MCP 연결을 소유할 때 설정합니다. |1483| `skipMcpDiscovery` | `boolean` | `true`이면 SDK는 이 플러그인에서 스킬, 훅, 에이전트, 명령을 로드하지만 `.mcp.json`이나 매니페스트의 `mcpServers`는 읽지 않습니다. 애플리케이션이 플러그인의 MCP 연결을 직접 관리하는 경우 이 값을 설정하세요. |
1474 1484
1475**예제:**1485**예시:**
1476 1486
1477```typescript theme={null}1487```typescript theme={null}
1478plugins: [1488plugins: [
1481];1491];
1482```1492```
1483 1493
1484플러그인 생성 및 사용에 대한 완전한 정보는 [플러그인](/docs/ko/agent-sdk/plugins)을 참조하세요.1494플러그인 생성 및 사용에 대한 전체 정보는 [플러그인](/docs/ko/agent-sdk/plugins)을 참조하세요.
1485 1495
1486<h2 id="message-types">1496<h2 id="message-types">
1487 메시지 타입1497 메시지 타입
1491 `SDKMessage`1501 `SDKMessage`
1492</h3>1502</h3>
1493 1503
1494쿼리에서 반환되는 모든 가능한 메시지의 합집합 타입입니다.1504쿼리가 반환할 수 있는 모든 메시지의 유니온 타입입니다.
1495 1505
1496```typescript theme={null}1506```typescript theme={null}
1497type SDKMessage =1507type SDKMessage =
1556};1566};
1557```1567```
1558 1568
1559`message` 필드는 Anthropic SDK의 [`BetaMessage`](https://platform.claude.com/docs/en/api/messages/create)입니다. `id`, `content`, `model`, `stop_reason`, `usage` 같은 필드를 포함합니다.1569`message` 필드는 Anthropic SDK의 [`BetaMessage`](https://platform.claude.com/docs/en/api/messages/create)입니다. 여기에는 `id`, `content`, `model`, `stop_reason`, `usage` 같은 필드가 포함됩니다.
1560 1570
1561`SDKAssistantMessageError`는 다음 중 하나입니다: `'authentication_failed'`, `'oauth_org_not_allowed'`, `'account_on_hold'`, `'billing_error'`, `'rate_limit'`, `'overloaded'`, `'invalid_request'`, `'model_not_found'`, `'server_error'`, `'max_output_tokens'`, `'cloud_credential_error'`, 또는 `'unknown'`. 이 중 네 개의 값은 이름이 나타내는 것보다 더 많은 의미를 가집니다:1571`SDKAssistantMessageError`는 `'authentication_failed'`, `'oauth_org_not_allowed'`, `'account_on_hold'`, `'billing_error'`, `'rate_limit'`, `'overloaded'`, `'invalid_request'`, `'model_not_found'`, `'server_error'`, `'max_output_tokens'`, `'cloud_credential_error'`, `'unknown'` 중 하나입니다. 이 중 네 가지 값은 이름보다 더 많은 의미를 가집니다.
1562 1572
1563* `'model_not_found'`: 선택한 모델이 존재하지 않거나 계정이나 배포에서 사용할 수 없음1573* `'model_not_found'`: 선택한 모델이 존재하지 않거나 사용자의 계정 또는 배포에서 사용할 수 없습니다
1564* `'overloaded'`: API가 서버가 용량에 도달했기 때문에 529를 반환했으며, 할당량에 대한 429인 `'rate_limit'`과는 다름1574* `'overloaded'`: 서버 용량이 가득 차서 API가 529를 반환했습니다. 이는 할당량에 대한 429인 `'rate_limit'`과 구별됩니다
1565* `'account_on_hold'`: [계정이 보류 중](/docs/ko/errors#your-account-is-on-hold)1575* `'account_on_hold'`: [계정이 보류 상태입니다](/docs/ko/errors#your-account-is-on-hold)
1566* `'cloud_credential_error'`: Claude Code가 실행되는 머신에서 사용 가능한 AWS 또는 Google Cloud 자격 증명을 얻을 수 없어서 클라우드 제공자에게 요청이 도달하지 않았습니다. 일반적인 원인은 해당 머신에서 만료되었거나 완료되지 않은 클라우드 로그인이지만, 일시적으로 도달할 수 없는 자격 증명 서비스도 동일한 값을 보고합니다. [AWS 또는 Google Cloud 자격 증명을 로드할 수 없음](/docs/ko/errors#could-not-load-aws-or-google-cloud-credentials)을 참조하세요. TypeScript Agent SDK v0.3.267 이상이 필요하며, Claude Code v2.1.267을 번들로 포함합니다.1576* `'cloud_credential_error'`: Claude Code가 실행 중인 머신에서 사용 가능한 AWS 또는 Google Cloud 자격 증명을 얻지 못해 어떤 요청도 클라우드 공급자에 도달하지 않았습니다. 일반적인 원인은 해당 머신에서 클라우드 로그인이 만료되었거나 완료되지 않은 것이지만, 자격 증명 서비스에 일시적으로 연결할 수 없는 경우에도 같은 값이 보고됩니다. [Could not load AWS or Google Cloud credentials](/docs/ko/errors#could-not-load-aws-or-google-cloud-credentials)를 참조하세요. Claude Code v2.1.267을 번들로 포함하는 TypeScript Agent SDK v0.3.267 이상이 필요합니다
1567 1577
1568`aborted`는 중단이나 중지가 스트림이 완료되기 전에 어시스턴트 메시지를 자를 때 `true`입니다: 메시지에는 `stop_reason`이 없고 콘텐츠가 단어 중간에 끝날 수 있습니다. 이 필드는 정상적으로 완료된 메시지에는 없습니다. Agent SDK v0.3.214 이상이 필요합니다.1578`aborted`는 인터럽트 또는 중단으로 인해 스트림이 완료되기 전에 어시스턴트 메시지가 잘렸을 때 `true`입니다. 이 경우 메시지에는 `stop_reason`이 없으며 콘텐츠가 단어 중간에서 끝날 수 있습니다. 정상적으로 완료된 메시지에는 이 필드가 없습니다. Agent SDK v0.3.214 이상이 필요합니다.
1569 1579
1570Claude Code는 [`user_message_uuid`](#user_message_uuid)의 조건에 따라 턴의 첫 번째 어시스턴트 메시지에 `user_message_uuid`와 `user_message_uuids`를 설정합니다. Claude Code가 재시작으로 중단된 턴을 다시 실행할 때, 이러한 필드를 전달하는 다시 실행된 어시스턴트 메시지도 [`resume_reason`](#resume_reason)을 전달합니다.1580Claude Code는 [`user_message_uuid`](#user_message_uuid)에 설명된 조건에 따라 턴의 첫 번째 어시스턴트 메시지에 `user_message_uuid`와 `user_message_uuids`를 설정합니다. 재시작으로 중단된 턴을 Claude Code가 다시 실행할 때, 해당 필드를 가진 재실행의 어시스턴트 메시지에는 [`resume_reason`](#resume_reason)도 포함됩니다.
1571 1581
1572`timestamp`는 메시지를 생성한 프로세스에서 메시지의 콘텐츠가 생성을 완료한 ISO 8601 시간입니다. 값은 해당 머신의 시계에서 나오므로 표시 목적으로만 사용하고 이를 기준으로 메시지를 정렬하지 마세요. 하나의 API 턴은 동일한 `message.id`를 공유하는 여러 어시스턴트 메시지를 생성할 수 있으며, 각각 자신의 `timestamp`를 가집니다. 필드가 없으면 메시지를 받은 시간으로 대체하세요.1582`timestamp`는 메시지를 생성한 프로세스에서 메시지 콘텐츠 생성이 완료된 ISO 8601 시각입니다. 이 값은 해당 머신의 시계에서 가져오므로 표시 용도로만 사용하고 메시지 정렬에는 사용하지 마세요. 하나의 API 턴이 같은 `message.id`를 공유하는 여러 어시스턴트 메시지를 생성할 수 있으며, 각 메시지는 고유한 `timestamp`를 가집니다. 이 필드가 없으면 메시지를 수신한 시각을 대신 사용하세요.
1573 1583
1574`context_usage`는 `/context` 보고서의 구조화된 복사본이며, [`SDKContextUsage`](#sdkcontextusage) 타입이고 Agent SDK v0.3.232 이상이 필요합니다. 프롬프트로 `/context`를 보낼 때, Claude Code는 `message.content`에 마크다운 테이블을 담은 어시스턴트 메시지로 보고서를 전달하고, 동일한 메시지에 `context_usage`를 첨부합니다. Claude Code는 다른 어시스턴트 메시지에는 이 필드를 설정하지 않으며, 이전 버전은 이 필드 없이 `/context` 테이블을 전달하므로, 필드가 있을 때는 필드에서 분석을 읽고 없을 때는 마크다운 텍스트로 대체하세요.1584`context_usage`는 [`SDKContextUsage`](#sdkcontextusage) 타입으로 된 `/context` 보고서의 구조화된 사본이며 Agent SDK v0.3.232 이상이 필요합니다. `/context`를 프롬프트로 보내면 Claude Code는 `message.content`에 markdown 표가 담긴 어시스턴트 메시지로 보고서를 전달하고, 같은 메시지에 `context_usage`를 첨부합니다. Claude Code는 다른 어시스턴트 메시지에는 이 필드를 설정하지 않으며, 이전 버전은 이 필드 없이 `/context` 표를 전달합니다. 따라서 필드가 있으면 필드에서 세부 내역을 읽고, 없으면 markdown 텍스트를 사용하세요.
1575 1585
1576<h3 id="sdkusermessage">1586<h3 id="sdkusermessage">
1577 `SDKUserMessage`1587 `SDKUserMessage`
1597};1607};
1598```1608```
1599 1609
1600사용자가 프롬프트 UI에 입력하지 않고 붙여넣은 콘텐츠를 보내려면 `pasted_content`를 설정하세요. 붙여넣기당 하나의 항목이며, 각각 문자열 또는 콘텐츠 블록 배열입니다. Claude Code는 각 항목의 텍스트를 입력된 텍스트 뒤에 순서대로 추가하며, 각 붙여넣기를 `<pasted_content>` 태그로 감쌀 수 있습니다. 텍스트 이외의 블록은 무시되므로 이미지와 문서는 `message.content`에서 보내세요. Agent SDK v0.3.277 이상이 필요합니다.1610사용자가 프롬프트 UI에 직접 입력하지 않고 붙여 넣은 콘텐츠를 보내려면 `pasted_content`를 설정합니다. 붙여 넣기 한 번당 하나의 항목이며, 각 항목은 문자열 또는 콘텐츠 블록 배열입니다. Claude Code는 입력된 텍스트 뒤에 각 항목의 텍스트를 순서대로 추가하며, 각 붙여 넣기를 `<pasted_content>` 태그로 감쌀 수 있습니다. 텍스트 이외의 블록은 무시되므로 이미지와 문서는 `message.content`로 보내세요. Agent SDK v0.3.277 이상이 필요합니다.
1601 1611
1602`message.content` 중 사용자가 직접 입력하지 않고 붙여넣은 부분을 Claude Code에 알리려면 `inline_pastes`를 설정하세요. 붙여넣기 한 번당 문자열 하나입니다. 프롬프트 텍스트는 사용자가 둔 위치에 그대로 유지됩니다. Claude Code는 나열된 각 붙여넣기를 해당 위치에서 `<pasted_content>` 태그로 감쌀 수 있으므로, Claude는 붙여넣은 내용과 사용자가 직접 작성한 내용을 구별할 수 있습니다. 프롬프트의 마지막 텍스트 블록에 있는 붙여넣기만 감싸집니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다.1612`message.content` 중 사용자가 입력하지 않고 붙여 넣은 부분을 Claude Code에 알리려면 `inline_pastes`를 설정합니다. 붙여 넣기 한 번당 하나의 문자열입니다. 프롬프트 텍스트는 사용자가 넣은 위치에 그대로 유지됩니다. Claude Code는 나열된 각 붙여 넣기를 해당 위치에서 `<pasted_content>` 태그로 감쌀 수 있으므로, Claude는 붙여 넣은 자료와 사용자가 직접 쓴 말을 구별할 수 있습니다. 프롬프트의 마지막 텍스트 블록에 있는 붙여 넣기만 감싸집니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다.
1603 1613
1604보내는 메시지를 Claude Code가 처리하는 방식을 바꾸려면 `shouldQuery`, `client_composed` 또는 `priority`를 설정하세요.1614보내는 메시지를 Claude Code가 처리하는 방식을 바꾸려면 `shouldQuery`, `client_composed`, 또는 `priority`를 설정합니다.
1605 1615
1606* `shouldQuery`: 어시스턴트 턴을 트리거하지 않고 메시지를 트랜스크립트에 추가하려면 `false`로 설정하세요. 메시지는 보류되고 턴을 트리거하는 다음 사용자 메시지로 병합됩니다. 이를 사용하여 모델 호출을 소비하지 않고 대역 외에서 실행한 명령의 출력과 같은 컨텍스트를 주입하세요.1616* `shouldQuery`: `false`로 설정하면 어시스턴트 턴을 트리거하지 않고 메시지를 트랜스크립트에 추가합니다. 메시지는 보류되었다가 턴을 트리거하는 다음 사용자 메시지에 병합됩니다. 별도로 실행한 명령의 출력처럼 모델 호출을 소비하지 않고 컨텍스트를 주입할 때 사용합니다.
1607* `client_composed`: Claude Code가 작성된 대로 메시지 텍스트를 전달하도록 하려면 `true`로 설정하세요. Claude Code는 `@path` 또는 [`@server:resource`](/docs/ko/mcp#use-mcp-resources) 언급을 확장하지 않으며, `/`로 시작하는 텍스트를 명령으로 실행하지 않습니다. [`verbatimPrompts`](#options) 옵션이 켜져 있는 동안 SDK는 모든 메시지에 필드를 설정합니다. TypeScript Agent SDK v0.3.280 이상과 Claude Code v2.1.248 이상이 필요합니다.1617* `client_composed`: `true`로 설정하면 Claude Code가 메시지 텍스트를 작성된 그대로 전달합니다. 이 경우 Claude Code는 `@path` 또는 [`@server:resource`](/docs/ko/mcp#use-mcp-resources) 멘션을 확장하지 않으며, `/`로 시작하는 텍스트를 명령으로 실행하지 않습니다. [`verbatimPrompts`](#options) 옵션이 켜져 있는 동안에는 SDK가 모든 메시지에 이 필드를 설정합니다. TypeScript Agent SDK v0.3.280 이상과 Claude Code v2.1.248 이상이 필요합니다.
1608* `priority`: 실행 중인 턴 동안 보낸 메시지가 언제 Claude에 도달하는지 제어합니다.1618* `priority`: 턴이 실행 중일 때 보낸 메시지가 Claude에 도달하는 시점을 제어합니다.
1609 * `'next'` 또는 `priority` 필드 없음: Claude는 실행 중인 도구 호출이 끝나는 즉시 같은 턴에서 메시지를 읽습니다. 턴이 먼저 끝나면 메시지가 다음 턴을 시작합니다.1619 * `'next'` 또는 `priority` 필드 없음: Claude는 실행 중인 도구 호출이 끝나는 즉시 같은 턴에서 메시지를 읽습니다. 턴이 먼저 끝나면 메시지가 다음 턴을 시작합니다.
1610 * `'later'`: Claude Code는 턴이 끝날 때까지 메시지를 보류한 다음 새 턴으로 보냅니다.1620 * `'later'`: Claude Code는 턴이 끝날 때까지 메시지를 보류했다가 새 턴으로 보냅니다.
1611 * [`origin: { kind: "human" }`](#sdkmessageorigin)과 함께 `'now'`: Claude Code v2.1.286 이상에서는 백그라운드에서 계속할 수 있는 작업이 백그라운드로 이동하고, Claude는 같은 턴에서 메시지를 읽습니다. 이동할 수 있는 작업에는 셸 명령, 서브에이전트, MCP 도구 호출이 포함됩니다. v2.1.287 이상에서는 WebFetch 및 WebSearch 호출도 포함됩니다. Claude가 응답만 작성 중이거나 실행 중인 작업을 이동할 수 없으면, Claude Code는 대신 턴을 인터럽트하고 Claude는 다음으로 메시지를 읽습니다.1621 * [`origin: { kind: "human" }`](#sdkmessageorigin)과 함께 `'now'`: Claude Code v2.1.286 이상에서는 백그라운드에서 계속될 수 있는 작업이 백그라운드로 이동하고, Claude는 같은 턴에서 메시지를 읽습니다. 이동할 수 있는 작업에는 셸 명령, 서브에이전트, MCP 도구 호출이 포함됩니다. v2.1.287 이상에서는 WebFetch 및 WebSearch 호출도 포함됩니다. Claude가 응답만 작성 중이거나 실행 중인 작업을 이동할 수 없는 경우, Claude Code는 대신 턴을 인터럽트하고 Claude가 다음으로 메시지를 읽습니다.
1612 * 해당 origin 없이 `'now'`: Claude Code는 턴을 인터럽트하고 Claude는 다음으로 메시지를 읽습니다.1622 * 해당 origin 없이 `'now'`: Claude Code가 턴을 인터럽트하고 Claude가 다음으로 메시지를 읽습니다.
1613 1623
1614턴이 실행 중일 때 보낸 다음 메시지는 아직 실행 중인 셸 명령을 잃지 않고 Claude에게 방향을 바꾸도록 요청합니다.1624턴이 실행 중일 때 보내는 다음 메시지는 아직 실행 중인 셸 명령을 잃지 않고 방향을 바꾸도록 Claude에 요청합니다.
1615 1625
1616```typescript theme={null}1626```typescript theme={null}
1617const message: SDKUserMessage = {1627const message: SDKUserMessage = {
1623};1633};
1624```1634```
1625 1635
1626`tool_result` 블록을 포함하는 메시지에서 `tool_use_result`는 모델에 전송된 텍스트가 아닌 도구의 구조화된 출력 객체입니다. 그 형태는 대응하는 `tool_use` 블록이 가리키는 도구에 따라 달라지므로 필드 타입은 `unknown`입니다. 내장 형태는 [Tool Output Types](#tool-output-types)에 나열되어 있습니다. 다음 결과는 나열된 형태 이상의 처리가 필요합니다.1636`tool_result` 블록을 포함한 메시지에서 `tool_use_result`는 모델에 전송된 텍스트가 아니라 도구의 구조화된 출력 객체입니다. 그 형태는 대응하는 `tool_use` 블록이 지정한 도구에 따라 달라지므로 이 필드는 `unknown` 타입입니다. 기본 제공 형태는 [도구 출력 타입](#tool-output-types)에 나열되어 있습니다. 다음 결과는 나열된 형태 이상의 처리가 필요합니다.
1627 1637
1628* `Agent` 도구: `tool_use_result`는 [`AgentOutput`](#agent-2)입니다. `tool_result` 텍스트를 파싱하지 말고 이 값을 기반으로 렌더링하세요. `completed` 결과의 `content`에는 서브에이전트의 보고서가 담기며, 보고서를 `SubagentHandback` 도구 호출로 전달하는 서브에이전트의 경우에는 보고서 대신 해당 전달에 대한 짧은 안내가 담깁니다. Claude Code v2.1.271 이상의 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)에서는 [포크](/docs/ko/sub-agents#fork-the-current-conversation)가 아닌 한 `completed` 결과를 생성하는 모든 서브에이전트가 이 방식으로 보고하며, Claude는 서브에이전트로부터 별도의 메시지로 보고서를 받습니다.1638* `Agent` 도구: `tool_use_result`는 [`AgentOutput`](#agent-2)입니다. `tool_result` 텍스트를 파싱하지 말고 이 값으로 렌더링하세요. `completed` 결과의 `content`에는 서브에이전트의 보고서가 담기며, 보고서를 `SubagentHandback` 도구 호출로 전달하는 서브에이전트의 경우에는 보고서 대신 해당 인계에 대한 짧은 메모가 담깁니다. Claude Code v2.1.271 이상의 [자동 모드](/docs/ko/permission-modes#eliminate-prompts-with-auto-mode)에서는 [포크](/docs/ko/sub-agents#fork-the-current-conversation)가 아닌 한 `completed` 결과를 생성하는 모든 서브에이전트가 그런 방식으로 보고하며, Claude는 서브에이전트로부터 별도의 메시지로 보고서를 받습니다.
1629* `'now'` 메시지를 전달하기 위해 Claude Code가 백그라운드로 이동한 WebFetch 또는 WebSearch 호출: 해당 호출의 `tool_result`를 담은 사용자 메시지는 `tool_use_result`가 `{ detachedToolCall: true }`로 설정됩니다. 호출은 여전히 실행 중이며, 완료되면 Claude가 결과를 받습니다. 해당 `tool_use_id`에 대한 두 번째 `tool_result`는 뒤따르지 않으므로, 애플리케이션이 도구 호출마다 행을 그린다면 이 메시지가 도착할 때 해당 행을 백그라운드로 이동된 것으로 표시하세요. Claude Code v2.1.287 이상이 필요합니다.1639* `'now'` 메시지를 전달하기 위해 Claude Code가 백그라운드로 이동한 WebFetch 또는 WebSearch 호출: 해당 호출의 `tool_result`를 담은 사용자 메시지에서 `tool_use_result`는 `{ detachedToolCall: true }`로 설정됩니다. 호출은 계속 실행 중이며, Claude는 호출이 끝나면 결과를 받습니다. 해당 `tool_use_id`에 대한 두 번째 `tool_result`는 뒤따르지 않으므로, 애플리케이션에서 도구 호출마다 행을 그린다면 이 메시지가 도착할 때 해당 행을 백그라운드로 이동됨으로 표시하세요. Claude Code v2.1.287 이상이 필요합니다.
1630* 결과에 `resource_link` 블록이 포함된 MCP 도구: `tool_use_result`는 [`SDKMcpResourceLink`](#sdkmcpresourcelink) 항목의 `resourceLinks` 배열을 가진 객체입니다. Claude는 각 링크를 `tool_result` 블록의 텍스트 한 줄로 받으므로, 해당 텍스트를 파싱하는 대신 `resourceLinks`를 읽어 서버가 반환한 파일을 렌더링하세요. Claude Code는 결과에 링크가 없을 때와 서브에이전트의 결과에서 `resourceLinks`를 생략하며, 결과당 최대 50개의 링크를 유지하고, 배열이 직렬화된 JSON 기준 64 KiB에 도달하면 링크 추가를 중단합니다. `resourceLinks`에는 Agent SDK v0.3.257 이상이 필요합니다.1640* 결과에 `resource_link` 블록이 포함된 MCP 도구: `tool_use_result`는 [`SDKMcpResourceLink`](#sdkmcpresourcelink) 항목의 `resourceLinks` 배열을 가진 객체입니다. Claude는 각 링크를 `tool_result` 블록의 텍스트 한 줄로 받으므로, 해당 텍스트를 파싱하는 대신 `resourceLinks`를 읽어 서버가 반환한 파일을 렌더링하세요. Claude Code는 결과에 링크가 없을 때와 서브에이전트의 결과에서는 `resourceLinks`를 생략하고, 결과당 최대 50개의 링크를 유지하며, 배열이 직렬화된 JSON 기준 64KiB에 도달하면 링크 추가를 중단합니다. `resourceLinks`에는 Agent SDK v0.3.257 이상이 필요합니다.
1631* [`structuredContent`](#calltoolresult)를 반환하는 MCP 도구: `tool_use_result`는 `structuredContent` 멤버에 서버가 보낸 내용을, `content` 멤버에 [`McpOutput`](#mcpoutput) 값을 담은 객체입니다. 서브에이전트의 결과에는 `structuredContent`가 포함되지 않습니다.1641* [`structuredContent`](#calltoolresult)를 반환하는 MCP 도구: `tool_use_result`는 `structuredContent` 멤버에 서버가 보낸 내용을, `content` 멤버에 [`McpOutput`](#mcpoutput) 값을 담은 객체입니다. 서브에이전트의 결과에는 `structuredContent`가 포함되지 않습니다.
1632* `structuredContent`가 JSON으로 직렬화했을 때 1,048,576자를 초과하는 MCP 도구: Claude Code는 `tool_use_result`에서 `structuredContent`를 제외하고 대신 `structuredContentOmitted: true`를 설정하므로, 애플리케이션은 삭제된 객체와 아무것도 보내지 않은 도구를 구별할 수 있습니다. `content`, `resourceLinks` 같은 다른 멤버는 유지되며, Claude가 받는 내용은 바뀌지 않습니다. [인프로세스 SDK 서버](/docs/ko/agent-sdk/custom-tools)의 도구와 `tools/list` 항목에 [MCP Apps `_meta.ui` 리소스](#mcpserverstatus)를 선언한 도구는 예외이며 객체 전체를 전달합니다. Claude Code v2.1.287 이상에서 이 상한이 적용됩니다.1642* `structuredContent`가 1,048,576자를 초과하는 JSON으로 직렬화되는 MCP 도구: Claude Code는 `tool_use_result`에서 `structuredContent`를 제외하고 그 자리에 `structuredContentOmitted: true`를 설정하므로, 애플리케이션은 누락된 객체와 아무것도 보내지 않은 도구를 구별할 수 있습니다. `content`와 `resourceLinks` 같은 다른 멤버는 유지되며, Claude가 받는 내용은 변하지 않습니다. [프로세스 내 SDK 서버](/docs/ko/agent-sdk/custom-tools)의 도구와 `tools/list` 항목에서 [MCP Apps `_meta.ui` 리소스](#mcpserverstatus)를 선언한 도구는 예외이며 객체 전체를 전달합니다. Claude Code v2.1.287 이상에서 이 상한이 적용됩니다.
1633 1643
1634<h3 id="sdkusermessagereplay">1644<h3 id="sdkusermessagereplay">
1635 `SDKUserMessageReplay`1645 `SDKUserMessageReplay`
1652};1662};
1653```1663```
1654 1664
1655세션 외부에서 주입된 사용자 턴(해당 [`origin`](#sdkmessageorigin) 종류가 `peer` 또는 `channel`인 경우)은 활성 턴 중에 전달되었는지 또는 세션이 유휴 상태일 때 새 턴을 시작했는지 여부에 관계없이 재생으로 스트림에 도달합니다. v2.1.207 이전에는 세션이 유휴 상태일 때 전달된 주입된 턴이 스트림에 메시지를 생성하지 않았으며 트랜스크립트를 다시 읽을 때만 나타났습니다.1665세션 외부에서 주입된 사용자 턴, 즉 [`origin`](#sdkmessageorigin) kind가 `peer` 또는 `channel`인 턴은 활성 턴 중에 전달되었든 세션이 유휴 상태일 때 새 턴을 시작했든 재생 메시지로 스트림에 도달합니다. v2.1.207 이전에는 세션이 유휴 상태일 때 전달된 주입 턴이 스트림에 메시지를 생성하지 않았으며, 트랜스크립트를 다시 읽을 때만 나타났습니다.
1656 1666
1657<h3 id="sdkresultmessage">1667<h3 id="sdkresultmessage">
1658 `SDKResultMessage`1668 `SDKResultMessage`
1736 };1746 };
1737```1747```
1738 1748
1739결과의 여러 필드는 `subtype` 이상의 진단 세부 정보를 전달합니다:1749결과의 여러 필드는 `subtype` 이상의 진단 정보를 제공합니다.
1740 1750
1741* `api_error_status`: 대화를 종료한 API 오류의 HTTP 상태 코드입니다. 턴이 API 오류 없이 끝났을 때는 없거나 `null`입니다.1751* `api_error_status`: 대화를 종료시킨 API 오류의 HTTP 상태 코드입니다. 턴이 API 오류 없이 끝난 경우 없거나 `null`입니다.
1742* `ttft_ms`: 첫 번째 완전한 어시스턴트 메시지가 도착할 때 측정된 밀리초 단위의 첫 번째 토큰까지의 시간입니다. 성공 분기에만 있습니다.1752* `ttft_ms`: 첫 번째 완전한 어시스턴트 메시지가 도착한 시점에 측정한 첫 토큰까지의 시간(밀리초)입니다. success 분기에만 있습니다.
1743* `ttft_stream_ms`: 응답 스트림이 열릴 때 첫 번째 `message_start` 스트림 이벤트까지의 밀리초 단위 시간입니다. `ttft_ms`보다 낮습니다. 두 값 사이의 차이는 첫 번째 메시지를 스트리밍하는 데 소요된 시간입니다. 성공 분기에만 있습니다.1753* `ttft_stream_ms`: 응답 스트림이 열리는 첫 번째 `message_start` 스트림 이벤트까지의 시간(밀리초)입니다. `ttft_ms`보다 작으며, 둘 사이의 차이는 첫 번째 메시지를 스트리밍하는 데 걸린 시간입니다. success 분기에만 있습니다.
1744* `user_message_uuid`: 이 턴이 답변한 메시지의 `uuid`입니다. 어느 결과가 이를 전달하는지는 [`user_message_uuid`](#user_message_uuid)를 참조하세요.1754* `user_message_uuid`: 이 턴이 응답한, 사용자가 보낸 메시지의 `uuid`입니다. 어떤 결과에 포함되는지는 [`user_message_uuid`](#user_message_uuid)를 참조하세요.
1745* `user_message_uuids`: Claude Code가 이 턴에서 답변한 모든 메시지의 `uuid`입니다. [`user_message_uuids`](#user_message_uuids)를 참조하세요.1755* `user_message_uuids`: 이 턴에서 Claude Code가 응답한, 사용자가 보낸 모든 메시지의 `uuid`입니다. [`user_message_uuids`](#user_message_uuids)를 참조하세요.
1746* `resume_reason`: Claude Code가 재시작으로 중단된 후 이 턴을 다시 실행한 이유입니다. 두 분기에 모두 있으며, 이러한 다시 실행에만 있습니다. [`resume_reason`](#resume_reason)을 참조하세요.1756* `resume_reason`: 재시작으로 중단된 이 턴을 Claude Code가 다시 실행한 이유입니다. 두 분기 모두에 있으며, 그러한 재실행에만 있습니다. [`resume_reason`](#resume_reason)을 참조하세요.
1747* `local_command`: 턴이 디스패치한 명령의 이름이며, `/compact` 같이 에이전트 루프에 들어가지 않고 명령이 완료된 턴의 성공 결과에 있습니다. 이름은 소문자와 밑줄로 변환되므로 `/reload-plugins`는 `reload_plugins`를 보고합니다. MCP 서버가 제공하는 명령과 기본 제공 `/mcp`는 `mcp`를 보고합니다. 직접 정의한 명령은 `custom`을 보고합니다. 인수는 절대 포함되지 않습니다. 에이전트 루프에 들어간 모든 턴과 명령을 실행하지 않은 전송에는 없습니다. Agent SDK v0.3.268 이상이 필요합니다.1757* `local_command`: 턴이 디스패치한 명령의 이름으로, `/compact`처럼 에이전트 루프에 진입하지 않고 명령이 완료한 턴의 success 결과에 있습니다. 이름은 소문자와 밑줄로 변환되므로 `/reload-plugins`는 `reload_plugins`로 보고됩니다. MCP 서버가 제공하는 명령과 기본 제공 `/mcp`는 `mcp`로 보고됩니다. 사용자가 직접 정의한 명령은 `custom`으로 보고됩니다. 인수는 절대 포함되지 않습니다. 에이전트 루프에 진입한 모든 턴과 명령을 실행하지 않은 전송에는 없습니다. Agent SDK v0.3.268 이상이 필요합니다.
1748* `request_sent_wall_ms`: Claude Code가 API 요청을 디스패치한 에포크 밀리초이며, 서버 측 타임스탬프와의 조인에 사용됩니다. [`user_message_uuid`](#user_message_uuid)와 함께만 있으며, `is_error`가 false인 성공 결과에서 API 요청을 보낸 턴에만 있습니다.1758* `request_sent_wall_ms`: 서버 측 타임스탬프와 조인하기 위한, Claude Code가 API 요청을 디스패치한 시점의 epoch 밀리초입니다. API 요청을 보낸 턴의 `is_error`가 false인 success 결과에서 [`user_message_uuid`](#user_message_uuid)와 함께일 때만 있습니다.
1749* `first_content_frame_ms`: 첫 번째 `content_block_start` 또는 `content_block_delta` 스트림 이벤트까지의 밀리초 단위 시간이며, thinking 블록을 콘텐츠로 계산합니다. 성공 분기에만 있으며, `is_error`가 false일 때만 있습니다. Agent SDK v0.3.260 이상이 필요합니다.1759* `first_content_frame_ms`: 첫 번째 `content_block_start` 또는 `content_block_delta` 스트림 이벤트까지의 시간(밀리초)이며, thinking 블록도 콘텐츠로 계산합니다. success 분기에서 `is_error`가 false일 때만 있습니다. Agent SDK v0.3.260 이상이 필요합니다.
1750* `first_stream_post_ms`, `first_stream_post_ack_ms`, `first_stream_post_wall_ms`: 턴의 첫 번째 스트림 이벤트를 업로드하기 위한 타이밍입니다. Claude Code는 [클라우드 세션](/docs/ko/claude-code-on-the-web) 같은 claude.ai로 스트리밍하는 세션에서만 기록하며, `query()`가 생성하는 결과는 이를 전달하지 않습니다. Agent SDK v0.3.260 이상이 필요합니다.1760* `first_stream_post_ms`, `first_stream_post_ack_ms`, `first_stream_post_wall_ms`: 턴의 첫 번째 스트림 이벤트를 업로드하는 데 걸린 시간입니다. Claude Code는 [클라우드 세션](/docs/ko/claude-code-on-the-web)처럼 claude.ai로 스트리밍하는 세션에서만 이를 기록하며, `query()`가 생성하는 결과에는 포함되지 않습니다. Agent SDK v0.3.260 이상이 필요합니다.
1751* `usage`: 메인 에이전트 루프만 해당합니다. 서브에이전트 및 보조 모델 호출을 제외하며, 스트리밍 입력 세션에서는 턴당입니다. 토큰/비용 회계에는 `modelUsage`를 선호하세요.1761* `usage`: 메인 에이전트 루프만 해당합니다. 서브에이전트와 보조 모델 호출은 제외되며, 스트리밍 입력 세션에서는 턴별 값입니다. 토큰/비용 집계에는 `modelUsage`를 사용하는 것이 좋습니다.
1752* `modelUsage`: 이 `query()` 호출 중에 쿼리 파이프라인을 통해 수행된 모든 모델 호출에 대한 모델별 합계이며, 메인 루프, 서브에이전트, 압축 및 Workflow 에이전트 같은 내부 호출을 포함합니다. 권한 분류기 및 토큰 계산 요청 같은 해당 파이프라인 외부의 도우미 호출은 제외됩니다. 세션을 재개하는 호출도 [세션의 이전 호출에서 복원된 모델별 합계](/docs/ko/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls)를 계산합니다. 스트리밍 입력 세션에서 합계는 턴 전체에 누적되므로 결과 전체에서 합산하는 대신 최신 결과를 읽으세요. 재설정에 대해서는 [스트리밍 입력 모드에서 비용 추적](/docs/ko/agent-sdk/cost-tracking#track-costs-in-streaming-input-mode)을 참조하고, 0으로 설정된 결과에 대해서는 [세션 충돌 후 합계 복구](/docs/ko/agent-sdk/cost-tracking#recover-totals-after-a-session-crash)를 참조하세요.1762* `modelUsage`: 이 `query()` 호출 동안 쿼리 파이프라인을 통해 이루어진 모든 모델 호출의 모델별 합계로, 메인 루프, 서브에이전트, 그리고 압축 및 Workflow 에이전트 같은 내부 호출을 포함합니다. 권한 분류기와 토큰 계산 요청처럼 해당 파이프라인 밖의 헬퍼 호출은 제외됩니다. 세션을 재개하는 호출은 [세션의 이전 호출에서 복원된 모델별 합계](/docs/ko/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls)도 포함합니다. 스트리밍 입력 세션에서는 합계가 턴에 걸쳐 누적되므로, 결과들을 합산하지 말고 최신 결과를 읽으세요. 재설정에 대해서는 [스트리밍 입력 모드에서 비용 추적](/docs/ko/agent-sdk/cost-tracking#track-costs-in-streaming-input-mode)을, 0으로 초기화된 결과에 대해서는 [세션 충돌 후 합계 복구](/docs/ko/agent-sdk/cost-tracking#recover-totals-after-a-session-crash)를 참조하세요.
1753* `total_cost_usd`: `modelUsage`와 동일한 호출을 포함하고 동일한 지점에서 재설정되는 누적 예상 비용(USD)입니다. 세션을 재개하는 호출도 [세션의 이전 호출에서 복원된 합계](/docs/ko/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls)를 계산합니다. 이는 추정치이지 청구 명세서가 아닙니다. 정확도 주의 사항은 [비용 및 사용량 추적](/docs/ko/agent-sdk/cost-tracking)을 참조하세요.1763* `total_cost_usd`: USD 기준 누적 예상 비용으로, `modelUsage`와 같은 호출을 포함하며 같은 시점에 재설정됩니다. 세션을 재개하는 호출은 [세션의 이전 호출에서 복원된 합계](/docs/ko/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls)도 포함합니다. 이는 추정치이며 청구 내역서가 아닙니다. 정확도에 대한 주의 사항은 [비용 및 사용량 추적](/docs/ko/agent-sdk/cost-tracking)을 참조하세요.
1754* `queued_turn_count`: Claude Code가 결과를 생성했을 때 `origin: { kind: "human" }`으로 보낸 메시지 중 여전히 대기 중인 메시지의 수입니다. `0`과 없는 필드가 무엇을 의미하는지는 [`queued_turn_count`](#queued_turn_count)를 참조하세요.1764* `queued_turn_count`: Claude Code가 결과를 생성한 시점에 아직 대기 중인, 사용자가 `origin: { kind: "human" }`으로 보낸 메시지의 수입니다. `0`과 필드가 없는 경우의 의미는 [`queued_turn_count`](#queued_turn_count)를 참조하세요.
1755* `result_index`: 프로세스가 작성하는 모든 결과에서 0부터 계산하여, 실행의 전달 순서에서 이 결과가 차지하는 위치입니다. 두 분기에 모두 있습니다. 쓰기가 실패한 결과도 여전히 번호를 소비하므로 시퀀스의 간격은 결과가 손실되었음을 의미합니다. Agent SDK v0.3.268 이상이 필요합니다.1765* `result_index`: 프로세스가 기록하는 모든 결과에 걸쳐 0부터 세는, 실행의 전달 순서에서 이 결과의 위치입니다. 두 분기 모두에 있습니다. 기록에 실패한 결과도 번호를 소비하므로, 순서에 빈틈이 있으면 결과가 손실된 것입니다. Agent SDK v0.3.268 이상이 필요합니다.
1756* `startup_failure_reason`: Claude Code가 알려진 시작 실패로 종료하기 전에 작성하는 `error_during_execution` 결과에서 Claude Code가 시작을 거부한 이유입니다. 값과 어느 실패가 이를 전달하는지는 [`startup_failure_reason`](#startup_failure_reason)을 참조하세요. Agent SDK v0.3.274 이상이 필요합니다.1766* `startup_failure_reason`: Claude Code가 시작을 거부한 이유로, 알려진 시작 실패로 종료하기 전에 기록하는 `error_during_execution` 결과에 있습니다. 값과 이를 포함하는 실패 유형은 [`startup_failure_reason`](#startup_failure_reason)을 참조하세요. Agent SDK v0.3.274 이상이 필요합니다.
1757* `terminal_reason`: 루프가 끝난 이유입니다. `"completed"`, `"max_turns"`, `"tool_deferred"`, `"aborted_streaming"`, `"aborted_tools"`, `"hook_stopped"`, `"stop_hook_prevented"`, `"background_requested"`, `"blocking_limit"`, `"rapid_refill_breaker"`, `"prompt_too_long"`, `"image_error"`, `"model_error"`, `"api_error"`, `"malformed_tool_use_exhausted"`, `"budget_exhausted"`, `"structured_output_retry_exhausted"`, `"tool_deferred_unavailable"`, 또는 `"turn_setup_failed"` 중 하나입니다.1767* `terminal_reason`: 루프가 종료된 이유입니다. `"completed"`, `"max_turns"`, `"tool_deferred"`, `"aborted_streaming"`, `"aborted_tools"`, `"hook_stopped"`, `"stop_hook_prevented"`, `"background_requested"`, `"blocking_limit"`, `"rapid_refill_breaker"`, `"prompt_too_long"`, `"image_error"`, `"model_error"`, `"api_error"`, `"malformed_tool_use_exhausted"`, `"budget_exhausted"`, `"structured_output_retry_exhausted"`, `"tool_deferred_unavailable"`, `"turn_setup_failed"` 중 하나입니다.
1758* `fast_mode_state`: `"on"`, `"off"`, 또는 `"cooldown"` 중 하나입니다.1768* `fast_mode_state`: `"on"`, `"off"`, `"cooldown"` 중 하나입니다.
1759* `fast_mode_disabled_reason`: [빠른 모드](/docs/ko/fast-mode)를 지금 사용할 수 없는 이유입니다. 빠른 모드를 차단하는 것이 없을 때는 없지만, 요청이 여전히 표준 속도로 실행될 수 있습니다. 빠른 모드 속도 제한 후 쿨다운 중에 Claude Code는 이유 코드 없이 `fast_mode_state: "cooldown"`을 보고하며 쿨다운이 만료되면 빠른 모드를 다시 활성화합니다. Claude Code v2.1.219 이상이 필요합니다.1769* `fast_mode_disabled_reason`: 현재 [빠른 모드](/docs/ko/fast-mode)를 사용할 수 없는 이유입니다. 빠른 모드를 막는 것이 없으면 없지만, 요청이 여전히 표준 속도로 실행될 수 있습니다. 빠른 모드 속도 제한 이후의 쿨다운 동안 Claude Code는 이유 코드 없이 `fast_mode_state: "cooldown"`을 보고하며, 쿨다운이 만료되면 빠른 모드를 다시 활성화합니다. Claude Code v2.1.219 이상이 필요합니다.
1760 1770
1761가용성을 다시 도출하는 대신 이유 코드를 사용하여 자체 UI에서 빠른 모드가 꺼진 이유를 설명하세요. 각 코드는 빠른 모드를 차단한 검사의 이름을 지정합니다:1771가용성을 다시 판단하는 대신 이유 코드를 사용해 자체 UI에서 빠른 모드가 꺼진 이유를 설명하세요. 각 코드는 빠른 모드를 막은 검사를 나타냅니다.
1762 1772
1763| 이유 코드 | 의미 |1773| 이유 코드 | 의미 |
1764| - | - |1774| - | - |
1765| `free` | 계정에 빠른 모드가 필요로 하는 유료 구독 또는 사용량 크레딧이 없음 |1775| `free` | 계정에 빠른 모드에 필요한 유료 구독 또는 사용량 크레딧이 없습니다 |
1766| `preference` | 조직이 빠른 모드를 비활성화함 |1776| `preference` | 조직에서 빠른 모드를 비활성화했습니다 |
1767| `extra_usage_disabled` | 계정에 대해 사용량 크레딧이 꺼짐 |1777| `extra_usage_disabled` | 계정의 사용량 크레딧이 꺼져 있습니다 |
1768| `network_error` | [가용성 검사](/docs/ko/fast-mode#use-fast-mode-behind-proxies-and-llm-gateways)가 `api.anthropic.com`에 도달할 수 없음 |1778| `network_error` | [가용성 검사](/docs/ko/fast-mode#use-fast-mode-behind-proxies-and-llm-gateways)가 `api.anthropic.com`에 연결하지 못했습니다 |
1769| `unknown` | Claude Code가 가용성을 결정할 수 없음 |1779| `unknown` | Claude Code가 가용성을 판단하지 못했습니다 |
1770| `not_first_party` | 세션이 Anthropic API 이외의 제공자를 사용함 |1780| `not_first_party` | 세션이 Anthropic API 이외의 공급자를 사용합니다 |
1771| `disabled_by_env` | [`CLAUDE_CODE_DISABLE_FAST_MODE`](/docs/ko/env-vars)이 설정됨 |1781| `disabled_by_env` | [`CLAUDE_CODE_DISABLE_FAST_MODE`](/docs/ko/env-vars)가 설정되어 있습니다 |
1772| `model_not_allowed` | 빠른 모드 Opus 모델이 조직의 [`availableModels`](/docs/ko/model-config#restrict-model-selection) 허용 목록에 없음 |1782| `model_not_allowed` | 빠른 모드 Opus 모델이 조직의 [`availableModels`](/docs/ko/model-config#restrict-model-selection) 허용 목록에 없습니다 |
1773| `sdk_opt_in_required` | 세션이 빠른 모드에 옵트인하지 않음: [`settings`](#options) 옵션 또는 [`applyFlagSettings()`](#applyflagsettings)를 통해 `fastMode: true`를 전달하세요 |1783| `sdk_opt_in_required` | 세션이 빠른 모드를 옵트인하지 않았습니다. [`settings`](#options) 옵션 또는 [`applyFlagSettings()`](#applyflagsettings)를 통해 `fastMode: true`를 전달하세요 |
1774| `pending` | 가용성 검사가 아직 완료되지 않음 |1784| `pending` | 가용성 검사가 아직 완료되지 않았습니다 |
1775 1785
1776동일한 필드 쌍이 [`SDKSystemMessage`](#sdksystemmessage)와 [`SDKControlInitializeResponse`](#sdkcontrolinitializeresponse)에 나타나므로 첫 번째 턴 전에 빠른 모드 상태를 읽을 수 있습니다.1786같은 필드 쌍이 [`SDKSystemMessage`](#sdksystemmessage)와 [`SDKControlInitializeResponse`](#sdkcontrolinitializeresponse)에도 나타나므로, 첫 번째 턴 전에 빠른 모드 상태를 읽을 수 있습니다.
1777 1787
1778`origin` 필드는 이 결과를 트리거한 사용자 메시지의 [`SDKMessageOrigin`](#sdkmessageorigin)을 전달합니다. SDK가 완료된 백그라운드 작업 같은 합성 후속 턴을 주입할 때, 결과 `SDKResultMessage`는 `origin: { kind: "task-notification" }`을 전달합니다. 트리거가 발생한 루틴과 다른 세션에서 온 서버 검증 메시지도 이 종류로 도착하며, 각각 [작업 알림 서브종류](#task-notification-subkinds)에 설명된 `subkind`를 가집니다. 라우팅하거나 억제하기 전에 `kind`를 확인하여 프롬프트에 답변하는 결과를 주입된 후속 조치와 구별하세요. 애플리케이션이 [예약된 실행을 선언](#declare-a-scheduled-run)하면, 해당 결과도 `kind: "task-notification"`을 전달하므로 `kind`만으로 억제하지 마세요.1788`origin` 필드는 이 결과를 트리거한 사용자 메시지의 [`SDKMessageOrigin`](#sdkmessageorigin)을 전달합니다. 완료된 백그라운드 작업 등을 위해 SDK가 합성 후속 턴을 주입하면, 그 결과인 `SDKResultMessage`는 `origin: { kind: "task-notification" }`을 가집니다. 트리거가 실행된 루틴과 다른 세션에서 온 서버 검증 메시지도 이 kind로 도착하며, 각각 [Task-notification 하위 유형](#task-notification-subkinds)에 설명된 `subkind`를 가집니다. 라우팅하거나 숨기기 전에 `kind`를 확인하여 프롬프트에 대한 응답 결과와 주입된 후속 결과를 구별하세요. 애플리케이션이 [예약 실행을 선언](#declare-a-scheduled-run)하는 경우 그 결과도 `kind: "task-notification"`을 가지므로, `kind`만으로 숨기지 마세요.
1779 1789
1780여러 백그라운드 작업 완료가 함께 대기 중일 때, Claude Code는 각각 하나의 턴이 아니라 하나의 턴에서 모두 답변할 수 있습니다. 각 완료는 여전히 이 origin을 가진 자신의 결과를 생성합니다. Claude Code가 함께 답변하는 완료 중 마지막을 제외한 모든 것은 순서대로 `num_turns: 0`인 빈 결과를 생성하며, 마지막 것의 결과는 모두에 답변하는 턴을 전달합니다.1790여러 백그라운드 작업 완료가 함께 대기열에 있을 때, Claude Code는 각각 한 턴씩이 아니라 한 턴에서 모두 응답할 수 있습니다. 각 완료는 여전히 이 origin을 가진 자체 결과를 생성합니다. Claude Code가 함께 응답하는 완료 중 마지막을 제외한 모든 완료는 순서대로 `num_turns: 0`인 빈 결과를 생성하며, 마지막 완료의 결과에 모두에 응답하는 턴이 담깁니다.
1781 1791
1782필드는 시작 오류 같은 사용자 턴 전에 내보낸 결과에는 없습니다.1792시작 오류처럼 사용자 턴 이전에 발생한 결과에는 이 필드가 없습니다.
1783 1793
1784`PreToolUse` 훅이 `permissionDecision: "defer"`를 반환할 때, 결과는 `stop_reason: "tool_deferred"`를 가지며 `deferred_tool_use`는 보류 중인 도구의 `id`, `name`, `input`을 전달합니다. 이 필드를 읽어 자체 UI에서 요청을 표시한 다음 동일한 `session_id`로 재개하여 계속하세요. 전체 왕복은 [나중에 도구 호출 연기](/docs/ko/hooks#defer-a-tool-call-for-later)를 참조하세요.1794`PreToolUse` 훅이 `permissionDecision: "defer"`를 반환하면, 결과는 `stop_reason: "tool_deferred"`를 가지며 `deferred_tool_use`에 보류 중인 도구의 `id`, `name`, `input`이 담깁니다. 이 필드를 읽어 자체 UI에 요청을 표시한 다음, 같은 `session_id`로 재개하여 계속하세요. 전체 흐름은 [나중을 위해 도구 호출 연기](/docs/ko/hooks#defer-a-tool-call-for-later)를 참조하세요.
1785 1795
1786<h4 id="user_message_uuid">1796<h4 id="user_message_uuid">
1787 `user_message_uuid`1797 `user_message_uuid`
1788</h4>1798</h4>
1789 1799
1790턴이 답변하는 [`SDKUserMessage`](#sdkusermessage)의 `uuid`이며, Claude Code의 회신을 보낸 메시지와 일치시킬 수 있도록 에코됩니다. Claude Code는 메시지에 설정한 경우에만 `uuid`를 에코합니다. 필드는 `SDKUserMessage`에서 선택 사항이며, `query()`에 전달된 문자열 프롬프트는 이를 전달하지 않습니다.1800턴이 응답하는 [`SDKUserMessage`](#sdkusermessage)의 `uuid`로, Claude Code의 응답을 사용자가 보낸 메시지와 매칭할 수 있도록 그대로 반환됩니다. Claude Code는 메시지에 `uuid`를 설정한 경우에만 이를 반환합니다. 이 필드는 `SDKUserMessage`에서 선택 사항이며, `query()`에 전달된 문자열 프롬프트에는 포함되지 않습니다.
1791 1801
1792턴이 답변하는 메시지는 턴이 시작된 방식에 따라 다릅니다:1802턴이 어떤 메시지에 응답하는지는 턴이 시작된 방식에 따라 다릅니다.
1793 1803
1794* **보낸 일반 메시지**(즉, `isSynthetic: true` 없음): 턴은 전체 실행 동안 해당 메시지에 답변합니다. 여러 메시지를 가깝게 보낼 때, Claude Code는 이를 하나의 턴으로 병합할 수 있으며, 필드는 마지막 메시지의 `uuid`만 전달합니다. 병합된 메시지 중 하나와 회신을 일치시키려면 [`user_message_uuids`](#user_message_uuids)를 사용하세요.1804* **사용자가 보낸 일반 메시지**, 즉 `isSynthetic: true`가 없는 메시지: 턴은 실행 내내 해당 메시지에 응답합니다. 여러 메시지를 짧은 간격으로 보내면 Claude Code가 이를 하나의 턴으로 병합할 수 있으며, 이때 이 필드에는 마지막 메시지의 `uuid`만 담깁니다. 병합된 메시지 중 어느 것과든 응답을 매칭하려면 [`user_message_uuids`](#user_message_uuids)를 사용하세요.
1795* **`isSynthetic: true`로 보낸 메시지**: 턴은 처음에 해당 메시지에 답변합니다. Claude Code가 도구 호출 사이에 일반 메시지를 선택하면, 턴은 그 이후로 선택된 메시지에 답변합니다. 합성 메시지의 `uuid`를 에코하려면 Agent SDK v0.3.265 이상이 필요합니다. 이전 버전은 합성 턴에서 아무것도 에코하지 않습니다.1805* **사용자가 `isSynthetic: true`로 보낸 메시지**: 턴은 처음에 해당 메시지에 응답합니다. Claude Code가 도구 호출 사이에 사용자의 일반 메시지를 받아들이면, 그때부터 턴은 받아들인 메시지에 응답합니다. 합성 메시지의 `uuid`를 반환하려면 Agent SDK v0.3.265 이상이 필요하며, 이전 버전은 합성 턴에서 아무것도 반환하지 않습니다.
1796* **Claude Code가 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/ko/env-vars) 아래에서 중단된 턴을 다시 실행하기 위해 생성하는 프롬프트**: 중단된 턴의 마지막 프롬프트가 보낸 일반 메시지일 때, 턴을 열었는지 또는 Claude Code가 턴 중에 선택했는지 여부에 관계없이, 다시 실행은 처음에 해당 메시지에 답변합니다. [`resume_reason`](#resume_reason)은 다시 실행의 프레임을 중단된 시도의 프레임과 구별해 줍니다. 마지막 프롬프트가 보낸 일반 메시지가 아닐 때, 다시 실행은 처음에 보낸 메시지에 답변하지 않습니다. Claude Code가 도구 호출 사이에 일반 메시지를 선택하면, 턴은 그 이후로 선택된 메시지에 답변합니다. 중단된 턴의 프롬프트를 에코하려면 Agent SDK v0.3.268 이상이 필요합니다.1806* **[`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/ko/env-vars)에 따라 중단된 턴을 다시 실행하기 위해 Claude Code가 생성한 프롬프트**: 중단된 턴의 마지막 프롬프트가 사용자가 보낸 일반 메시지인 경우, 그것이 턴을 시작했든 Claude Code가 턴 중에 받아들였든 재실행은 처음에 해당 메시지에 응답합니다. [`resume_reason`](#resume_reason)으로 재실행의 프레임과 중단된 시도의 프레임을 구별할 수 있습니다. 마지막 프롬프트가 사용자의 일반 메시지가 아니면, 재실행은 처음에 사용자의 어떤 메시지에도 응답하지 않습니다. Claude Code가 도구 호출 사이에 사용자의 일반 메시지를 받아들이면, 그때부터 턴은 받아들인 메시지에 응답합니다. 중단된 턴의 프롬프트를 반환하려면 Agent SDK v0.3.268 이상이 필요합니다.
1797* **Claude Code가 자체적으로 생성한 다른 프롬프트**: 턴은 처음에 보낸 메시지에 답변하지 않으며 프레임은 에코를 전달하지 않습니다. Claude Code가 도구 호출 사이에 일반 메시지를 선택하면, 턴은 그 이후로 해당 메시지에 답변합니다. 선택 에코는 Agent SDK v0.3.265 이상이 필요합니다. 이전 버전은 이러한 턴에서 아무것도 에코하지 않습니다.1807* **Claude Code가 자체적으로 생성한 기타 프롬프트**: 턴은 처음에 사용자의 어떤 메시지에도 응답하지 않으며 프레임에 반환 값이 없습니다. Claude Code가 도구 호출 사이에 사용자의 일반 메시지를 받아들이면, 그때부터 턴은 해당 메시지에 응답합니다. 받아들인 메시지의 반환에는 Agent SDK v0.3.265 이상이 필요하며, 이전 버전은 이러한 턴에서 아무것도 반환하지 않습니다.
1798 1808
1799Claude Code는 세 가지 종류의 프레임에서 답변된 메시지의 `uuid`를 에코합니다:1809Claude Code는 응답한 메시지의 `uuid`를 세 종류의 프레임에 반환합니다.
1800 1810
1801* **결과**: 보낸 메시지에 답변한 턴의 모든 결과입니다. Agent SDK v0.3.265 이상에서 모든 이러한 결과가 이를 전달합니다. v0.3.265 이전에는 일반 메시지가 시작한 턴의 성공 결과가 턴이 API 요청을 보내지 않았거나 연기된 도구 호출로 끝났을 때 이를 전달하지 않았습니다. v0.3.246 이전에는 오류 결과도 이를 전달하지 않았으며, v0.3.216 이전에는 모든 결과가 이를 전달하지 않았습니다.1811* **결과**: 사용자가 보낸 메시지에 응답한 턴의 모든 결과입니다. Agent SDK v0.3.265 이상에서는 그러한 모든 결과에 포함됩니다. v0.3.265 이전에는 일반 메시지로 시작된 턴의 success 결과라도 턴이 API 요청을 보내지 않았거나 연기된 도구 호출로 끝난 경우 포함되지 않았습니다. v0.3.246 이전에는 오류 결과에도 포함되지 않았으며, v0.3.216 이전에는 모든 결과에 포함되지 않았습니다.
1802* **턴의 첫 번째 회신**: 첫 번째 [어시스턴트 메시지](#sdkassistantmessage)이며, `includePartialMessages`를 사용하면 `event.type`이 `ping`이 아닌 첫 번째 [스트림 이벤트](#sdkpartialassistantmessage)도 해당하므로 결과가 도착하기 전에 회신을 바인딩할 수 있습니다. 첫 번째 회신 에코는 Agent SDK v0.3.246 이상이 필요합니다. v0.3.269 이전에는 `includePartialMessages`를 사용할 때 Claude Code가 해당 첫 번째 스트림 이벤트에만 설정했으며, 턴이 아무것도 스트리밍하지 않았을 때는 첫 번째 어시스턴트 메시지에 설정했습니다. 턴 중에 턴이 답변하는 메시지가 변경될 때, Agent SDK v0.3.265 이상에서는 변경 후 첫 번째 회신도 필드를 전달합니다. 이전 버전은 턴당 하나의 회신 프레임에 설정합니다.1812* **턴의 첫 번째 응답**: 첫 번째 [어시스턴트 메시지](#sdkassistantmessage), 그리고 `includePartialMessages`를 사용할 경우 `event.type`이 `ping`이 아닌 첫 번째 [스트림 이벤트](#sdkpartialassistantmessage)에도 포함되므로, 결과가 도착하기 전에 응답을 연결할 수 있습니다. 첫 번째 응답 반환에는 Agent SDK v0.3.246 이상이 필요합니다. v0.3.269 이전에는 `includePartialMessages`를 사용할 때 Claude Code가 첫 번째 스트림 이벤트에만 설정했으며, 턴이 아무것도 스트리밍하지 않은 경우에는 첫 번째 어시스턴트 메시지에 설정했습니다. Agent SDK v0.3.265 이상에서는 턴이 응답하는 메시지가 턴 도중 바뀌면 변경 후 첫 번째 응답에도 이 필드가 포함됩니다. 이전 버전은 턴당 하나의 응답 프레임에만 설정했습니다.
1803* **턴의 모든 [`thinking_tokens`](#sdkthinkingtokensmessage) 프레임**: 턴의 첫 번째 회신을 기다리지 않고 보낸 메시지에 사고 진행을 귀속시킬 수 있습니다. Agent SDK v0.3.260 이상이 필요합니다.1813* **턴의 모든 [`thinking_tokens`](#sdkthinkingtokensmessage) 프레임**: 턴의 첫 번째 응답을 기다리지 않고 사고 진행 상황을 사용자가 보낸 메시지에 귀속시킬 수 있습니다. Agent SDK v0.3.260 이상이 필요합니다.
1804 1814
1805Claude Code는 다음 경우에 필드를 생략합니다:1815Claude Code는 다음 경우에 이 필드를 생략합니다.
1806 1816
1807* 첫 번째 회신 이외의 회신 프레임1817* 위의 첫 번째 응답 이외의 응답 프레임
1808* 서브에이전트 프레임1818* 서브에이전트 프레임
1809* 보낸 메시지에 답변하지 않거나 `uuid` 없이 보낸 메시지에 답변하는 턴1819* 사용자의 어떤 메시지에도 응답하지 않거나, `uuid` 없이 보낸 메시지에 응답하는 턴
1810* 충돌한 워커 프로세스 후 0으로 설정된 결과 같은 보낸 메시지에 답변하지 않는 결과1820* 충돌한 워커 프로세스 이후의 0으로 초기화된 결과처럼, 사용자가 보낸 어떤 메시지에도 응답하지 않는 결과
1811 1821
1812<h4 id="user_message_uuids">1822<h4 id="user_message_uuids">
1813 `user_message_uuids`1823 `user_message_uuids`
1814</h4>1824</h4>
1815 1825
1816Claude Code가 이 턴에서 답변한 모든 메시지의 `uuid`입니다. 여러 메시지를 가깝게 보낼 때, Claude Code는 이를 하나의 턴으로 병합할 수 있으며, `user_message_uuid`는 마지막 메시지만 명명합니다. 병합된 메시지 중 하나와 회신을 일치시키려면, 이 목록의 어디든 해당 메시지의 `uuid`를 찾으세요. Agent SDK v0.3.259 이상이 필요합니다.1826이 턴에서 Claude Code가 응답한, 사용자가 보낸 모든 메시지의 `uuid`입니다. 여러 메시지를 짧은 간격으로 보내면 Claude Code가 이를 하나의 턴으로 병합할 수 있으며, 이때 `user_message_uuid`는 그중 마지막 메시지만 나타냅니다. 병합된 메시지 중 어느 것과든 응답을 매칭하려면 이 목록에서 해당 메시지의 `uuid`를 찾으세요. Agent SDK v0.3.259 이상이 필요합니다.
1817 1827
1818Claude Code는 해당 필드를 전달하는 각 회신 프레임과 결과에서 `user_message_uuid`와 함께 목록을 설정합니다. 답변된 메시지의 `uuid`를 에코하는 턴 프레임의 전체 집합과 각각이 필요로 하는 버전은 [`user_message_uuid`](#user_message_uuid)를 참조하세요. 목록은 항상 `user_message_uuid`를 포함하며 최대 64개 항목을 보유합니다.1828Claude Code는 `user_message_uuid` 필드를 가진 각 응답 프레임과 결과에 이 목록을 함께 설정합니다. 응답한 메시지의 `uuid`를 반환하는 턴 프레임의 전체 목록과 각각에 필요한 버전은 [`user_message_uuid`](#user_message_uuid)를 참조하세요. 목록에는 항상 `user_message_uuid`가 포함되며 최대 64개 항목을 담습니다.
1819 1829
1820Claude Code가 턴이 실행되는 동안 보낸 일반 메시지를 선택할 때, 해당 메시지의 `uuid`를 결과의 목록에 추가합니다.1830턴이 실행 중일 때 사용자가 보낸 일반 메시지를 Claude Code가 받아들이면, 해당 메시지의 `uuid`를 결과의 목록에 추가합니다.
1821 1831
1822첫 번째 회신이나 결과가 목록 없이 `user_message_uuid`를 전달할 때, 이전 Claude Code 버전에서 나온 것이므로 단일 필드로 대체하세요.1832첫 번째 응답이나 결과에 목록 없이 `user_message_uuid`만 있다면 이전 Claude Code 버전에서 온 것이므로 단일 필드를 사용하세요.
1823 1833
1824<h4 id="resume_reason">1834<h4 id="resume_reason">
1825 `resume_reason`1835 `resume_reason`
1826</h4>1836</h4>
1827 1837
1828Claude Code가 재시작 후 이 턴을 다시 실행한 이유입니다. Claude Code는 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/ko/env-vars) 아래에서 다시 실행한 턴에 이 필드를 설정하므로 다시 실행의 회신과 결과를 중단된 시도와 구별할 수 있습니다. Agent SDK v0.3.268 이상이 필요합니다.1838재시작 후 Claude Code가 이 턴을 다시 실행한 이유입니다. Claude Code는 [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/ko/env-vars)에 따라 다시 실행한 턴에 이 필드를 설정하므로, 재실행의 응답과 결과를 중단된 시도의 것과 구별할 수 있습니다. Agent SDK v0.3.268 이상이 필요합니다.
1829 1839
1830Claude Code는 두 가지 종류의 프레임에 필드를 설정합니다:1840Claude Code는 두 종류의 프레임에 이 필드를 설정합니다.
1831 1841
1832* **다시 실행의 결과**: 성공 및 오류 팔 모두에서, 결과가 `user_message_uuid`를 전달하는지 여부에 관계없이.1842* **재실행의 결과**: 결과에 `user_message_uuid`가 있든 없든 success와 error 분기 모두에 설정합니다.
1833* **다시 실행의 회신 프레임**: [`user_message_uuid`](#user_message_uuid)를 전달하는 것들.1843* **재실행의 응답 프레임**: [`user_message_uuid`](#user_message_uuid)를 가진 프레임입니다.
1834 1844
1835값은 `interrupted_turn` 같이 턴이 다시 실행된 이유를 명명하는 짧은 소문자 토큰입니다. 필드는 다른 모든 턴에는 없습니다.1845값은 턴이 다시 실행된 이유를 나타내는 짧은 소문자 토큰이며, `interrupted_turn` 등이 있습니다. 다른 모든 턴에는 이 필드가 없습니다.
1836 1846
1837<h4 id="queued_turn_count">1847<h4 id="queued_turn_count">
1838 `queued_turn_count`1848 `queued_turn_count`
1839</h4>1849</h4>
1840 1850
1841Claude Code가 결과를 생성했을 때 [`origin: { kind: "human" }`](#sdkmessageorigin)으로 보낸 메시지 중 명령 큐에서 여전히 대기 중인 메시지의 수입니다. Agent SDK v0.3.242 이상이 필요합니다.1851Claude Code가 결과를 생성한 시점에 명령 대기열에서 아직 대기 중인, 사용자가 [`origin: { kind: "human" }`](#sdkmessageorigin)으로 보낸 메시지의 수입니다. Agent SDK v0.3.242 이상이 필요합니다.
1842 1852
1843`0`과 없는 필드가 무엇을 의미하는지:1853`0`과 필드가 없는 경우의 의미는 다음과 같습니다.
1844 1854
1845* **`0`**: Claude Code는 해당 `origin` 없이 보낸 메시지를 계산하지 않으며, 작업 알림을 계산하지 않으므로 턴이 여전히 뒤따를 수 있습니다.1855* **`0`**: Claude Code는 해당 `origin` 없이 보낸 메시지와 작업 알림은 세지 않으므로, 여전히 턴이 뒤따를 수 있습니다.
1846* **없음**: Claude Code가 충돌이나 치명적 시작 오류 후 내보내는 최종 결과는 필드를 생략하며, [0으로 설정된 합계를 전달할 수 있습니다](/docs/ko/agent-sdk/cost-tracking#recover-totals-after-a-session-crash).1856* **없음**: 충돌 또는 치명적인 시작 오류 후 Claude Code가 내보내는 최종 결과는 이 필드를 생략하며, [합계가 0으로 초기화되어 있을 수 있습니다](/docs/ko/agent-sdk/cost-tracking#recover-totals-after-a-session-crash).
1847 1857
1848<h4 id="startup_failure_reason">1858<h4 id="startup_failure_reason">
1849 `startup_failure_reason`1859 `startup_failure_reason`
1850</h4>1860</h4>
1851 1861
1852Claude Code가 시작을 거부한 이유이므로 애플리케이션이 재시도 대신 수정 방법을 제공할 수 있습니다. Claude Code는 알려진 시작 실패로 종료하기 전에 작성하는 `error_during_execution` 결과에 설정합니다. 해당 결과는 0으로 설정된 합계를 전달하며, 해당 `errors` 배열은 stderr과 동일한 텍스트를 전달합니다. 필드는 다른 모든 결과에는 없습니다. Agent SDK v0.3.274 이상이 필요합니다.1862Claude Code가 시작을 거부한 이유로, 애플리케이션이 재시도 대신 해결 방법을 제시할 수 있게 합니다. Claude Code는 알려진 시작 실패로 종료하기 전에 기록하는 `error_during_execution` 결과에 이를 설정합니다. 해당 결과는 0으로 초기화된 합계를 가지며, `errors` 배열에는 stderr와 같은 텍스트가 담깁니다. 다른 모든 결과에는 이 필드가 없습니다. Agent SDK v0.3.274 이상이 필요합니다.
1853 1863
1854모든 `SDKStartupFailureReason` 값에 대해 이 결과를 받으려면 [`env`](#options)에서 `CLAUDE_CODE_STARTUP_FAILURE_RESULTS`를 `1`로 설정하세요. 해당 변수 없이, Claude Code는 다음 실패에 대해서만 결과를 작성하며, 나머지는 stderr 출력, 0이 아닌 종료, 결과 메시지 없음으로 끝납니다:1864모든 `SDKStartupFailureReason` 값에 대해 이 결과를 받으려면 [`env`](#options)에서 `CLAUDE_CODE_STARTUP_FAILURE_RESULTS`를 `1`로 설정하세요. 이 변수가 없으면 Claude Code는 다음 실패에 대해서만 결과를 기록하며, 나머지는 stderr 출력과 0이 아닌 종료 코드로 끝나고 결과 메시지는 없습니다.
1855 1865
1856* Claude Code가 [세션을 워크트리로 반환할 수 없기 때문에](/docs/ko/worktrees#the-session-resumes-outside-its-worktree) 중지하는 재개이며, `worktree_unverified` 또는 `worktree_resume_refused`입니다. 해당 섹션은 어느 오류가 어느 값을 전달하는지 설명합니다.1866* Claude Code가 [세션을 해당 worktree로 되돌릴 수 없어](/docs/ko/worktrees#the-session-resumes-outside-its-worktree) 중단한 재개로, `worktree_unverified` 또는 `worktree_resume_refused`를 가집니다. 어떤 오류가 어떤 값을 가지는지는 해당 섹션에 설명되어 있습니다.
1857* 백그라운드 세션이 보유하는 대화의 거부된 [`continue`](#options)이며, `session_held_by_background`입니다. 이러한 대화의 거부된 [`resume`](#options)의 경우, Claude Code는 변수가 설정되었을 때만 결과를 작성합니다.1867* 백그라운드 세션이 보유한 대화에 대한 거부된 [`continue`](#options)로, `session_held_by_background`를 가집니다. 그러한 대화에 대한 거부된 [`resume`](#options)의 경우, Claude Code는 변수가 설정된 경우에만 결과를 기록합니다.
1858 1868
1859```typescript theme={null}1869```typescript theme={null}
1860type SDKStartupFailureReason =1870type SDKStartupFailureReason =
1877 | "bypass_root";1887 | "bypass_root";
1878```1888```
1879 1889
1880각 값은 하나의 거부를 명명합니다:1890각 값은 하나의 거부 사유를 나타냅니다.
1881 1891
1882| 값 | 세션을 중지한 것 |1892| 값 | 세션을 중단시킨 원인 |
1883| :- | :- |1893| :- | :- |
1884| `org_pin_api_key_conflict` | 관리형 설정이 [퍼스트 파티 또는 Cloud 게이트웨이 로그인](/docs/ko/authentication#restrict-login-to-your-organization)을 요구하며, Anthropic API 키, 인증 토큰, 또는 `apiKeyHelper`가 대신 구성됨 |1894| `org_pin_api_key_conflict` | 관리형 설정이 [퍼스트 파티 또는 Cloud 게이트웨이 로그인을 요구](/docs/ko/authentication#restrict-login-to-your-organization)하는데, 대신 Anthropic API 키, 인증 토큰 또는 `apiKeyHelper`가 구성되어 있습니다 |
1885| `provider_not_allowed` | 관리형 설정이 [이 머신이 사용할 수 있는 API 제공자를 나열](/docs/ko/settings-reference#allowedproviders)하며, 세션이 나열되지 않은 제공자 또는 설정이 고정하지 않은 엔드포인트에 대해 설정됨. Claude Code v2.1.285 이상이 필요함 |1895| `provider_not_allowed` | 관리형 설정이 [이 머신에서 사용할 수 있는 API 공급자를 나열](/docs/ko/settings-reference#allowedproviders)하는데, 세션이 목록에 없는 공급자나 설정이 고정하지 않은 엔드포인트로 설정되어 있습니다. Claude Code v2.1.285 이상이 필요합니다 |
1886| `org_verify_failed` | 로그인의 조직을 핀에 대해 확인할 수 없음(예: 네트워크 실패 또는 취소된 토큰) |1896| `org_verify_failed` | 네트워크 장애나 취소된 토큰 등으로 인해 로그인의 조직을 고정값과 대조하여 확인할 수 없었습니다 |
1887| `org_pin_mismatch` | 로그인이 핀이 허용하지 않는 조직에 속함 |1897| `org_pin_mismatch` | 로그인이 고정값에서 허용하지 않는 조직에 속합니다 |
1888| `managed_settings_invalid` | 관리형 정책 설정을 읽을 수 없음, 핀이 조직을 명명하지 않음, 또는 [관리형 모델 제한](/docs/ko/errors#managed-settings-block-the-default-model)이 기본 옵션에 대해 허용된 모델을 남기지 않음 |1898| `managed_settings_invalid` | 관리형 정책 설정을 읽을 수 없거나, 고정값에 조직이 지정되지 않았거나, [관리형 모델 제한](/docs/ko/errors#managed-settings-block-the-default-model)으로 인해 Default 옵션에 허용되는 모델이 없습니다 |
1889| `remote_settings_required_unavailable` | 조직이 요구하는 관리형 설정을 로드할 수 없음 |1899| `remote_settings_required_unavailable` | 조직이 요구하는 관리형 설정을 로드할 수 없었습니다 |
1890| `gateway_signin_required` | [Cloud 게이트웨이](/docs/ko/claude-apps-gateway)가 이 로그인을 종료함 |1900| `gateway_signin_required` | [Cloud 게이트웨이](/docs/ko/claude-apps-gateway)가 이 로그인을 종료했습니다 |
1891| `gateway_access_denied` | Cloud 게이트웨이에 대한 관리형 설정 요청이 403으로 돌아옴(게이트웨이의 [문제 해결 테이블](/docs/ko/claude-apps-gateway-deploy#troubleshooting)이 다룸) |1901| `gateway_access_denied` | Cloud 게이트웨이에 대한 관리형 설정 요청이 403으로 반환되었으며, 이는 게이트웨이의 [문제 해결 표](/docs/ko/claude-apps-gateway-deploy#troubleshooting)에서 다룹니다 |
1892| `proxy_invalid` | 프록시 설정이 완전한 URL이 아님 |1902| `proxy_invalid` | 프록시 설정이 완전한 URL이 아닙니다 |
1893| `temp_dir_unusable` | 사용자별 임시 디렉터리가 안전하지 않거나 생성할 수 없음 |1903| `temp_dir_unusable` | 사용자별 임시 디렉터리가 안전하지 않거나 생성할 수 없었습니다 |
1894| `cwd_unavailable` | 작업 디렉터리가 삭제되었거나, 이동되었거나, 읽을 수 없음 |1904| `cwd_unavailable` | 작업 디렉터리가 삭제 또는 이동되었거나 읽을 수 없습니다 |
1895| `shell_tool_missing` | Windows에서 사용 가능한 셸 도구가 없음: Git Bash가 없으며, PowerShell이 없거나 `CLAUDE_CODE_USE_POWERSHELL_TOOL`로 꺼짐 |1905| `shell_tool_missing` | Windows에서 사용할 수 있는 셸 도구가 없습니다. Git Bash가 없고, PowerShell이 없거나 `CLAUDE_CODE_USE_POWERSHELL_TOOL`로 꺼져 있습니다 |
1896| `session_held_by_background` | 재개하거나 계속할 대화가 [백그라운드 세션](/docs/ko/agent-view)으로 실행 중 |1906| `session_held_by_background` | 재개하거나 계속하려는 대화가 [백그라운드 세션](/docs/ko/agent-view)으로 실행 중입니다 |
1897| `worktree_resume_refused` | 세션의 워크트리가 안전 검사에 실패했거나, 재개가 워크트리 내부에서 시작됨. `errors`는 동일한 재개를 다시 실행하면 워크트리 없이 계속되는지 알려줌 |1907| `worktree_resume_refused` | 세션의 worktree가 안전 검사에 실패했거나, 재개가 worktree 내부에서 시작되었습니다. 같은 재개를 다시 실행하면 worktree 없이 계속되는지 여부는 `errors`에 나옵니다 |
1898| `worktree_unverified` | 세션의 워크트리를 지금 확인할 수 없으며, 재시도하면 성공할 수 있음 |1908| `worktree_unverified` | 현재 세션의 worktree를 확인할 수 없었으며, 재시도하면 성공할 수 있습니다 |
1899| `cli_version_too_old` | 이 Claude Code 버전이 Anthropic이 요구하는 최소 버전보다 낮음 |1909| `cli_version_too_old` | 이 Claude Code 버전이 Anthropic이 요구하는 최소 버전보다 낮습니다 |
1900| `bypass_root` | 루트로 실행하는 동안 바이패스 권한 모드가 요청됨 |1910| `bypass_root` | root로 실행 중인 상태에서 bypass permissions 모드가 요청되었습니다 |
1901 1911
1902<h3 id="sdksystemmessage">1912<h3 id="sdksystemmessage">
1903 `SDKSystemMessage`1913 `SDKSystemMessage`
1942};1952};
1943```1953```
1944 1954
1945`fast_mode_state`는 세션의 [빠른 모드](/docs/ko/fast-mode) 상태를 보고합니다. 빠른 모드를 차단하는 것이 있을 때, `fast_mode_disabled_reason`은 차단한 검사의 이름을 지정합니다. 필드는 Claude Code v2.1.219 이상이 필요합니다. 이유 코드와 의미는 결과 메시지의 [`fast_mode_disabled_reason`](#sdkresultmessage)을 참조하세요.1955`fast_mode_state`는 세션의 [빠른 모드](/docs/ko/fast-mode) 상태를 보고합니다. 빠른 모드를 막는 것이 있으면 `fast_mode_disabled_reason`이 이를 막은 검사를 나타내며, 이 필드에는 Claude Code v2.1.219 이상이 필요합니다. 이유 코드와 그 의미는 결과 메시지의 [`fast_mode_disabled_reason`](#sdkresultmessage)을 참조하세요.
1946 1956
1947`terminal_slash_commands`는 `slash_commands`의 항목 중 인터페이스가 로컬 터미널에 바인딩된 것들의 이름을 지정합니다(예: `exit`). 다른 `slash_commands` 항목처럼 보낼 수 있습니다. 필드는 원격 또는 모바일 클라이언트가 명령 메뉴에서 이를 숨길 수 있도록 존재합니다. 필드는 비어 있지 않을 때만 있으며, Agent SDK v0.3.229 이상이 필요합니다.1957`terminal_slash_commands`는 `slash_commands` 중 인터페이스가 로컬 터미널에 묶인 항목(예: `exit`)을 나열합니다. `slash_commands`의 다른 항목처럼 보낼 수 있으며, 이 필드는 원격 또는 모바일 클라이언트가 명령 메뉴에서 이를 숨길 수 있도록 존재합니다. 이 필드는 비어 있지 않을 때만 있으며, Agent SDK v0.3.229 이상이 필요합니다.
1948 1958
1949* 각 `mcp_servers` 항목의 `source`: 서버의 정의가 어디에서 나왔는지이며, [`McpServerStatus`](#mcpserverstatus)의 `source`와 동일한 값입니다. Agent SDK v0.3.274 이상이 필요합니다.1959* 각 `mcp_servers` 항목의 `source`: 서버 정의의 출처로, [`McpServerStatus`](#mcpserverstatus)의 `source`와 같은 값을 가집니다. Agent SDK v0.3.274 이상이 필요합니다.
1950* `effort`: Claude Code가 세션의 다음 요청에서 보내는 [effort 수준](/docs/ko/model-config#adjust-effort-level)이며, 보내지 않을 때는 `null`입니다. Claude Code는 [Remote Control](/docs/ko/remote-control) 클라이언트로 보내는 초기화 메시지에만 필드를 설정하며, 애플리케이션이 읽는 초기화 메시지에서는 생략합니다. Agent SDK v0.3.234 이상이 필요합니다.1960* `effort`: Claude Code가 세션의 다음 요청에 보내는 [effort 수준](/docs/ko/model-config#adjust-effort-level)이며, 보내지 않는 경우 `null`입니다. Claude Code는 [Remote Control](/docs/ko/remote-control) 클라이언트에 보내는 init 메시지에만 이 필드를 설정하고, 애플리케이션이 읽는 init 메시지에서는 생략합니다. Agent SDK v0.3.234 이상이 필요합니다.
1951 1961
1952`capabilities` 배열은 이 CLI가 구현하는 프로토콜 동작의 이름을 지정하므로 `claude_code_version` 문자열을 비교하는 대신 기능을 감지할 수 있습니다. 이는 열린 집합입니다: 인식하지 못하는 값은 무시하고, 의존하는 동작에 해당하는 특정 기능을 확인하세요. 필드는 Claude Code v2.1.205 이상이 필요하며 이전 CLI에는 없습니다.1962`capabilities` 배열은 이 CLI가 구현하는 프로토콜 동작을 나열하므로, `claude_code_version` 문자열을 비교하는 대신 기능을 감지할 수 있습니다. 이는 열린 집합입니다. 인식하지 못하는 값은 무시하고, 의존하는 동작에 해당하는 특정 capability를 확인하세요. 이 필드에는 Claude Code v2.1.205 이상이 필요하며 이전 CLI에는 없습니다.
1953 1963
1954| 기능 | 의미 |1964| Capability | 의미 |
1955| - | - |1965| - | - |
1956| `interrupt_receipt_v1` | [`interrupt()`](#query-object)는 중단이 도착했을 때 보류 중이던 메시지를 나열하는 [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) 영수증으로 해결됨 |1966| `interrupt_receipt_v1` | [`interrupt()`](#query-object)가 인터럽트 도착 시점에 보류 중이던 메시지를 나열하는 [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) 영수증으로 resolve됩니다 |
1957| `interrupt_cancel_queued_v1` | `interrupt` 제어 요청이 `cancel_queued: true`를 준수하여 영수증이 `still_queued` 아래에 나열할 메시지를 취소하고 대신 `cancelled` 아래에 나열합니다. [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse)를 참조하세요. Claude Code v2.1.219 이상이 필요함 |1967| `interrupt_cancel_queued_v1` | `interrupt` 제어 요청이 `cancel_queued: true`를 적용하여, 영수증에서 `still_queued` 아래에 나열되었을 메시지를 취소하고 대신 `cancelled` 아래에 나열합니다. [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse)를 참조하세요. Claude Code v2.1.219 이상이 필요합니다 |
1968| `sdk_mcp_manifests` | `initialize` 제어 요청이 프로세스 내 [SDK MCP 서버](/docs/ko/agent-sdk/custom-tools)에서 캡처한 MCP 핸드셰이크 결과인 `sdkMcpServerManifests`를 받습니다. Claude Code는 v2.1.286 이상에서 이 capability를 알립니다 |
1969| `sdk_mcp_tools_list_changed` | [SDK MCP 서버](/docs/ko/agent-sdk/custom-tools)의 `tools/list_changed` 알림이 Claude Code가 해당 서버의 도구를 다시 나열하게 하므로, 서버가 세션 도중 추가한 도구가 Claude에 도달합니다. Claude Code는 v2.1.286 이상에서 이 capability를 알립니다 |
1958 1970
1959`plugin_errors` 배열은 플러그인 로드 실패를 나열합니다. 항목은 로드되지 않아 `plugins`에 없는 플러그인이거나, 훅 파일 같은 일부 부분 없이 로드된 플러그인을 설명합니다. 아무것도 실패하지 않았을 때 키는 생략됩니다. `SDKSystemMessage`는 Agent SDK v0.3.283 이상에서 `plugin_errors`를 선언합니다.1971`plugin_errors` 배열은 플러그인 로드 실패를 나열합니다. 항목은 로드되지 않아 `plugins`에 없는 플러그인, 또는 hooks 파일처럼 일부 구성 요소 없이 로드된 플러그인을 설명합니다. 실패한 것이 없으면 키가 생략됩니다. `SDKSystemMessage`는 Agent SDK v0.3.283 이상에서 `plugin_errors`를 선언합니다.
1960 1972
1961[`plugins` 옵션](#options)의 디렉터리 또는 아카이브 자체가 로드되지 않을 때, 항목의 `plugin` 필드는 플러그인 이름 대신 `inline[0]` 같은 위치 태그를 보유합니다. 이는 예를 들어 경로가 존재하지 않거나 매니페스트가 유효하지 않을 때 발생합니다. 이러한 항목을 `path` 필드로 옵션과 일치시키세요.1973[`plugins` 옵션](#options)의 디렉터리나 아카이브 자체가 로드에 실패하면, 항목의 `plugin` 필드에는 플러그인 이름 대신 `inline[0]` 같은 위치 태그가 담깁니다. 예를 들어 경로가 존재하지 않거나 매니페스트가 유효하지 않을 때 이런 일이 발생합니다. 그러한 항목은 `path` 필드로 옵션과 매칭하세요.
1962 1974
1963아래 테이블은 각 `plugin_errors` 항목의 필드를 나열합니다.1975아래 표는 각 `plugin_errors` 항목의 필드를 나열합니다.
1964 1976
1965| 필드 | 타입 | 설명 |1977| 필드 | 타입 | 설명 |
1966| - | - | - |1978| - | - | - |
1967| `plugin` | `string` | 실패한 플러그인의 ID 또는 플러그인 디렉터리나 아카이브 자체가 로드되지 않았을 때 `inline[0]` 같은 위치 태그 |1979| `plugin` | `string` | 실패한 플러그인의 ID이며, 플러그인 디렉터리나 아카이브 자체가 로드에 실패한 경우 `inline[0]` 같은 위치 태그입니다 |
1968| `type` | `string` | `path-not-found` 또는 `manifest-validation-error` 같은 열린 집합의 오류 범주. 인식하지 못하는 값을 일반 실패로 취급 |1980| `type` | `string` | `path-not-found` 또는 `manifest-validation-error` 같은 열린 집합의 오류 범주입니다. 인식하지 못하는 값은 일반 실패로 처리하세요 |
1969| `message` | `string` | 실패를 설명하는 표시 텍스트 |1981| `message` | `string` | 실패를 설명하는 표시용 텍스트입니다 |
1970| `path` | `string` | 플러그인 디렉터리나 아카이브 자체가 로드되지 않았을 때만 있음. 절대 경로이며, `plugins` 옵션의 상대 경로는 [`cwd`](#options) 옵션을 기준으로 해결됨 |1982| `path` | `string` | 플러그인 디렉터리나 아카이브 자체가 로드에 실패한 경우에만 있습니다. 절대 경로이며, `plugins` 옵션의 상대 경로는 [`cwd`](#options) 옵션을 기준으로 해석됩니다 |
1971 1983
1972<h3 id="sdkpartialassistantmessage">1984<h3 id="sdkpartialassistantmessage">
1973 `SDKPartialAssistantMessage`1985 `SDKPartialAssistantMessage`
1974</h3>1986</h3>
1975 1987
1976스트리밍 부분 메시지(`includePartialMessages`가 true일 때만). `parent_tool_use_id` 필드는 항상 `null`입니다: 스트림 이벤트는 메인 세션에 대해서만 내보내집니다. 서브에이전트 귀속의 경우 `parent_tool_use_id`를 전달하는 완전한 메시지를 사용하거나, [`forwardSubagentText`](#options)를 활성화하여 서브에이전트 텍스트와 사고를 완전한 메시지로 받으세요.1988스트리밍 부분 메시지입니다(`includePartialMessages`가 true일 때만). `parent_tool_use_id` 필드는 항상 `null`입니다. 스트림 이벤트는 메인 세션에 대해서만 내보내집니다. 서브에이전트 귀속에는 `parent_tool_use_id`를 가진 완전한 메시지를 사용하거나, [`forwardSubagentText`](#options)를 활성화하여 서브에이전트 텍스트와 사고를 완전한 메시지로 받으세요.
1977 1989
1978```typescript theme={null}1990```typescript theme={null}
1979type SDKPartialAssistantMessage = {1991type SDKPartialAssistantMessage = {
1989};2001};
1990```2002```
1991 2003
1992Claude Code는 [`user_message_uuid`](#user_message_uuid)의 조건에 따라 턴의 첫 번째 비핑 스트림 이벤트에 `user_message_uuid`와 `user_message_uuids`를 설정하며, 턴이 답변하는 메시지가 변경될 때 다시 설정합니다. Claude Code가 재시작으로 중단된 턴을 다시 실행할 때, 이러한 필드를 전달하는 다시 실행된 스트림 이벤트도 [`resume_reason`](#resume_reason)을 전달합니다.2004Claude Code는 [`user_message_uuid`](#user_message_uuid)에 설명된 조건에 따라 턴의 ping이 아닌 첫 번째 스트림 이벤트에, 그리고 턴이 응답하는 메시지가 바뀔 때 다시 `user_message_uuid`와 `user_message_uuids`를 설정합니다. 재시작으로 중단된 턴을 Claude Code가 다시 실행할 때, 해당 필드를 가진 재실행의 스트림 이벤트에는 [`resume_reason`](#resume_reason)도 포함됩니다.
1993 2005
1994<h3 id="sdkcompactboundarymessage">2006<h3 id="sdkcompactboundarymessage">
1995 `SDKCompactBoundaryMessage`2007 `SDKCompactBoundaryMessage`
2014 `SDKInformationalMessage`2026 `SDKInformationalMessage`
2015</h3>2027</h3>
2016 2028
2017루프에서 내보낸 일반 텍스트 배너입니다. Claude Code가 발생시키는 경고, 공지, 기타 비오류 상태 줄과 `UserPromptSubmit` 훅의 블록 이유 같은 훅 피드백을 전달합니다.2029루프가 내보내는 일반 텍스트 배너입니다. Claude Code가 발생시키는 경고, 알림, 기타 오류가 아닌 상태 줄과 `UserPromptSubmit` 훅의 차단 사유 같은 훅 피드백을 담습니다.
2018 2030
2019Claude Code v2.1.227 이상에서 훅의 [`systemMessage`](/docs/ko/hooks#json-output)는 이 메시지로 도착할 수 있으며, 각 줄에는 훅의 이름이 접두사로 붙습니다(예: `PostToolUse:Bash says:`). 훅 페이지의 각 [이벤트 섹션](/docs/ko/hooks#hook-events)에서 출력이 어떻게 표시되는지 설명합니다.2031Claude Code v2.1.227 이상에서는 훅의 [`systemMessage`](/docs/ko/hooks#json-output)가 이 메시지로 도착할 수 있으며, 각 줄 앞에 `PostToolUse:Bash says:`처럼 훅 이름이 붙습니다. 출력이 표시되는 방식은 훅 페이지의 각 [이벤트 섹션](/docs/ko/hooks#hook-events)에 설명되어 있습니다.
2020 2032
2021`content`를 주어진 `level`에서 평문으로 렌더링하세요.2033`content`를 주어진 `level`에 맞춰 일반 텍스트로 렌더링하세요.
2022 2034
2023```typescript theme={null}2035```typescript theme={null}
2024type SDKInformationalMessage = {2036type SDKInformationalMessage = {
2037 `SDKWorkerShuttingDownMessage`2049 `SDKWorkerShuttingDownMessage`
2038</h3>2050</h3>
2039 2051
2040정상적인 워커 종료 시 내보내지므로 원격 클라이언트는 하트비트 타임아웃을 기다리는 대신 워커가 종료된 이유를 표시할 수 있습니다. `reason`은 호스트 CLI에서 설정한 짧은 snake\_case 문자열입니다(예: `"host_exit"` 또는 `"remote_control_disabled"`). 라이브 스트리밍할 때만 이에 대해 조치하세요. 재개된 세션은 이 메시지의 과거 인스턴스를 재생하므로 그 경우 무시하세요.2052워커가 정상적으로 종료될 때 내보내지며, 원격 클라이언트가 하트비트 타임아웃을 기다리는 대신 워커가 종료된 이유를 표시할 수 있게 합니다. `reason`은 호스트 CLI가 설정하는 짧은 snake\_case 문자열이며, `"host_exit"` 또는 `"remote_control_disabled"` 등이 있습니다. 실시간으로 스트리밍할 때만 이에 대응하세요. 재개된 세션은 이 메시지의 과거 인스턴스를 재생하므로, 그 경우에는 무시하세요.
2041 2053
2042```typescript theme={null}2054```typescript theme={null}
2043type SDKWorkerShuttingDownMessage = {2055type SDKWorkerShuttingDownMessage = {
2053 `SDKPluginInstallMessage`2065 `SDKPluginInstallMessage`
2054</h3>2066</h3>
2055 2067
2056플러그인 설치 진행 이벤트입니다. [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/docs/ko/env-vars)이 설정되었을 때 내보내지므로 Agent SDK 애플리케이션이 첫 번째 턴 전에 마켓플레이스 플러그인 설치를 추적할 수 있습니다. `started`와 `completed` 상태는 전체 설치의 시작과 끝을 나타냅니다. `installed`와 `failed` 상태는 개별 마켓플레이스를 보고하며 `name`을 포함합니다.2068플러그인 설치 진행 이벤트입니다. [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/docs/ko/env-vars)이 설정된 경우 내보내지므로, Agent SDK 애플리케이션이 첫 번째 턴 전에 마켓플레이스 플러그인 설치를 추적할 수 있습니다. `started`와 `completed` 상태는 전체 설치의 시작과 끝을 나타냅니다. `installed`와 `failed` 상태는 개별 마켓플레이스를 보고하며 `name`을 포함합니다.
2057 2069
2058```typescript theme={null}2070```typescript theme={null}
2059type SDKPluginInstallMessage = {2071type SDKPluginInstallMessage = {
2071 `SDKPermissionDeniedMessage`2083 `SDKPermissionDeniedMessage`
2072</h3>2084</h3>
2073 2085
2074권한 시스템이 대화형 프롬프트 없이 도구 호출을 거부할 때 내보내는 스트림 이벤트입니다. 뒤따르는 `is_error` 도구 결과만 관찰하는 대신, 이를 사용하여 거부가 발생하는 즉시 UI에서 렌더링하세요. 어느 거부를 보고하는지는 실행이 권한 프롬프트를 처리하는 방식에 따라 다릅니다:2086권한 시스템이 대화형 프롬프트 없이 도구 호출을 거부할 때 내보내지는 스트림 이벤트입니다. 뒤따르는 `is_error` 도구 결과만 관찰하는 대신, 이 이벤트를 사용해 거부가 발생하는 즉시 UI에 표시하세요. 보고하는 거부 유형은 실행이 권한 프롬프트를 처리하는 방식에 따라 다릅니다.
2075 2087
2076* **[`canUseTool`](#canusetool) 콜백과 기본 [`permissionPrompts: 'host'`](#options)**: 권한 프롬프트는 콜백으로 가며, 이 이벤트는 Claude Code가 콜백을 호출하지 않고 자체적으로 결정한 거부를 보고합니다.2088* **[`canUseTool`](#canusetool) 콜백**과 기본값 [`permissionPrompts: 'host'`](#options)를 사용하는 경우: 권한 프롬프트는 콜백으로 전달되며, 이 이벤트는 Claude Code가 콜백을 호출하지 않고 자체적으로 결정한 거부를 보고합니다.
2077* **둘 다 없는 경우**: 단순 `-p` 실행 또는 `canUseTool`과 `permissionPromptToolName` 중 어느 것도 설정하지 않은 `query()`는 [`PermissionRequest` 훅](/docs/ko/hooks-guide#limitations)이 허용하지 않는 한 확인을 요청했을 도구 호출을 모두 거부하며, 이 이벤트는 이러한 거부와 Claude Code가 자체적으로 결정한 거부를 모두 보고합니다. v2.1.223 이전에는 콜백이 없는 실행에서 Claude Code가 이 이벤트를 생성하지 않았습니다.2089* **둘 다 없는 경우**: 단순 `-p` 실행, 또는 `canUseTool`과 `permissionPromptToolName`을 모두 설정하지 않은 `query()`는 [`PermissionRequest` 훅](/docs/ko/hooks-guide#limitations)이 허용하지 않는 한 프롬프트가 필요했을 모든 도구 호출을 거부하며, 이 이벤트는 Claude Code가 자체적으로 결정한 거부와 함께 이러한 거부도 보고합니다. v2.1.223 이전에는 콜백이 없는 실행에서 Claude Code가 이 이벤트를 내보내지 않았습니다.
2078* **MCP 프롬프트 도구**(`permissionPromptToolName` 또는 [`--permission-prompt-tool`](/docs/ko/cli-reference#cli-flags) 플래그로 설정)와 기본 `permissionPrompts: 'host'`: Claude Code는 자체적으로 결정한 규칙 거부에 대해서도 이 이벤트를 전혀 내보내지 않습니다.2090* **MCP 프롬프트 도구**를 `permissionPromptToolName` 또는 [`--permission-prompt-tool`](/docs/ko/cli-reference#cli-flags) 플래그로 설정하고 기본값 `permissionPrompts: 'host'`를 사용하는 경우: Claude Code는 자체적으로 결정한 규칙 거부를 포함하여 이 이벤트를 전혀 내보내지 않습니다.
2079* **[`permissionPrompts: 'none'`](#options)**: `canUseTool` 또는 MCP 프롬프트 도구가 함께 설정되어 있더라도 Claude Code는 확인을 요청했을 호출을 거부하며, 이 이벤트는 이러한 거부와 Claude Code가 자체적으로 결정한 거부를 보고합니다. Claude Code v2.1.259 이상이 필요합니다.2091* **[`permissionPrompts: 'none'`](#options)을 사용하는 경우**: `canUseTool`이나 MCP 프롬프트 도구가 함께 설정되어 있어도 Claude Code는 프롬프트가 필요했을 호출을 거부하며, 이 이벤트는 Claude Code가 자체적으로 결정한 거부와 함께 이러한 거부도 보고합니다. Claude Code v2.1.259 이상이 필요합니다.
2080 2092
2081모든 구성에서 이 이벤트는 `PreToolUse` 훅 경로에서 결정된 거부를 건너뜁니다. 훅이 호출을 직접 거부했는지 또는 거부 규칙이 훅의 허용 또는 요청 결정을 재정의했는지는 관계없습니다. 이벤트는 또한 최선의 노력 방식입니다: 가끔 Claude Code는 이 이벤트를 내보내지 않고 거부를 기록하므로 [결과 메시지](#sdkresultmessage)의 `permission_denials`이 권위 있는 기록입니다.2093모든 구성에서 이 이벤트는 `PreToolUse` 훅 경로에서 결정된 거부를 건너뜁니다. 훅이 호출 자체를 거부했든, 거부 규칙이 훅의 allow 또는 ask 결정을 재정의했든 마찬가지입니다. 또한 이 이벤트는 최선의 노력 방식으로 제공됩니다. 간혹 Claude Code가 이 이벤트를 내보내지 않고 거부를 기록할 수 있으므로, [결과 메시지](#sdkresultmessage)의 `permission_denials`가 공식적인 기록입니다.
2082 2094
2083```typescript theme={null}2095```typescript theme={null}
2084type SDKPermissionDeniedMessage = {2096type SDKPermissionDeniedMessage = {
2097 2109
2098| 필드 | 타입 | 설명 |2110| 필드 | 타입 | 설명 |
2099| - | - | - |2111| - | - | - |
2100| `tool_name` | `string` | 거부된 도구의 이름 |2112| `tool_name` | `string` | 거부된 도구의 이름입니다 |
2101| `tool_use_id` | `string` | 이 거부가 답변하는 `tool_use` 블록의 ID |2113| `tool_use_id` | `string` | 이 거부가 응답하는 `tool_use` 블록의 ID입니다 |
2102| `agent_id` | `string` | 거부된 호출이 서브에이전트 내부에서 발생했을 때 서브에이전트 ID. 호스트 측 라우팅을 위해 `can_use_tool`의 필드를 미러링 |2114| `agent_id` | `string` | 거부된 호출이 서브에이전트 내부에서 발생한 경우의 서브에이전트 ID입니다. 호스트 측 라우팅을 위해 `can_use_tool`의 필드를 그대로 반영합니다 |
2103| `decision_reason_type` | `string` | 결정한 구성 요소의 판별자(예: `"rule"`, `"mode"`, `"classifier"`, 또는 `"asyncAgent"`) |2115| `decision_reason_type` | `string` | 결정한 구성 요소의 판별자이며, `"rule"`, `"mode"`, `"classifier"`, `"asyncAgent"` 등이 있습니다 |
2104| `decision_reason` | `string` | 사용 가능할 때 결정 구성 요소의 사람이 읽을 수 있는 이유 |2116| `decision_reason` | `string` | 결정한 구성 요소가 제공하는 사람이 읽을 수 있는 사유이며, 가능한 경우에 제공됩니다 |
2105| `message` | `string` | `tool_result`에서 모델로 반환된 거부 메시지 |2117| `message` | `string` | `tool_result`로 모델에 반환되는 거부 메시지입니다 |
2106 2118
2107<h3 id="sdkpermissiondenial">2119<h3 id="sdkpermissiondenial">
2108 `SDKPermissionDenial`2120 `SDKPermissionDenial`
2122 `SDKContextUsage`2134 `SDKContextUsage`
2123</h3>2135</h3>
2124 2136
2125`/context` 보고서의 구조화된 형태이며, `/context` 결과를 전달하는 [`SDKAssistantMessage`](#sdkassistantmessage)에 `context_usage`로 전달됩니다. Agent SDK v0.3.232 이상은 이 타입을 내보냅니다. [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse)와 달리, 사용량 분석을 렌더링하는 데 필요한 데이터만 전달하며, `color`와 `gridRows` 같은 표시 필드는 없습니다. Claude Code는 메시지 스트림에 나타나지 않는 토큰 계산 API 요청으로 보고서를 계산합니다. [이러한 요청이 어떻게 처리되는지](#sdkcontrolgetcontextusageresponse)를 참조하세요.2137`/context` 보고서의 구조화된 형태로, `/context` 결과를 전달하는 [`SDKAssistantMessage`](#sdkassistantmessage)에 `context_usage`로 포함됩니다. Agent SDK v0.3.232 이상에서 이 타입을 내보냅니다. [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse)와 달리, `color`와 `gridRows` 같은 표시용 필드 없이 사용량 세부 내역을 렌더링하는 데 필요한 데이터만 담습니다. Claude Code는 메시지 스트림에 나타나지 않는 토큰 계산 API 요청으로 보고서를 계산합니다. [이러한 요청이 처리되는 방식](#sdkcontrolgetcontextusageresponse)을 참조하세요.
2126 2138
2127```typescript theme={null}2139```typescript theme={null}
2128type SDKContextUsage = {2140type SDKContextUsage = {
2159};2171};
2160```2172```
2161 2173
2162테이블은 Claude Code가 각 필드에 넣는 것을 나열합니다. `model`에서 `over_limit`까지의 필드는 세션 전체를 설명하며, 컬렉션 필드는 개별 항목에 토큰을 귀속시킵니다.2174다음 표는 Claude Code가 각 필드에 넣는 내용을 나열합니다. `model`부터 `over_limit`까지의 필드는 세션 전체를 설명하고, 컬렉션 필드는 토큰을 개별 항목에 귀속시킵니다.
2163 2175
2164| 필드 | 타입 | 설명 |2176| 필드 | 타입 | 설명 |
2165| - | - | - |2177| - | - | - |
2166| `model` | `string` | Claude Code가 사용량을 계산한 메인 루프의 모델이며, 서브에이전트의 모델이 아님 |2178| `model` | `string` | Claude Code가 사용량을 계산한 메인 루프의 모델이며, 서브에이전트의 모델이 아닙니다 |
2167| `total_tokens` | `number` | Claude Code의 사용 중인 토큰 추정치. 윈도우 크기로 제한되지 않으므로 세션이 제한을 초과할 때 `raw_max_tokens`를 초과할 수 있음 |2179| `total_tokens` | `number` | 사용 중인 토큰에 대한 Claude Code의 추정치입니다. 윈도우 크기로 제한되지 않으므로, 세션이 한도를 초과하면 `raw_max_tokens`를 넘을 수 있습니다 |
2168| `raw_max_tokens` | `number` | 모델의 컨텍스트 윈도우 또는 적용되는 경우 더 낮은 [자동 압축 윈도우](/docs/ko/model-config#context-window-and-auto-compaction)(예: 직접 설정한 것 또는 1M 토큰 윈도우가 있는 일부 모델에 Claude Code가 적용하는 200K 경계). Claude Code는 `total_tokens`를 이 윈도우에 대해 측정 |2180| `raw_max_tokens` | `number` | 모델의 컨텍스트 윈도우이며, 더 낮은 [자동 압축 윈도우](/docs/ko/model-config#context-window-and-auto-compaction)가 적용되는 경우 그 값입니다. 예를 들어 사용자가 설정한 값이나, 1M 토큰 윈도우를 가진 일부 모델에 Claude Code가 적용하는 200K 경계가 있습니다. Claude Code는 이 윈도우를 기준으로 `total_tokens`를 측정합니다 |
2169| `percentage` | `number` | `total_tokens`를 `raw_max_tokens`의 반올림된 백분율로 표시하므로 세션이 제한을 초과할 때 100을 초과할 수 있음 |2181| `percentage` | `number` | `raw_max_tokens` 대비 `total_tokens`의 반올림된 백분율이므로, 세션이 한도를 초과하면 100을 넘을 수 있습니다 |
2170| `over_limit` | `object` | `total_tokens`가 `raw_max_tokens`를 초과할 때만 있음. `tokens_over`는 초과량이며, `kind`는 Claude Code가 윈도우를 결정한 방식을 나타냄 |2182| `over_limit` | `object` | `total_tokens`가 `raw_max_tokens`를 초과할 때만 있습니다. `tokens_over`는 초과량이며, `kind`는 Claude Code가 윈도우를 결정한 방식을 나타냅니다 |
2171| `categories` | [`SDKContextUsageCategory`](#sdkcontextusagecategory)`[]` | 범주별 사용량 분석의 각 행에 대한 하나의 항목 |2183| `categories` | [`SDKContextUsageCategory`](#sdkcontextusagecategory)`[]` | 범주별 사용량 세부 내역의 행마다 하나의 항목입니다 |
2172| `mcp_tools` | `object[]` | 각 MCP 도구에 귀속된 토큰이며, 와이어 이름(예: `mcp__linear__create_issue`)과 `server_name` 포함 |2184| `mcp_tools` | `object[]` | 각 MCP 도구에 귀속된 토큰으로, `mcp__linear__create_issue` 같은 와이어 이름과 `server_name`을 포함합니다 |
2173| `memory_files` | `object[]` | 각 로드된 메모리 파일에 귀속된 토큰이며, `path`와 `type`에 `Project` 또는 `User` 같은 소스 레이블 포함 |2185| `memory_files` | `object[]` | 로드된 각 메모리 파일에 귀속된 토큰으로, `path`와 `type`에 `Project` 또는 `User` 같은 출처 레이블을 포함합니다 |
2174| `agents` | `object[]` | 각 사용자 정의 서브에이전트 정의에 귀속된 토큰이며, `projectSettings`, `userSettings`, 또는 `plugin` 같은 소스 식별자 포함. 기본 제공 서브에이전트는 나열되지 않음 |2186| `agents` | `object[]` | 각 사용자 정의 서브에이전트 정의에 귀속된 토큰으로, `projectSettings`, `userSettings`, `plugin` 같은 출처 식별자를 포함합니다. 기본 제공 서브에이전트는 나열되지 않습니다 |
2175| `skills` | `object[]` | 스킬 목록의 각 스킬에 귀속된 토큰이며, 소스 식별자와 플러그인 스킬의 경우 `plugin_name`에 플러그인 이름 포함. 토큰에 기여하는 스킬이 없을 때 없음 |2187| `skills` | `object[]` | 스킬 목록의 각 스킬에 귀속된 토큰으로, 출처 식별자와 플러그인 스킬의 경우 `plugin_name`에 플러그인 이름을 포함합니다. 토큰을 차지하는 스킬이 없으면 없습니다 |
2176 2188
2177`over_limit.kind`는 다음 요청을 API가 수락하는지 여부가 아니라 Claude Code가 윈도우를 결정한 방식을 기록합니다:2189`over_limit.kind`는 API가 다음 요청을 받아들이는지 여부가 아니라, Claude Code가 윈도우를 결정한 방식을 기록합니다.
2178 2190
2179* `hard_limit`: 윈도우는 Claude Code가 모델 자체의 제한이라고 판단한 것이며, 이를 넘으면 API가 요청을 거부함2191* `hard_limit`: 윈도우가 Claude Code가 판단하는 모델 자체의 한도이며, 이를 넘으면 API가 요청을 거부합니다
2180* `compaction_window`: 윈도우는 압축 정책 윈도우이며, 모델의 제한과 일치할 수도 있고 아닐 수도 있음2192* `compaction_window`: 윈도우가 압축 정책 윈도우이며, 모델의 한도와 일치할 수도 있고 그렇지 않을 수도 있습니다
2181 2193
2182Claude Code는 기존 필드를 재구성하는 대신 새 데이터를 선택적 필드로 추가하는 방식으로 타입을 점진적으로 발전시킵니다. 알고 있는 필드를 읽고 인식하지 못하는 필드는 무시하세요.2194Claude Code는 기존 필드의 형태를 바꾸는 대신 새 데이터를 선택적 필드로 추가하는 방식으로 이 타입을 확장합니다. 알고 있는 필드를 읽고 인식하지 못하는 필드는 무시하세요.
2183 2195
2184<h3 id="sdkcontextusagecategory">2196<h3 id="sdkcontextusagecategory">
2185 `SDKContextUsageCategory`2197 `SDKContextUsageCategory`
2186</h3>2198</h3>
2187 2199
2188`/context` 범주별 사용량 분석의 한 행입니다.2200`/context` 범주별 사용량 세부 내역의 한 행입니다.
2189 2201
2190```typescript theme={null}2202```typescript theme={null}
2191type SDKContextUsageCategory = {2203type SDKContextUsageCategory = {
2195};2207};
2196```2208```
2197 2209
2198테이블은 행의 각 필드에 Claude Code가 넣는 것을 나열합니다.2210다음 표는 Claude Code가 행의 각 필드에 넣는 내용을 나열합니다.
2199 2211
2200| 필드 | 타입 | 설명 |2212| 필드 | 타입 | 설명 |
2201| - | - | - |2213| - | - | - |
2202| `name` | `string` | `/context`가 출력하는 행의 표시 이름(예: `Messages`). 이름이 아니라 `kind`로 행을 분류 |2214| `name` | `string` | `/context`가 출력하는 행의 표시 이름이며, `Messages` 등이 있습니다. 행은 이름이 아니라 `kind`로 분류하세요 |
2203| `tokens` | `number` | 행의 토큰 수. 행은 0개의 토큰을 가질 수 있음 |2215| `tokens` | `number` | 행의 토큰 수입니다. 행의 토큰이 0일 수 있습니다 |
2204| `kind` | `string` | 행이 나타내는 것: `used`, `free`, `buffer`, 또는 `deferred` |2216| `kind` | `string` | 행이 나타내는 것으로, `used`, `free`, `buffer`, `deferred` 중 하나입니다 |
2205 2217
2206각 `kind` 값은 행의 토큰이 무엇인지 나타냅니다:2218각 `kind` 값은 행의 토큰이 무엇인지를 나타냅니다.
2207 2219
2208* `used`: 컨텍스트 윈도우를 차지하는 콘텐츠2220* `used`: 컨텍스트 윈도우를 차지하는 콘텐츠
2209* `free`: 남은 윈도우2221* `free`: 남은 윈도우
2210* `buffer`: 압축 예비 공간2222* `buffer`: 압축 예비 공간
2211* `deferred`: Claude Code가 윈도우 밖에 보유하고 사용량 계산에서 제외하는 도구 스키마이며, 참고용으로 나열됨2223* `deferred`: Claude Code가 윈도우 밖에 보관하고 사용량 계산에서 제외하는 도구 스키마로, 참고용으로 나열됩니다
2212 2224
2213<h3 id="sdkmessageorigin">2225<h3 id="sdkmessageorigin">
2214 `SDKMessageOrigin`2226 `SDKMessageOrigin`
2215</h3>2227</h3>
2216 2228
2217사용자 역할 메시지의 출처입니다. 이는 [`SDKUserMessage`](#sdkusermessage)에서 `origin`으로 나타나며 해당 [`SDKResultMessage`](#sdkresultmessage)로 전달되므로 주어진 턴을 무엇이 트리거했는지 알 수 있습니다.2229사용자 역할 메시지의 출처입니다. 이는 [`SDKUserMessage`](#sdkusermessage)에 `origin`으로 나타나며, 해당하는 [`SDKResultMessage`](#sdkresultmessage)로 전달되므로 특정 턴을 무엇이 트리거했는지 알 수 있습니다.
2218 2230
2219```typescript theme={null}2231```typescript theme={null}
2220type SDKMessageOrigin =2232type SDKMessageOrigin =
2242 2254
2243| `kind` | 의미 |2255| `kind` | 의미 |
2244| - | - |2256| - | - |
2245| `human` | 최종 사용자의 직접 입력. 애플리케이션이 사용자가 입력한 것을 사용자 메시지로 전달하면, 명시적으로 `origin`을 `{ kind: "human" }`으로 설정하세요: Claude Code는 `origin` 없는 사용자 메시지를 미귀속으로 취급하며, [`ultracode` 워크플로 키워드](/docs/ko/workflows#ask-for-a-workflow-in-your-prompt) 같이 사람이 입력한 프롬프트를 요구하는 검사는 이를 수락하지 않습니다. v2.1.210 이전에는 Claude Code가 사용자 메시지에 `origin`이 없으면 사람의 입력으로 취급했습니다. |2257| `human` | 최종 사용자의 직접 입력입니다. 애플리케이션이 사용자가 입력한 내용을 사용자 메시지로 전달하는 경우, `origin`을 명시적으로 `{ kind: "human" }`으로 설정하세요. Claude Code는 `origin`이 없는 사용자 메시지를 귀속되지 않은 것으로 처리하며, [`ultracode` 워크플로 키워드](/docs/ko/workflows#ask-for-a-workflow-in-your-prompt)처럼 사람이 입력한 프롬프트를 요구하는 검사는 이를 받아들이지 않습니다. v2.1.210 이전에는 Claude Code가 사용자 메시지에 `origin`이 없으면 사람의 입력으로 처리했습니다. |
2246| `channel` | [채널](/docs/ko/channels)에 도착하는 메시지. `server`는 소스 MCP 서버 이름입니다. |2258| `channel` | [채널](/docs/ko/channels)에서 도착한 메시지입니다. `server`는 출처 MCP 서버 이름입니다. |
2247| `peer` | 다른 에이전트의 메시지: 프로세스 내 [팀원](/docs/ko/agent-teams) 또는 [교차 세션 피어](/docs/ko/cross-session-messaging), 즉 다른 Claude Code 세션. 필드별 의미와 신뢰 모델은 [피어 origin 필드](#peer-origin-fields)를 참조하세요. |2259| `peer` | 다른 에이전트의 메시지입니다. 프로세스 내 [팀원](/docs/ko/agent-teams) 또는 사용자의 다른 Claude Code 세션인 [세션 간 피어](/docs/ko/cross-session-messaging)가 해당합니다. 필드별 의미와 신뢰 모델은 [피어 origin 필드](#peer-origin-fields)를 참조하세요. |
2248| `task-notification` | 새로운 사용자 프롬프트 없이 도착하는 전달(예: 완료된 백그라운드 작업)을 위해 주입된 합성 턴. 해당 분기는 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage)를 참조하세요. 애플리케이션이 [예약된 실행으로 선언](#declare-a-scheduled-run)하는 프롬프트도 이 종류를 전달합니다. 선택적 `subkind`는 알림을 발생시킨 것을 표시합니다. [작업 알림 서브종류](#task-notification-subkinds)를 참조하세요. |2260| `task-notification` | 완료된 백그라운드 작업처럼 새 사용자 프롬프트 없이 도착하는 전달을 위해 주입된 합성 턴입니다. 해당 분기는 [`SDKTaskNotificationMessage`](#sdktasknotificationmessage)를 참조하세요. 애플리케이션이 [예약 실행으로 선언](#declare-a-scheduled-run)한 프롬프트도 이 kind를 가집니다. 선택적 `subkind`는 알림을 발생시킨 원인을 표시합니다. [Task-notification 하위 유형](#task-notification-subkinds)을 참조하세요. |
2249| `coordinator` | [에이전트 팀](/docs/ko/agent-teams)의 팀 코디네이터의 메시지입니다. |2261| `coordinator` | [에이전트 팀](/docs/ko/agent-teams)의 팀 코디네이터가 보낸 메시지입니다. |
2250| `auto-continuation` | 새로운 사용자 입력 없이 세션이 계속될 때 주입된 합성 턴(예: 후속 프롬프트를 트리거하는 명령 결과). |2262| `auto-continuation` | 후속 프롬프트를 트리거하는 명령 결과처럼 새 사용자 입력 없이 세션이 계속될 때 주입되는 합성 턴입니다. |
2251| `unclassified` | 출처를 결정할 수 없는 주입된 턴. Claude Code v2.1.223 이상이 필요합니다. Claude Code가 `isSynthetic: true`인 [`SDKUserMessage`](#sdkusermessage)를 받았는데 다른 `kind`로 분류할 수 없을 때, 메시지가 도착하는 시점에 이 종류를 설정하고 턴을 사람의 입력으로 취급하는 대신 비사용자 소스로 모델에 제시합니다. 애플리케이션은 이 값을 설정하지 않아야 합니다. |2263| `unclassified` | 출처를 판단할 수 없는 주입 턴입니다. Claude Code v2.1.223 이상이 필요합니다. Claude Code가 `isSynthetic: true`인 [`SDKUserMessage`](#sdkusermessage)를 받았는데 다른 `kind`로 분류할 수 없으면, 메시지가 도착할 때 이 kind를 설정하고 해당 턴을 사람의 입력으로 처리하는 대신 사용자가 아닌 출처로 모델에 제시합니다. 애플리케이션에서는 이 값을 설정하지 않아야 합니다. |
2252 2264
2253<h3 id="task-notification-subkinds">2265<h3 id="task-notification-subkinds">
2254 작업 알림 서브종류2266 Task-notification 하위 유형
2255</h3>2267</h3>
2256 2268
2257Claude Code가 작업 알림을 세션에 전달할 때, Anthropic 서버가 해당 알림이 어디에서 나왔는지 확인했으면 알림의 `origin`에 `subkind`를 설정합니다. 또한 애플리케이션이 직접 [메시지를 예약된 실행으로 선언](#declare-a-scheduled-run)할 때도 `subkind`를 설정하며, 이는 TypeScript Agent SDK v0.3.280 이상이 필요합니다. `subkind`는 Claude Code v2.1.213 이상이 필요하며, 두 가지 값 중 하나를 취합니다:2269Claude Code가 세션에 작업 알림을 전달할 때, Anthropic 서버가 해당 알림의 출처를 검증한 경우 알림의 `origin`에 `subkind`를 설정합니다. 애플리케이션이 직접 [메시지를 예약 실행으로 선언](#declare-a-scheduled-run)한 경우에도 `subkind`를 설정하며, 이를 위해서는 TypeScript Agent SDK v0.3.280 이상이 필요합니다. `subkind`에는 Claude Code v2.1.213 이상이 필요하며, 두 값 중 하나를 가집니다.
2258 2270
2259* `scheduled-trigger`: 알림은 [루틴](/docs/ko/routines)의 저장된 프롬프트이며, 루틴의 트리거 중 하나가 발생했기 때문에 전달됩니다: 일정, [API 트리거](/docs/ko/routines#add-an-api-trigger), [GitHub 트리거](/docs/ko/routines#add-a-github-trigger), 또는 **Run now**. 애플리케이션이 [예약된 실행으로 선언](#declare-a-scheduled-run)하는 프롬프트도 이 값을 전달합니다. Claude Code는 이를 세션의 할당된 작업으로 모델에 제시하며, [다른 작업 알림이 전달하는 공지](#sdktasknotificationmessage)와 다른 공지를 사용합니다.2271* `scheduled-trigger`: 알림이 [루틴](/docs/ko/routines)의 저장된 프롬프트이며, 루틴의 트리거 중 하나가 실행되어 전달되었습니다. 트리거는 일정, [API 트리거](/docs/ko/routines#add-an-api-trigger), [GitHub 트리거](/docs/ko/routines#add-a-github-trigger), 또는 **Run now**입니다. 애플리케이션이 [예약 실행으로 선언](#declare-a-scheduled-run)한 프롬프트도 이 값을 가집니다. Claude Code는 이를 세션에 할당된 작업으로 모델에 제시하며, [다른 작업 알림이 가지는 안내문](#sdktasknotificationmessage)과는 다른 안내문을 사용합니다.
2260* `peer-send-message`: 알림은 다른 세션이 [클라우드 세션](/docs/ko/claude-code-on-the-web)이 서로 메시지를 보내는 데 사용하는 서버 측 `send_message` 도구로 보낸 메시지이며([교차 세션 `SendMessage` 도구](/docs/ko/cross-session-messaging)가 아님), Anthropic 서버가 두 세션이 동일한 비공개 세션 그룹에 속한다고 확인했습니다. Claude Code v2.1.224 이상이 필요합니다. 서버가 그 방식으로 확인하지 않은 `send_message` 전달은 subkind를 얻지 못합니다.2272* `peer-send-message`: 알림이 사용자의 다른 세션이 [클라우드 세션](/docs/ko/claude-code-on-the-web) 간 메시지 전송에 사용하는 서버 측 `send_message` 도구로 보낸 메시지이며([세션 간 `SendMessage` 도구](/docs/ko/cross-session-messaging)가 아님), Anthropic 서버가 두 세션이 같은 비공개 세션 그룹에 속한다는 것을 검증했습니다. Claude Code v2.1.224 이상이 필요합니다. 서버가 그렇게 검증하지 않은 `send_message` 전달에는 subkind가 없습니다.
2261 2273
2262다른 모든 작업 알림에는 `subkind`가 없습니다. 여기에는 세션에 전달되는 [PR 활동](/docs/ko/claude-code-on-the-web#how-claude-responds-to-pr-activity)과 완료된 작업 같은 백그라운드 이벤트가 포함됩니다. [교차 세션 `SendMessage` 도구](/docs/ko/cross-session-messaging)의 메시지는 작업 알림이 아닙니다: 동일한 머신의 세션에서 오든 다른 머신에서 Anthropic 서버를 통해 오든, Claude Code는 이들에게 `kind: "peer"`와 [피어 origin 필드](#peer-origin-fields)를 부여합니다.2274다른 모든 작업 알림에는 `subkind`가 없습니다. 여기에는 세션에 전달된 [PR 활동](/docs/ko/claude-code-on-the-web#how-claude-responds-to-pr-activity)과 완료된 작업 같은 백그라운드 이벤트가 포함됩니다. [세션 간 `SendMessage` 도구](/docs/ko/cross-session-messaging)의 메시지는 아예 작업 알림이 아닙니다. 같은 머신의 세션에서 왔든 Anthropic 서버를 통해 다른 머신에서 왔든, Claude Code는 이 메시지에 `kind: "peer"`와 [피어 origin 필드](#peer-origin-fields)를 부여합니다.
2263 2275
2264`fireReason`은 `scheduled-trigger` 알림이 발생한 이유를 `scheduled`, `manual`, `retry`, `catch_up`, 또는 `api` 같은 짧은 소문자 토큰으로 나타냅니다. Anthropic 서버는 [루틴](/docs/ko/routines)의 전달에 이를 설정하며, 애플리케이션은 예약된 실행을 선언할 때 설정합니다. 둘 다 보내지 않았을 때는 없습니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다.2276`fireReason`은 `scheduled-trigger` 알림이 실행된 이유를 `scheduled`, `manual`, `retry`, `catch_up`, `api` 같은 짧은 소문자 토큰으로 나타냅니다. Anthropic 서버는 [루틴](/docs/ko/routines)의 전달에 이를 설정하며, 애플리케이션은 예약 실행을 선언할 때 이를 설정합니다. 어느 쪽도 보내지 않으면 없습니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다.
2265 2277
2266<h4 id="declare-a-scheduled-run">2278<h4 id="declare-a-scheduled-run">
2267 예약된 실행 선언2279 예약 실행 선언
2268</h4>2280</h4>
2269 2281
2270애플리케이션이 자체 일정에 따라 프롬프트를 실행한다면, 각 실행을 선언하여 Claude Code가 턴을 사용자의 실시간 입력이 아니라 예약 작업으로 모델에 제시하도록 하세요. [`env`](#options)에서 `CLAUDE_CODE_HOST_SCHEDULED_RUN`을 `1`로 설정하여 세션을 시작한 다음, 실행의 [`SDKUserMessage`](#sdkusermessage)를 `origin: { kind: "task-notification", subkind: "scheduled-trigger", fireReason: "scheduled" }`와 함께 `isSynthetic` 없이 보내세요. Claude Code는 해당 변수 없이 시작된 프로세스에서 선언을 무시합니다. 또한 환경에 [`CLAUDECODE`](/docs/ko/env-vars) 또는 `CLAUDE_CODE_CHILD_SESSION`이 있는 프로세스에서도 무시합니다. Claude Code는 값이 1\~32개의 소문자 또는 밑줄일 때만 `fireReason`을 유지합니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다.2282애플리케이션이 자체 일정에 따라 프롬프트를 실행하는 경우, 각 실행을 선언하면 Claude Code가 해당 턴을 사용자의 실시간 입력이 아닌 예약 작업으로 모델에 제시합니다. [`env`](#options)에서 `CLAUDE_CODE_HOST_SCHEDULED_RUN`을 `1`로 설정하여 세션을 시작한 다음, `isSynthetic` 없이 `origin: { kind: "task-notification", subkind: "scheduled-trigger", fireReason: "scheduled" }`로 실행의 [`SDKUserMessage`](#sdkusermessage)를 보내세요. Claude Code는 해당 변수 없이 시작된 프로세스에서는 선언을 무시합니다. 환경에 [`CLAUDECODE`](/docs/ko/env-vars) 또는 `CLAUDE_CODE_CHILD_SESSION`이 있는 프로세스에서도 선언을 무시합니다. Claude Code는 값이 1\~32자의 소문자 또는 밑줄로 이루어진 경우에만 `fireReason`을 유지합니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다.
2271 2283
2272<h3 id="peer-origin-fields">2284<h3 id="peer-origin-fields">
2273 피어 origin 필드2285 Peer origin 필드
2274</h3>2286</h3>
2275 2287
2276`peer` origin은 메시지를 보낸 에이전트를 식별합니다: `SendMessage`를 사용하여 `main`으로 보내는 프로세스 내 [팀원](/docs/ko/agent-teams) 또는 [교차 세션 피어](/docs/ko/cross-session-messaging), 즉 다른 Claude Code 세션입니다. 교차 세션 피어는 macOS 및 Linux에서 Claude Code v2.1.224 이상이 필요합니다. 네이티브 Windows 요구 사항은 [교차 세션 메시징 가용성](/docs/ko/cross-session-messaging#availability)을 참조하세요. 교차 세션 피어는 동일한 머신에서 실행되거나, 메시지가 Remote Control을 통해 도착하는 경우 [다른 머신](/docs/ko/cross-session-messaging#message-sessions-on-other-machines)이나 [클라우드](/docs/ko/claude-code-on-the-web)에서 실행될 수 있습니다. 두 종류의 발신자는 필드를 다르게 채웁니다:2288`peer` origin은 메시지를 보낸 에이전트를 식별합니다. 이 에이전트는 `SendMessage`로 `main`에 메시지를 보내는 in-process [팀원](/docs/ko/agent-teams)이거나, 사용자의 또 다른 Claude Code 세션인 [cross-session peer](/docs/ko/cross-session-messaging)입니다. cross-session peer를 사용하려면 macOS 및 Linux에서 Claude Code v2.1.224 이상이 필요합니다. 네이티브 Windows 요구 사항은 [cross-session 메시징 사용 가능 여부](/docs/ko/cross-session-messaging#availability)를 참조하세요. cross-session peer는 같은 머신에서 실행될 수도 있고, 메시지가 Remote Control을 통해 도착하는 경우에는 [사용자의 다른 머신](/docs/ko/cross-session-messaging#message-sessions-on-other-machines)이나 [클라우드](/docs/ko/claude-code-on-the-web)에서 실행될 수도 있습니다. 두 종류의 발신자는 필드를 서로 다르게 채웁니다.
2277 2289
2278* `from`: 팀원의 이름 또는 교차 세션 피어의 발신자 주소. [일방향 교차 머신 메시지](/docs/ko/cross-session-messaging#message-sessions-on-other-machines)의 경우, 발신자는 회신 주소가 없으며 `from`은 `"unknown"`입니다. 값은 발신자가 작성한 것이며, `verifiedPeerPid`가 확인된 신원입니다.2290* `from`: 팀원의 이름 또는 cross-session peer의 발신자 주소입니다. [단방향 cross-machine 메시지](/docs/ko/cross-session-messaging#message-sessions-on-other-machines)의 경우 발신자에게 회신 주소가 없으므로 `from`은 `"unknown"`입니다. 이 값은 발신자가 작성한 것이며, 검증된 신원은 `verifiedPeerPid`입니다.
2279* `fromMode`: 발신 세션의 권한 클래스(`bypass` 또는 `prompting`)이며, 세션 간에 피어 메시지를 중계하는 호스트(예: [데스크톱 앱](/docs/ko/desktop#work-across-sessions))가 선언합니다. Claude Code는 [인바운드 제어](/docs/ko/cross-session-messaging#control-inbound-messages)를 적용할 때 수신 세션에서 이를 읽습니다. Agent SDK v0.3.234 이상이 필요합니다.2291* `fromMode`: 발신 세션의 권한 클래스(`bypass` 또는 `prompting`)로, [데스크톱 앱](/docs/ko/desktop#work-across-sessions)처럼 사용자의 세션 간에 peer 메시지를 중계하는 호스트가 선언합니다. Claude Code는 [인바운드 제어](/docs/ko/cross-session-messaging#control-inbound-messages)를 적용할 때 수신 세션에서 이 값을 읽습니다. Agent SDK v0.3.234 이상이 필요합니다.
2280* `senderTaskId`: 팀원의 작업 ID. 교차 세션 피어에는 없습니다.2292* `senderTaskId`: 팀원의 작업 ID입니다. cross-session peer의 경우에는 존재하지 않습니다.
2281* `name`: 발신자의 표시 이름이며, Claude Code가 정규화합니다: Unicode 제어, 형식, 대리, 줄 또는 단락 구분자 코드 포인트를 제거한 다음 결과를 트림하고 64개 코드 포인트로 제한하며 줄임표를 추가합니다. Claude Code v2.1.205 이상이 필요합니다.2293* `name`: Claude Code가 정규화한 발신자의 표시 이름입니다. Claude Code는 Unicode 제어, 서식, 서로게이트, 줄 또는 단락 구분자 코드 포인트를 제거한 다음, 결과의 앞뒤 공백을 제거하고 말줄임표를 붙여 최대 64개 코드 포인트로 제한합니다. Claude Code v2.1.205 이상이 필요합니다.
2282* `body`: 피어 봉투가 제거된 디코딩된 메시지 본문이며, 모델이 보는 것과 바이트 단위로 정확히 일치합니다. 팀원 메시지에는 항상 있습니다. 교차 세션 피어의 경우, 턴이 Claude Code가 형성한 정확히 하나의 피어 봉투일 때만 있습니다. 메시지 텍스트를 다시 구문 분석하는 대신 `name`과 `body`를 렌더링하세요. Claude Code v2.1.205 이상이 필요합니다.2294* `body`: peer 엔벨로프가 제거된 디코딩된 메시지 본문으로, 모델이 보는 내용과 바이트 단위로 정확히 일치합니다. 팀원 메시지에는 항상 존재하며, cross-session peer의 경우 턴이 Claude Code가 구성한 정확히 하나의 peer 엔벨로프일 때만 존재합니다. 메시지 텍스트를 다시 파싱하는 대신 `name`과 `body`를 렌더링하세요. Claude Code v2.1.205 이상이 필요합니다.
2283* `fromSession`: 발신자의 호스트에서 열 수 있는 세션 ID이며, 발신자의 호스트가 설정하므로 UI가 발신 세션으로 다시 링크할 수 있습니다. `from`처럼 발신자가 주장한 것입니다: 탐색 대상으로만 사용하고 발신자 신원의 증명으로 취급하지 마세요. Claude Code v2.1.216 이상이 필요합니다.2295* `fromSession`: 발신자의 호스트에서 열 수 있는 세션 ID로, UI가 발신 세션으로 다시 연결할 수 있도록 발신자의 호스트가 설정합니다. `from`과 마찬가지로 발신자가 주장하는 값이므로 탐색 대상으로만 사용하고, 발신자 신원의 증거로 취급하지 마세요. Claude Code v2.1.216 이상이 필요합니다.
2284* `verifiedPeerPid`: 이 세션의 교차 세션 메시징 소켓에 연결된 프로세스의 프로세스 ID이며, 커널이 확인하고 페이로드가 아니라 연결 자체에서 읽습니다. 발신자를 식별하려면 `from`이 아니라 이를 사용하세요: `from`은 동일한 사용자의 어떤 프로세스든 위조할 수 있습니다. Claude Code가 확인할 수 없을 때(예: Windows 또는 비소켓 수신) 필드는 없으므로, 값이 없으면 발신자가 확인되지 않았음을 의미합니다. 중계된 트래픽의 경우 메시지의 작성자가 아니라 중계자를 식별하며, 프로세스 ID는 재사용될 수 있으므로 인증 토큰이 아니라 출처 정보로 취급하세요. Claude Code v2.1.216 이상이 필요합니다.2296* `verifiedPeerPid`: 이 세션의 cross-session 메시징 소켓에 연결한 프로세스의 프로세스 ID로, 커널이 검증하며 페이로드가 아닌 연결 자체에서 읽어옵니다. 발신자를 식별할 때는 `from`이 아닌 이 값을 사용하세요. `from`은 같은 사용자의 어떤 프로세스든 위조할 수 있습니다. Windows나 소켓이 아닌 유입 경로처럼 Claude Code가 검증할 수 없는 경우에는 이 필드가 존재하지 않으므로, 값이 없으면 발신자가 검증되지 않았다는 의미입니다. 중계된 트래픽의 경우 이 값은 메시지 작성자가 아닌 중계자를 식별하며, 프로세스 ID는 재사용될 수 있으므로 인증 토큰이 아닌 출처 정보로 취급하세요. Claude Code v2.1.216 이상이 필요합니다.
2285 2297
2286<h2 id="hook-types">2298<h2 id="hook-types">
2287 훅 타입2299 훅 타입