설치
최근 Debian, Ubuntu, 및 Homebrew Python 설치에서 가상 환경에 패키지를 설치합니다. 시스템 Python에 대해pip install을 실행하면 error: externally-managed-environment 오류가 발생합니다.
query()와 ClaudeSDKClient 중 선택하기
Python SDK는 Claude Code와 상호작용하는 두 가지 방법을 제공합니다.
빠른 비교
query() 사용 시기 (일회성 작업)
최적의 경우:
- 대화 기록이 필요 없는 일회성 질문
- 이전 교환의 컨텍스트가 필요 없는 독립적인 작업
- 간단한 자동화 스크립트
- 매번 새로 시작하고 싶을 때
ClaudeSDKClient 사용 시기 (지속적인 대화)
최적의 경우:
- 대화 계속하기 - Claude가 컨텍스트를 기억해야 할 때
- 후속 질문 - 이전 응답을 기반으로 구축
- 대화형 애플리케이션 - 채팅 인터페이스, REPL
- 응답 기반 로직 - 다음 작업이 Claude의 응답에 따라 달라질 때
- 세션 제어 - 대화 수명 주기를 명시적으로 관리
함수
query()
Claude Code와의 각 상호작용을 위해 기본적으로 새 세션을 생성합니다. 메시지가 도착하면 생성하는 비동기 반복자를 반환합니다. query()에 대한 각 호출은 continue_conversation=True 또는 ClaudeAgentOptions에서 resume을 전달하지 않는 한 이전 상호작용의 메모리 없이 새로 시작합니다. 세션을 참조하세요.
매개변수
반환값
대화에서 메시지를 생성하는AsyncIterator[Message]를 반환합니다.
예제 - 옵션 포함
tool()
타입 안전성을 갖춘 MCP 도구를 정의하기 위한 데코레이터입니다.
매개변수
입력 스키마 옵션
-
간단한 타입 매핑 (권장):
-
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 프로세스와 통신합니다.
가져오기:
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_WATCHDOGwithCLAUDE_STREAM_IDLE_TIMEOUT_MS: 헤더가 도착했지만 응답 본문이 스트리밍을 중지할 때 요청을 중단합니다. 감시견은 모든 공급자에 대해 기본적으로 켜져 있습니다.CLAUDE_ENABLE_STREAM_WATCHDOG=0으로 설정하여 비활성화합니다.CLAUDE_STREAM_IDLE_TIMEOUT_MS는 기본값300000이고 해당 최소값으로 제한됩니다. 중단된 요청은 정상 재시도 경로를 거칩니다.
OutputFormat
구조화된 출력 검증을 위한 구성입니다. 이를 ClaudeAgentOptions의 output_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는 영향을 받지 않습니다.설정 우선순위
여러 소스가 로드될 때, 설정은 이 우선순위로 병합됩니다 (높음에서 낮음):- 로컬 설정 (
.claude/settings.local.json) - 프로젝트 설정 (
.claude/settings.json) - 사용자 설정 (
~/.claude/settings.json)
agents 및 allowed_tools와 같은 프로그래밍 방식의 옵션은 사용자, 프로젝트 및 로컬 파일 시스템 설정을 재정의합니다. 관리형 정책 설정은 프로그래밍 방식의 옵션보다 우선합니다.
AgentDefinition
프로그래밍 방식으로 정의된 서브에이전트의 구성입니다.
AgentDefinition 필드 이름은 disallowedTools, permissionMode, maxTurns와 같은 camelCase를 사용합니다. 이 이름은 TypeScript SDK와 공유되는 와이어 형식에 직접 매핑됩니다. 이는 disallowed_tools 및 permission_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 베타 기능의 리터럴 타입입니다.
ClaudeAgentOptions의 betas 필드와 함께 사용하여 베타 기능을 활성화합니다.
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 서버의 상태입니다.
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, PostToolBatch 및 MessageDisplay.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
입력:
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에서는
bubblewrap 및 socat과 같은 도구가 필요합니다. 기본적으로 enabled가 True이지만 샌드박스를 시작할 수 없을 때, 명령은 stderr에 경고와 함께 샌드박스되지 않은 상태로 실행됩니다. 이 기본값은 failIfUnavailable이 true로 기본 설정되는 TypeScript SDK와 다릅니다.대신 중지하려면 샌드박스 설정에서 "failIfUnavailable": True를 설정하십시오. 이 키는 아직 SandboxSettings에 선언되지 않았지만, SDK는 이를 Claude Code로 전달하며, Claude Code는 이를 준수합니다. 그러면 query()는 메시지를 생성하기 전에 예외를 발생시키지 않고 subtype="error_during_execution"과 errors의 이유를 포함한 ResultMessage를 보고합니다. query()가 메시지를 생성하기 전에 예외를 발생시킬 것으로 예상하지 말고 해당 서브타입을 감시하십시오.사용 예제
SandboxNetworkConfig
샌드박스 모드를 위한 네트워크 특정 구성입니다. 이러한 설정은 부모 SandboxSettings에서 enabled가 True일 때 샌드박스된 Bash 명령에 적용됩니다. 이들은 권한 규칙을 대신 사용하는 WebFetch 도구를 제한하지 않습니다.
기본 제공 샌드박스 프록시는 요청된 호스트명을 기반으로 네트워크 허용 목록을 적용하며 TLS 트래픽을 종료하거나 검사하지 않으므로, 도메인 프론팅과 같은 기술이 이를 우회할 수 있습니다. 자세한 내용은 샌드박싱 보안 제한 사항을 참조하고, TLS 종료 프록시 구성은 안전한 배포를 참조하십시오.
SandboxIgnoreViolations
특정 샌드박스 위반을 무시하기 위한 구성입니다.
샌드박스되지 않은 명령을 위한 권한 폴백
allowUnsandboxedCommands가 활성화되면, 모델은 도구 입력에서 dangerouslyDisableSandbox: True를 설정하여 샌드박스 외부에서 명령 실행을 요청할 수 있습니다. 이러한 요청은 기존 권한 시스템으로 폴백되므로, can_use_tool 핸들러가 호출되어 사용자 정의 인증 로직을 구현할 수 있습니다.
excludedCommands vs allowUnsandboxedCommands:excludedCommands: 항상 자동으로 샌드박스를 우회하는 명령의 정적 목록 (예:["docker"]). 모델이 이를 제어할 수 없습니다.allowUnsandboxedCommands: 모델이 도구 입력에서dangerouslyDisableSandbox: True를 설정하여 런타임에 샌드박스되지 않은 실행을 요청하도록 합니다.
- 모델 요청 감사: 모델이 샌드박스되지 않은 실행을 요청할 때 로깅
- 허용 목록 구현: 특정 명령만 샌드박스되지 않은 상태로 실행하도록 허용
- 승인 워크플로우 추가: 권한 있는 작업에 대한 명시적 인증 필요
참고 항목
- SDK 개요 - 일반 SDK 개념
- TypeScript SDK 참조 - TypeScript SDK 문서
- CLI 참조 - 명령줄 인터페이스
- 일반적인 워크플로우 - 단계별 가이드