설치
SDK는 선택적 종속성으로 플랫폼용 네이티브 Claude Code 바이너리를 번들로 제공합니다(예:
@anthropic-ai/claude-agent-sdk-darwin-arm64). Claude Code를 별도로 설치할 필요가 없습니다. 패키지 관리자가 선택적 종속성을 건너뛰면 SDK는 Native CLI binary for <platform> not found 오류를 발생시킵니다. 이 경우 pathToClaudeCodeExecutable을 별도로 설치된 claude 바이너리로 설정하세요.단일 실행 파일로 컴파일
bun build --compile을 사용하여 애플리케이션을 단일 파일 실행 파일로 컴파일하면 SDK는 런타임에 번들된 CLI 바이너리를 확인할 수 없습니다. require.resolve는 컴파일된 실행 파일의 $bunfs 가상 파일 시스템 내에서 작동하지 않으므로 SDK는 Native CLI binary for <platform> not found 오류를 발생시킵니다.
이를 해결하려면 플랫폼 바이너리를 파일 자산으로 포함하고, 시작 시 extractFromBunfs()를 사용하여 실제 경로로 추출한 다음, 해당 경로를 pathToClaudeCodeExecutable에 전달하세요.
extractFromBunfs() 헬퍼는 @anthropic-ai/claude-agent-sdk v0.3.144 이상이 필요합니다. 아래 예제는 Apple Silicon의 macOS용으로 빌드합니다:
extractFromBunfs()는 컴파일된 실행 파일의 가상 파일 시스템에서 포함된 바이너리를 사용자별 임시 디렉터리로 복사하고 실제 경로를 반환합니다. 컴파일된 실행 파일 외부에서는 입력 경로를 변경하지 않고 반환하므로 동일한 코드가 수정 없이 개발 환경에서 실행됩니다.
각 컴파일된 실행 파일은 단일 플랫폼의 바이너리를 포함합니다. 가져오기의 플랫폼 패키지를 --target과 일치시키세요:
- 크로스 컴파일하려면 일치하지 않는 플랫폼 패키지를 설치하세요. 예를 들어
npm install @anthropic-ai/claude-agent-sdk-linux-x64 --force입니다. - Windows에서 바이너리 하위 경로는
claude.exe입니다. 예를 들어@anthropic-ai/claude-agent-sdk-win32-x64/claude.exe입니다.
함수
query()
Claude Code와 상호작용하기 위한 주요 함수입니다. 메시지가 도착할 때 스트리밍하는 비동기 생성기를 만듭니다.
매개변수
반환값
Query 객체를 반환하며, 이는 추가 메서드를 포함하는 AsyncGenerator<SDKMessage, void>를 확장합니다.
startup()
프롬프트를 사용할 수 있기 전에 CLI 서브프로세스를 생성하고 초기화 핸드셰이크를 완료하여 미리 준비합니다. 반환된 WarmQuery 핸들은 나중에 프롬프트를 수락하고 이미 준비된 프로세스에 작성하므로, 첫 번째 query() 호출은 서브프로세스 생성 및 초기화 비용을 지불하지 않고 해결됩니다.
매개변수
반환값
서브프로세스가 생성되고 초기화 핸드셰이크를 완료하면 해결되는Promise<WarmQuery>를 반환합니다.
예제
startup()을 조기에 호출합니다(예: 애플리케이션 부팅 시). 그런 다음 프롬프트가 준비되면 반환된 핸들에서 .query()를 호출합니다. 이렇게 하면 서브프로세스 생성 및 초기화가 중요 경로에서 벗어납니다.
tool()
SDK MCP 서버와 함께 사용하기 위한 타입 안전 MCP 도구 정의를 만듭니다.
매개변수
ToolAnnotations
@modelcontextprotocol/sdk/types.js에서 다시 내보냅니다. 모든 필드는 선택적 힌트입니다. 클라이언트는 보안 결정을 위해 이들을 신뢰해서는 안 됩니다.
createSdkMcpServer()
애플리케이션과 동일한 프로세스에서 실행되는 MCP 서버 인스턴스를 만듭니다.
매개변수
listSessions()
가벼운 메타데이터를 포함한 과거 세션을 발견하고 나열합니다. 프로젝트 디렉토리별로 필터링하거나 모든 프로젝트에서 세션을 나열합니다.
매개변수
반환 타입: SDKSessionInfo
예제
프로젝트의 10개 최신 세션을 인쇄합니다. 결과는lastModified 내림차순으로 정렬되므로 첫 번째 항목이 가장 최신입니다. 모든 프로젝트에서 검색하려면 dir을 생략합니다.
getSessionMessages()
과거 세션 트랜스크립트에서 사용자 및 어시스턴트 메시지를 읽습니다.
매개변수
반환 타입: SessionMessage
예제
getSessionInfo()
전체 프로젝트 디렉토리를 스캔하지 않고 ID로 단일 세션의 메타데이터를 읽습니다.
매개변수
SDKSessionInfo를 반환하거나, 세션을 찾을 수 없으면 undefined를 반환합니다.
renameSession()
사용자 정의 제목 항목을 추가하여 세션의 이름을 바꿉니다. 반복 호출은 안전합니다. 가장 최신 제목이 우선합니다.
매개변수
tagSession()
세션에 태그를 지정합니다. null을 전달하여 태그를 지웁니다. 반복 호출은 안전합니다. 가장 최신 태그가 우선합니다.
매개변수
resolveSettings()
CLI와 동일한 병합 엔진을 사용하여 주어진 디렉토리에 대한 효과적인 Claude Code 설정을 해결하며, Claude CLI를 생성하지 않습니다. query() 호출을 호출하기 전에 어떤 구성을 볼 수 있는지 검사하는 데 사용합니다.
이 함수는 알파 버전이며 안정화 전에 API가 변경될 수 있습니다. CLI 시작과의 패리티를 위해 macOS plist 및 Windows HKLM/HKCU를 포함한 MDM 소스를 읽지만, 관리자가 구성한
policyHelper 서브프로세스를 실행하지 않습니다. permissions.defaultMode 필드는 프로젝트 설정을 포함한 모든 계층에서 그대로 반환됩니다. CLI가 권한 상승 모드를 적용하기 전에 적용하는 신뢰 필터는 적용되지 않습니다.매개변수
resolveSettings()는 단일 옵션 객체를 수락합니다. 모든 필드는 선택적입니다.
반환 타입: ResolvedSettings
resolveSettings()는 병합된 설정과 각 키에 기여한 소스를 설명하는 객체를 반환합니다.
예제
아래 예제는 프로젝트 디렉토리에 대한 설정을 해결하고 정리 기간을 제어하는 소스를 인쇄합니다.타입
Options
query() 함수의 구성 객체입니다.
느린 또는 정지된 API 응답 처리
CLI 서브프로세스는 API 타임아웃 및 정지 감지를 제어하는 여러 환경 변수를 읽습니다.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및CLAUDE_STREAM_IDLE_TIMEOUT_MS: 헤더가 도착했지만 응답 본문이 스트리밍을 중지할 때 요청을 중단합니다. 감시견은 모든 공급자에 대해 기본적으로 켜져 있습니다.CLAUDE_ENABLE_STREAM_WATCHDOG=0으로 설정하여 비활성화합니다.CLAUDE_STREAM_IDLE_TIMEOUT_MS는 기본값300000이고 해당 최소값으로 고정됩니다. 중단된 요청은 일반 재시도 경로를 거칩니다.
Query 객체
query() 함수에서 반환된 인터페이스입니다.
메서드
applyFlagSettings()
실행 중인 세션에서 설정을 변경하고 쿼리를 다시 시작하지 않습니다. 전용 설정자가 없는 설정이 변경되어야 할 때 사용합니다. 예를 들어 에이전트가 신뢰할 수 없는 입력을 읽은 후 permissions를 강화합니다. setModel() 및 setPermissionMode()는 이 두 키에 대한 전용 설정자입니다. applyFlagSettings()는 설정 키의 모든 부분 집합을 허용하는 일반 형식이며, 여기에 model을 전달하는 것은 setModel()과 동일하게 작동합니다.
다음 턴에 적용되는 키만 있습니다:
- 다음 턴에 적용됨:
model,effortLevel,ultracode,permissions,hooks,skillOverrides,fastMode,agent.agent를 전환하면 해당 에이전트의 모델 재정의, 훅 및 시스템 프롬프트도 다음 턴에 적용됩니다. - 세션 중 효과 없음: 시스템 프롬프트 옵션입니다. 이들은 시작 시 한 번 해결되므로 실행 중인 세션은 호출이 성공하더라도 원본 값을 유지합니다. 이를 변경하려면 새 세션을 시작합니다.
effortLevel은 노력 수준 이름을 허용합니다. 또한 "ultracode"를 허용하며, 이는 세션을 xhigh 노력으로 실행하고 ultracode를 켭니다. Settings 타입은 해당 값 없이 effortLevel을 선언하므로 TypeScript에서 동등한 { ultracode: true }를 전달합니다. ultracode 값은 Claude Code v2.1.203 이상이 필요하며 설정 파일의 effortLevel 키가 아닌 applyFlagSettings()에서만 허용됩니다.
값은 플래그 설정 계층에 기록되며, 이는 query()의 인라인 settings 옵션이 시작 시 채우는 계층과 동일합니다. 플래그 설정은 설정 우선순위 순서의 상단 근처에 있습니다: 사용자, 프로젝트 및 로컬 설정을 재정의하며, 관리되는 정책 설정만 이를 재정의할 수 있습니다. 이는 우선순위 섹션이 프로그래밍 방식의 옵션이라고 부르는 것과 동일한 계층입니다.
연속 호출은 최상위 키를 얕게 병합합니다. { permissions: {...} }를 포함한 두 번째 호출은 이전 호출의 전체 permissions 객체를 대체하며 깊게 병합하지 않습니다. 플래그 계층에서 키를 지우고 낮은 우선순위 소스로 돌아가려면 해당 키에 null을 전달합니다. undefined를 전달하면 JSON 직렬화가 이를 삭제하므로 효과가 없습니다.
스트리밍 입력 모드에서만 사용 가능하며, 이는 setModel() 및 setPermissionMode()와 동일한 제약입니다.
아래 예제는 세션 중간에 활성 모델을 전환한 다음 재정의를 지우므로 모델이 사용자 또는 프로젝트 설정이 지정하는 것으로 돌아갑니다.
applyFlagSettings()는 TypeScript 전용입니다. Python SDK는 동등한 메서드를 노출하지 않습니다.WarmQuery
startup()에서 반환된 핸들입니다. 서브프로세스가 이미 생성되고 초기화되었으므로 이 핸들에서 query()를 호출하면 시작 지연 없이 준비된 프로세스에 프롬프트를 직접 작성합니다.
메서드
WarmQuery는 AsyncDisposable을 구현하므로 자동 정리를 위해 await using과 함께 사용할 수 있습니다.
SDKControlInitializeResponse
initializationResult()의 반환 타입입니다. 세션 초기화 데이터를 포함합니다.
initialize를 보낼 때 제어 응답 래퍼는 선택적 pending_permission_requests 배열도 전달합니다. 필드는 응답 래퍼 자체에 있으며, 위의 SDKControlInitializeResponse 페이로드에는 없습니다. 각 항목은 세션이 실행 중일 때 권한 요청에 대해 스트리밍하는 것과 동일한 { type: "control_request", request_id, request } 형태의 완전한 control_request 메시지입니다.
이들은 클라이언트가 연결되기 전에 발급되었으며 여전히 회신을 기다리고 있는 요청입니다. SDK는 배열을 읽고 각 항목을 canUseTool 콜백으로 전달하며, 이는 전송 간격 후 reinitialize()가 트리거하는 것과 동일한 재전달입니다. 반복된 요청 ID를 멱등성으로 처리합니다. 연결이 끊어지기 전에 콜백이 이미 받은 요청을 반복할 수 있기 때문입니다.
SDKControlInterruptResponse
중단 수신입니다: interrupt()가 SDKSystemMessage.capabilities에서 interrupt_receipt_v1 기능을 광고하는 CLI에서 해결되는 값입니다. Claude Code v2.1.205 이상이 필요합니다. 이전 CLI는 빈 성공 페이로드로 중단에 응답하므로 interrupt()는 undefined로 해결됩니다.
still_queued는 중단을 견디는 사용자 메시지의 UUID를 나열합니다: 대기열에 여전히 있는 메시지와 다음 턴을 위해 이미 제거되었지만 아직 중단으로 도달할 수 없는 배치입니다. 각각은 중단 후 자체 턴으로 실행되며, 먼저 취소하지 않는 한 실행됩니다. 수신을 사용하여 다시 보낼 것인지 결정합니다. 이미 나열된 메시지를 다시 보내면 중복 턴이 생성됩니다.
다음 주의 사항으로 목록을 해석합니다:
- UUID가 있는 메시지만 나타납니다. 빈 배열은 다른 것이 실행되지 않음을 의미하지 않습니다.
- 메인 스레드 메시지만 나열됩니다. 서브에이전트로 주소 지정된 메시지는 범위를 벗어납니다.
- 목록에는 클라이언트가 보낸 적이 없는 UUID (예: 예약된 작업 트리거)가 포함될 수 있습니다. 오류로 취급하는 대신 인식하지 못하는 UUID를 무시합니다.
SDKResultMessage 전에 도착합니다. 해당 결과 후 대기열을 검사하는 대신 수신을 읽습니다: 루프는 다음 대기 중인 턴을 즉시 시작하므로 결과 후 검사하는 대기열이 이미 변경되었습니다.
AgentDefinition
프로그래밍 방식으로 정의된 서브에이전트의 구성입니다.
AgentMcpServerSpec
서브에이전트에 사용 가능한 MCP 서버를 지정합니다. 서버 이름 (부모의 mcpServers 구성에서 서버를 참조하는 문자열) 또는 서버 이름을 구성에 매핑하는 인라인 서버 구성 레코드일 수 있습니다.
McpServerConfigForProcessTransport는 McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig입니다.
SettingSource
SDK가 설정을 로드하는 파일 시스템 기반 구성 소스를 제어합니다.
기본 동작
settingSources가 생략되거나 undefined일 때 query()는 Claude Code CLI와 동일한 파일 시스템 설정을 로드합니다: 사용자, 프로젝트 및 로컬입니다. 관리되는 정책 설정은 모든 경우에 로드됩니다. 서버 관리 설정은 조직 자격 증명으로 세션이 적격 구성에서 인증할 때 가져옵니다. Claude Code 기능 사용을 참조하여 이 옵션과 관계없이 읽히는 입력과 이를 비활성화하는 방법을 확인하세요.
settingSources를 사용하는 이유
파일 시스템 설정 비활성화:설정 우선순위
여러 소스가 로드될 때 설정은 이 우선순위로 병합됩니다 (높음에서 낮음):- 로컬 설정 (
.claude/settings.local.json) - 프로젝트 설정 (
.claude/settings.json) - 사용자 설정 (
~/.claude/settings.json)
agents, allowedTools 및 settings와 같은 프로그래밍 방식의 옵션은 사용자, 프로젝트 및 로컬 파일 시스템 설정을 재정의합니다. 관리되는 정책 설정은 프로그래밍 방식의 옵션보다 우선합니다.
PermissionMode
CanUseTool
도구 사용을 제어하기 위한 사용자 정의 권한 함수 타입입니다.
함수는 대화형 권한 프롬프트의 SDK 대체입니다: 권한 평가 흐름이 프롬프트로 해결될 때만 호출됩니다. allowedTools 항목, 설정 허용 규칙 또는 acceptEdits 또는 bypassPermissions와 같은 권한 모드에 의해 이미 승인된 도구 호출은 이를 호출하지 않습니다. 모든 도구 호출을 제어하려면 PreToolUse 훅을 사용합니다.
AskUserQuestion, requiresUserInteraction으로 표시된 MCP 도구 및 조직이 ask로 설정한 커넥터 도구는 허용 규칙이 일치하더라도 함수에 도달합니다. dontAsk 모드에서는 대신 거부됩니다.
콜백은 일반적으로
PermissionResult를 반환하여 요청을 해결하며, SDK는 이를 전송을 통해 control_response로 다시 작성합니다. 애플리케이션이 이미 이 요청에 대해 control_response를 자체 채널을 통해 보낸 경우에만 null을 반환하고 requestId를 반복합니다. SDK는 그러면 전송에 응답을 작성하는 것을 건너뜁니다. 다른 경우에 null을 반환하면 도구 호출이 무한정 차단된 상태로 유지됩니다. control_response가 전송되지 않고 권한 프롬프트가 시간 초과되지 않기 때문입니다.
requestId 옵션 및 null 반환 값은 Claude Code v2.1.199 이상이 필요합니다.
PermissionResult
권한 확인의 결과입니다.
ToolConfig
기본 제공 도구 동작의 구성입니다.
McpServerConfig
MCP 서버의 구성입니다.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
McpSdkServerConfigWithInstance
McpClaudeAIProxyServerConfig
SdkPluginConfig
SDK에서 플러그인을 로드하기 위한 구성입니다.
예제:
메시지 타입
SDKMessage
쿼리에서 반환된 모든 가능한 메시지의 합집합 타입입니다.
SDKAssistantMessage
어시스턴트 응답 메시지입니다.
message 필드는 Anthropic SDK의 BetaMessage입니다. id, content, model, stop_reason 및 usage와 같은 필드를 포함합니다.
SDKAssistantMessageError는 다음 중 하나입니다: 'authentication_failed', 'oauth_org_not_allowed', 'billing_error', 'rate_limit', 'overloaded', 'invalid_request', 'model_not_found', 'server_error', 'max_output_tokens' 또는 'unknown'. 'model_not_found'는 선택한 모델이 존재하지 않거나 계정 또는 배포에서 사용할 수 없음을 의미합니다. 'overloaded'는 API가 서버가 용량에 도달했기 때문에 529를 반환했음을 의미하며, 이는 할당량에 대한 429인 'rate_limit'과는 다릅니다.
SDKUserMessage
사용자 입력 메시지입니다.
shouldQuery를 false로 설정하여 어시스턴트 턴을 트리거하지 않고 메시지를 트랜스크립트에 추가합니다. 메시지는 보류되고 턴을 트리거하는 다음 사용자 메시지로 병합됩니다. 이를 사용하여 모델 호출을 소비하지 않고 대역 외에서 실행한 명령의 출력과 같은 컨텍스트를 주입합니다.
도구 결과 블록을 전달하는 메시지에서 tool_use_result는 모델에 전송된 텍스트가 아니라 도구의 구조화된 출력 객체입니다. 해당 형태는 일치하는 tool_use 블록으로 명명된 도구에 따라 달라지므로 필드는 unknown으로 입력됩니다. 기본 제공 형태는 도구 출력 타입에 나열되어 있습니다.
Agent 도구의 경우 tool_use_result는 AgentOutput입니다. completed 결과에서 content는 Claude Code가 tool_result 텍스트에 추가하는 에이전트 ID 및 사용량 트레일러 없이 서브에이전트의 보고서를 보유합니다. 따라서 해당 텍스트를 파싱하는 대신 tool_use_result에서 렌더링합니다.
SDKUserMessageReplay
필수 UUID를 포함한 재생된 사용자 메시지입니다.
origin 종류가 peer 또는 channel인 경우, 활성 턴 중에 전달되었는지 또는 세션이 유휴 상태일 때 새 턴을 시작했는지 여부에 관계없이 스트림에 재생으로 도달합니다. v2.1.207 이전에는 세션이 유휴 상태일 때 전달된 주입된 턴이 스트림에서 메시지를 생성하지 않았으며 트랜스크립트를 다시 읽을 때만 나타났습니다.
SDKResultMessage
최종 결과 메시지입니다.
subtype 이상의 진단 세부 정보를 전달합니다:
api_error_status: 대화를 종료한 API 오류의 HTTP 상태 코드입니다. API 오류 없이 턴이 종료되었을 때는 없거나null입니다.ttft_ms: 첫 번째 토큰까지의 시간(밀리초)입니다. 첫 번째 완전한 어시스턴트 메시지가 도착할 때 측정됩니다. 성공 경로에만 표시됩니다.ttft_stream_ms: 응답 스트림이 열릴 때 첫 번째message_start스트림 이벤트까지의 시간(밀리초)입니다.ttft_ms보다 낮습니다. 두 시간 사이의 간격은 첫 번째 메시지를 스트리밍하는 데 소요된 시간입니다. 성공 경로에만 표시됩니다.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"중 하나입니다.fast_mode_state:"on","off"또는"cooldown"중 하나입니다.
origin 필드는 이 결과를 트리거한 사용자 메시지의 SDKMessageOrigin을 전달합니다. 백그라운드 작업이 완료되고 SDK가 합성 후속 턴을 주입할 때, 결과 SDKResultMessage는 origin: { kind: "task-notification" }을 전달합니다. 이 필드를 확인하여 프롬프트에 답하는 결과와 백그라운드 작업 후속을 위해 내보낸 결과를 구분하여 후자를 라우팅하거나 억제할 수 있습니다. 이 필드는 시작 오류와 같이 사용자 턴 이전에 내보낸 결과에는 없습니다.
PreToolUse 훅이 permissionDecision: "defer"를 반환할 때, 결과는 stop_reason: "tool_deferred"를 가지며 deferred_tool_use는 보류 중인 도구의 id, name 및 input을 전달합니다. 이 필드를 읽어 요청을 자신의 UI에 표시한 다음 동일한 session_id로 재개하여 계속합니다. 전체 왕복은 나중을 위해 도구 호출 연기를 참조하십시오.
SDKSystemMessage
시스템 초기화 메시지입니다.
capabilities 배열은 이 CLI가 구현하는 프로토콜 동작의 이름을 지정하므로 claude_code_version 문자열을 비교하는 대신 기능을 감지할 수 있습니다. 이는 개방형 집합입니다: 인식하지 못하는 값은 무시하고 의존하는 동작의 특정 기능을 확인합니다. 이 필드는 Claude Code v2.1.205 이상이 필요하며 이전 CLI에는 없습니다.
SDKPartialAssistantMessage
스트리밍 부분 메시지 (includePartialMessages가 true일 때만). parent_tool_use_id 필드는 항상 null입니다: 스트림 이벤트는 메인 세션에만 내보내집니다. 서브에이전트 속성을 위해 parent_tool_use_id를 전달하는 완전한 메시지를 사용하거나 forwardSubagentText를 활성화하여 서브에이전트 텍스트와 생각을 완전한 메시지로 수신합니다.
SDKCompactBoundaryMessage
대화 압축 경계를 나타내는 메시지입니다.
SDKInformationalMessage
루프에서 내보낸 일반 텍스트 배너입니다. 비오류 상태 라인, UserPromptSubmit 훅의 블록 이유와 같은 훅 피드백, 및 명령 출력을 전달합니다. content를 주어진 level에서 일반 텍스트로 렌더링합니다.
SDKWorkerShuttingDownMessage
원격 클라이언트가 하트비트 타임아웃을 기다리는 대신 워커가 사라진 이유를 표시할 수 있도록 정상적인 워커 종료 시 내보내집니다. reason은 호스트 CLI에서 설정한 짧은 snake_case 문자열입니다(예: "host_exit" 또는 "remote_control_disabled"). 라이브 스트리밍할 때만 이에 대해 조치합니다. 재개된 세션은 이 메시지의 과거 인스턴스를 재생하므로 그 경우 무시합니다.
SDKPluginInstallMessage
플러그인 설치 진행 이벤트입니다. CLAUDE_CODE_SYNC_PLUGIN_INSTALL이 설정되면 내보내지므로 Agent SDK 애플리케이션이 첫 번째 턴 전에 마켓플레이스 플러그인 설치를 추적할 수 있습니다. started 및 completed 상태는 전체 설치를 괄호로 묶습니다. installed 및 failed 상태는 개별 마켓플레이스를 보고하고 name을 포함합니다.
SDKPermissionDeniedMessage
권한 시스템이 대화형 프롬프트 없이 도구 호출을 자동으로 거부할 때 내보내지는 스트림 이벤트입니다. 이를 사용하여 거부를 UI에 렌더링할 수 있으며, 뒤따르는 is_error 도구 결과만 관찰하는 것이 아닙니다. 대화형 요청 경로는 canUseTool 콜백을 통해 애플리케이션에 별도로 도달합니다. PreToolUse 훅에서 발급된 거부는 이 이벤트를 통해 보고되지 않습니다.
이 이벤트는 Claude Code v2.1.136 이상이 필요합니다.
SDKPermissionDenial
거부된 도구 사용에 대한 정보입니다.
SDKMessageOrigin
사용자 역할 메시지의 출처입니다. 이는 SDKUserMessage의 origin으로 나타나며 해당 SDKResultMessage로 전달되므로 주어진 턴을 트리거한 것을 알 수 있습니다.
훅 타입
훅 사용에 대한 포괄적인 가이드, 예제 및 일반적인 패턴은 훅 가이드를 참조하세요.HookEvent
사용 가능한 훅 이벤트입니다.
HookCallback
훅 콜백 함수 타입입니다.
HookCallbackMatcher
선택적 매처를 포함한 훅 구성입니다.
HookInput
모든 훅 입력 타입의 합집합 타입입니다.
BaseHookInput
모든 훅 입력 타입이 확장하는 기본 인터페이스입니다.
prompt_id 필드는 현재 처리 중인 사용자 프롬프트를 식별하는 UUID입니다. OpenTelemetry 이벤트의 prompt.id 속성과 일치하며 첫 번째 사용자 입력까지는 없습니다. Claude Code v2.1.196 이상이 필요합니다.
PreToolUseHookInput
PostToolUseHookInput
PostToolUseFailureHookInput
PostToolBatchHookInput
배치의 모든 도구 호출이 해결된 후, 다음 모델 요청 전에 한 번 실행됩니다. tool_response는 모델이 보는 직렬화된 tool_result 콘텐츠를 전달합니다. 형태는 PostToolUseHookInput의 구조화된 Output 객체와 다릅니다.
NotificationHookInput
UserPromptSubmitHookInput
SessionStartHookInput
SessionEndHookInput
StopHookInput
SubagentStartHookInput
SubagentStopHookInput
PreCompactHookInput
PermissionRequestHookInput
SetupHookInput
TeammateIdleHookInput
TaskCompletedHookInput
ConfigChangeHookInput
WorktreeCreateHookInput
WorktreeRemoveHookInput
MessageDisplayHookInput
HookJSONOutput
훅 반환값입니다.
AsyncHookJSONOutput
SyncHookJSONOutput
도구 입력 타입
모든 기본 제공 Claude Code 도구의 입력 스키마 문서입니다. 이 타입은@anthropic-ai/claude-agent-sdk에서 내보내지며 타입 안전 도구 상호작용에 사용할 수 있습니다.
ToolInputSchemas
모든 도구 입력 타입의 합집합으로, @anthropic-ai/claude-agent-sdk에서 내보냅니다.
Agent
도구 이름:Agent (이전 Task, 여전히 별칭으로 수락됨)
AskUserQuestion
도구 이름:AskUserQuestion
Bash
도구 이름:Bash
Monitor
도구 이름:Monitor
command는 스크립트를 실행하고 stdout 라인당 하나의 이벤트를 내보내며, ws는 WebSocket을 열고 텍스트 프레임당 하나의 이벤트를 내보냅니다. command 또는 ws 중 정확히 하나를 제공합니다. ws 소스는 Claude Code v2.1.195 이상이 필요합니다.
로그 테일과 같은 세션 길이 감시의 경우 persistent: true를 설정합니다. Monitor가 명령을 실행할 때, Bash와 동일한 권한 규칙을 따릅니다. WebSocket 감시는 별도로 승인을 요청합니다. 동작 및 공급자 가용성은 Monitor 도구 참조를 참조하세요.
TaskOutput
도구 이름:TaskOutput
Edit
도구 이름:Edit
Read
도구 이름:Read
pages를 사용합니다 (예: "1-5").
Write
도구 이름:Write
Glob
도구 이름:Glob
Grep
도구 이름:Grep
TaskStop
도구 이름:TaskStop
task_id는 에이전트 팀 팀원 또는 에이전트 ID 또는 이름으로 명명된 백그라운드 에이전트도 수락합니다.
NotebookEdit
도구 이름:NotebookEdit
WebFetch
도구 이름:WebFetch
WebSearch
도구 이름:WebSearch
Workflow
도구 이름:Workflow
Workflow 도구는 Agent SDK v0.3.149 이상에서 사용 가능합니다. script, name 또는 scriptPath 중 최소 하나가 필요합니다.
TodoWrite
도구 이름:TodoWrite
TypeScript Agent SDK 0.3.142부터
TodoWrite는 기본적으로 비활성화됩니다. 대신 TaskCreate, TaskGet, TaskUpdate 및 TaskList를 사용하세요. 모니터링 코드를 업데이트하려면 작업 도구로 마이그레이션을 참조하거나, CLAUDE_CODE_ENABLE_TASKS=0을 설정하여 TodoWrite로 되돌립니다.TaskCreate
도구 이름:TaskCreate
TaskUpdate
도구 이름:TaskUpdate
status를 "deleted"로 설정하여 제거합니다.
TaskGet
도구 이름:TaskGet
null을 반환합니다.
TaskList
도구 이름:TaskList
ExitPlanMode
도구 이름:ExitPlanMode
allowedPrompts 필드는 더 이상 사용되지 않으며 무시됩니다. Claude Code는 기존 호출자 및 트랜스크립트가 유효성을 검사하도록 여전히 수락합니다. v2.1.205 이전에는 계획을 구현하기 위한 프롬프트 기반 Bash 권한을 요청했습니다.
ListMcpResources
도구 이름:ListMcpResourcesTool
ReadMcpResource
도구 이름:ReadMcpResourceTool
EnterWorktree
도구 이름:EnterWorktree
path를 전달합니다. 첫 번째 입력 시 대상은 현재 저장소의 등록된 worktree이거나, 다중 저장소 작업 공간에서 그 안에 중첩된 저장소여야 합니다. worktree 세션 내에서는 세션의 저장소의 .claude/worktrees/ 아래에 있어야 합니다. name 및 path는 상호 배타적입니다.
도구 출력 타입
모든 기본 제공 Claude Code 도구의 출력 스키마 문서입니다. 이 타입은@anthropic-ai/claude-agent-sdk에서 내보내지며 각 도구에서 반환된 실제 응답 데이터를 나타냅니다.
ToolOutputSchemas
모든 도구 출력 타입의 합집합입니다.
Agent
도구 이름:Agent (이전 Task, 여전히 별칭으로 수락됨)
status 필드에서 구분됩니다: 완료된 작업의 경우 "completed", 백그라운드 작업의 경우 "async_launched", Claude Code가 원격 클라우드 세션으로 전달한 작업의 경우 "remote_launched"이며, 여기서 sessionUrl은 해당 세션으로 연결되고 taskId는 이를 식별합니다.
resolvedModel 필드는 completed 및 async_launched 변형에서 서브에이전트가 실제로 실행된 모델의 이름을 지정하며, 이는 availableModels 또는 다른 재정의가 적용될 때 요청된 model 입력과 다를 수 있습니다. 이 필드는 Claude Code v2.1.174 이상이 필요합니다.
completed 변형에서 worktreePath는 서브에이전트가 격리된 git worktree에서 실행되었을 때 설정되며, worktreeBranch는 Claude Code가 생성했을 때 해당 worktree의 분기 이름을 지정합니다. usage.service_tier는 서브에이전트의 요청에 대해 API가 보고한 서비스 계층 문자열을 전달합니다.
v2.1.207 이전에는 게시된 타입이 더 좁았습니다. worktreePath, worktreeBranch, citations, toolStats.frameCount, 그리고 inference_geo, speed, iterations 사용 필드를 생략했으며, service_tier를 "standard" | "priority" | "batch"로 입력했습니다. 타입이 선택 사항으로 표시하는 필드는 이전 버전에서 기록된 결과에 없을 수 있습니다.
AskUserQuestion
도구 이름:AskUserQuestion
response는 사용자가 구조화된 질문에 답하는 대신 자유 형식 답변을 입력했을 때 설정됩니다. 존재할 때, Claude는 질문별 답변 목록 대신 “사용자가 응답했습니다: …”를 받습니다.
Bash
도구 이름:Bash
backgroundTaskId를 포함합니다.
Monitor
도구 이름:Monitor
TaskStop과 함께 사용하여 감시를 조기에 취소합니다.
Edit
도구 이름:Edit
Read
도구 이름:Read
type 필드에서 구분됩니다.
Write
도구 이름:Write
Glob
도구 이름:Glob
Grep
도구 이름:Grep
mode에 따라 다릅니다: 파일 목록, 일치 항목이 있는 콘텐츠 또는 일치 항목 수.
TaskStop
도구 이름:TaskStop
NotebookEdit
도구 이름:NotebookEdit
WebFetch
도구 이름:WebFetch
WebSearch
도구 이름:WebSearch
Workflow
도구 이름:Workflow
error를 확인하십시오: 구문 검사에 실패한 스크립트는 status: "async_launched"를 반환하고 error가 설정되며, 실행되지 않습니다.
TodoWrite
도구 이름:TodoWrite
TypeScript Agent SDK 0.3.142부터
TodoWrite는 기본적으로 비활성화됩니다. 대신 TaskCreate, TaskGet, TaskUpdate, TaskList를 사용하십시오. 모니터링 코드를 업데이트하려면 작업 도구로 마이그레이션을 참조하거나, CLAUDE_CODE_ENABLE_TASKS=0을 설정하여 TodoWrite로 되돌립니다.TaskCreate
도구 이름:TaskCreate
TaskUpdate
도구 이름:TaskUpdate
TaskGet
도구 이름:TaskGet
null을 반환합니다.
TaskList
도구 이름:TaskList
ExitPlanMode
도구 이름:ExitPlanMode
ListMcpResources
도구 이름:ListMcpResourcesTool
ReadMcpResource
도구 이름:ReadMcpResourceTool
EnterWorktree
도구 이름:EnterWorktree
권한 타입
PermissionUpdate
권한을 업데이트하기 위한 작업입니다.
PermissionBehavior
PermissionUpdateDestination
PermissionRuleValue
기타 타입
ApiKeySource
SdkBeta
betas 옵션을 통해 활성화할 수 있는 사용 가능한 베타 기능입니다. 베타 헤더를 참조하세요.
SlashCommand
사용 가능한 슬래시 명령에 대한 정보입니다.
ModelInfo
사용 가능한 모델에 대한 정보입니다.
AgentInfo
Agent 도구를 통해 호출할 수 있는 사용 가능한 서브에이전트에 대한 정보입니다.
McpServerStatus
연결된 MCP 서버의 상태입니다.
McpServerStatusConfig
mcpServerStatus()에서 보고한 MCP 서버의 구성입니다. 이는 모든 MCP 서버 전송 타입의 합집합입니다.
McpServerConfig를 참조하세요.
AccountInfo
인증된 사용자의 계정 정보입니다.
ModelUsage
결과 메시지에서 반환된 모델별 사용 통계입니다. costUSD 값은 클라이언트 측 추정입니다. 비용 및 사용량 추적에서 청구 주의 사항을 참조하세요.
ConfigScope
NonNullableUsage
모든 nullable 필드가 non-nullable로 만들어진 Usage의 버전입니다.
Usage
토큰 사용 통계입니다. 이는 @anthropic-ai/sdk의 BetaUsage 타입입니다.
BetaServerToolUsage와 BetaIterationsUsage는 @anthropic-ai/sdk에서 정의됩니다.
CallToolResult
MCP 도구 결과 타입 (@modelcontextprotocol/sdk/types.js에서). structuredContent는 content와 함께 반환될 수 있는 JSON 객체이며, 이미지 블록을 포함합니다. 구조화된 데이터 반환을 참조하세요.
ThinkingConfig
Claude의 사고/추론 동작을 제어합니다. 더 이상 사용되지 않는 maxThinkingTokens보다 우선합니다.
display 필드는 사고 텍스트가 "summarized" 또는 "omitted"로 반환되는지 제어합니다. Claude Opus 4.7 이상에서 API 기본값은 "omitted"이므로, thinking 블록에서 사고 콘텐츠를 받으려면 "summarized"를 설정하세요.
SpawnedProcess
사용자 정의 프로세스 생성을 위한 인터페이스 (spawnClaudeCodeProcess 옵션과 함께 사용). ChildProcess는 이미 이 인터페이스를 만족합니다.
SpawnOptions
사용자 정의 생성 함수에 전달된 옵션입니다.
signal 필드는 프로세스를 종료할 시기를 생성 함수에 알립니다. 이를 Node의 spawn()에 signal 옵션으로 전달하거나, VM 또는 컨테이너 종료 핸들러에 전달하세요.이 신호는 Options.abortController가 중단되는 순간 즉시 발생하지 않습니다. SDK는 먼저 프로세스의 stdin을 닫고 CLI가 깔끔하게 종료될 수 있도록 약 2초를 기다린 후, 이 신호를 중단합니다. 호출자가 중단되는 순간 즉시 반응하려면, 생성 함수가 인클로징 스코프에서 참조할 수 있는 자신의 Options.abortController.signal을 수신하세요.McpSetServersResult
setMcpServers() 작업의 결과입니다.
RewindFilesResult
rewindFiles() 작업의 결과입니다.
SDKStatusMessage
상태 업데이트 메시지 (예: 압축).
SDKTaskNotificationMessage
백그라운드 작업이 완료, 실패 또는 중지될 때의 알림입니다. 백그라운드 작업에는 run_in_background Bash 명령, Monitor 감시 및 백그라운드 서브에이전트가 포함됩니다.
SDKToolUseSummaryMessage
대화에서의 도구 사용 요약입니다.
SDKHookStartedMessage
훅이 실행을 시작할 때 내보내집니다.
Claude Code는 이 메시지, SDKHookProgressMessage 및 SDKHookResponseMessage를 메시지 스트림에 즉시 전달합니다. 여기에는 SessionStart 또는 Setup 훅이 세션 시작 중에 여전히 실행 중인 동안도 포함됩니다. Claude Code v2.1.169부터 v2.1.203까지는 SessionStart 또는 Setup 훅이 완료된 후 이러한 메시지를 한 배치로 전달했습니다. v2.1.204는 라이브 전달을 복원했습니다.
SDKHookProgressMessage
훅이 실행 중일 때 stdout/stderr 출력과 함께 내보내집니다.
SDKHookResponseMessage
훅이 실행을 완료할 때 내보내집니다.
SDKToolProgressMessage
도구가 실행 중일 때 진행 상황을 나타내기 위해 주기적으로 내보내집니다.
SDKAuthStatusMessage
인증 흐름 중에 내보내집니다.
SDKTaskStartedMessage
백그라운드 작업이 시작될 때 내보내집니다. task_type 필드는 백그라운드 Bash 명령 및 Monitor 감시의 경우 "local_bash", 서브에이전트의 경우 "local_agent" 또는 "remote_agent"입니다.
SDKTaskProgressMessage
서브에이전트 또는 백그라운드 작업이 실행 중일 때 주기적으로 내보내집니다. summary 필드는 agentProgressSummaries가 활성화되었을 때만 채워집니다.
SDKTaskUpdatedMessage
백그라운드 작업의 상태가 변경될 때 내보내집니다. 예를 들어 running에서 completed로 전환될 때입니다. patch를 task_id로 키가 지정된 로컬 작업 맵에 병합합니다. end_time 필드는 Unix epoch 타임스탬프(밀리초)이며 Date.now()와 비교할 수 있습니다.
SDKBackgroundTasksChangedMessage
라이브 백그라운드 작업 집합이 변경될 때마다 내보내집니다. 작업이 시작되거나, 완료되거나, 종료되거나, 포그라운드 에이전트가 백그라운드로 전환될 때입니다. tasks 배열은 전체 라이브 집합입니다. task_started 및 task_notification 이벤트를 쌍으로 지정하는 대신 각 페이로드로 캐시된 집합을 바꾸므로, 다음 멤버십 변경이 놓친 이벤트를 수정합니다.
이러한 작업별 이벤트에 대한 순서는 지정되지 않으므로, 두 스트림을 상관시키지 마세요.
시작 시 아무것도 내보내지지 않습니다. 세션의 CLI 프로세스가 시작되거나 다시 시작될 때마다 빈 집합으로 재설정하고 다음 멤버십 변경이 다시 채우도록 하세요.
Claude Code v2.1.203 이상이 필요합니다.
SDKThinkingTokensMessage
Claude가 사고 블록을 생성하는 동안 내보내집니다. 여기에는 지금까지 생성된 사고 토큰의 실행 추정치가 포함됩니다. estimated_tokens는 현재 사고 블록의 실행 합계이고 estimated_tokens_delta는 이 프레임에서 전달된 증분입니다. 진행 상황 표시에 사용하세요. 최상위 에이전트 루프의 최종 개수는 결과 메시지의 usage.output_tokens입니다. 이는 서브에이전트 토큰을 포함하지 않습니다. 전체 트리 회계를 위해 modelUsage를 사용하세요.
Claude Code v2.1.153 이상이 필요합니다.
SDKFilesPersistedEvent
파일 체크포인트가 디스크에 지속될 때 내보내집니다.
SDKRateLimitEvent
세션이 속도 제한을 만날 때 내보내집니다.
errorCode가 "credits_required"일 때, 거부는 포함된 사용량이 소진된 claude.ai 구독에서 발생하며, 사용자가 사용 크레딧을 구매할 때까지 세션을 계속할 수 없습니다. canUserPurchaseCredits는 인증된 사용자가 계정에 대한 크레딧을 구매할 수 있는지 여부를 나타내고, hasChargeableSavedPaymentMethod는 저장된 결제 방법이 파일에 있는지 여부를 나타냅니다. 세 필드 모두 크레딧 필수 거부가 아닌 속도 제한 이벤트에서는 없습니다. Claude Code v2.1.181 이상이 필요합니다.
SDKLocalCommandOutputMessage
로컬 슬래시 명령의 출력 (예: /voice 또는 /usage). 트랜스크립트에서 어시스턴트 스타일 텍스트로 표시됩니다.
SDKCommandsChangedMessage
사용 가능한 명령 집합이 세션 중간에 변경될 때 내보내집니다. 예를 들어 에이전트가 하위 디렉토리에 들어갈 때 스킬이 발견될 때입니다. commands 배열은 전체 업데이트된 목록이므로, 캐시된 명령 목록을 이 페이로드로 바꾸세요. supportedCommands()를 다시 호출하는 것은 동등하지 않습니다. 해당 메서드는 초기화 시 캡처된 스냅샷을 반환하며 세션 중간 변경을 반영하지 않습니다.
SDKPromptSuggestionMessage
promptSuggestions가 활성화되었을 때 각 턴 후에 내보내집니다. 예측된 다음 사용자 프롬프트를 포함합니다.
SDKConversationResetMessage
세션의 대화가 세션을 종료하지 않고 바뀔 때 내보내집니다. 예를 들어 /clear 후, 계획 모드 종료 시, 또는 새로운 대화가 시작될 때입니다. new_conversation_id 아래에 빈 트랜스크립트를 마운트하고 캐시된 세션 제목을 버리세요.
SDKConversationResetMessage를 선언합니다. v2.1.203 이전에는 SDKMessage가 타입을 선언하지 않고 참조했으므로, skipLibCheck가 비활성화되었을 때 type === "conversation_reset"에 대한 좁혀지기가 타입 검사에 실패했습니다.
AbortError
중단 작업을 위한 사용자 정의 오류 클래스입니다.
샌드박스 구성
SandboxSettings
샌드박스 동작의 구성입니다. 이를 사용하여 명령 샌드박싱을 활성화하고 프로그래밍 방식으로 네트워크 제한을 구성합니다.
샌드박스는 플랫폼 지원에 따라 다르며, Linux에서는
bubblewrap 및 socat과 같은 도구가 필요합니다. enabled가 true이고 샌드박스를 시작할 수 없는 경우 query()는 subtype: "error_during_execution"이 있는 result 메시지를 보고하고 errors에 이유를 표시합니다. 단일 메시지 query() 호출의 경우 SDK는 해당 오류 결과를 생성한 후 예외를 발생시키므로 루프를 try 블록으로 래핑하여 이를 지나 계속 진행합니다. 오류 계약에 대해서는 결과 처리를 참조합니다.대신 샌드박스되지 않은 상태로 실행하려면 failIfUnavailable: false를 설정합니다.사용 예제
SandboxNetworkConfig
샌드박스 모드를 위한 네트워크 특정 구성입니다. 이러한 설정은 부모 SandboxSettings에서 enabled가 true일 때 샌드박스된 Bash 명령에 적용됩니다. 이들은 권한 규칙을 대신 사용하는 WebFetch 도구를 제한하지 않습니다.
기본 제공 샌드박스 프록시는 요청된 호스트명을 기반으로
allowedDomains를 적용하며 TLS 트래픽을 종료하거나 검사하지 않으므로 도메인 프론팅과 같은 기술이 이를 우회할 수 있습니다. 자세한 내용은 샌드박싱 보안 제한 사항을 참조하고 TLS 종료 프록시 구성에 대해서는 안전한 배포를 참조합니다.SandboxFilesystemConfig
샌드박스 모드를 위한 파일 시스템 특정 구성입니다.
샌드박스되지 않은 명령에 대한 권한 폴백
allowUnsandboxedCommands가 활성화되었을 때 모델은 도구 입력에서 dangerouslyDisableSandbox: true를 설정하여 샌드박스 외부에서 명령을 실행하도록 요청할 수 있습니다. 이러한 요청은 기존 권한 시스템으로 폴백되므로 canUseTool 핸들러가 호출되어 사용자 정의 인증 로직을 구현할 수 있습니다. 아래 예제에서 isCommandAuthorized는 사용자가 정의하는 인증 확인을 나타냅니다.
excludedCommands vs allowUnsandboxedCommands:excludedCommands: 항상 자동으로 샌드박스를 무시하는 명령의 정적 목록 (예:['docker']). 모델은 이에 대한 제어가 없습니다.allowUnsandboxedCommands: 모델이 도구 입력에서dangerouslyDisableSandbox: true를 설정하여 런타임에 샌드박스되지 않은 실행을 요청하도록 합니다.
- 모델 요청 감사: 모델이 샌드박스되지 않은 실행을 요청할 때 로그합니다
- 허용 목록 구현: 특정 명령만 샌드박스되지 않은 상태로 실행하도록 허용합니다
- 승인 워크플로우 추가: 권한 있는 작업에 대한 명시적 인증이 필요합니다
참고 항목
- SDK 개요 - 일반 SDK 개념
- Python SDK 참조 - Python SDK 문서
- CLI 참조 - 명령줄 인터페이스
- 일반적인 워크플로우 - 단계별 가이드