Skip to main content

설치

최근 Debian, Ubuntu, 및 Homebrew Python 설치에서 가상 환경에 패키지를 설치합니다. 시스템 Python에 대해 pip install을 실행하면 error: externally-managed-environment 오류가 발생합니다.
uv, Windows PowerShell, 및 API 키 설정에 대해서는 Agent SDK 빠른 시작에서 설정을 참조합니다.

query()와 ClaudeSDKClient 중 선택하기

Python SDK는 Claude Code와 상호작용하는 두 가지 방법을 제공합니다. ClaudeSDKClient는 채팅 인터페이스와 같은 대화형 애플리케이션이나 다음 작업이 Claude의 응답에 따라 달라질 때 사용합니다.

함수

이 페이지의 서명 블록과 bare async for / async with 조각은 설명용입니다. 실행하려면 본문을 async def main(): ...으로 래핑하고 asyncio.run(main())을 호출하세요.

query()

Claude Code와의 각 상호작용을 위해 기본적으로 새 세션을 생성합니다. 메시지가 도착하면 생성하는 비동기 반복자를 반환합니다. query()에 대한 각 호출은 continue_conversation=True 또는 ClaudeAgentOptions에서 resume을 전달하지 않는 한 이전 상호작용의 메모리 없이 새로 시작합니다. 세션을 참조하세요.

매개변수

반환값

대화에서 메시지를 생성하는 AsyncIterator[Message]를 반환합니다.

예제 - 옵션 포함

tool()

타입 안전성을 갖춘 MCP 도구를 정의하기 위한 데코레이터입니다.

매개변수

입력 스키마 옵션

  1. 간단한 타입 매핑 (권장):
  2. JSON Schema 형식 (복잡한 검증용):
  3. TypedDict 클래스: NotRequired 키가 required에서 제외되는 타입 지정 스키마입니다.
    • Python 3.11 이상: typing에서 TypedDict와 NotRequired를 가져옵니다.
    • Python 3.10: typing에는 NotRequired가 없습니다. SDK가 Python 3.10에 설치하는 typing_extensions에서 TypedDict와 NotRequired를 가져옵니다.
간단한 매핑 및 TypedDict 형식에서는 타입을 Annotated[type, "description"]으로 감싸 필드의 설명을 설정합니다.

반환값

도구 구현을 래핑하고 SdkMcpTool 인스턴스를 반환하는 데코레이터 함수입니다.

예제

ToolAnnotations

tool()의 annotations 인수로 전달되는 도구의 동작 힌트입니다. ToolAnnotations는 MCP SDK의 mcp.types.ToolAnnotations를 maxResultSizeChars 필드로 확장하며, 각 힌트를 camelCase 또는 snake_case로 작성할 수 있습니다: ToolAnnotations(readOnlyHint=True)와 ToolAnnotations(read_only_hint=True)는 동등합니다. 객체에서 힌트를 다시 읽으려면 설치된 mcp 패키지가 선언하는 표기를 사용합니다: mcp 1.x에서는 .readOnlyHint, 2.x에서는 .read_only_hint를 사용하며, .maxResultSizeChars는 두 버전 모두에서 작동합니다. SDK가 주석을 허용하는 곳에 일반 mcp.types.ToolAnnotations를 전달할 수도 있습니다. snake_case 이름과 타입이 지정된 maxResultSizeChars 필드는 Python Agent SDK 0.2.140 이상이 필요합니다. 버전 0.1.31부터 0.2.139까지는 mcp.types.ToolAnnotations를 변경하지 않고 다시 내보냅니다. 버전 0.1.55부터 0.2.139까지는 여전히 maxResultSizeChars를 키워드 인수로 전달할 수 있습니다: MCP 클래스는 추가 필드를 허용하고 SDK는 값을 Claude Code로 전달합니다. 모든 필드는 선택적입니다. 클라이언트는 보안 결정을 위해 힌트에 의존해서는 안 됩니다.

create_sdk_mcp_server()

Python 애플리케이션 내에서 실행되는 인프로세스 MCP 서버를 생성합니다.

매개변수

반환값

ClaudeAgentOptions.mcp_servers에 전달할 수 있는 McpSdkServerConfig 객체를 반환합니다.

예제

list_sessions()

메타데이터가 포함된 과거 세션을 나열합니다. 프로젝트 디렉토리로 필터링하거나 모든 프로젝트의 세션을 나열합니다. 동기식이며 즉시 반환됩니다.

매개변수

반환 타입: SDKSessionInfo

예제

프로젝트의 10개 최신 세션을 인쇄합니다. 결과는 last_modified 내림차순으로 정렬되므로 첫 번째 항목이 가장 최신입니다. directory를 생략하면 모든 프로젝트를 검색합니다.

get_session_messages()

과거 세션에서 메시지를 검색합니다. 동기식이며 즉시 반환됩니다.

매개변수

반환 타입: SessionMessage

예제

get_session_info()

전체 프로젝트 디렉토리를 스캔하지 않고 ID로 단일 세션의 메타데이터를 읽습니다. 동기식이며 즉시 반환됩니다.

매개변수

SDKSessionInfo를 반환하거나, 세션을 찾을 수 없으면 None을 반환합니다.

예제

프로젝트 디렉토리를 스캔하지 않고 단일 세션의 메타데이터를 조회합니다. 이전 실행에서 세션 ID를 이미 가지고 있을 때 유용합니다.

rename_session()

사용자 정의 제목 항목을 추가하여 세션의 이름을 바꿉니다. 반복 호출은 안전하며, 가장 최신 제목이 우선합니다. 동기식입니다.

매개변수

session_id가 유효한 UUID가 아니거나 title이 비어 있으면 ValueError를 발생시킵니다. 세션을 찾을 수 없으면 FileNotFoundError를 발생시킵니다.

예제

가장 최신 세션의 이름을 바꿔서 나중에 찾기 쉽게 합니다. 새 제목은 이후 읽기에서 SDKSessionInfo.custom_title에 나타납니다.

tag_session()

세션에 태그를 지정합니다. 태그를 지우려면 None을 전달합니다. 반복 호출은 안전하며, 가장 최신 태그가 우선합니다. 동기식입니다.

매개변수

session_id가 유효한 UUID가 아니거나 tag가 정규화 후 비어 있으면 ValueError를 발생시킵니다. 세션을 찾을 수 없으면 FileNotFoundError를 발생시킵니다.

예제

세션에 태그를 지정한 다음, 나중에 읽을 때 해당 태그로 필터링합니다. 기존 태그를 지우려면 None을 전달합니다.

fork_session()

세션의 트랜스크립트를 새 세션으로 복사하여, 원본은 그대로 유지하면서 대화를 다른 방향으로 이어갈 수 있습니다. 대화의 이전 지점에서 분기하려면 up_to_message_id를 전달합니다. 동기식입니다.

매개변수

session_id가 새 세션의 UUID인 ForkSessionResult를 반환합니다. 분기된 세션을 계속하려면 이 값을 resume으로 전달합니다. 분기된 세션에는 원본 세션의 파일 체크포인트가 포함되지 않으므로, 분기 이전에 캡처된 체크포인트로 되돌릴 수 없습니다. fork_session()은 다음 경우에 예외를 발생시킵니다:
  • ValueError: session_id 또는 up_to_message_id가 유효한 UUID가 아닌 경우
  • ValueError: 세션에 메시지가 없거나, up_to_message_id가 트랜스크립트의 어떤 메시지와도 일치하지 않는 경우
  • FileNotFoundError: 세션을 찾을 수 없는 경우

예제

가장 최신 세션을 새 제목으로 분기한 다음, 분기된 세션을 재개합니다. 원본 세션은 자체 기록을 유지합니다.

클래스

ClaudeSDKClient

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

메서드

컨텍스트 관리자 지원

클라이언트는 자동 연결 관리를 위한 비동기 컨텍스트 관리자로 사용할 수 있습니다.
중요: 메시지를 반복할 때, asyncio 정리 문제를 일으킬 수 있으므로 break를 사용하여 조기에 종료하지 마십시오. 대신 반복이 자연스럽게 완료되도록 하거나 플래그를 사용하여 필요한 것을 찾았을 때를 추적하십시오.

예제 - 대화 계속하기

예제 - ClaudeSDKClient를 사용한 스트리밍 입력

query()는 사용자 메시지 딕셔너리의 비동기 반복 가능 객체도 허용하므로, 전송 시간에 프롬프트를 조립하거나 이미지와 같은 콘텐츠 블록을 포함할 수 있습니다. Claude Code는 반복 가능 객체가 완료될 때까지 기다리지 않고 첫 번째 생성된 메시지가 도착하는 즉시 응답을 시작하며, receive_response()는 해당 응답을 종료하는 ResultMessage에서 중지됩니다. Claude가 답변하기 전에 읽어야 할 모든 것을 이 생성기처럼 하나의 메시지에 넣고, 각 query() 호출을 자신의 receive_response() 루프와 쌍을 이루십시오.

예제 - 중단 사용

중단 후 버퍼 동작: interrupt()는 중지 신호를 보내지만 메시지 버퍼를 지우지 않습니다. 중단된 작업에서 이미 생성된 메시지(해당 ResultMessage 포함)는 스트림에 남아 있습니다. 새 쿼리의 응답을 읽기 전에 receive_response()로 이들을 드레인해야 합니다. interrupt() 직후에 새 쿼리를 보내고 receive_response()를 한 번만 호출하면, 새 쿼리의 응답이 아닌 중단된 작업의 메시지를 받게 됩니다.

예제 - 고급 권한 제어

타입

@dataclass vs TypedDict: 이 SDK는 두 가지 종류의 타입을 사용합니다. @dataclass로 장식된 클래스 (ResultMessage, AgentDefinition, TextBlock)는 런타임에 객체 인스턴스이며 속성 접근을 지원합니다: msg.result. TypedDict로 정의된 클래스 (ThinkingConfigEnabled, McpStdioServerConfig, SyncHookJSONOutput)는 런타임에 일반 딕셔너리이며 키 접근이 필요합니다: config["budget_tokens"], config.budget_tokens가 아닙니다. ClassName(field=value) 호출 구문은 둘 다에서 작동하지만, dataclass만 속성이 있는 객체를 생성합니다.

SdkMcpTool

@tool 데코레이터로 생성된 SDK MCP 도구의 정의입니다.

Transport

사용자 정의 전송 구현을 위한 추상 기본 클래스입니다. 이를 사용하여 사용자 정의 채널 (예: 로컬 서브프로세스 대신 원격 연결)을 통해 Claude 프로세스와 통신합니다.
이것은 낮은 수준의 내부 API입니다. 인터페이스는 향후 릴리스에서 변경될 수 있습니다. 사용자 정의 구현은 인터페이스 변경에 맞게 업데이트되어야 합니다.
가져오기: from claude_agent_sdk import Transport

ClaudeAgentOptions

Claude Code 쿼리를 위한 구성 dataclass입니다.

느리거나 정지된 API 응답 처리

CLI 서브프로세스는 API 타임아웃 및 정지 감지를 제어하는 여러 환경 변수를 읽습니다. ClaudeAgentOptions.env를 통해 전달합니다:
  • API_TIMEOUT_MS: Anthropic 클라이언트의 요청당 타임아웃 (밀리초). 기본값 600000. 주 루프 및 모든 서브에이전트에 적용됩니다.
  • CLAUDE_CODE_MAX_RETRIES: 최대 API 재시도. 기본값 10, 최대 15로 제한됨. 각 재시도는 자체 API_TIMEOUT_MS 윈도우를 가집니다. 더 긴 중단을 기다려야 하는 무인 실행의 경우, CLAUDE_CODE_RETRY_WATCHDOG=1을 설정합니다. 이 설정은 일시적 용량 오류를 무한정 재시도하며, Claude Code v2.1.199 이상에서는 다른 일시적 오류의 기본값을 300으로 올리고 이 변수의 상한을 제거합니다.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: 서브에이전트의 정지 감시견. 스트림 감시견이 켜져 있는 동안 기본값은 CLAUDE_STREAM_IDLE_TIMEOUT_MS 더하기 5분이며, 이는 해당 변수를 올리지 않으면 600000입니다. 스트림 감시견이 꺼져 있으면 기본값은 600000입니다. v2.1.257 이전에는 기본값이 항상 600000이었습니다. 타이머는 각 스트림 이벤트에서 재설정됩니다. 정지 시 Claude Code는 서브에이전트를 중단하고 정지를 부모에게 보고합니다. 백그라운드 서브에이전트의 경우 작업을 실패로 표시하고 부분 결과를 첨부합니다.
  • CLAUDE_ENABLE_STREAM_WATCHDOG 및 CLAUDE_STREAM_IDLE_TIMEOUT_MS: 헤더가 도착했지만 응답 본문이 스트리밍을 중지할 때 요청을 중단하는 스트림 감시견. 감시견은 모든 공급자에 대해 기본적으로 켜져 있습니다. CLAUDE_ENABLE_STREAM_WATCHDOG=0으로 설정하여 비활성화합니다. CLAUDE_STREAM_IDLE_TIMEOUT_MS는 기본값 300000이고 해당 최소값으로 제한됩니다. 중단 후 자동 재시도는 응답이 얼마나 진행되었는지에 따라 Claude Code가 수행하는 작업을 다룹니다. 감시견이 ANTHROPIC_BASE_URL 뒤의 게이트웨이가 keep-alive ping으로 열어 두는 응답을 기다리는 동안, include_partial_messages를 설정한 호스트는 계속 ping StreamEvent 메시지를 수신합니다. 이 프레임을 침묵으로 인해 세션을 시간 초과시키는 대신 생존 신호로 읽습니다. v2.1.257 이전에는 마지막 실제 스트림 이벤트 후 5분 후에 프레임이 중지되었습니다.

OutputFormat

구조화된 출력 검증을 위한 구성입니다. 이를 ClaudeAgentOptions의 output_format 필드에 dict로 전달합니다:

SystemPromptPreset

선택적 추가 사항과 함께 Claude Code의 프리셋 시스템 프롬프트를 사용하기 위한 구성입니다.

SystemPromptCustom

system_prompt로 문자열을 전달하는 것과 동등한 객체 형식의 사용자 정의 시스템 프롬프트이며, snapshot도 설정할 수 있습니다. claude-agent-sdk v0.2.153 이상이 필요합니다.

SystemPromptFile

사용자 정의 시스템 프롬프트를 문자열로 전달하는 대신 파일에서 로드하기 위한 구성입니다. SDK는 이를 CLI --system-prompt-file 플래그에 매핑합니다. 프롬프트가 큰 경우 파일 형식을 사용합니다: SDK는 문자열 system_prompt를 CLI 서브프로세스 argv에 전달하며, 이는 SDK가 API 요청을 보내기 전에 OS 명령줄 길이 제한의 대상입니다. Linux에서 대략 128 KB보다 긴 단일 인수는 Argument list too long 오류로 프로세스 생성에 실패합니다. Windows에서는 전체 명령줄이 대략 32 KB로 제한되므로 문자열 형식은 더 낮은 임계값에서 실패합니다.

SettingSource

SDK가 설정을 로드하는 파일 시스템 기반 구성 소스를 제어합니다.

기본 동작

setting_sources가 생략되거나 None이고 skills가 설정되지 않은 경우, query()는 Claude Code CLI와 동일한 파일 시스템 설정을 로드합니다: 사용자, 프로젝트 및 로컬. skills 설정 시 setting_sources 행은 현재 기본값을 설명합니다. 엔드포인트 관리 정책은 모든 경우에 로드됩니다. 서버 관리 설정은 적격 구성에서 조직 자격 증명으로 세션이 인증될 때 가져옵니다. 자세한 내용은 settingSources가 제어하지 않는 항목을 참조하십시오.

setting_sources를 사용하는 이유

파일 시스템 설정 비활성화:
Python SDK 0.1.59 이하에서는 빈 목록이 옵션을 생략하는 것과 동일하게 처리되었으므로 setting_sources=[]는 파일 시스템 설정을 비활성화하지 않았습니다. 빈 목록이 적용되어야 하는 경우 최신 릴리스로 업그레이드하십시오. TypeScript SDK는 영향을 받지 않습니다.
특정 설정 소스만 로드:
SDK 전용 애플리케이션:
CLAUDE.md 프로젝트 지침을 로드하려면 setting_sources에 "project"를 포함합니다. 시스템 프롬프트 수정에서 CLAUDE.md 로딩이 시스템 프롬프트 옵션과 상호 작용하는 방식을 참조하십시오.

설정 우선순위

여러 소스가 로드될 때, 설정은 이 우선순위로 병합됩니다 (높음에서 낮음):
  1. 로컬 설정 (.claude/settings.local.json)
  2. 프로젝트 설정 (.claude/settings.json)
  3. 사용자 설정 (~/.claude/settings.json)
agents, allowed_tools 및 settings와 같은 프로그래밍 방식의 옵션은 사용자, 프로젝트 및 로컬 파일 시스템 설정을 재정의합니다. 관리형 정책 설정은 프로그래밍 방식의 옵션보다 우선합니다.

AgentDefinition

프로그래밍 방식으로 정의된 서브에이전트의 구성입니다.
AgentDefinition 필드 이름은 disallowedTools, permissionMode, maxTurns와 같은 camelCase를 사용합니다. 이 이름은 TypeScript SDK와 공유되는 와이어 형식에 직접 매핑됩니다. 이는 disallowed_tools 및 permission_mode와 같은 동등한 최상위 필드에 Python snake_case를 사용하는 ClaudeAgentOptions와 다릅니다. AgentDefinition은 dataclass이므로, snake_case 키워드를 전달하면 구성 시 TypeError를 발생시킵니다.

PermissionMode

도구 실행을 제어하기 위한 권한 모드입니다.

EffortLevel

사고 깊이를 안내하기 위한 effort 수준입니다.

CanUseTool

도구 권한 콜백 함수의 타입 별칭입니다.
콜백은 다음을 수신합니다:
  • tool_name: 호출되는 도구의 이름
  • input_data: 도구의 입력 매개변수
  • context: 추가 정보가 있는 ToolPermissionContext
PermissionResult (PermissionResultAllow 또는 PermissionResultDeny)를 반환합니다. 콜백은 대화형 권한 프롬프트의 SDK 대체입니다: 권한 평가 흐름이 프롬프트로 해결될 때만 호출됩니다. allowed_tools 항목, 설정 허용 규칙 또는 acceptEdits 또는 bypassPermissions와 같은 권한 모드로 이미 승인된 도구 호출은 이를 호출하지 않습니다. 모든 도구 호출을 제어하려면 PreToolUse 훅을 대신 사용합니다. 허용 규칙은 어떤 모드도 자동 승인하지 않는 작업을 사전 승인하지 않습니다. 이 중 어떤 작업이 콜백에 도달하는지, 그리고 dontAsk 및 auto 모드에서 어떤 일이 발생하는지는 권한 평가 방식을 참조하십시오.

ToolPermissionContext

도구 권한 콜백에 전달되는 컨텍스트 정보입니다.

PermissionResult

권한 콜백 결과의 합집합 타입입니다.

PermissionResultAllow

도구 호출이 허용되어야 함을 나타내는 결과입니다.

PermissionResultDeny

도구 호출이 거부되어야 함을 나타내는 결과입니다.

PermissionUpdate

프로그래밍 방식으로 권한을 업데이트하기 위한 구성입니다.

PermissionRuleValue

권한 업데이트에서 추가, 교체 또는 제거할 규칙입니다.

ToolsPreset

Claude Code의 기본 도구 세트를 사용하기 위한 프리셋 도구 구성입니다.

ThinkingConfig

확장 사고 동작을 제어합니다. 세 가지 구성의 합집합입니다:
선택적 display 필드는 사고 텍스트가 "summarized" 또는 "omitted"로 반환되는지 제어합니다. Claude Opus 4.7 이상에서 API 기본값은 "omitted"이므로, ThinkingBlock 출력에서 사고 콘텐츠를 받으려면 "summarized"를 설정합니다. Claude Code는 Amazon Bedrock 및 Google Cloud의 Agent Platform과 같은 일부 공급자에는 설정한 display 값을 전달하지 않습니다. 이러한 공급자에서 Opus 4.7 이상은 display를 "summarized"로 설정하더라도 빈 ThinkingBlock 출력을 반환합니다. 이들은 TypedDict 클래스이므로 런타임에 일반 dict입니다. dict 리터럴로 구성하거나 클래스를 생성자처럼 호출합니다. 둘 다 dict를 생성합니다. config.budget_tokens가 아닌 config["budget_tokens"]로 필드에 접근합니다:

TaskBudget

ClaudeAgentOptions의 task_budget 필드와 함께 사용되는 토큰 단위의 API 측 작업 예산입니다.
이것은 TypedDict이므로, ClaudeAgentOptions(task_budget={"total": 50000})과 같은 일반 dict로 전달합니다.

SdkBeta

SDK 베타 기능의 리터럴 타입입니다.
ClaudeAgentOptions의 betas 필드와 함께 사용하여 베타 기능을 활성화합니다.
Claude API에서 context-1m-2025-08-07 베타는 Claude Sonnet 4.5 및 Claude Sonnet 4에 대해 폐기되었습니다. 두 모델 중 하나와 함께 이를 계속 전달하면 표준 200K 토큰 컨텍스트 윈도우를 초과하는 요청이 오류를 반환하므로, betas에서 제거하십시오. 1M 토큰 컨텍스트 윈도우로 세션을 실행하려면 model을 claude-sonnet-5-5 또는 claude-opus-5-5와 같이 기본적으로 1M 윈도우로 실행되는 모델로 설정합니다. [1m] 변형을 통해서만 1M에 도달하는 모델의 경우 claude-opus-4-6[1m]처럼 모델 ID에 접미사를 추가합니다.

McpSdkServerConfig

create_sdk_mcp_server()로 생성된 SDK MCP 서버의 구성입니다.

McpServerConfig

MCP 서버 구성의 합집합 타입입니다.

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpServerStatusConfig

get_mcp_status()에서 보고한 MCP 서버의 구성입니다. 이것은 모든 McpServerConfig 전송 변형의 합집합에 claude.ai를 통해 프록시된 서버를 위한 출력 전용 claudeai-proxy 변형을 더한 것입니다.
McpSdkServerConfigStatus는 McpSdkServerConfig의 직렬화 가능한 형식이며 type ("sdk") 및 name (str) 필드만 있습니다. 인프로세스 instance는 생략됩니다. McpClaudeAIProxyServerConfig는 type ("claudeai-proxy"), url (str) 및 id (str) 필드를 가집니다.

McpStatusResponse

ClaudeSDKClient.get_mcp_status()의 응답입니다. 서버 상태 목록을 mcpServers 키 아래에 래핑합니다.

McpServerStatus

McpStatusResponse에 포함된 연결된 MCP 서버의 상태입니다.

ContextUsageResponse

ClaudeSDKClient.get_context_usage()의 응답입니다. 이것은 Claude Code가 대화형 세션에서 /context 명령을 위해 렌더링하는 것과 동일한 페이로드이므로, 토큰 수 외에도 Claude Code가 /context 사용량 그리드를 그리는 데 사용하는 color 및 gridRows와 같은 표시 필드를 포함합니다. Claude Code는 토큰 계산 API에 여러 요청을 보내 이 페이로드를 빌드합니다. 이 요청은 메시지 스트림에 나타나지 않으므로, 스트림을 읽는 비용 추적은 이를 보지 못합니다. Anthropic API에서 토큰 계산은 청구되지 않습니다.
각 ContextUsageCategory 항목은 name, tokens, color 및 선택적 isDeferred 플래그를 포함합니다. totalTokens는 세션의 현재 컨텍스트 사용량이고, maxTokens는 사용량이 측정되는 윈도우입니다. 해당 윈도우는 모델의 컨텍스트 윈도우이거나, 적용되는 경우 더 작은 자동 압축 윈도우이며, rawMaxTokens는 maxTokens와 동일한 값을 포함합니다. apiUsage는 세션의 실행 총계가 아닌 최신 API 응답의 사용량을 보유합니다. Claude Code는 선택적 deferredBuiltinTools, systemTools 및 systemPromptSections 키를 설정하지 않으므로, 타입이 이를 선언하더라도 이들이 없을 것으로 예상합니다.

SdkPluginConfig

SDK에서 플러그인을 로드하기 위한 구성입니다.
예제:
플러그인 생성 및 사용에 대한 완전한 정보는 플러그인을 참조하십시오.

메시지 타입

Message

모든 가능한 메시지의 합집합 타입입니다.

UserMessage

사용자 입력 메시지입니다.
SDK는 tool_use_result를 CLI에서 수정되지 않은 상태로 전달합니다. 결과에 resource_link 블록이 포함된 외부 MCP 서버의 도구의 경우, dict에는 TypeScript SDKMcpResourceLink 타입의 키를 가진 dict 목록을 보유하는 resourceLinks 키가 있습니다. Claude는 각 링크를 도구 결과의 텍스트 줄로 받습니다. 서버가 반환한 파일을 렌더링하려면 해당 텍스트를 구문 분석하는 대신 resourceLinks를 읽으십시오. resourceLinks 키는 Python Agent SDK 0.2.150 이상 및 Claude Code v2.1.257 이상이 필요합니다. 해당 SDK 버전과 함께 번들된 CLI는 Claude Code 요구 사항을 충족합니다. CLI는 결과에 링크가 없을 때와 서브에이전트의 결과에서 키를 생략합니다. CLI는 결과당 최대 50개의 링크를 유지하고 목록이 직렬화된 JSON의 64 KiB에 도달하면 링크 추가를 중지합니다. tool()로 정의한 도구는 SDK가 CLI가 결과를 보기 전에 resource_link 블록을 텍스트로 평탄화하기 때문에 키를 생성하지 않습니다.

AssistantMessage

콘텐츠 블록이 있는 어시스턴트 응답 메시지입니다.

AssistantMessageError

어시스턴트 메시지의 가능한 오류 타입입니다.
기본 CLI 프로세스는 이 Literal이 나열하지 않는 오류 타입을 발생시킬 수 있습니다 (예: max_output_tokens). SDK는 값을 수정되지 않은 상태로 전달하므로 이 목록 외의 문자열을 unknown처럼 처리하십시오. TypeScript SDKAssistantMessageError 타입은 CLI가 발생시킬 수 있는 전체 값 집합을 나열합니다.

SystemMessage

메타데이터가 있는 시스템 메시지입니다.
자체 데이터클래스가 없는 서브타입은 SystemMessage로 도착합니다. 턴 사이의 세션 상태를 추적하려면 CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1을 설정하고 subtype이 session_state_changed인 각 메시지에서 message.data["state"]를 읽으십시오. SDKSessionStateChangedMessage에 전달될 수 있는 상태가 나열되어 있습니다. 이를 읽으려면 receive_messages()로 반복하십시오. receive_response()는 ResultMessage에서 중지되며, session_state_changed 메시지는 해당 결과 뒤에 올 수 있습니다.

ResultMessage

비용 및 사용량 정보가 있는 최종 결과 메시지입니다.
subtype 필드는 다른 필드가 채워지는지 결정합니다. 이는 "success", "error_during_execution", "error_max_turns", "error_max_budget_usd" 또는 "error_max_structured_output_retries" 중 하나입니다. Python 데이터클래스는 모든 변형을 하나의 형태로 평탄화하므로 반환된 서브타입에 적용되지 않는 필드는 None입니다. 대화가 오류로 끝날 때 여러 필드가 진단 세부 정보를 전달합니다:
  • is_error: 대화가 오류 상태로 끝났을 때 True입니다. 항상 error_* 서브타입에서 True입니다. subtype="success"에서는 최종 모델 요청이 실패했을 때 True입니다. 즉, 에이전트 루프가 완료되었지만 마지막 API 호출이 오류를 반환했습니다.
  • api_error_status: 종료 API 오류의 HTTP 상태 코드입니다. 턴이 오류 없이 끝났을 때 None입니다. subtype="success"에서만 채워집니다.
  • result: subtype="success"에서 최종 어시스턴트 메시지의 텍스트이거나, error_* 서브타입에서 None입니다. subtype="success"이고 is_error=True일 때, 이는 사용 가능한 경우 API 오류 문자열을 보유하지만 비어 있을 수 있으므로 api_error_status와 이전 AssistantMessage 콘텐츠를 확인하십시오.
  • errors: 최대 턴 메시지와 같은 루프 수준 오류 문자열입니다. error_* 서브타입에서만 채워집니다.
  • terminal_reason: 쿼리 루프가 끝난 이유입니다 (예: "completed", "max_turns", "api_error", "aborted_streaming" 또는 "aborted_tools"). "aborted_streaming" 또는 "aborted_tools" 값은 턴이 완료되기 전에 중단되었음을 의미합니다. 일반적인 원인은 interrupt()와 interrupt=True를 사용하여 PermissionResultDeny를 반환하는 권한 콜백입니다. 이 필드가 도입되기 이전의 CLI 버전, 쿼리 루프를 우회하는 /voice 또는 /usage와 같은 로컬 명령의 결과, 또는 세션이 치명적으로 실패할 때 발생하는 합성 오류 결과에서는 None입니다. TypeScript SDK의 SDKResultMessage.terminal_reason을 미러링하며, 이는 전체 값 집합을 나열합니다.
  • origin: 이 턴을 트리거한 사용자 메시지의 출처입니다. 스트리밍 입력 모드에서 이를 확인하여 origin이 None 또는 {"kind": "human"}인 자신의 프롬프트 결과를 배경 작업 알림과 같은 주입된 턴의 결과와 구별하십시오. Python Agent SDK 0.2.137 이상이 필요합니다.
여러 백그라운드 작업이 비슷한 시점에 완료되면 Claude Code는 각 알림에 하나씩 턴을 사용하는 대신 하나의 턴에서 모든 알림에 응답할 수 있습니다. 이 경우에도 알림마다 하나의 ResultMessage를 순서대로 수신하며, 각각 kind가 "task-notification"인 origin을 가집니다. 마지막 것을 제외한 모든 결과는 num_turns가 0으로 설정되고 result가 비어 있으며, 마지막 결과가 모든 알림에 응답하는 턴을 전달합니다. usage dict는 주 에이전트 루프만 포함하고 서브에이전트 및 기타 중첩되거나 보조적인 모델 호출을 제외합니다. 스트리밍 입력 모드에서 값은 턴별입니다. 토큰 및 비용 회계의 경우 model_usage를 선호하십시오. usage dict는 존재할 때 다음 키를 포함합니다: model_usage dict는 모델 이름을 모델별 사용량에 매핑합니다. 이는 쿼리 파이프라인을 통해 수행된 모든 모델 호출을 포함합니다: 주 루프, 서브에이전트 및 압축 및 Workflow 에이전트와 같은 내부 호출입니다. 권한 분류기 및 토큰 계산 요청과 같은 해당 파이프라인 외부의 도우미 호출은 model_usage에서 제외됩니다. model_usage를 추정치로 취급하며, 청구 명세서가 아닙니다. 스트리밍 입력 모드에서 model_usage와 total_cost_usd는 턴 전체에 누적되므로 결과 전체를 합산하는 대신 최신 결과를 읽으십시오. 세션을 재설정하면 세션의 이전 호출에서 복원된 합계도 계산됩니다. 재설정이 실행 합계에 미치는 영향은 스트리밍 입력 모드에서 비용 추적을 참조하고 0으로 설정된 결과는 세션 충돌 후 합계 복구를 참조하십시오. model_usage의 각 값은 from claude_agent_sdk.types import ModelUsage를 통해 가져온 ModelUsage TypedDict입니다. 해당 키는 기본 CLI 프로세스에서 수정되지 않은 상태로 전달되는 값과 일치하는 TypeScript ModelUsage 타입과 일치하므로 camelCase를 사용합니다:

StreamEvent

스트리밍 중 부분 메시지 업데이트를 위한 스트림 이벤트입니다. ClaudeAgentOptions에서 include_partial_messages=True일 때만 수신됩니다. from claude_agent_sdk.types import StreamEvent를 통해 가져옵니다.

RateLimitEvent

속도 제한 상태가 변경될 때 발생합니다 (예: "allowed"에서 "allowed_warning"으로). 이를 사용하여 사용자에게 하드 제한에 도달하기 전에 경고하거나, 상태가 "rejected"일 때 백오프합니다.

RateLimitInfo

RateLimitEvent에 의해 전달되는 속도 제한 상태입니다.

ConversationResetMessage

/clear 후와 같이 연결을 종료하지 않고 대화가 교체될 때 발생합니다. 재설정이 나중의 ResultMessage 객체에 대한 실행 합계에 어떻게 영향을 미치는지는 스트리밍 입력 모드에서 비용 추적을 참조하십시오. Python Agent SDK 0.2.137 이상이 필요합니다.

TaskStartedMessage

백그라운드 작업이 시작될 때 발생합니다. 백그라운드 작업은 주 턴 외부에서 추적되는 모든 것입니다: 백그라운드 Bash 명령, Monitor 감시, Agent 도구를 통해 생성된 서브에이전트 또는 원격 에이전트입니다. task_type 필드가 어느 것인지 알려줍니다. 이 명명은 Task-to-Agent 도구 이름 변경과 무관합니다.

TaskUsage

백그라운드 작업의 토큰 및 타이밍 데이터입니다.

TaskProgressMessage

실행 중인 백그라운드 작업에 대한 진행 상황 업데이트로 주기적으로 발생합니다.

TaskNotificationMessage

백그라운드 작업이 완료, 실패 또는 중지될 때 발생합니다. 백그라운드 작업에는 run_in_background Bash 명령, Monitor 감시 및 백그라운드 서브에이전트가 포함됩니다.
CLI가 긴 MCP 도구 호출을 백그라운드로 이동할 때, 해당 호출의 도구 결과는 플레이스홀더만 보유하고 호출의 실제 결과는 이 메시지에 도착합니다. 그러한 호출에 대한 "completed" 알림에서 CLI는 도구가 참조로 반환한 파일을 나열하는 resource_links 키를 추가하며, UserMessage.tool_use_result의 resourceLinks 키와 동일한 항목 및 제한이 있습니다. resource_links 키는 Python Agent SDK 0.2.150 이상 및 Claude Code v2.1.257 이상이 필요합니다. 해당 SDK 버전과 함께 번들된 CLI는 Claude Code 요구 사항을 충족합니다. 데이터클래스에는 resource_links에 대한 필드가 없습니다. 메시지가 SystemMessage에서 상속하는 data dict에서 읽으십시오: message.data.get("resource_links"). tool_use_id로 알림을 호출과 일치시키십시오. CLI는 결과에 링크가 없을 때와 MCP 도구 호출이 아닌 작업의 알림에서 키를 생략합니다.

콘텐츠 블록 타입

ContentBlock

모든 콘텐츠 블록의 합집합 타입입니다.

TextBlock

텍스트 콘텐츠 블록입니다.

ThinkingBlock

생각 콘텐츠 블록입니다 (생각 기능이 있는 모델용).

ToolUseBlock

도구 사용 요청 블록입니다.

ToolResultBlock

도구 실행 결과 블록입니다.

오류 타입

아래의 타입들은 코드가 포착하는 내용을 정의합니다. 이러한 타입이 발생시키는 오류 메시지, 원인 및 각 오류의 해결 방법에 대한 항목은 문제 해결을 참조하십시오.

ClaudeSDKError

모든 SDK 오류의 기본 예외 클래스입니다.
단일 query()가 오류 결과로 끝나면(예: 턴 제한 오류) SDK는 ResultError를 발생시킵니다.

CLINotFoundError

Claude Code CLI가 설치되지 않았거나 찾을 수 없을 때 발생합니다.

CLIConnectionError

Claude Code 연결이 실패할 때 발생합니다.

ProcessError

Claude Code 프로세스가 실패할 때 발생합니다.

ResultError

턴 제한 오류 또는 API 오류와 같은 오류 결과 메시지로 실행이 끝나 Claude Code 프로세스가 종료될 때 발생합니다. ResultError는 ProcessError의 서브클래스이므로 기존 except ProcessError 핸들러도 이를 포착합니다. 해당 속성은 결과 메시지의 필드를 포함하므로 메시지 텍스트를 구문 분석하지 않고도 실행이 실패한 이유에 따라 분기할 수 있습니다. Python Agent SDK 0.2.140 이상이 필요합니다.
실패를 구분하려면 subtype 전에 terminal_reason을 확인하십시오. API 오류와 같은 최종 요청이 실패하면 Claude Code는 subtype "success"를 보고하고 원인을 terminal_reason에 표시합니다(예: "api_error"). 설정한 제한(예: max_turns 또는 max_budget_usd)이 실행을 종료하면 error_* 서브타입을 보고합니다.

CLIJSONDecodeError

JSON 구문 분석이 실패할 때 발생합니다.

Hook 타입

hooks 사용에 대한 포괄적인 가이드, 예제 및 일반적인 패턴은 Hooks 가이드를 참조하십시오.

HookEvent

지원되는 hook 이벤트 타입입니다.
TypeScript SDK는 Python에서 아직 사용할 수 없는 추가 hook 이벤트를 지원합니다. SDK별 지원에 대해서는 hook 가용성 표를 참조하십시오.

HookCallback

hook 콜백 함수의 타입 정의입니다.
매개변수:
  • input: hook_event_name을 기반으로 한 판별된 합집합이 있는 강타입 훅 입력 (HookInput 참조)
  • tool_use_id: 선택적 도구 사용 식별자 (도구 관련 hooks의 경우)
  • context: 추가 정보가 있는 hook 컨텍스트
HookJSONOutput을 반환합니다.

HookContext

hook 콜백에 전달되는 컨텍스트 정보입니다.

HookMatcher

특정 이벤트 또는 도구에 hooks를 일치시키기 위한 구성입니다.

HookInput

모든 hook 입력 타입의 합집합 타입입니다. 실제 타입은 hook_event_name 필드에 따라 달라집니다.

BaseHookInput

모든 hook 입력 타입에 존재하는 기본 필드입니다.

PreToolUseHookInput

PreToolUse hook 이벤트의 입력 데이터입니다.

PostToolUseHookInput

PostToolUse hook 이벤트의 입력 데이터입니다.

PostToolUseFailureHookInput

PostToolUseFailure hook 이벤트의 입력 데이터입니다. 도구 실행이 실패할 때 호출됩니다.

UserPromptSubmitHookInput

UserPromptSubmit hook 이벤트의 입력 데이터입니다.

StopHookInput

Stop hook 이벤트의 입력 데이터입니다.

SubagentStopHookInput

SubagentStop hook 이벤트의 입력 데이터입니다.

PreCompactHookInput

PreCompact hook 이벤트의 입력 데이터입니다.

NotificationHookInput

Notification hook 이벤트의 입력 데이터입니다.

SubagentStartHookInput

SubagentStart hook 이벤트의 입력 데이터입니다.

PermissionRequestHookInput

PermissionRequest hook 이벤트의 입력 데이터입니다. hooks가 프로그래밍 방식으로 권한 결정을 처리할 수 있습니다.

HookJSONOutput

hook 콜백 반환 값의 합집합 타입입니다.

SyncHookJSONOutput

제어 및 결정 필드가 있는 동기식 hook 출력입니다.
Python 코드에서 continue_ (언더스코어 포함)를 사용합니다. CLI로 전송할 때 자동으로 continue로 변환됩니다.

HookSpecificOutput

이벤트 특정 출력 타입의 판별된 합집합입니다. hookEventName 필드가 어느 필드가 유효한지 결정합니다. hook 이벤트별 사용 가능한 필드에 대한 전체 세부 정보는 hooks로 실행 제어를 참조하십시오.

AsyncHookJSONOutput

hook 실행을 연기하는 비동기 hook 출력입니다.
Python 코드에서 async_ (언더스코어 포함)를 사용합니다. CLI로 전송할 때 자동으로 async로 변환됩니다.

Hook 사용 예제

이 예제는 두 개의 hooks를 등록합니다: rm -rf /와 같은 위험한 bash 명령을 차단하는 하나, 감사를 위해 모든 도구 사용을 기록하는 다른 하나. 보안 hook은 matcher를 통해 Bash 명령에서만 실행되고, 로깅 hook은 모든 도구에서 실행됩니다.

도구 입력/출력 타입

기본 제공 Claude Code 도구의 입력/출력 스키마 문서입니다. Python SDK는 이들을 타입으로 내보내지 않지만, 메시지의 도구 입력 및 출력 구조를 나타냅니다. 각 출력은 해당 도구에 대해 UserMessage.tool_use_result에서 읽는 값입니다. 키 이름은 Claude Code가 내보내는 그대로 나타납니다. | None으로 주석이 달린 키와 “present when” 또는 “optional” 주석이 있는 키는 적용되지 않을 때 생략됩니다.

Agent

도구 이름: Agent. 이전 이름 Task는 여전히 별칭으로 허용되며, init SystemMessage의 tools 목록은 하위 호환성을 위해 이 도구를 Task로 보고합니다. 입력:
복잡한 다단계 작업을 자율적으로 처리하기 위해 새로운 에이전트를 시작합니다. 출력 (상태: "completed"):
출력 (상태: "async_launched"):
출력 (상태: "remote_launched"):
서브에이전트의 결과를 반환합니다. 출력은 status 필드에서 구분됩니다: 완료된 작업의 경우 "completed", 백그라운드 작업의 경우 "async_launched", Claude Code가 클라우드 세션으로 전달한 작업의 경우 "remote_launched". sessionUrl은 해당 세션으로 연결되고 taskId는 이를 식별합니다. Claude Code가 서브에이전트의 격리된 worktree를 유지한 경우, completed 변형의 worktreePath는 이를 찾을 수 있는 위치이고, worktreeBranch는 Claude Code가 git으로 worktree를 생성했을 때의 브랜치입니다. completed 변형에서 resolvedModel은 서브에이전트가 시작한 모델을 이름 지으며, 이는 availableModels 또는 다른 재정의가 적용될 때 요청된 model 입력과 다를 수 있습니다. 이 필드는 Claude Code v2.1.174 이상이 필요합니다. async_launched 변형에서 resolvedModel은 에이전트가 백그라운드로 이동했을 때 사용 중인 모델을 이름 지으므로, 백그라운드 전환 전에 발생한 스왑이 반영됩니다. modelsUsed 필드는 두 변형 모두에서 순서대로 사용된 모델을 나열하며, 연속 반복은 축소됩니다. 실행 중에 모델이 교체되었을 때만 설정됩니다. modelsUsed와 백그라운드 시간 resolvedModel 동작은 Claude Code v2.1.212 이상이 필요합니다. Claude Code는 전체 실행이 아닌 서브에이전트의 최종 API 요청에서 usage와 totalTokens를 채웁니다. 존재할 때, usage의 output_tokens_details 아래 thinking_tokens은 해당 요청의 출력 토큰 중 사고 토큰의 수입니다. output_tokens_details 키는 Claude Code v2.1.228을 번들로 하는 Python SDK v0.2.136 이상이 필요합니다. fallback_credit 키는 Claude Code v2.1.285를 번들로 하는 Python SDK v0.2.162 이상이 필요합니다.

AskUserQuestion

도구 이름: AskUserQuestion 실행 중에 사용자에게 명확히 하는 질문을 합니다. 사용 세부 정보는 승인 및 사용자 입력 처리를 참조하십시오. 입력:
출력:

Bash

도구 이름: Bash 전경 상한선을 설정하는 것에 대해서는 타임아웃 및 출력 제한을 참조하십시오. 백그라운드 시간 제한에 대해서는 백그라운드 명령의 시간 제한을 참조하십시오. 입력:
출력:

Monitor

도구 이름: Monitor 백그라운드 소스를 실행하고 각 이벤트를 Claude에 전달하여 폴링 없이 반응할 수 있도록 합니다. command는 스크립트를 실행하고 stdout 줄당 하나의 이벤트를 내보내며, ws는 WebSocket을 열고 텍스트 프레임당 하나의 이벤트를 내보냅니다. command 또는 ws 중 정확히 하나를 제공하십시오. Monitor가 명령을 실행할 때, Bash와 동일한 권한 규칙을 따릅니다. WebSocket 감시는 별도로 승인을 요청합니다. ws 소스는 Claude Code v2.1.195 이상이 필요합니다. 동작 및 제공자 가용성은 Monitor 도구 참조를 참조하십시오. 입력:
출력:

Edit

도구 이름: Edit 입력:
출력:

Read

도구 이름: Read 입력:
Claude가 읽은 내용에 따라 출력은 다음 형태 중 하나를 취합니다. type 키를 확인하여 구분하십시오. 출력 (type: "text"):
출력 (type: "image"):
출력 (type: "notebook"):
출력 (type: "pdf"):
출력 (type: "parts"):
출력 (type: "file_unchanged"):

Write

도구 이름: Write 입력:
출력:

Glob

도구 이름: Glob 입력:
출력:
totalMatches와 countIsComplete는 Claude Code v2.1.191 이상이 필요합니다.

Grep

도구 이름: Grep 입력:
출력:
Grep은 각 출력 모드에서 이 dict 형태를 반환합니다. 어떤 선택적 키가 표시되는지는 output_mode에 따라 다릅니다. totalFiles는 Claude Code v2.1.208 이상이 필요합니다. totalLines는 Claude Code v2.1.210 이상이 필요합니다.

NotebookEdit

도구 이름: NotebookEdit 입력:
출력:

WebFetch

도구 이름: WebFetch 입력:
출력:

WebSearch

도구 이름: WebSearch 입력:
출력:

TodoWrite

도구 이름: TodoWrite
다음 도구는 Claude Opus 4.7, Claude Sonnet 4.6, Claude Haiku 4.5 및 이전 모델에서만 기본적으로 사용 가능합니다. 다른 모든 모델(Claude Code가 인식하지 못하는 모델 ID 포함)에서는 옵트인하지 않는 한 사용할 수 없습니다:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
도구를 사용할 수 있는 모든 곳에서 Claude Code는 4개의 Task 도구를 제공하거나, CLAUDE_CODE_ENABLE_TASKS=0을 설정할 때 TodoWrite를 대신 제공합니다.이 기본 집합은 Claude Code v2.1.268 이상에 적용되며, TypeScript Agent SDK는 v0.3.268부터 이를 번들로 제공합니다.모델 가용성을 참조하여 옵트인하십시오.
입력:
출력:

TaskCreate

도구 이름: TaskCreate 입력:
출력:

TaskUpdate

도구 이름: TaskUpdate 입력:
출력:

TaskGet

도구 이름: TaskGet 입력:
출력:

TaskList

도구 이름: TaskList 입력:
출력:

TaskOutput

Claude Code v2.1.277에서 제거되었습니다. 이전에는 실행 중이거나 완료된 백그라운드 작업의 출력을 검색했으며, BashOutput은 별칭으로 허용되었습니다. 이제 Claude는 Read를 사용하여 백그라운드 작업의 출력 파일을 읽습니다. disallowed_tools 항목 또는 두 이름 중 하나를 여전히 지정하는 거부 규칙은 경고 없이 무시됩니다.

TaskStop

도구 이름: TaskStop. 이전 이름 KillShell과 KillBash는 여전히 별칭으로 허용됩니다. 입력:
출력:

ExitPlanMode

도구 이름: ExitPlanMode 입력:
출력:

ListMcpResources

도구 이름: ListMcpResourcesTool 입력:
결과는 dict가 아닌 list이므로, tool_use_result는 이 도구에 대해 list를 보유합니다. 출력:

ReadMcpResource

도구 이름: ReadMcpResourceTool 입력:
출력:

지속적인 대화 인터페이스 구축

다음 예제는 하나의 ClaudeSDKClient를 여러 턴에 걸쳐 연결된 상태로 유지하므로 Claude가 이전 메시지를 기억합니다. new를 입력하여 연결을 해제하고 다시 연결하여 새로운 세션을 시작하거나, exit를 입력하여 대화를 종료합니다.

오류 처리

다음 예제는 query() 호출을 SDK가 발생시키는 오류 유형 중 네 가지에 대한 핸들러로 래핑합니다. 이 예제는 Python Agent SDK 0.2.140 이상이 필요한 ResultError를 캐치합니다.

샌드박스 구성

SandboxSettings

샌드박스 동작을 위한 구성입니다. 이를 사용하여 명령 샌드박싱을 활성화하고 프로그래밍 방식으로 네트워크 제한을 구성합니다.
샌드박스는 플랫폼 지원에 따라 달라지며, Linux에서는 bubblewrap 및 socat과 같은 도구가 필요합니다. 기본적으로 enabled가 True이지만 샌드박스를 시작할 수 없을 때, 명령은 stderr에 경고와 함께 샌드박스되지 않은 상태로 실행됩니다. 이 기본값은 failIfUnavailable이 true로 기본 설정되는 TypeScript SDK와 다릅니다.대신 중지하려면 샌드박스 설정에서 "failIfUnavailable": True를 설정하십시오. SDK는 선언된 SandboxSettings 필드와 함께 failIfUnavailable을 Claude Code로 전달합니다. 그러면 query()는 subtype="error_during_execution"과 errors의 이유를 포함한 ResultMessage를 보고합니다. 이것이 단일 샷 query() 호출이므로, SDK는 해당 오류 결과를 생성한 후 발생시키므로, 루프를 try 블록으로 감싸서 이를 지나 계속 진행하십시오. 결과 처리에서 오류 계약을 참조하십시오.
샌드박스된 명령이 파일에 쓰지 못하도록 하려면, 샌드박스 설정의 denyWrite 아래에 해당 파일의 절대 경로를 나열하십시오(예: "filesystem": {"denyWrite": ["/home/user/project/.env"]}). SDK는 선언된 SandboxSettings 필드와 함께 filesystem을 Claude Code로 전달합니다. 샌드박스가 시작되면 나열된 각 절대 경로에 대한 쓰기를 차단합니다.

사용 예제

Unix 소켓 보안: allowUnixSockets 옵션은 샌드박스 외부에 도달하는 시스템 서비스에 대한 접근을 부여할 수 있습니다. 예를 들어, /var/run/docker.sock을 허용하면 Docker API를 통해 샌드박스 격리를 우회하여 전체 호스트 시스템 접근을 효과적으로 부여합니다. 엄격히 필요한 Unix 소켓만 허용하고 각각의 보안 영향을 이해하십시오.

SandboxNetworkConfig

샌드박스 모드를 위한 네트워크 특정 구성입니다. 이러한 설정은 부모 SandboxSettings에서 enabled가 True일 때 샌드박스된 Bash 명령에 적용됩니다. 이들은 권한 규칙을 대신 사용하는 WebFetch 도구를 제한하지 않습니다.
기본 제공 샌드박스 프록시는 요청된 호스트명을 기반으로 네트워크 허용 목록을 적용하며 TLS 트래픽을 종료하거나 검사하지 않으므로, 도메인 프론팅과 같은 기술이 이를 우회할 수 있습니다. 자세한 내용은 샌드박싱 보안 제한 사항을 참조하고, TLS 종료 프록시 구성은 안전한 배포를 참조하십시오.

SandboxIgnoreViolations

특정 샌드박스 위반을 무시하기 위한 구성입니다.

샌드박스되지 않은 명령을 위한 권한 폴백

allowUnsandboxedCommands가 활성화되면, 모델은 도구 입력에서 dangerouslyDisableSandbox: True를 설정하여 샌드박스 외부에서 명령 실행을 요청할 수 있습니다. 이러한 요청은 기존 권한 시스템으로 폴백되므로, can_use_tool 핸들러가 호출되어 사용자 정의 인증 로직을 구현할 수 있습니다. excludedCommands 항목은 대신 모델 개입 없이 샌드박스를 우회합니다. sandbox.excludedCommands에서 항목이 적용되는 시기를 다룹니다. 다음 예제는 각 샌드박스되지 않은 요청을 로깅하고 사용자 정의 인증 로직이 허용하지 않으면 거부합니다:
dangerouslyDisableSandbox: True로 실행되는 명령은 전체 시스템 접근 권한이 있습니다. can_use_tool 핸들러가 이러한 요청을 신중하게 검증하는지 확인하십시오.permission_mode가 bypassPermissions로 설정되고 allowUnsandboxedCommands가 활성화되면, 모델은 모드가 자동 승인하지 않는 작업을 제외하고 승인 프롬프트 없이 샌드박스 외부에서 명령을 자동으로 실행할 수 있습니다. 이 조합은 모델이 샌드박스 격리를 조용히 탈출할 수 있도록 효과적으로 허용합니다.

참고 항목