메인 콘텐츠로 건너뛰기

설치

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

query()ClaudeSDKClient 중 선택하기

Python SDK는 Claude Code와 상호작용하는 두 가지 방법을 제공합니다.

빠른 비교

query() 사용 시기 (일회성 작업)

최적의 경우:
  • 대화 기록이 필요 없는 일회성 질문
  • 이전 교환의 컨텍스트가 필요 없는 독립적인 작업
  • 간단한 자동화 스크립트
  • 매번 새로 시작하고 싶을 때

ClaudeSDKClient 사용 시기 (지속적인 대화)

최적의 경우:
  • 대화 계속하기 - Claude가 컨텍스트를 기억해야 할 때
  • 후속 질문 - 이전 응답을 기반으로 구축
  • 대화형 애플리케이션 - 채팅 인터페이스, REPL
  • 응답 기반 로직 - 다음 작업이 Claude의 응답에 따라 달라질 때
  • 세션 제어 - 대화 수명 주기를 명시적으로 관리

함수

query()

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

매개변수

반환값

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

예제 - 옵션 포함

tool()

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

매개변수

입력 스키마 옵션

  1. 간단한 타입 매핑 (권장):
  2. JSON Schema 형식 (복잡한 검증용):

반환값

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

예제

ToolAnnotations

mcp.types에서 다시 내보낸 것입니다 (from claude_agent_sdk import ToolAnnotations로도 사용 가능). 모든 필드는 선택적 힌트이며, 클라이언트는 보안 결정을 위해 이에 의존해서는 안 됩니다.

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을 전달합니다.

클래스

ClaudeSDKClient

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

주요 기능

  • 세션 연속성: 여러 query() 호출에 걸쳐 대화 컨텍스트 유지
  • 동일한 대화: 세션이 이전 메시지를 유지합니다
  • 중단 지원: 작업 중간에 실행을 중지할 수 있습니다
  • 명시적 수명 주기: 세션이 시작되고 끝나는 시점을 제어합니다
  • 응답 기반 흐름: 응답에 반응하고 후속 조치를 보낼 수 있습니다
  • 사용자 정의 도구 및 hooks: 사용자 정의 도구 (@tool 데코레이터로 생성) 및 hooks를 지원합니다

메서드

컨텍스트 관리자 지원

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

예제 - 대화 계속하기

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

예제 - 중단 사용

중단 후 버퍼 동작: interrupt()는 중지 신호를 보내지만 메시지 버퍼를 지우지 않습니다. 중단된 작업에서 이미 생성된 메시지 (해당 ResultMessage 포함, subtype="error_during_execution")는 스트림에 남아 있습니다. 새 쿼리의 응답을 읽기 전에 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 윈도우를 가지므로, 최악의 경우 벽시간은 대략 API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1) 더하기 백오프입니다. 더 긴 중단을 기다려야 하는 무인 실행의 경우, CLAUDE_CODE_RETRY_WATCHDOG=1을 설정하여 용량 오류를 무한정 재시도합니다. 그리고 Claude Code v2.1.199 기준으로 다른 일시적 오류의 기본값을 300으로 올리고 이 변수의 상한을 제거합니다.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: run_in_background으로 시작된 서브에이전트의 정지 감시견. 기본값 600000. 각 스트림 이벤트에서 재설정됩니다. 정지 시 서브에이전트를 중단하고, 작업을 실패로 표시하고, 부분 결과와 함께 오류를 부모에게 표시합니다. 동기 서브에이전트에는 적용되지 않습니다.
  • CLAUDE_ENABLE_STREAM_WATCHDOG with CLAUDE_STREAM_IDLE_TIMEOUT_MS: 헤더가 도착했지만 응답 본문이 스트리밍을 중지할 때 요청을 중단합니다. 감시견은 모든 공급자에 대해 기본적으로 켜져 있습니다. CLAUDE_ENABLE_STREAM_WATCHDOG=0으로 설정하여 비활성화합니다. CLAUDE_STREAM_IDLE_TIMEOUT_MS는 기본값 300000이고 해당 최소값으로 제한됩니다. 중단된 요청은 정상 재시도 경로를 거칩니다.

OutputFormat

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

SystemPromptPreset

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

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일 때, query()는 Claude Code CLI와 동일한 파일 시스템 설정을 로드합니다: 사용자, 프로젝트 및 로컬. 관리형 정책 설정은 모든 경우에 로드됩니다. 서버 관리 설정은 적격 구성에서 조직 자격증명으로 세션이 인증될 때 가져옵니다. Claude Code 기능 사용에서 이것이 제어하지 않는 입력 및 비활성화 방법을 참조하십시오.

setting_sources를 사용하는 이유

파일 시스템 설정 비활성화:
Python SDK 0.1.59 이하에서는 빈 목록이 옵션을 생략하는 것과 동일하게 처리되었으므로 setting_sources=[]는 파일 시스템 설정을 비활성화하지 않았습니다. 빈 목록이 적용되어야 하는 경우 최신 릴리스로 업그레이드하십시오. TypeScript SDK는 영향을 받지 않습니다.
모든 파일 시스템 설정을 명시적으로 로드:
특정 설정 소스만 로드:
테스트 및 CI 환경:
SDK 전용 애플리케이션:
CLAUDE.md 프로젝트 지침 로드:

설정 우선순위

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

AgentDefinition

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

PermissionMode

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

EffortLevel

생각 깊이를 안내하기 위한 노력 수준입니다.

CanUseTool

도구 권한 콜백 함수의 타입 별칭입니다.
콜백은 다음을 수신합니다:
  • tool_name: 호출되는 도구의 이름
  • input_data: 도구의 입력 매개변수
  • context: 추가 정보가 있는 ToolPermissionContext
PermissionResult (PermissionResultAllow 또는 PermissionResultDeny)를 반환합니다. 콜백은 대화형 권한 프롬프트의 SDK 대체입니다: 권한 평가 흐름이 프롬프트로 해결될 때만 호출됩니다. allowed_tools 항목, 설정 허용 규칙 또는 acceptEdits 또는 bypassPermissions와 같은 권한 모드로 이미 승인된 도구 호출은 이를 호출하지 않습니다. 모든 도구 호출을 제어하려면 PreToolUse hook을 대신 사용합니다. AskUserQuestion, requiresUserInteraction으로 표시된 MCP 도구, 및 조직이 ask로 설정한 커넥터 도구는 허용 규칙이 일치하더라도 콜백에 도달합니다. dontAsk 모드에서는 대신 거부됩니다.

ToolPermissionContext

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

PermissionResult

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

PermissionResultAllow

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

PermissionResultDeny

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

PermissionUpdate

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

PermissionRuleValue

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

ToolsPreset

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

ThinkingConfig

확장된 생각 동작을 제어합니다. 세 가지 구성의 합집합입니다:
선택적 display 필드는 생각 텍스트가 "summarized" 또는 "omitted"로 반환되는지 제어합니다. Claude Opus 4.7 이상에서 API 기본값은 "omitted"이므로, ThinkingBlock 출력에서 생각 콘텐츠를 받으려면 "summarized"를 설정합니다. 이들은 TypedDict 클래스이므로 런타임에 일반 dict입니다. dict 리터럴로 구성하거나 클래스를 생성자처럼 호출합니다. 둘 다 dict를 생성합니다. config.budget_tokens가 아닌 config["budget_tokens"]로 필드에 접근합니다:

SdkBeta

SDK 베타 기능의 리터럴 타입입니다.
ClaudeAgentOptionsbetas 필드와 함께 사용하여 베타 기능을 활성화합니다.
context-1m-2025-08-07 베타는 2026년 4월 30일부터 폐기되었습니다. Claude Sonnet 4.5 또는 Sonnet 4와 함께 이 헤더를 전달하면 효과가 없으며, 표준 200k 토큰 컨텍스트 윈도우를 초과하는 요청은 오류를 반환합니다. 1M 토큰 컨텍스트 윈도우를 사용하려면 Claude Sonnet 5, Claude Sonnet 4.6, Claude Opus 4.6, Claude Opus 4.7 또는 Claude Opus 4.8로 마이그레이션하십시오. 이들은 베타 헤더 없이 표준 가격으로 1M 컨텍스트를 포함합니다.

McpSdkServerConfig

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

McpServerConfig

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

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpServerStatusConfig

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

McpStatusResponse

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

McpServerStatus

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

SdkPluginConfig

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

메시지 타입

Message

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

UserMessage

사용자 입력 메시지입니다.

AssistantMessage

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

AssistantMessageError

어시스턴트 메시지의 가능한 오류 타입입니다.

SystemMessage

메타데이터가 있는 시스템 메시지입니다.

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_* 서브타입에서만 채워집니다.
usage dict는 존재할 때 다음 키를 포함합니다: model_usage dict는 모델 이름을 모델별 사용량에 매핑합니다. 내부 dict 키는 camelCase를 사용합니다. 기본 CLI 프로세스에서 수정되지 않은 상태로 전달되므로 TypeScript ModelUsage 타입과 일치합니다:

StreamEvent

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

RateLimitEvent

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

RateLimitInfo

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

TaskStartedMessage

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

TaskUsage

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

TaskProgressMessage

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

TaskNotificationMessage

백그라운드 작업이 완료, 실패 또는 중지될 때 발생합니다. 백그라운드 작업에는 run_in_background Bash 명령, Monitor 감시 및 백그라운드 서브에이전트가 포함됩니다.

콘텐츠 블록 타입

ContentBlock

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

TextBlock

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

ThinkingBlock

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

ToolUseBlock

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

ToolResultBlock

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

오류 타입

ClaudeSDKError

모든 SDK 오류의 기본 예외 클래스입니다.

CLINotFoundError

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

CLIConnectionError

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

ProcessError

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

CLIJSONDecodeError

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

Hook 타입

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

HookEvent

지원되는 hook 이벤트 타입입니다.
TypeScript SDK는 Python에서 아직 사용할 수 없는 추가 hook 이벤트를 지원합니다: SessionStart, SessionEnd, Setup, TeammateIdle, TaskCompleted, ConfigChange, WorktreeCreate, WorktreeRemove, PostToolBatchMessageDisplay.

HookCallback

hook 콜백 함수의 타입 정의입니다.
매개변수:
  • input: hook_event_name을 기반으로 한 판별된 합집합이 있는 강타입 hook 입력 (HookInput 참조)
  • tool_use_id: 선택적 도구 사용 식별자 (도구 관련 hooks의 경우)
  • context: 추가 정보가 있는 hook 컨텍스트
다음을 포함할 수 있는 HookJSONOutput을 반환합니다.
  • decision: 작업을 차단하려면 "block"
  • systemMessage: 사용자에게 표시되는 경고 메시지
  • hookSpecificOutput: hook 특정 출력 데이터

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

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

AsyncHookJSONOutput

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

Hook 사용 예제

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

도구 입력/출력 타입

모든 기본 Claude Code 도구의 입력/출력 스키마 문서입니다. Python SDK는 이들을 타입으로 내보내지 않지만, 메시지의 도구 입력 및 출력 구조를 나타냅니다.

Agent

도구 이름: Agent (이전 Task, 여전히 별칭으로 허용됨) 입력:
출력:

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 입력:
출력 (텍스트 파일):
출력 (이미지):

Write

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

Glob

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

Grep

도구 이름: Grep 입력:
출력 (content 모드):
출력 (files_with_matches 모드):

NotebookEdit

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

WebFetch

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

WebSearch

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

TodoWrite

도구 이름: TodoWrite
Claude Code v2.1.142부터 TodoWrite는 기본적으로 비활성화되어 있습니다. 대신 TaskCreate, TaskGet, TaskUpdate, TaskList를 사용하십시오. 모니터링 코드를 업데이트하는 방법은 작업 도구로 마이그레이션을 참조하거나, CLAUDE_CODE_ENABLE_TASKS=0을 설정하여 TodoWrite로 되돌리십시오.
입력:
출력:

TaskCreate

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

TaskUpdate

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

TaskGet

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

TaskList

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

BashOutput

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

KillBash

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

ExitPlanMode

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

ListMcpResources

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

ReadMcpResource

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

ClaudeSDKClient를 사용한 고급 기능

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

동작 수정을 위해 Hooks 사용

실시간 진행 상황 모니터링

예제 사용

기본 파일 작업 (query 사용)

오류 처리

클라이언트를 사용한 스트리밍 모드

ClaudeSDKClient를 사용한 사용자 정의 도구

샌드박스 구성

SandboxSettings

샌드박스 동작을 위한 구성입니다. 이를 사용하여 명령 샌드박싱을 활성화하고 프로그래밍 방식으로 네트워크 제한을 구성합니다.
샌드박스는 플랫폼 지원에 따라 달라지며, Linux에서는 bubblewrapsocat과 같은 도구가 필요합니다. 기본적으로 enabledTrue이지만 샌드박스를 시작할 수 없을 때, 명령은 stderr에 경고와 함께 샌드박스되지 않은 상태로 실행됩니다. 이 기본값은 failIfUnavailabletrue로 기본 설정되는 TypeScript SDK와 다릅니다.대신 중지하려면 샌드박스 설정에서 "failIfUnavailable": True를 설정하십시오. 이 키는 아직 SandboxSettings에 선언되지 않았지만, SDK는 이를 Claude Code로 전달하며, Claude Code는 이를 준수합니다. 그러면 query()는 메시지를 생성하기 전에 예외를 발생시키지 않고 subtype="error_during_execution"errors의 이유를 포함한 ResultMessage를 보고합니다. query()가 메시지를 생성하기 전에 예외를 발생시킬 것으로 예상하지 말고 해당 서브타입을 감시하십시오.

사용 예제

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

SandboxNetworkConfig

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

SandboxIgnoreViolations

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

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

allowUnsandboxedCommands가 활성화되면, 모델은 도구 입력에서 dangerouslyDisableSandbox: True를 설정하여 샌드박스 외부에서 명령 실행을 요청할 수 있습니다. 이러한 요청은 기존 권한 시스템으로 폴백되므로, can_use_tool 핸들러가 호출되어 사용자 정의 인증 로직을 구현할 수 있습니다.
excludedCommands vs allowUnsandboxedCommands:
  • excludedCommands: 항상 자동으로 샌드박스를 우회하는 명령의 정적 목록 (예: ["docker"]). 모델이 이를 제어할 수 없습니다.
  • allowUnsandboxedCommands: 모델이 도구 입력에서 dangerouslyDisableSandbox: True를 설정하여 런타임에 샌드박스되지 않은 실행을 요청하도록 합니다.
이 패턴을 사용하면 다음을 수행할 수 있습니다.
  • 모델 요청 감사: 모델이 샌드박스되지 않은 실행을 요청할 때 로깅
  • 허용 목록 구현: 특정 명령만 샌드박스되지 않은 상태로 실행하도록 허용
  • 승인 워크플로우 추가: 권한 있는 작업에 대한 명시적 인증 필요
dangerouslyDisableSandbox: True로 실행되는 명령은 전체 시스템 접근 권한이 있습니다. can_use_tool 핸들러가 이러한 요청을 신중하게 검증하는지 확인하십시오.permission_modebypassPermissions로 설정되고 allow_unsandboxed_commands가 활성화되면, 모델은 승인 프롬프트 없이 샌드박스 외부에서 명령을 자동으로 실행할 수 있습니다. 이 조합은 모델이 샌드박스 격리를 조용히 탈출할 수 있도록 효과적으로 허용합니다.

참고 항목