메인 콘텐츠로 건너뛰기

설치

최근 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: 각 요청 시도가 응답 헤더를 기다릴 수 있는 시간 (밀리초). 헤더가 도착한 후 스트리밍 응답이 실행되는 시간은 제한하지 않습니다. 기본값 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는 권한 평가 흐름이 프롬프트로 귀결될 때 can_use_tool을 호출합니다. 다음 두 가지 방식 중 하나로 승인된 호출은 can_use_tool을 호출하지 않고 실행됩니다:
  • allowed_tools 항목 또는 설정 허용 규칙이 승인하는 호출
  • 권한 모드가 승인하는 호출 (예: acceptEdits 모드에서의 파일 편집)
이러한 호출을 검사하려면 해당 호출에 대해서도 실행되는 PreToolUse 훅을 사용합니다. 허용 규칙은 어떤 모드도 자동 승인하지 않는 작업을 사전 승인하지 않습니다. 이 중 어떤 작업이 콜백에 도달하는지, 그리고 dontAsk 및 auto 모드에서 어떤 일이 발생하는지는 권한 평가 방식을 참조하십시오.

ToolPermissionContext

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

PermissionResult

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

PermissionResultAllow

도구 호출이 허용되어야 함을 나타내는 결과입니다.
updated_permissions에 4,096개를 초과하는 항목이 포함된 PermissionResultAllow를 반환하면 Claude Code는 결과를 유효하지 않은 것으로 처리하고 도구 호출을 거부합니다. 각 PermissionUpdate는 하나의 항목으로 계산되며, 해당 rules 또는 directories 목록의 각 항목도 마찬가지입니다. 거부 메시지는 updatedPermissions may hold at most 4096 updates, rules and directories in all.로 끝납니다. 거부를 피하려면 4,096개 이하의 항목을 반환하십시오.

PermissionResultDeny

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

PermissionUpdate

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

PermissionRuleValue

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

ToolsPreset

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

ThinkingConfig

확장 사고 동작을 제어합니다. 세 가지 구성의 합집합입니다:
선택적 display 필드는 사고 텍스트가 "summarized" 또는 "omitted"로 반환되는지 제어합니다. Claude Opus 4.7 이상에서 API 기본값은 "omitted"이므로, ThinkingBlock 출력에서 사고 콘텐츠를 받으려면 "summarized"를 설정합니다. Amazon Bedrock 및 Google Cloud의 Agent Platform과 같은 공급자에서 Claude Code는 인식하는 이전 모델에 대해 display를 전달하지 않습니다. 해당 모델은 Opus 4.6, Sonnet 4.6, Haiku 4.5 및 그 이전 모델이며, 이들은 자체 기본값을 사용합니다. 이들은 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에서 수정 없이 그대로 전달합니다. 외부 MCP 서버의 도구 결과에 resource_link 블록이 포함된 경우, 이 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 프로세스는 max_output_tokens처럼 이 Literal에 나열되지 않은 오류 유형을 내보낼 수 있습니다. SDK는 값을 수정 없이 그대로 전달하므로, 이 목록에 없는 문자열은 unknown과 동일하게 처리하십시오. TypeScript SDKAssistantMessageError 타입에는 CLI가 내보낼 수 있는 전체 값 목록이 나와 있습니다.

SystemMessage

메타데이터가 포함된 시스템 메시지입니다.
자체 dataclass가 없는 하위 유형은 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 dataclass는 모든 변형을 하나의 형태로 평탄화하므로, 반환된 하위 유형에 해당하지 않는 필드는 None입니다. 여러 필드가 대화 종료 방식에 대한 진단 정보를 담고 있습니다.
  • is_error: 대화가 오류 상태로 종료된 경우 True입니다. error_* 하위 유형에서는 항상 True입니다. subtype="success"에서는 세 가지 경우에 True입니다. stop_reason을 확인하여 구분하십시오.
    • "refusal": 모델이 응답을 거부했습니다. 거부 텍스트는 result에서 읽거나, result가 비어 있으면 직전 AssistantMessage에서 읽으십시오.
    • "tool_deferred_unavailable": 세션을 재개했을 때 지연된 도구를 더 이상 사용할 수 없었습니다. 예를 들어 해당 MCP 서버가 연결되지 않은 경우입니다. 아래 두 경우에서, 재개 후 보내는 프롬프트는 재개와 함께 전달한 프롬프트와 동일하게 취급됩니다.
      • 프롬프트 없음: 호출은 여전히 보류 중입니다. 도구를 사용할 수 있게 한 뒤 프롬프트 없이 다시 재개하면 해당 호출이 먼저 실행됩니다.
      • 프롬프트 있음: Claude Code는 도구 결과 없이 프롬프트에 답하며, 지연된 호출은 사라집니다. 여전히 도구 호출이 필요하다면 새 프롬프트를 보내십시오.
    • 그 외의 값: 모델 응답 대신 Claude Code가 보고한 오류(예: API 오류)로 턴이 종료되었습니다. 원인은 terminal_reason에서, 메시지는 result에서, API가 HTTP 상태를 반환한 경우 해당 상태는 api_error_status에서 읽으십시오.
  • 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를 순서대로 받으며, 각각의 origin은 kind가 "task-notification"입니다. 마지막을 제외한 모든 메시지는 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입니다. SDK가 기반 CLI 프로세스의 값을 수정 없이 그대로 전달하기 때문에 키는 camelCase를 사용하며, TypeScript ModelUsage 타입과 일치합니다.

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에서 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 요구 사항을 충족합니다. dataclass에는 resource_links에 대한 필드가 없습니다. 메시지가 SystemMessage로부터 상속한 data dict에서 message.data.get("resource_links")로 읽으십시오. tool_use_id로 알림과 호출을 매칭하십시오. 결과에 링크가 없었거나 MCP 도구 호출이 아닌 작업에 대한 알림인 경우 CLI는 이 키를 생략합니다.

콘텐츠 블록 타입

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 이상이 필요합니다.
실패를 구분하려면 먼저 data["stop_reason"]을 확인한 다음 terminal_reason, 그다음 subtype을 확인하십시오. 거부된 응답은 stop_reason이 "refusal"이며 일반적으로 subtype은 "success"입니다. 이 경우 terminal_reason만으로는 거부를 식별할 수 없으며 값이 "completed" 또는 "api_error"일 수 있습니다. 최종 요청이 실패하면 subtype은 "success"이고 원인은 terminal_reason에 표시됩니다(예: API 오류의 경우 "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를 일치시키기 위한 구성입니다.
on_failure가 적용되는 범위를 판단하려면 콜백이 실패할 때 작업 차단을 참조하십시오.

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

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

AsyncHookJSONOutput

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

Hook 사용 예제

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

도구 입력/출력 타입

기본 제공 Claude Code 도구의 입력/출력 스키마에 대한 문서입니다. Python SDK는 이를 타입으로 export하지 않지만, 이 스키마는 메시지에 포함된 도구 입력과 출력의 구조를 나타냅니다. 아래에 표시된 각 출력은 해당 도구에 대해 UserMessage.tool_use_result에서 읽는 값입니다. 키 이름은 Claude Code가 내보내는 그대로 표시됩니다. | None으로 표시되고 “present when” 또는 “optional” 주석이 달린 키는 해당되지 않을 때 생략됩니다.

Agent

도구 이름: Agent. 이 도구를 세션에서 사용할 수 있는 경우 이전 이름인 Task도 별칭으로 계속 허용됩니다. init SystemMessage의 tools 목록은 하위 호환성을 위해 이 도구를 Task로 보고합니다. 입력:
복잡한 다단계 작업을 자율적으로 처리하기 위해 새 에이전트를 실행합니다. Claude가 Agent 호출에서 run_in_background를 생략하면, 기본적으로 메인 에이전트는 새 에이전트를 기다리지 않고 서브에이전트는 기다립니다.
  • 메인 에이전트에서 호출한 경우: 새 에이전트가 백그라운드에서 실행되며, 결과에는 status: "async_launched"가 포함됩니다. 메인 에이전트가 대신 새 에이전트를 기다리게 하려면 Claude가 서브에이전트를 기다릴지 선택하기를 참조하세요.
  • 서브에이전트 중 하나에서 호출한 경우: 호출한 서브에이전트가 새 에이전트를 기다립니다. 새 에이전트의 정의에서 background를 True로 설정하거나, CLAUDE_CODE_FORK_SUBAGENT를 0으로 설정하여 fork 모드를 끄면 새 에이전트가 대신 백그라운드에서 실행됩니다.
Python SDK v0.2.169 이전에는 서브에이전트가 시작한 에이전트도 기본적으로 백그라운드에서 실행되었습니다. 해당 릴리스는 Claude Code v2.1.302 이상을 번들로 포함하는 첫 번째 릴리스입니다. 출력 (status: "completed"):
출력 (status: "async_launched"):
출력 (status: "remote_launched"):
서브에이전트의 결과를 반환합니다. 출력은 status 필드로 구분됩니다. 완료된 작업은 "completed", 백그라운드 작업은 "async_launched", Claude Code가 클라우드 세션으로 디스패치한 작업은 "remote_launched"이며, 이 경우 sessionUrl은 해당 세션으로 연결되고 taskId는 해당 세션을 식별합니다. Claude Code가 서브에이전트의 격리된 worktree를 유지한 경우, completed 변형의 worktreePath는 해당 worktree의 위치이며, Claude Code가 git으로 worktree를 생성한 경우 worktreeBranch는 해당 브랜치입니다. completed 변형에서 resolvedModel은 서브에이전트가 시작할 때 사용한 모델을 나타내며, availableModels 또는 다른 재정의가 적용되는 경우 요청된 model 입력과 다를 수 있습니다. 이 필드는 Claude Code v2.1.174 이상이 필요합니다. async_launched 변형에서 resolvedModel은 에이전트가 백그라운드로 전환될 때 사용 중이던 모델을 나타내므로, 백그라운드 전환 전에 발생한 모델 교체가 여기에 반영됩니다. 두 변형 모두의 modelsUsed 필드는 사용된 모델을 순서대로 나열하며 연속 중복은 하나로 합칩니다. 이 필드는 실행 도중 모델이 교체된 경우에만 설정됩니다. modelsUsed와 백그라운드 전환 시점의 resolvedModel 동작은 Claude Code v2.1.212 이상이 필요합니다. Claude Code는 usage와 totalTokens를 전체 실행이 아닌 서브에이전트의 마지막 API 요청을 기준으로 채웁니다. 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 중 정확히 하나만 제공하세요. ws 소스는 Claude Code v2.1.195 이상이 필요합니다. Monitor가 명령을 실행할 때는 Bash와 동일한 권한 규칙을 따릅니다. WebSocket 권한, 동작, 제공업체별 사용 가능 여부는 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는 권한 규칙, 훅 matcher, 그리고 tools, allowed_tools, disallowed_tools 옵션에서 계속 사용할 수 있습니다. 입력:
출력:

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

샌드박스의 위반 보고서에서 제외할 위반입니다. 각 키는 명령의 일부와 일치하거나 모든 명령을 나타내는 *이며, 각 값은 위반 줄에서 일치시킬 텍스트를 나열합니다. {"*": ["/etc/hosts"]}는 /etc/hosts를 언급하는 위반을 숨깁니다. 일치하는 접근은 여전히 차단됩니다. sandbox.ignoreViolations를 참조하십시오.

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

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

참고 항목