Skip to main content

설치

SDK는 선택적 종속성으로 플랫폼용 네이티브 Claude Code 바이너리를 번들로 제공합니다(예: @anthropic-ai/claude-agent-sdk-darwin-arm64). 대부분의 설치에서는 Claude Code를 별도로 설치할 필요가 없습니다. SDK 버전은 번들된 Claude Code 버전을 추적합니다. SDK v0.3.191은 Claude Code v2.1.191을 번들로 제공하므로, 이 페이지의 특정 Claude Code 버전이 필요한 기능은 동일한 패치 번호 이상의 SDK 릴리스가 필요합니다. 패키지 관리자가 선택적 종속성을 건너뛰면 SDK는 Native CLI binary for <platform>-<arch> not found 오류를 발생시킵니다. 이 경우 pathToClaudeCodeExecutable을 별도로 설치된 claude 바이너리로 설정하세요.패키지 관리자가 npm의 libc 필드를 적용하지 않으면(Yarn 1.x의 경우처럼), Linux에서 glibc 및 musl 플랫폼 패키지를 모두 받게 되어 설치 크기가 대략 두 배로 증가합니다. Agent SDK v0.2.141 이상에서는 SDK가 여전히 올바른 변형을 실행합니다. 컨테이너 이미지에서 공간을 확보하려면 앱이 실행되는 libc와 일치하지 않는 플랫폼 패키지를 삭제하세요. x64의 glibc 런타임의 경우 rm -rf node_modules/@anthropic-ai/claude-agent-sdk-linux-x64-musl입니다. 개발 머신에서는 Yarn이 다음 종속성 변경 시 패키지를 다시 설치하므로 삭제가 임시적입니다.

단일 실행 파일로 컴파일

bun build --compile을 사용하여 애플리케이션을 단일 파일 실행 파일로 컴파일하면 SDK는 런타임에 번들된 CLI 바이너리를 확인할 수 없습니다. require.resolve는 컴파일된 실행 파일의 $bunfs 가상 파일 시스템 내에서 작동하지 않으므로 SDK는 Native CLI binary for <platform>-<arch> 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입니다.

Agent SDK를 번들할 때 /core 항목을 가져오기

애플리케이션이 Agent SDK를 자체 종속성과 함께 번들로 제공하는 경우 패키지 루트 대신 @anthropic-ai/claude-agent-sdk/core에서 가져오세요. /core 항목은 TypeScript Agent SDK v0.3.282 이상이 필요하며, 해당 타입은 TypeScript 5.0 이상이 필요합니다. /core 항목은 루트 항목과 동일한 query(), startup(), tool(), createSdkMcpServer(), resolveSettings()를 내보내며, 세션을 이름 바꾸기, 태그 지정 및 삭제하는 함수, AbortError, 런타임 상수 및 모든 타입을 내보냅니다. 자체 이름을 추가하지 않습니다. 애플리케이션이 로드하는 코드를 작게 유지하기 위해 /core는 prewarm(), InMemorySessionStore 클래스, 세션을 나열, 읽기, 포크, 가져오기 및 요약하는 헬퍼를 포함한 일부 루트 내보내기를 제외합니다. 이 중 하나가 필요한 경우 대신 루트 항목을 사용하세요. 루트 항목은 zod 및 @modelcontextprotocol/sdk의 자체 복사본을 인라인합니다. /core 항목은 Agent SDK의 peerDependencies가 선언하는 범위에서 node_modules에서 이들을 가져오므로, 이미 포함된 번들은 두 번째 복사본을 전달하지 않습니다. 주어진 프로세스에서 루트 또는 /core 중 하나에서 가져오세요. 둘 다에서 가져오지 마세요. 이들은 별도의 번들이며, 둘 다 로드하면 Agent SDK의 클래스 및 상태의 두 복사본을 얻게 됩니다.

함수

query()

Claude Code와 상호작용하기 위한 주요 함수입니다. 메시지가 도착하는 대로 스트리밍하는 비동기 생성기를 생성합니다.

매개변수

반환값

추가 메서드가 포함된 AsyncGenerator<SDKMessage, void>를 확장하는 Query 객체를 반환합니다.

startup()

프롬프트를 사용할 수 있기 전에 CLI 부프로세스를 생성하고 초기화 핸드셰이크를 완료하여 미리 준비합니다. 반환된 WarmQuery 핸들은 나중에 프롬프트를 수락하고 이미 준비된 프로세스에 작성하므로 첫 번째 query() 호출이 부프로세스 생성 및 초기화 비용을 인라인으로 지불하지 않고 해결됩니다. 세션의 작업 디렉터리를 아직 모르는 경우 대신 prewarm()을 사용합니다.

매개변수

반환값

부프로세스가 생성되고 초기화 핸드셰이크를 완료한 후 해결되는 Promise<WarmQuery>를 반환합니다.

예제

startup()을 조기에 호출합니다(예: 애플리케이션 부팅 시). 그런 다음 프롬프트가 준비되면 반환된 핸들에서 .query()를 호출합니다. 이렇게 하면 부프로세스 생성 및 초기화가 중요 경로에서 제거됩니다.

prewarm()

알파. 어느 세션을 제공할지 알기 전에 Claude Code 프로세스를 스페어로 미리 시작하여 나중에 claim()으로 세션에 바인딩할 수 있습니다. 사용자가 폴더를 선택하기 전에 부팅되는 애플리케이션에서 사용합니다. TypeScript Agent SDK v0.3.282 이상이 필요합니다. prewarm()은 startup()과 동일한 초기화 핸드셰이크를 완료하며, options.cwd를 설정할 때 해당 디렉터리에서 프로세스가 대기하고, 그렇지 않으면 Claude Code 구성 디렉터리 아래의 개인 임시 디렉터리에서 대기합니다. 세션의 작업 디렉터리, 해당 SessionStart 훅, 해당 stdio MCP 서버, 해당 CLAUDE.md 및 git 컨텍스트는 클레임을 기다립니다. 스페어는 대기하는 동안 대략 230~260 MB의 메모리를 보유합니다. spawnClaudeCodeProcess가 다른 머신이나 컨테이너에서 Claude Code를 실행하는 경우 options.cwd를 해당 환경에 존재하는 디렉터리로 설정하여 스페어가 그곳에서 대기하도록 합니다.
options 및 initializeTimeoutMs는 startup()과 동일한 의미를 가지며, options.cwd는 스페어가 대기하는 디렉터리만 설정합니다. 프로미스는 프로세스가 초기화 핸드셰이크를 완료한 후 SpareProcess로 해결됩니다. prewarm()은 options가 resume, continue 또는 forkSession을 설정하면 throw합니다. 스페어는 아직 세션이 없기 때문입니다. 클레임이 설정할 수 없는 모든 것(예: mcpServers, hooks, canUseTool, settingSources, systemPrompt 및 plugins)은 스페어의 수명 동안 고정되므로 해당 옵션의 고유한 집합마다 하나의 스페어를 유지하고 변경될 때 다시 미리 준비합니다.

예제

애플리케이션 부팅 시 미리 준비한 다음 사용자가 세션을 시작할 때 스페어를 클레임합니다:

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을 전달합니다. 반복 호출은 안전하며 가장 최근 태그가 우선합니다.

매개변수

forkSession()

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

매개변수

새 세션의 UUID인 { sessionId }를 반환합니다. 분기된 세션을 계속하려면 이를 resume으로 전달합니다. 분기된 세션에는 원본 세션의 파일 체크포인트가 포함되지 않으므로 분기 이전에 캡처된 체크포인트로 되감을 수 없습니다. forkSession()은 다음 경우에 throw합니다:
  • sessionId가 UUID가 아닌 경우
  • 세션을 찾을 수 없거나 세션에 메시지가 없는 경우
  • upToMessageId가 트랜스크립트의 어떤 메시지와도 일치하지 않는 경우

resolveSettings()

Claude CLI를 생성하지 않고 CLI와 동일한 병합 엔진을 사용하여 주어진 디렉터리에 대한 유효한 Claude Code 설정을 해결합니다. query() 호출을 실행하기 전에 해당 호출이 보게 될 구성을 검사하는 데 사용합니다.
이 함수는 알파 버전이며 안정화 전에 API가 변경될 수 있습니다.
스냅샷은 라이브 query() 세션이 적용하는 것과 다릅니다:
  • policyHelper: resolveSettings()는 macOS plist 및 Windows HKLM/HKCU를 포함한 MDM 소스를 읽지만 관리자 구성 policyHelper 부프로세스를 실행하지 않습니다.
  • 서버 관리형 설정: resolveSettings()는 서버 관리형 설정을 가져오지 않습니다. 포함하려면 options.serverManagedSettings으로 전달합니다.
  • defaultMode: 스냅샷은 모든 계층에서 permissions.defaultMode를 그대로 반환하므로 프로젝트 및 로컬 설정의 'auto' 및 'bypassPermissions' 값을 포함할 수 있으며, 라이브 세션은 이를 무시합니다.

매개변수

resolveSettings()는 단일 옵션 객체를 수락합니다. 모든 필드는 선택적입니다.

반환 유형: ResolvedSettings

resolveSettings()는 병합된 설정 및 각 키에 기여한 소스를 설명하는 객체를 반환합니다.

예제

아래 예제는 프로젝트 디렉터리에 대한 설정을 해결하고 정리 기간을 제어하는 소스를 인쇄합니다. 설정 파일이 cleanupPeriodDays를 설정하지 않는 머신에서는 두 인쇄된 줄 모두 값에 대해 undefined를 표시하며, 이는 오류가 아닌 예상된 출력입니다.

타입

Options

query() 함수의 구성 객체입니다.

느리거나 멈춘 API 응답 처리

CLI 하위 프로세스는 API 타임아웃과 멈춤 감지를 제어하는 여러 환경 변수를 읽습니다. 이 변수들을 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으로 열어 둔 응답을 감시기가 기다리는 동안, includePartialMessages를 설정한 호스트는 ping 스트림 이벤트를 계속 수신합니다. 따라서 응답이 없다고 세션을 타임아웃 처리하지 말고 이러한 프레임을 활성 상태 신호로 읽으세요. v2.1.257 이전에는 마지막 실제 스트림 이벤트 후 5분이 지나면 프레임이 중단되었습니다.

Query 객체

query() 함수가 반환하는 인터페이스입니다.

메서드

applyFlagSettings()

쿼리를 다시 시작하지 않고 실행 중인 세션의 설정을 변경합니다. 에이전트가 신뢰할 수 없는 입력을 읽은 후 permissions를 강화하는 경우처럼, 전용 setter가 없는 설정을 세션 중에 변경해야 할 때 사용하세요. setModel()과 setPermissionMode()는 해당 두 키의 전용 setter이며, applyFlagSettings()는 설정 키의 어떤 하위 집합이든 허용하는 일반 형식입니다. 여기에 model을 전달하면 setModel()과 동일하게 동작합니다. 일부 키만 세션 중에 적용됩니다.
  • 다음 턴에 적용: effortLevel, ultracode, permissions, hooks, skillOverrides, fastMode, agent. agent를 전환하면 해당 에이전트의 모델 재정의와 훅도 다음 턴에 적용됩니다. 에이전트의 시스템 프롬프트는 다음 턴에 적용되거나, 기록된 시스템 프롬프트를 재사용하는 세션에서는 세션이 압축된 후에 적용됩니다.
  • 현재 턴 중에 적용: model. Claude가 턴을 처리하는 동안 model을 전환하면, Claude가 이미 생성 중인 응답은 이전 모델로 완료되고, Claude Code가 모델에 보내는 다음 호출부터 턴의 나머지 부분은 새 모델을 사용합니다. 서브에이전트는 자체 모델을 유지합니다. v2.1.212 이전에는 턴 중간의 전환이 다음 턴까지 대기했습니다.
  • 세션 중에는 효과 없음: 시스템 프롬프트 옵션. 이 옵션은 시작 시 한 번만 확인되므로, 호출이 성공하더라도 실행 중인 세션은 원래 값을 유지합니다. 변경하려면 새 세션을 시작하세요.
effortLevel은 effort 수준 이름을 허용합니다. 또한 "ultracode"도 허용하는데, 이는 ultracode를 켠 상태에서 xhigh effort를 요청합니다. applyFlagSettings()는 이 값 없이 effortLevel을 선언하므로, TypeScript에서 동일한 결과를 얻으려면 { ultracode: true, effortLevel: "xhigh" }를 전달하거나, 세션의 현재 effort 수준에서 ultracode를 켜려면 ultracode 키만 전달하세요. ultracode 값에는 Claude Code v2.1.203 이상이 필요하며, 설정 파일의 effortLevel 키가 아닌 applyFlagSettings()에서만 허용됩니다. v2.1.284 이전에는 ultracode 키만 전달해도 수준이 xhigh로 설정되었습니다. 값은 플래그 설정 계층에 기록되며, 시작 시 query()의 인라인 settings 옵션이 설정한 값 위에 병합됩니다. 이는 페이지 내 우선순위 섹션에서 프로그래밍 방식 옵션이라고 부르는 것과 동일한 계층입니다. 연속 호출은 최상위 키를 얕게 병합합니다. { permissions: {...} }로 두 번째 호출을 하면 이전 호출의 permissions 객체에 깊게 병합되지 않고 전체 객체가 대체됩니다. applyFlagSettings()로 설정한 키를 지우려면 해당 키에 null을 전달하세요. 그러면 대부분의 키는 먼저 시작 시 query()의 settings 옵션이 설정한 값으로 폴백하고, 그다음 우선순위가 더 낮은 소스로 폴백합니다. 지워진 model은 설정 파일이 model을 설정하더라도 Claude Code의 기본 모델로 재설정됩니다. undefined를 전달하면 JSON 직렬화 시 삭제되므로 효과가 없습니다. model 외에 세 개의 키는 폴백하는 대신 세션 상태를 재설정합니다.
  • effortLevel: null은 query()의 effort 옵션이나 설정 파일의 effortLevel이 아닌, 모델의 기본 effort 수준으로 세션을 되돌립니다.
  • agent: null은 query()의 agent 옵션이나 설정 파일의 agent를 복원하는 대신, 다음 턴부터 에이전트 없이 메인 스레드를 실행합니다. 지워진 에이전트가 자체 모델을 적용했었다면 세션은 시작 시 확인된 모델로 돌아갑니다.
  • ultracode: null은 설정 파일의 ultracode 값을 복원하는 대신 false와 마찬가지로 ultracode를 끕니다. 세션은 현재 effort 수준을 유지하므로, 변경하려면 같은 호출에서 effortLevel을 전달하세요.
setModel() 및 setPermissionMode()와 동일한 제약으로, 스트리밍 입력 모드에서만 사용할 수 있습니다. 아래 예시는 세션 중에 활성 모델을 전환한 다음, 재정의를 지워 모델을 Claude Code의 기본 모델로 재설정합니다.
applyFlagSettings()는 TypeScript 전용입니다. Python SDK에는 이에 해당하는 메서드가 없습니다.

updateSettings()

허용 목록에 있는 키 하나를 디스크의 설정 파일에 기록하여, 해당 소스를 로드하는 이후 세션에서도 값이 유지되도록 합니다. 각 소스는 문자열 값을 가진 키 하나를 허용합니다.
  • "localSettings": outputStyle을 허용하며, 이를 프로젝트의 로컬 설정 파일인 .claude/settings.local.json에 병합합니다. 새 스타일은 세션의 다음 요청부터 적용됩니다.
  • "userSettings": effortLevel을 허용하며, 이를 사용자 설정 파일의 modelSettings 아래에 세션의 현재 모델에 대한 기본 effort 수준으로 저장합니다. max는 세션 전용이므로 max를 전달하면 아무것도 기록되지 않습니다. 어느 경우든 실행 중인 세션은 현재 effort 수준을 유지하므로, 이것도 변경하려면 applyFlagSettings()를 호출하세요. 이 소스에는 Claude Code v2.1.277이 번들된 TypeScript SDK v0.3.277 이상이 필요합니다.
요청에 다른 키가 포함된 경우, 세션이 원격 전송을 통해 실행되는 경우, 세션의 settingSources가 지정한 소스를 제외하는 경우에는 호출이 거부됩니다. 키 삭제는 지원되지 않습니다.

toggleMcpServer()

서버를 비활성화하면 연결이 끊기고 해당 도구가 세션에서 제거됩니다. 세션 중에 추가한 서버와 프로세스 내 서버의 경우, 이는 Claude Code 버전에 따라 달라집니다.
  • 세션 중에 setMcpServers()로 추가한 stdio, SSE 또는 HTTP 서버: 해당 도구를 제거하려면 Claude Code v2.1.285 이상이 필요합니다.
  • createSdkMcpServer()로 생성한 프로세스 내 서버(mcpServers로 전달했든 setMcpServers()로 전달했든): 연결을 끊고 해당 도구를 제거하려면 Claude Code v2.1.286 이상이 필요합니다. 이러한 서버를 비활성화하면 아직 실행 중인 해당 서버의 도구 호출도 실패 처리되므로, Claude는 핸들러가 반환될 때까지 기다리지 않고 각 호출에 대한 오류 결과를 즉시 받습니다.

WarmQuery

startup()이 반환하는 핸들입니다. 하위 프로세스가 이미 생성되고 초기화되어 있으므로, 이 핸들에서 query()를 호출하면 시작 지연 없이 준비된 프로세스에 프롬프트를 직접 기록합니다.

메서드

WarmQuery는 AsyncDisposable을 구현하므로, 자동 정리를 위해 await using과 함께 사용할 수 있습니다.

SpareProcess

알파. prewarm()이 반환하는 핸들로, 아직 세션에 바인딩되지 않았으며 한 번 claim할 수 있는 시작된 Claude Code 프로세스입니다. TypeScript Agent SDK v0.3.282 이상이 필요합니다.

멤버

options.cwd는 필수입니다. claim에서는 additionalDirectories, model, permissionMode, maxThinkingTokens, settings의 플래그 설정 오버레이, appendSystemPrompt, title, agents, env의 세션별 토큰도 설정할 수 있습니다. Claude Code는 존재하지 않는 폴더나 프로젝트 설정에서 env, agent 또는 model을 설정하는 폴더 등에 대해 claim을 거부할 수 있습니다. 거부된 후에는 claim()이 이미 보낸 프롬프트가 not_claimed로 시작하는 텍스트의 오류 결과를 받고, 반환된 쿼리는 예외를 던집니다. 예외 이후에도 계속 진행하려면 쿼리 루프를 try 블록으로 감싸세요. claimed가 option_not_applied로 시작하는 메시지와 함께 reject되면, 세션은 요청한 model 또는 maxThinkingTokens 없이 실행 중인 것입니다. 그 외의 reject 후에는 프롬프트가 실행되지 않았으므로, 대신 query()로 세션을 시작하세요.

SDKControlInitializeResponse

initializationResult()의 반환 타입입니다. 세션 초기화 데이터를 포함합니다.
hooks_applied는 initialize 요청에 포함된 hooks를 Claude Code가 등록했는지 여부를 보고합니다. SDK는 세션이 시작될 때 이 요청을 한 번 보내고, reinitialize()를 호출할 때마다 다시 보냅니다. 이 필드에는 Agent SDK v0.3.238 이상이 필요합니다. 요청에 훅이 포함되지 않은 경우 Claude Code는 이 필드를 생략합니다. 요청에 훅이 포함된 경우, 값은 해당 요청이 세션의 첫 번째 initialize인지, 그리고 반복된 요청이라면 어떤 경로로 세션에 도달했는지에 따라 달라집니다.
  • true: Claude Code가 훅을 등록했습니다. 세션의 첫 번째 initialize는 이 값을 반환합니다. CLI의 stdin을 통해 전송된 반복 initialize도 true를 반환합니다. 이 경우 새 요청의 훅이 이전에 등록된 훅을 대체합니다.
  • false: Claude Code가 훅을 무시했습니다. 원격 세션으로 전송된 반복 initialize는 이 값을 반환하므로, 세션에 참여하는 두 번째 클라이언트가 첫 번째 클라이언트가 등록한 훅을 대체할 수 없습니다.
Agent SDK v0.3.238 이전에는 응답에 이 필드가 포함되지 않았으며, Claude Code는 반복되는 모든 initialize에서 hooks를 무시했습니다. 요청의 sdkMcpServerManifests 필드와 응답의 sdk_mcp_manifests_parked 필드는 createSdkMcpServer()로 생성한 프로세스 내 SDK MCP 서버를 위한 것입니다. 애플리케이션에서는 두 필드 모두 설정하거나 읽지 않습니다. claude_code_version은 세션의 턴을 실행하는 프로세스의 Claude Code 버전입니다. SDKSystemMessage init 메시지에 포함된 값과 동일하므로, 첫 번째 턴 전에 CLI 버전을 읽을 수 있습니다.
  • 이 필드에는 Claude Code v2.1.296이 번들된 Agent SDK v0.3.296 이상이 필요합니다.
  • 필드가 undefined이고 pathToClaudeCodeExecutable을 설정한 경우, 이를 Claude Code v2.1.296 이상으로 지정하세요.
응답은 항상 fast_mode_state를 보고하며, 무언가가 빠른 모드를 차단하는 경우 fast_mode_disabled_reason이 그와 함께 이유 코드를 전달하므로, 가용성을 다시 도출하는 대신 차단된 상태를 설명할 수 있습니다. 두 동작 모두 Claude Code v2.1.219 이상이 필요합니다. v2.1.219 이전에는 빠른 모드를 사용할 수 없을 때 응답에서 fast_mode_state가 생략되었고 이유도 전달되지 않았습니다. 이유 코드와 그 의미는 결과 메시지의 fast_mode_disabled_reason을 참조하세요. 성공한 initialize의 제어 응답 래퍼에는 pending_permission_requests 배열도 포함됩니다. 이 필드는 위의 SDKControlInitializeResponse 페이로드가 아니라 응답 래퍼 자체에 있습니다. 각 항목은 세션이 실행 중에 권한 요청을 위해 스트리밍하는 것과 동일한 { type: "control_request", request_id, request } 형태의 완전한 control_request 메시지입니다. 이 배열은 이 Claude Code 프로세스가 발행했지만 아직 해결되지 않은 권한 요청을 나열합니다. SDK는 이 배열을 대신 읽고 각 항목을 canUseTool 콜백으로 전달하며, 이는 전송 공백 후 reinitialize()가 트리거하는 것과 동일한 재전달입니다. 항목이 연결이 끊기기 전에 콜백이 이미 받은 요청을 반복할 수 있으므로, 반복되는 요청 ID를 멱등하게 처리하세요. 이 배열은 성공한 initialize 응답에 항상 존재하며, 이 프로세스에 해결되지 않은 권한 요청이 없으면 비어 있습니다. Claude Code v2.1.268 이상이 필요합니다. 이전 버전에서는 이 필드가 생략될 수 있으므로, 와이어 프로토콜을 직접 파싱하는 경우 필드가 없으면 대기 중인 항목이 없다는 증거가 아니라 이전 CLI로 간주하세요.

SDKControlInterruptResponse

중단 확인 영수증으로, SDKSystemMessage.capabilities에서 interrupt_receipt_v1 기능을 알리는 CLI에서 interrupt()가 resolve되는 값입니다. Claude Code v2.1.205 이상이 필요합니다. 이전 CLI는 빈 성공 페이로드로 중단에 응답하므로 interrupt()는 undefined로 resolve됩니다.
still_queued는 중단 시점에 대기 중이던 사용자 메시지의 UUID를 나열합니다. 여기에는 아직 큐에 있는 메시지와, Claude Code가 다음 턴을 위해 이미 큐에서 꺼낸 메시지가 포함됩니다. 세션의 첫 번째 턴이 시작된 후에는, 먼저 취소하지 않는 한 Claude Code가 중단 후 나열된 메시지를 처리하며 여러 메시지를 하나의 턴으로 병합할 수 있습니다. 첫 번째 턴이 시작되기 전에 중단하면 Claude Code는 해당 턴이 시작되자마자 중단하며, 그 턴에 나열된 메시지는 응답을 받지 못합니다. 영수증을 사용하여 다시 보낼 항목이 있는지 결정하세요. 취소하지 않은 나열된 메시지는 응답을 받든 받지 않든 대화에 포함되므로, 다시 보내면 Claude에게 두 번 전달됩니다. 다음 주의 사항을 고려하여 목록을 해석하세요.
  • UUID와 함께 큐에 추가된 메시지만 나타납니다. 빈 배열이 다른 어떤 것도 실행되지 않는다는 의미는 아닙니다.
  • 메인 스레드 메시지만 나열됩니다. 서브에이전트에 전달되는 메시지는 범위에 포함되지 않습니다.
  • 목록에는 예약 작업 트리거와 같이 클라이언트가 보내지 않은 UUID가 포함될 수 있습니다. 인식하지 못하는 UUID는 오류로 처리하지 말고 무시하세요.
interrupt()를 사용하지 않고 CLI의 제어 프로토콜을 직접 구동하는 클라이언트는 interrupt 제어 요청에 cancel_queued: true를 설정할 수 있습니다. Claude Code v2.1.219 이상은 SDKSystemMessage.capabilities의 interrupt_cancel_queued_v1 기능으로 지원 여부를 알리며, 이전 CLI는 이 필드를 무시하고 대기 중인 메시지를 평소처럼 실행합니다. 이러한 중단은 원래 still_queued에 나열되었을 모든 메시지도 취소합니다. 영수증은 대신 이 메시지들을 cancelled에 나열하고, still_queued는 비어 있으며, 해당 메시지는 하나도 실행되지 않습니다. cancelled 목록에는 still_queued와 동일한 주의 사항이 적용됩니다. interrupt() 메서드는 cancel_queued를 보내지 않으므로, 이 메서드가 resolve하는 영수증에는 cancelled가 포함되지 않습니다. 영수증은 중단이 처리되는 시점에 찍은 스냅샷이며, 정상적인 중단에서는 중단된 턴의 SDKResultMessage보다 먼저 도착합니다. 해당 결과 이후에 큐를 검사하지 말고 영수증을 읽으세요. 루프는 다음 대기 턴을 즉시 시작하므로, 결과 이후에 검사하는 큐는 이미 변경된 상태입니다.

SDKControlGetContextUsageResponse

getContextUsage()의 반환 타입입니다. 기본 detail을 사용하면 대화형 세션에서 Claude Code가 /context 명령에 대해 렌더링하는 것과 동일한 페이로드이므로, 토큰 수와 함께 Claude Code가 /context 사용량 그리드를 그리는 데 사용하는 color 및 gridRows와 같은 표시용 필드도 포함합니다. 메서드의 선택적 detail 인수는 Claude Code가 각 카테고리를 계산하는 방식을 선택합니다. detail 인수에는 Agent SDK v0.3.257 이상이 필요합니다.
  • 'full': 기본값입니다. Claude Code는 토큰 계산 API 요청으로 각 카테고리를 계산합니다. 이러한 요청은 메시지 스트림에 나타나지 않으므로, 스트림을 읽는 비용 추적에서는 이를 볼 수 없습니다. Anthropic API에서는 토큰 계산에 요금이 청구되지 않습니다.
  • 'summary': 대신 마지막 응답의 사용량과 로컬 추정치로 답을 얻으려면 { detail: 'summary' }를 전달하세요. 토큰 계산 요청이 전송되지 않으며, 카테고리별 수치는 근삿값입니다.
메서드를 호출하는 대신 /context를 프롬프트로 보내면, Claude Code는 결과를 전달하는 assistant 메시지의 context_usage 필드에 SDKContextUsage 페이로드를 첨부합니다. 이 필드에는 Agent SDK v0.3.232 이상이 필요합니다.
토큰 귀속 정보는 컬렉션 필드에서 읽으세요.
  • categories는 카테고리별 합계를 담습니다. 각 항목의 kind는 SDKContextUsageCategory와 동일한 값으로 행을 분류합니다. 표시용 name이 아닌 이 필드를 기준으로 행을 분류하세요. 이 필드에는 Agent SDK v0.3.268 이상이 필요합니다.
  • mcpTools와 agents는 개별 MCP 도구와 서브에이전트에 토큰을 귀속합니다.
  • memoryFiles는 로드된 각 메모리 파일과 그 비용을 나열합니다.
  • skills.skillFrontmatter는 스킬 목록의 토큰을 포함된 각 스킬에 귀속합니다. 스킬별 수치는 Claude Code가 실제로 보내는 각 스킬의 목록 항목을 측정하며, 이는 스킬의 전체 frontmatter보다 짧을 수 있습니다. 발견된 모든 스킬이 목록에 포함되었는지 확인하려면 skills.totalSkills와 skills.includedSkills를 비교하세요.
totalTokens는 세션의 현재 컨텍스트 사용량이고, maxTokens는 해당 사용량을 측정하는 기준 윈도우입니다. 이 윈도우는 모델의 컨텍스트 윈도우이거나, 적용되는 경우 더 낮은 자동 압축 윈도우입니다. rawMaxTokens는 maxTokens와 동일한 값을 가지며, percentage는 해당 윈도우에 대한 totalTokens의 반올림된 백분율입니다. apiUsage는 세션의 누적 합계가 아니라 최신 API 응답의 사용량을 담습니다. Claude Code는 선택적 진단 필드인 deferredBuiltinTools, systemTools, systemPromptSections를 설정하지 않으므로, 타입에 선언되어 있더라도 이 필드들은 없을 것으로 예상하세요.

SDKControlReadFileResponse

readFile()의 반환 타입입니다.
contents는 파일 텍스트를 담으며, encoding: 'base64'를 요청한 경우에는 base64 데이터를 담습니다. 이 경우 응답의 encoding 필드는 'base64'로 설정됩니다. absPath는 확인된 절대 경로입니다. truncated는 파일이 maxBytes 상한보다 길어서 내용이 해당 한도에서 잘린 경우에 설정됩니다.

readFile()이 읽을 수 있는 파일

readFile()은 Read 도구보다 좁은 범위의 파일을 제공합니다.
  • cwd 및 additionalDirectories와 같은 세션의 작업 디렉터리 중 하나에 있는 일반 파일
  • 도구 결과와 같이 세션에 대한 Claude Code 자체 파일 일부
Read 거부 및 확인 요청 규칙은 여전히 일치하는 경로를 차단하며, 광범위한 Read 허용 규칙이 나머지 파일 시스템을 readFile()에 개방하지는 않습니다. 그 외의 경우 호출은 null로 resolve됩니다.

SDKControlReloadPluginsResponse

reloadPlugins()의 반환 타입입니다.
컬렉션 필드는 호출 후의 세션을 설명합니다.
  • commands, agents, mcpServers: 세션의 명령, 서브에이전트, MCP 서버 상태로, supportedCommands(), supportedAgents(), mcpServerStatus()가 반환하는 것과 동일한 형태입니다. supportedAgents()는 초기화 시 캡처된 목록을 계속 반환하므로, 다시 로드한 후의 집합은 여기의 agents에서 읽으세요
  • plugins: 로드된 각 플러그인과 그 name 및 설치 path입니다. version은 플러그인 매니페스트가 선언한 내용을 그대로 반영하며 플러그인 작성자가 제어하므로, 신뢰하기 전에 검증하세요. 매니페스트에 선언이 없으면 생략됩니다
  • error_count: 플러그인 로드 중 발생한 오류 수입니다
대화의 프롬프트 캐시를 무효화할 다시 로드를 적용하는 대신 보류하려면 reloadPlugins()에 { holdOnCacheImpact: true }를 전달하세요. Claude Code는 대화형 /reload-plugins 명령이 캐시 비용에 대해 경고하기 전에 수행하는 검사를 실행합니다. 이 옵션에는 Agent SDK v0.3.268 이상이 필요합니다. pathToClaudeCodeExecutable로 지정한 실행 파일처럼 v2.1.268보다 오래된 Claude Code 실행 파일은 이 옵션을 무시하고 다시 로드를 적용합니다. 이 옵션을 전달한 경우 held를 읽어 결과를 확인하세요.
  • true: 다시 로드가 적용되지 않았으며, 컬렉션 필드는 여전히 현재 상태의 세션을 설명합니다. cache_impact는 적용 시 무엇이 변경되는지 알려 줍니다. 그래도 적용하려면 옵션 없이 reloadPlugins()를 다시 호출하세요.
  • false: 검사에서 캐시 영향이 발견되지 않았으며, 다시 로드가 적용되었습니다.
  • 없음: 옵션을 전달하지 않았거나, Claude Code 실행 파일이 v2.1.268보다 오래되어 다시 로드를 적용했습니다.
cache_impact는 held: true와 함께 있을 때만 존재합니다. mcp_servers_added와 mcp_servers_removed는 다시 로드가 등록하거나 제거할 플러그인 MCP 서버를 범위가 지정된 plugin:<plugin>:<server> 이름으로 나타냅니다. 이 이름은 플러그인 작성자가 정하므로 표시하기 전에 검증하세요. lsp_tool_change는 적용 시 LSP 도구가 추가되는지 제거되는지를 나타내며, 둘 다 아니면 null입니다. may- 형식은 검사가 대기 중인 플러그인 집합을 완전히 파악할 수 없었음을 의미합니다.

SDKControlReloadSkillsResponse

reloadSkills()의 반환 타입입니다.
skills는 다시 로드한 후 사용 가능한 스킬을 supportedCommands()가 반환하는 것과 동일한 SlashCommand 형태로 나열합니다.

SDKControlReloadOutputStylesResponse

reloadOutputStyles()의 반환 타입입니다.
available_output_styles는 다시 로드한 후 사용 가능한 기본 제공 및 사용자 지정 출력 스타일의 이름을 나열합니다.

SDKControlMcpReadResourceResponse

readMcpResource()의 반환 타입으로, MCP 서버의 resources/read 결과를 담습니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다.
readMcpResource()에는 mcpServerStatus()가 보고하는 서버 이름과, 도구가 _meta에서 선언하는 ui.resourceUri와 같은 ui:// URI를 전달하세요. 다른 URI 스킴, 애플리케이션이 직접 호스팅하는 SDK MCP 서버, 연결되지 않은 서버에 대해서는 호출이 거부됩니다. init 메시지의 capabilities에 mcp_read_resource_v1이 포함된 경우에 사용할 수 있습니다. 각 contents 항목은 서버가 보낸 콘텐츠 항목 하나이며, Claude Code용으로 예약된 com.anthropic/ 접두사 아래의 _meta 키는 제외됩니다. blob은 바이너리 항목의 base64 데이터를 담고, _meta는 항목 자체의 _meta로, MCP Apps 서버가 리소스의 ui.csp와 ui.permissions를 넣는 곳입니다. 콘텐츠는 신뢰할 수 없는 서드파티 HTML이므로 샌드박스에서 렌더링하세요.

AgentDefinition

프로그래밍 방식으로 정의된 서브에이전트의 구성입니다.

AgentMcpServerSpec

서브에이전트에서 사용할 수 있는 MCP 서버를 지정합니다. 서버 이름(상위의 mcpServers 구성에 있는 서버를 참조하는 문자열)이거나, 서버 이름을 구성에 매핑하는 인라인 서버 구성 레코드일 수 있습니다.
여기서 McpServerConfigForProcessTransport는 McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig입니다.

SettingSource

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

기본 동작

settingSources가 생략되거나 undefined인 경우, query()는 Claude Code CLI와 동일한 파일 시스템 설정(user, project, local)을 로드합니다. 이 옵션과 관계없이 읽히는 입력과 이를 비활성화하는 방법은 settingSources가 제어하지 않는 항목을 참조하세요.

settingSources를 사용하는 이유

파일 시스템 설정 비활성화:
특정 설정 소스만 로드:
CLAUDE.md 프로젝트 지침을 로드하려면 settingSources에 "project"를 포함하세요. CLAUDE.md 로딩이 시스템 프롬프트 옵션과 어떻게 상호 작용하는지는 시스템 프롬프트 수정을 참조하세요.

설정 우선순위

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

PermissionMode

CanUseTool

도구 사용을 제어하기 위한 사용자 정의 권한 함수 타입입니다. 이 함수는 대화형 권한 프롬프트를 대체하는 SDK 기능으로, 권한 평가 흐름이 프롬프트로 귀결될 때만 호출됩니다. allowedTools 항목, 설정의 allow 규칙, 또는 acceptEdits나 bypassPermissions 같은 권한 모드에 의해 이미 승인된 도구 호출은 이 함수를 호출하지 않습니다. 모든 도구 호출을 제어하려면 대신 PreToolUse 훅을 사용하세요. allow 규칙은 어떤 모드에서도 자동 승인되지 않는 작업을 사전 승인하지 않습니다. 그중 어떤 작업이 콜백에 도달하는지, 그리고 dontAsk 및 auto 모드에서 어떻게 처리되는지는 권한 평가 방식을 참조하세요.
콜백은 일반적으로 PermissionResult를 반환하여 요청을 처리하며, SDK는 이를 자체 전송 계층을 통해 control_response로 다시 기록합니다. 애플리케이션이 requestId를 포함하여 자체 채널로 이 요청에 대한 control_response를 이미 보낸 경우에만 null을 반환하세요. 그러면 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', 'account_on_hold', 'billing_error', 'rate_limit', 'overloaded', 'invalid_request', 'model_not_found', 'server_error', 'max_output_tokens', 'cloud_credential_error', 'unknown' 중 하나입니다. 이 중 네 가지 값은 이름보다 더 많은 의미를 가집니다.
  • 'model_not_found': 선택한 모델이 존재하지 않거나 사용자의 계정 또는 배포에서 사용할 수 없습니다
  • 'overloaded': 서버 용량이 가득 차서 API가 529를 반환했습니다. 이는 할당량에 대한 429인 'rate_limit'과 구별됩니다
  • 'account_on_hold': 계정이 보류 상태입니다
  • 'cloud_credential_error': Claude Code가 실행 중인 머신에서 사용 가능한 AWS 또는 Google Cloud 자격 증명을 얻지 못해 어떤 요청도 클라우드 공급자에 도달하지 않았습니다. 일반적인 원인은 해당 머신에서 클라우드 로그인이 만료되었거나 완료되지 않은 것이지만, 자격 증명 서비스에 일시적으로 연결할 수 없는 경우에도 같은 값이 보고됩니다. Could not load AWS or Google Cloud credentials를 참조하세요. Claude Code v2.1.267을 번들로 포함하는 TypeScript Agent SDK v0.3.267 이상이 필요합니다
aborted는 인터럽트 또는 중단으로 인해 스트림이 완료되기 전에 어시스턴트 메시지가 잘렸을 때 true입니다. 이 경우 메시지에는 stop_reason이 없으며 콘텐츠가 단어 중간에서 끝날 수 있습니다. 정상적으로 완료된 메시지에는 이 필드가 없습니다. Agent SDK v0.3.214 이상이 필요합니다. agent_id는 메시지를 생성한 서브에이전트를 식별하며, 메인 스레드 메시지에는 없습니다. 이 값은 해당 서브에이전트의 task_started 및 기타 작업 이벤트의 task_id와 같으며, 서브에이전트가 재개되어도 변경되지 않습니다. 이 필드에는 Agent SDK v0.3.292 이상이 필요합니다. 서브에이전트의 메시지를 작업 이벤트와 매칭할 때는 메시지의 parent_tool_use_id를 작업 이벤트의 tool_use_id와 짝짓지 말고 agent_id를 기준으로 매칭하세요. 도구 호출이 서브에이전트를 재개하면 작업 이벤트는 해당 호출의 tool_use_id를 가지지만, 메시지는 서브에이전트를 처음 시작한 도구 호출의 parent_tool_use_id를 유지하므로 두 값이 더 이상 일치하지 않습니다. Claude Code는 user_message_uuid에 설명된 조건에 따라 턴의 첫 번째 어시스턴트 메시지에 user_message_uuid와 user_message_uuids를 설정합니다. 재시작으로 중단된 턴을 이어가는 턴인 경우, 해당 필드를 포함하는 어시스턴트 메시지에는 resume_reason도 포함됩니다. timestamp는 메시지를 생성한 프로세스에서 메시지 콘텐츠 생성이 완료된 ISO 8601 시각입니다. 이 값은 해당 머신의 시계에서 가져오므로 표시 용도로만 사용하고 메시지 정렬에는 사용하지 마세요. 하나의 API 턴이 같은 message.id를 공유하는 여러 어시스턴트 메시지를 생성할 수 있으며, 각 메시지는 고유한 timestamp를 가집니다. 이 필드가 없으면 메시지를 수신한 시각을 대신 사용하세요. context_usage는 SDKContextUsage 타입으로 된 /context 보고서의 구조화된 사본이며 Agent SDK v0.3.232 이상이 필요합니다. /context를 프롬프트로 보내면 Claude Code는 message.content에 markdown 표가 담긴 어시스턴트 메시지로 보고서를 전달하고, 같은 메시지에 context_usage를 첨부합니다. Claude Code는 다른 어시스턴트 메시지에는 이 필드를 설정하지 않으며, 이전 버전은 이 필드 없이 /context 표를 전달합니다. 따라서 필드가 있으면 필드에서 세부 내역을 읽고, 없으면 markdown 텍스트를 사용하세요. usage_report는 /usage 보고서의 구조화된 사본으로, 타입은 SDKUsageReport이며 Agent SDK v0.3.273 이상이 필요합니다. /usage를 프롬프트로 보내면 Claude Code는 message.content에 텍스트를 담은 어시스턴트 메시지로 보고서를 전달합니다. 세션이 다음 조건을 모두 충족할 때만 같은 메시지에 usage_report를 첨부합니다.
  • 세션이 claude.ai 자격 증명으로 인증됨
  • 자격 증명이 알려진 플랜 유형을 나타내거나 user:profile 범위를 가짐
  • 계정이 사용량 기반 청구를 사용하지 않음
CLAUDE_CODE_OAUTH_TOKEN으로 전달된 claude setup-token 토큰은 user:inference 범위만 가지므로 기본적으로 조건을 충족하지 않습니다. API 키 세션 같은 다른 세션은 이 필드 없이 텍스트를 전달하며, 이전 버전도 마찬가지입니다. 필드가 있으면 필드에서 보고서를 읽고 없으면 텍스트를 사용하십시오.

SDKUserMessage

사용자 입력 메시지입니다.
사용자가 프롬프트 UI에 직접 입력하지 않고 붙여 넣은 콘텐츠를 보내려면 pasted_content를 설정합니다. 붙여 넣기 한 번당 하나의 항목이며, 각 항목은 문자열 또는 콘텐츠 블록 배열입니다. Claude Code는 입력된 텍스트 뒤에 각 항목의 텍스트를 순서대로 추가하며, 각 붙여 넣기를 <pasted_content> 태그로 감쌀 수 있습니다. 텍스트 이외의 블록은 무시되므로 이미지와 문서는 message.content로 보내세요. Agent SDK v0.3.277 이상이 필요합니다. message.content 중 사용자가 입력하지 않고 붙여 넣은 부분을 Claude Code에 알리려면 inline_pastes를 설정합니다. 붙여 넣기 한 번당 하나의 문자열입니다. 프롬프트 텍스트는 사용자가 넣은 위치에 그대로 유지됩니다. Claude Code는 나열된 각 붙여 넣기를 해당 위치에서 <pasted_content> 태그로 감쌀 수 있으므로, Claude는 붙여 넣은 자료와 사용자가 직접 쓴 말을 구별할 수 있습니다. 프롬프트의 마지막 텍스트 블록에 있는 붙여 넣기만 감싸집니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다. 각 붙여넣기 필드에는 크기 제한이 있습니다.
  • pasted_content: 항목과 그 안의 콘텐츠 블록을 합한 수가 1,000개를 넘으면 Claude Code는 필드 전체를 무시합니다.
  • inline_pastes: Claude Code는 비어 있지 않은 처음 100개 항목을 사용하고 나머지는 무시합니다.
보내는 메시지를 Claude Code가 처리하는 방식을 바꾸려면 shouldQuery, client_composed, 또는 priority를 설정합니다.
  • shouldQuery: false로 설정하면 어시스턴트 턴을 트리거하지 않고 메시지를 트랜스크립트에 추가합니다. 메시지는 보류되었다가 턴을 트리거하는 다음 사용자 메시지에 병합됩니다. 별도로 실행한 명령의 출력처럼 모델 호출을 소비하지 않고 컨텍스트를 주입할 때 사용합니다.
  • client_composed: true로 설정하면 Claude Code가 메시지 텍스트를 작성된 그대로 전달합니다. 이 경우 Claude Code는 @path 또는 @server:resource 멘션을 확장하지 않으며, /로 시작하는 텍스트를 명령으로 실행하지 않습니다. verbatimPrompts 옵션이 켜져 있는 동안에는 SDK가 모든 메시지에 이 필드를 설정합니다. TypeScript Agent SDK v0.3.280 이상과 Claude Code v2.1.248 이상이 필요합니다.
  • priority: 턴이 실행 중일 때 보낸 메시지가 Claude에 도달하는 시점을 제어합니다.
    • 'next' 또는 priority 필드 없음: Claude는 실행 중인 도구 호출이 끝나는 즉시 같은 턴에서 메시지를 읽습니다. 턴이 먼저 끝나면 메시지가 다음 턴을 시작합니다.
    • 'later': Claude Code는 턴이 끝날 때까지 메시지를 보류했다가 새 턴으로 보냅니다.
    • origin: { kind: "human" }과 함께 'now': Claude Code v2.1.286 이상에서는 백그라운드에서 계속될 수 있는 작업이 백그라운드로 이동하고, Claude는 같은 턴에서 메시지를 읽습니다. 이동할 수 있는 작업에는 셸 명령, 서브에이전트, MCP 도구 호출이 포함됩니다. v2.1.287 이상에서는 WebFetch 및 WebSearch 호출도 포함됩니다. Claude가 응답만 작성 중이거나 실행 중인 작업을 이동할 수 없는 경우, Claude Code는 대신 턴을 인터럽트하고 Claude가 다음으로 메시지를 읽습니다.
    • 해당 origin 없이 'now': Claude Code가 턴을 인터럽트하고 Claude가 다음으로 메시지를 읽습니다.
턴이 실행 중일 때 보내는 다음 메시지는 아직 실행 중인 셸 명령을 잃지 않고 방향을 바꾸도록 Claude에 요청합니다.
서브에이전트가 생성하는 사용자 메시지(예: 자체 도구 호출 중 하나에 대한 tool_result)는 agent_id를 가집니다. 이 필드와 버전 요구 사항은 SDKAssistantMessage에서 정의합니다. tool_result 블록을 포함한 메시지에서 tool_use_result는 모델에 전송된 텍스트가 아니라 도구의 구조화된 출력 객체입니다. 그 형태는 대응하는 tool_use 블록이 지정한 도구에 따라 달라지므로 이 필드는 unknown 타입입니다. 기본 제공 형태는 도구 출력 타입에 나열되어 있습니다. 다음 결과는 나열된 형태 이상의 처리가 필요합니다.
  • Agent 도구: tool_use_result는 AgentOutput입니다. tool_result 텍스트를 파싱하지 말고 이 값으로 렌더링하세요. completed 결과의 content에는 서브에이전트의 보고서가 담기며, 보고서를 SubagentHandback 도구 호출로 전달하는 서브에이전트의 경우에는 보고서 대신 해당 인계에 대한 짧은 메모가 담깁니다. Claude Code v2.1.271 이상의 자동 모드에서는 포크가 아닌 한 completed 결과를 생성하는 모든 서브에이전트가 그런 방식으로 보고하며, Claude는 서브에이전트로부터 별도의 메시지로 보고서를 받습니다.
  • 'now' 메시지를 전달하기 위해 Claude Code가 백그라운드로 이동한 WebFetch 또는 WebSearch 호출: 해당 호출의 tool_result를 담은 사용자 메시지에서 tool_use_result는 { detachedToolCall: true }로 설정됩니다. 호출은 계속 실행 중이며, Claude는 호출이 끝나면 결과를 받습니다. 해당 tool_use_id에 대한 두 번째 tool_result는 뒤따르지 않으므로, 애플리케이션에서 도구 호출마다 행을 그린다면 이 메시지가 도착할 때 해당 행을 백그라운드로 이동됨으로 표시하세요. Claude Code v2.1.287 이상이 필요합니다.
  • 결과에 resource_link 블록이 포함된 MCP 도구: tool_use_result는 SDKMcpResourceLink 항목의 resourceLinks 배열을 가진 객체입니다. Claude는 각 링크를 tool_result 블록의 텍스트 한 줄로 받으므로, 해당 텍스트를 파싱하는 대신 resourceLinks를 읽어 서버가 반환한 파일을 렌더링하세요. Claude Code는 결과에 링크가 없을 때와 서브에이전트의 결과에서는 resourceLinks를 생략하고, 결과당 최대 50개의 링크를 유지하며, 배열이 직렬화된 JSON 기준 64KiB에 도달하면 링크 추가를 중단합니다. resourceLinks에는 Agent SDK v0.3.257 이상이 필요합니다.
  • structuredContent를 반환하는 MCP 도구: tool_use_result는 structuredContent 멤버에 서버가 보낸 내용을, content 멤버에 McpOutput 값을 담은 객체입니다. 서브에이전트의 결과에는 structuredContent가 포함되지 않습니다.
  • structuredContent가 JSON으로 직렬화했을 때 1,048,576자를 넘는 MCP 도구: Claude Code는 tool_use_result에서 structuredContent를 제외하고 그 자리에 structuredContentOmitted: true를 설정하므로, 애플리케이션은 삭제된 객체와 아무것도 보내지 않은 도구를 구분할 수 있습니다. content와 resourceLinks 같은 다른 멤버는 유지되며, Claude가 받는 내용은 바뀌지 않습니다. Claude Code v2.1.287 이상에서 이 상한을 적용합니다. 두 종류의 도구는 다르게 동작합니다.
    • 인프로세스 SDK 서버의 도구는 예외이며 객체 전체를 전달합니다.
    • tools/list 항목에 MCP Apps ui:// 리소스를 선언한 도구는 Claude Code v2.1.295 이상에서 8,388,608자로 제한되며, v2.1.295 이전 버전에서는 예외로 처리됩니다.

SDKUserMessageReplay

필수 UUID가 있는 재생된 사용자 메시지입니다.
세션 외부에서 주입된 사용자 턴, 즉 origin kind가 peer 또는 channel인 턴은 활성 턴 중에 전달되었든 세션이 유휴 상태일 때 새 턴을 시작했든 재생 메시지로 스트림에 도달합니다. v2.1.207 이전에는 세션이 유휴 상태일 때 전달된 주입 턴이 스트림에 메시지를 생성하지 않았으며, 트랜스크립트를 다시 읽을 때만 나타났습니다.

SDKResultMessage

최종 결과 메시지입니다.
결과의 여러 필드는 subtype 이상의 진단 정보를 제공합니다.
  • api_error_status: 대화를 종료시킨 API 오류의 HTTP 상태 코드입니다. 턴이 API 오류 없이 끝난 경우 없거나 null입니다.
  • ttft_ms: 첫 번째 완전한 어시스턴트 메시지가 도착한 시점에 측정한 첫 토큰까지의 시간(밀리초)입니다. success 분기에만 있습니다.
  • ttft_stream_ms: 응답 스트림이 열리는 첫 번째 message_start 스트림 이벤트까지의 시간(밀리초)입니다. ttft_ms보다 작으며, 둘 사이의 차이는 첫 번째 메시지를 스트리밍하는 데 걸린 시간입니다. success 분기에만 있습니다.
  • user_message_uuid: 이 턴이 응답한, 사용자가 보낸 메시지의 uuid입니다. 어떤 결과에 포함되는지는 user_message_uuid를 참조하세요.
  • user_message_uuids: 이 턴에서 Claude Code가 응답한, 사용자가 보낸 모든 메시지의 uuid입니다. user_message_uuids를 참조하세요.
  • resume_reason: 이 턴이 재시작으로 중단된 턴을 이어가는 이유입니다. 두 분기 모두에 있습니다. resume_reason을 참조하세요.
  • local_command: 턴이 디스패치한 명령의 이름으로, /compact처럼 에이전트 루프에 진입하지 않고 명령이 완료한 턴의 success 결과에 있습니다. 이름은 소문자와 밑줄로 변환되므로 /reload-plugins는 reload_plugins로 보고됩니다. MCP 서버가 제공하는 명령과 기본 제공 /mcp는 mcp로 보고됩니다. 사용자가 직접 정의한 명령은 custom으로 보고됩니다. 인수는 절대 포함되지 않습니다. 에이전트 루프에 진입한 모든 턴과 명령을 실행하지 않은 전송에는 없습니다. Agent SDK v0.3.268 이상이 필요합니다.
  • request_sent_wall_ms: 서버 측 타임스탬프와 조인하기 위한, Claude Code가 API 요청을 디스패치한 시점의 epoch 밀리초입니다. API 요청을 보낸 턴의 is_error가 false인 success 결과에서 user_message_uuid와 함께일 때만 있습니다.
  • first_content_frame_ms: 첫 번째 content_block_start 또는 content_block_delta 스트림 이벤트까지의 시간(밀리초)이며, thinking 블록도 콘텐츠로 계산합니다. success 분기에서 is_error가 false일 때만 있습니다. Agent SDK v0.3.260 이상이 필요합니다.
  • first_stream_post_ms, first_stream_post_ack_ms, first_stream_post_wall_ms: 턴의 첫 번째 스트림 이벤트를 업로드하는 데 걸린 시간입니다. Claude Code는 클라우드 세션처럼 claude.ai로 스트리밍하는 세션에서만 이를 기록하며, query()가 생성하는 결과에는 포함되지 않습니다. Agent SDK v0.3.260 이상이 필요합니다.
  • usage: 메인 에이전트 루프만 해당합니다. 서브에이전트와 보조 모델 호출은 제외되며, 스트리밍 입력 세션에서는 턴별 값입니다. 토큰/비용 집계에는 modelUsage를 사용하는 것이 좋습니다.
  • modelUsage: 이 query() 호출 동안 쿼리 파이프라인을 통해 이루어진 모든 모델 호출의 모델별 합계로, 메인 루프, 서브에이전트, 그리고 압축 및 Workflow 에이전트 같은 내부 호출을 포함합니다. 권한 분류기와 토큰 계산 요청처럼 해당 파이프라인 밖의 헬퍼 호출은 제외됩니다. 세션을 재개하는 호출은 세션의 이전 호출에서 복원된 모델별 합계도 포함합니다. 스트리밍 입력 세션에서는 합계가 턴에 걸쳐 누적되므로, 결과들을 합산하지 말고 최신 결과를 읽으세요. 재설정에 대해서는 스트리밍 입력 모드에서 비용 추적을, 0으로 초기화된 결과에 대해서는 세션 충돌 후 합계 복구를 참조하세요.
  • total_cost_usd: USD 기준 누적 예상 비용으로, modelUsage와 같은 호출을 포함하며 같은 시점에 재설정됩니다. 세션을 재개하는 호출은 세션의 이전 호출에서 복원된 합계도 포함합니다. 이는 추정치이며 청구 내역서가 아닙니다. 정확도에 대한 주의 사항은 비용 및 사용량 추적을 참조하세요.
  • queued_turn_count: Claude Code가 결과를 생성한 시점에 아직 대기 중인, 사용자가 origin: { kind: "human" }으로 보낸 메시지의 수입니다. 0과 필드가 없는 경우의 의미는 queued_turn_count를 참조하세요.
  • result_index: 프로세스가 기록하는 모든 결과에 걸쳐 0부터 세는, 실행의 전달 순서에서 이 결과의 위치입니다. 두 분기 모두에 있습니다. 기록에 실패한 결과도 번호를 소비하므로, 순서에 빈틈이 있으면 결과가 손실된 것입니다. Agent SDK v0.3.268 이상이 필요합니다.
  • startup_failure_reason: Claude Code가 시작을 거부한 이유로, 알려진 시작 실패로 종료하기 전에 기록하는 error_during_execution 결과에 있습니다. 값과 이를 포함하는 실패 유형은 startup_failure_reason을 참조하세요. Agent SDK v0.3.274 이상이 필요합니다.
  • 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" 중 하나입니다.
  • fast_mode_disabled_reason: 현재 빠른 모드를 사용할 수 없는 이유입니다. 빠른 모드를 막는 것이 없으면 없지만, 요청이 여전히 표준 속도로 실행될 수 있습니다. 빠른 모드 속도 제한 이후의 쿨다운 동안 Claude Code는 이유 코드 없이 fast_mode_state: "cooldown"을 보고하며, 쿨다운이 만료되면 빠른 모드를 다시 활성화합니다. Claude Code v2.1.219 이상이 필요합니다.
가용성을 다시 판단하는 대신 이유 코드를 사용해 자체 UI에서 빠른 모드가 꺼진 이유를 설명하세요. 각 코드는 빠른 모드를 막은 검사를 나타냅니다. 같은 필드 쌍이 SDKSystemMessage와 SDKControlInitializeResponse에도 나타나므로, 첫 번째 턴 전에 빠른 모드 상태를 읽을 수 있습니다. origin 필드는 이 결과를 트리거한 사용자 메시지의 SDKMessageOrigin을 전달합니다. 완료된 백그라운드 작업 등을 위해 SDK가 합성 후속 턴을 주입하면, 그 결과인 SDKResultMessage는 origin: { kind: "task-notification" }을 가집니다. 트리거가 실행된 루틴과 다른 세션에서 온 서버 검증 메시지도 이 kind로 도착하며, 각각 Task-notification 하위 유형에 설명된 subkind를 가집니다. 라우팅하거나 숨기기 전에 kind를 확인하여 프롬프트에 대한 응답 결과와 주입된 후속 결과를 구별하세요. 애플리케이션이 예약 실행을 선언하는 경우 그 결과도 kind: "task-notification"을 가지므로, kind만으로 숨기지 마세요. 여러 백그라운드 작업 완료가 함께 대기열에 있을 때, Claude Code는 각각 한 턴씩이 아니라 한 턴에서 모두 응답할 수 있습니다. 각 완료는 여전히 이 origin을 가진 자체 결과를 생성합니다. Claude Code가 함께 응답하는 완료 중 마지막을 제외한 모든 완료는 순서대로 num_turns: 0인 빈 결과를 생성하며, 마지막 완료의 결과에 모두에 응답하는 턴이 담깁니다. 시작 오류처럼 사용자 턴 이전에 발생한 결과에는 이 필드가 없습니다. PreToolUse 훅이 permissionDecision: "defer"를 반환하면, 결과는 stop_reason: "tool_deferred"를 가지며 deferred_tool_use에 보류 중인 도구의 id, name, input이 담깁니다. 이 필드를 읽어 자체 UI에 요청을 표시한 다음, 같은 session_id로 재개하여 계속하세요. 전체 흐름은 나중을 위해 도구 호출 연기를 참조하세요.

user_message_uuid

턴이 응답하는 SDKUserMessage의 uuid로, Claude Code의 응답을 사용자가 보낸 메시지와 매칭할 수 있도록 그대로 반환됩니다. Claude Code는 메시지에 uuid를 설정한 경우에만 이를 반환합니다. 이 필드는 SDKUserMessage에서 선택 사항이며, query()에 전달된 문자열 프롬프트에는 포함되지 않습니다. 턴이 어떤 메시지에 응답하는지는 턴이 시작된 방식에 따라 다릅니다.
  • 사용자가 보낸 일반 메시지, 즉 isSynthetic: true가 없는 메시지: 턴은 실행 내내 해당 메시지에 응답합니다. 여러 메시지를 짧은 간격으로 보내면 Claude Code가 이를 하나의 턴으로 병합할 수 있으며, 이때 이 필드에는 마지막 메시지의 uuid만 담깁니다. 병합된 메시지 중 어느 것과든 응답을 매칭하려면 user_message_uuids를 사용하세요.
  • 사용자가 isSynthetic: true로 보낸 메시지: 턴은 처음에 해당 메시지에 응답합니다. Claude Code가 도구 호출 사이에 사용자의 일반 메시지를 받아들이면, 그때부터 턴은 받아들인 메시지에 응답합니다. 합성 메시지의 uuid를 반환하려면 Agent SDK v0.3.265 이상이 필요하며, 이전 버전은 합성 턴에서 아무것도 반환하지 않습니다.
  • CLAUDE_CODE_RESUME_INTERRUPTED_TURN에 따라 중단된 턴을 이어가기 위해 Claude Code가 생성하는 프롬프트: 중단된 턴의 마지막 프롬프트가 사용자가 보낸 일반 메시지인 경우(턴을 시작한 메시지이든 턴 중에 Claude Code가 가져온 메시지이든), 이어가는 턴은 처음에 해당 메시지에 응답합니다. resume_reason으로 이어가는 턴의 프레임과 중단된 시도의 프레임을 구분할 수 있습니다. 마지막 프롬프트가 사용자의 일반 메시지가 아니면, 이어가는 턴은 처음에 사용자의 어떤 메시지에도 응답하지 않습니다. Claude Code가 도구 호출 사이에 사용자의 일반 메시지를 가져오면, 그때부터 턴은 가져온 메시지에 응답합니다. 중단된 턴의 프롬프트를 되돌려 보내려면 Agent SDK v0.3.268 이상이 필요합니다.
  • Claude Code가 자체적으로 생성한 기타 프롬프트: 턴은 처음에 사용자의 어떤 메시지에도 응답하지 않으며 프레임에 반환 값이 없습니다. Claude Code가 도구 호출 사이에 사용자의 일반 메시지를 받아들이면, 그때부터 턴은 해당 메시지에 응답합니다. 받아들인 메시지의 반환에는 Agent SDK v0.3.265 이상이 필요하며, 이전 버전은 이러한 턴에서 아무것도 반환하지 않습니다.
Claude Code는 응답한 메시지의 uuid를 세 종류의 프레임에 반환합니다.
  • 결과: 사용자가 보낸 메시지에 응답한 턴의 모든 결과입니다. Agent SDK v0.3.265 이상에서는 그러한 모든 결과에 포함됩니다. v0.3.265 이전에는 일반 메시지로 시작된 턴의 success 결과라도 턴이 API 요청을 보내지 않았거나 연기된 도구 호출로 끝난 경우 포함되지 않았습니다. v0.3.246 이전에는 오류 결과에도 포함되지 않았으며, v0.3.216 이전에는 모든 결과에 포함되지 않았습니다.
  • 턴의 첫 번째 응답: 첫 번째 어시스턴트 메시지, 그리고 includePartialMessages를 사용할 경우 event.type이 ping이 아닌 첫 번째 스트림 이벤트에도 포함되므로, 결과가 도착하기 전에 응답을 연결할 수 있습니다. 첫 번째 응답 반환에는 Agent SDK v0.3.246 이상이 필요합니다. v0.3.269 이전에는 includePartialMessages를 사용할 때 Claude Code가 첫 번째 스트림 이벤트에만 설정했으며, 턴이 아무것도 스트리밍하지 않은 경우에는 첫 번째 어시스턴트 메시지에 설정했습니다. Agent SDK v0.3.265 이상에서는 턴이 응답하는 메시지가 턴 도중 바뀌면 변경 후 첫 번째 응답에도 이 필드가 포함됩니다. 이전 버전은 턴당 하나의 응답 프레임에만 설정했습니다.
  • 턴의 모든 thinking_tokens 프레임: 턴의 첫 번째 응답을 기다리지 않고 사고 진행 상황을 사용자가 보낸 메시지에 귀속시킬 수 있습니다. Agent SDK v0.3.260 이상이 필요합니다.
Claude Code는 다음 경우에 이 필드를 생략합니다.
  • 위의 첫 번째 응답 이외의 응답 프레임
  • 서브에이전트 프레임
  • 사용자의 어떤 메시지에도 응답하지 않거나, uuid 없이 보낸 메시지에 응답하는 턴
  • 충돌한 워커 프로세스 이후의 0으로 초기화된 결과처럼, 사용자가 보낸 어떤 메시지에도 응답하지 않는 결과

user_message_uuids

이 턴에서 Claude Code가 응답한, 사용자가 보낸 모든 메시지의 uuid입니다. 여러 메시지를 짧은 간격으로 보내면 Claude Code가 이를 하나의 턴으로 병합할 수 있으며, 이때 user_message_uuid는 그중 마지막 메시지만 나타냅니다. 병합된 메시지 중 어느 것과든 응답을 매칭하려면 이 목록에서 해당 메시지의 uuid를 찾으세요. Agent SDK v0.3.259 이상이 필요합니다. Claude Code는 user_message_uuid 필드를 가진 각 응답 프레임과 결과에 이 목록을 함께 설정합니다. 응답한 메시지의 uuid를 반환하는 턴 프레임의 전체 목록과 각각에 필요한 버전은 user_message_uuid를 참조하세요. 목록에는 항상 user_message_uuid가 포함되며 최대 64개 항목을 담습니다. 턴이 실행 중일 때 사용자가 보낸 일반 메시지를 Claude Code가 받아들이면, 해당 메시지의 uuid를 결과의 목록에 추가합니다. 첫 번째 응답이나 결과에 목록 없이 user_message_uuid만 있다면 이전 Claude Code 버전에서 온 것이므로 단일 필드를 사용하세요.

resume_reason

이 턴이 재시작으로 중단된 턴을 이어가는 이유입니다. Claude Code는 CLAUDE_CODE_RESUME_INTERRUPTED_TURN에 따라 중단된 턴을 이어가는 턴에 이 필드를 설정하므로, 이어가는 턴의 응답 및 결과를 중단된 시도의 것과 구분할 수 있습니다. Agent SDK v0.3.268 이상이 필요합니다. Claude Code는 두 종류의 프레임에 이 필드를 설정합니다.
  • 이어가는 턴의 결과: 성공 분기와 오류 분기 모두에, 결과에 user_message_uuid가 포함되는지 여부와 관계없이 설정합니다.
  • 이어가는 턴의 응답 프레임: user_message_uuid를 포함하는 프레임입니다.
값은 interrupted_turn 같은 짧은 소문자 토큰입니다.

queued_turn_count

Claude Code가 결과를 생성한 시점에 명령 대기열에서 아직 대기 중인, 사용자가 origin: { kind: "human" }으로 보낸 메시지의 수입니다. Agent SDK v0.3.242 이상이 필요합니다. 0과 필드가 없는 경우의 의미는 다음과 같습니다.
  • 0: Claude Code는 해당 origin 없이 보낸 메시지와 작업 알림은 세지 않으므로, 여전히 턴이 뒤따를 수 있습니다.
  • 없음: 충돌 또는 치명적인 시작 오류 후 Claude Code가 내보내는 최종 결과는 이 필드를 생략하며, 합계가 0으로 초기화되어 있을 수 있습니다.

startup_failure_reason

Claude Code가 시작을 거부한 이유로, 애플리케이션이 재시도 대신 해결 방법을 제시할 수 있게 합니다. Claude Code는 알려진 시작 실패로 종료하기 전에 기록하는 error_during_execution 결과에 이를 설정합니다. 해당 결과는 0으로 초기화된 합계를 가지며, errors 배열에는 stderr와 같은 텍스트가 담깁니다. 다른 모든 결과에는 이 필드가 없습니다. Agent SDK v0.3.274 이상이 필요합니다. 모든 SDKStartupFailureReason 값에 대해 이 결과를 받으려면 env에서 CLAUDE_CODE_STARTUP_FAILURE_RESULTS를 1로 설정하세요. 이 변수가 없으면 Claude Code는 다음 실패에 대해서만 결과를 기록하며, 나머지는 stderr 출력과 0이 아닌 종료 코드로 끝나고 결과 메시지는 없습니다.
  • Claude Code가 세션을 해당 worktree로 되돌릴 수 없어 중단한 재개로, worktree_unverified 또는 worktree_resume_refused를 가집니다. 어떤 오류가 어떤 값을 가지는지는 해당 섹션에 설명되어 있습니다.
  • 백그라운드 세션이 보유한 대화에 대한 거부된 continue로, session_held_by_background를 가집니다. 그러한 대화에 대한 거부된 resume의 경우, Claude Code는 변수가 설정된 경우에만 결과를 기록합니다.
각 값은 하나의 거부 사유를 나타냅니다.

SDKSystemMessage

시스템 초기화 메시지입니다.
fast_mode_state는 세션의 빠른 모드 상태를 보고합니다. 빠른 모드를 막는 것이 있으면 fast_mode_disabled_reason이 이를 막은 검사를 나타내며, 이 필드에는 Claude Code v2.1.219 이상이 필요합니다. 이유 코드와 그 의미는 결과 메시지의 fast_mode_disabled_reason을 참조하세요. terminal_slash_commands는 slash_commands 중 인터페이스가 로컬 터미널에 묶인 항목(예: exit)을 나열합니다. slash_commands의 다른 항목처럼 보낼 수 있으며, 이 필드는 원격 또는 모바일 클라이언트가 명령 메뉴에서 이를 숨길 수 있도록 존재합니다. 이 필드는 비어 있지 않을 때만 있으며, Agent SDK v0.3.229 이상이 필요합니다.
  • 각 mcp_servers 항목의 source: 서버 정의의 출처로, McpServerStatus의 source와 같은 값을 가집니다. Agent SDK v0.3.274 이상이 필요합니다.
  • effort: Claude Code가 세션의 다음 요청에 보내는 effort 수준이며, 보내지 않는 경우 null입니다. Claude Code는 Remote Control 클라이언트에 보내는 init 메시지에만 이 필드를 설정하고, 애플리케이션이 읽는 init 메시지에서는 생략합니다. Agent SDK v0.3.234 이상이 필요합니다.
capabilities 배열은 이 CLI가 구현하는 프로토콜 동작을 나열하므로, claude_code_version 문자열을 비교하는 대신 기능을 감지할 수 있습니다. 이는 열린 집합입니다. 인식하지 못하는 값은 무시하고, 의존하는 동작에 해당하는 특정 capability를 확인하세요. 이 필드에는 Claude Code v2.1.205 이상이 필요하며 이전 CLI에는 없습니다. plugin_errors 배열은 플러그인 로드 실패를 나열합니다. 항목은 로드되지 않아 plugins에 없는 플러그인, 또는 hooks 파일처럼 일부 구성 요소 없이 로드된 플러그인을 설명합니다. 실패한 것이 없으면 키가 생략됩니다. SDKSystemMessage는 Agent SDK v0.3.283 이상에서 plugin_errors를 선언합니다. plugins 옵션의 디렉터리나 아카이브 자체가 로드에 실패하면, 항목의 plugin 필드에는 플러그인 이름 대신 inline[0] 같은 위치 태그가 담깁니다. 예를 들어 경로가 존재하지 않거나 매니페스트가 유효하지 않을 때 이런 일이 발생합니다. 그러한 항목은 path 필드로 옵션과 매칭하세요. 아래 표는 각 plugin_errors 항목의 필드를 나열합니다.

SDKPartialAssistantMessage

스트리밍 부분 메시지입니다(includePartialMessages가 true인 경우에만). parent_tool_use_id 필드는 항상 null입니다. 스트림 이벤트는 메인 세션에 대해서만 생성됩니다. 서브에이전트 귀속에는 agent_id와 parent_tool_use_id를 가진 완전한 메시지를 사용하거나, forwardSubagentText를 활성화하여 서브에이전트의 텍스트와 사고를 완전한 메시지로 받으세요.
Claude Code는 user_message_uuid에 설명된 조건에 따라 턴의 ping이 아닌 첫 번째 스트림 이벤트에 user_message_uuid와 user_message_uuids를 설정하고, 턴이 응답하는 메시지가 바뀔 때 다시 설정합니다. 재시작으로 중단된 턴을 이어가는 턴인 경우, 해당 필드를 포함하는 스트림 이벤트에는 resume_reason도 포함됩니다.

SDKCompactBoundaryMessage

대화 압축 경계를 나타내는 메시지입니다.

SDKInformationalMessage

루프가 내보내는 일반 텍스트 배너입니다. Claude Code가 발생시키는 경고, 알림, 기타 오류가 아닌 상태 줄과 UserPromptSubmit 훅의 차단 사유 같은 훅 피드백을 담습니다. Claude Code v2.1.227 이상에서는 훅의 systemMessage가 이 메시지로 도착할 수 있으며, 각 줄 앞에 PostToolUse:Bash says:처럼 훅 이름이 붙습니다. 출력이 표시되는 방식은 훅 페이지의 각 이벤트 섹션에 설명되어 있습니다. 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

권한 시스템이 대화형 프롬프트 없이 도구 호출을 거부할 때 내보내지는 스트림 이벤트입니다. 뒤따르는 is_error 도구 결과만 관찰하는 대신, 이 이벤트를 사용해 거부가 발생하는 즉시 UI에 표시하세요. 보고하는 거부 유형은 실행이 권한 프롬프트를 처리하는 방식에 따라 다릅니다.
  • canUseTool 콜백과 기본값 permissionPrompts: 'host'를 사용하는 경우: 권한 프롬프트는 콜백으로 전달되며, 이 이벤트는 Claude Code가 콜백을 호출하지 않고 자체적으로 결정한 거부를 보고합니다.
  • 둘 다 없는 경우: 단순 -p 실행, 또는 canUseTool과 permissionPromptToolName을 모두 설정하지 않은 query()는 PermissionRequest 훅이 허용하지 않는 한 프롬프트가 필요했을 모든 도구 호출을 거부하며, 이 이벤트는 Claude Code가 자체적으로 결정한 거부와 함께 이러한 거부도 보고합니다. v2.1.223 이전에는 콜백이 없는 실행에서 Claude Code가 이 이벤트를 내보내지 않았습니다.
  • MCP 프롬프트 도구를 permissionPromptToolName 또는 --permission-prompt-tool 플래그로 설정하고 기본값 permissionPrompts: 'host'를 사용하는 경우: Claude Code는 자체적으로 결정한 규칙 거부를 포함하여 이 이벤트를 전혀 내보내지 않습니다.
  • permissionPrompts: 'none'을 사용하는 경우: canUseTool이나 MCP 프롬프트 도구가 함께 설정되어 있어도 Claude Code는 프롬프트가 필요했을 호출을 거부하며, 이 이벤트는 Claude Code가 자체적으로 결정한 거부와 함께 이러한 거부도 보고합니다. Claude Code v2.1.259 이상이 필요합니다.
모든 구성에서 이 이벤트는 PreToolUse 훅 경로에서 결정된 거부를 건너뜁니다. 훅이 호출 자체를 거부했든, 거부 규칙이 훅의 allow 또는 ask 결정을 재정의했든 마찬가지입니다. 또한 이 이벤트는 최선의 노력 방식으로 제공됩니다. 간혹 Claude Code가 이 이벤트를 내보내지 않고 거부를 기록할 수 있으므로, 결과 메시지의 permission_denials가 공식적인 기록입니다.

SDKPermissionDenial

거부된 도구 사용에 대한 정보입니다.

SDKContextUsage

/context 보고서의 구조화된 형태로, /context 결과를 전달하는 SDKAssistantMessage에 context_usage로 포함됩니다. Agent SDK v0.3.232 이상에서 이 타입을 내보냅니다. SDKControlGetContextUsageResponse와 달리, color와 gridRows 같은 표시용 필드 없이 사용량 세부 내역을 렌더링하는 데 필요한 데이터만 담습니다. Claude Code는 메시지 스트림에 나타나지 않는 토큰 계산 API 요청으로 보고서를 계산합니다. 이러한 요청이 처리되는 방식을 참조하세요.
다음 표는 Claude Code가 각 필드에 넣는 내용을 나열합니다. model부터 over_limit까지의 필드는 세션 전체를 설명하고, 컬렉션 필드는 토큰을 개별 항목에 귀속시킵니다. over_limit.kind는 API가 다음 요청을 받아들이는지 여부가 아니라, Claude Code가 윈도우를 결정한 방식을 기록합니다.
  • hard_limit: 윈도우가 Claude Code가 판단하는 모델 자체의 한도이며, 이를 넘으면 API가 요청을 거부합니다
  • compaction_window: 윈도우가 압축 정책 윈도우이며, 모델의 한도와 일치할 수도 있고 그렇지 않을 수도 있습니다
Claude Code는 기존 필드의 형태를 바꾸는 대신 새 데이터를 선택적 필드로 추가하는 방식으로 이 타입을 확장합니다. 알고 있는 필드를 읽고 인식하지 못하는 필드는 무시하세요.

SDKContextUsageCategory

/context 범주별 사용량 세부 내역의 한 행입니다.
다음 표는 Claude Code가 행의 각 필드에 넣는 내용을 나열합니다. 각 kind 값은 행의 토큰이 무엇인지를 나타냅니다.
  • used: 컨텍스트 윈도우를 차지하는 콘텐츠
  • free: 남은 윈도우
  • buffer: 압축 예비 공간
  • deferred: Claude Code가 윈도우 밖에 보관하고 사용량 계산에서 제외하는 도구 스키마로, 참고용으로 나열됩니다

SDKUsageReport

/usage 보고서의 구조화된 형태로, /usage 결과를 전달하는 SDKAssistantMessage에 usage_report로 담깁니다. Agent SDK v0.3.273 이상에서 이 타입을 내보냅니다. 이 타입은 실험적이며 형태가 변경될 수 있습니다.
최상위 필드는 session과 rate_limits입니다.
  • session: Claude Code의 누적 비용 및 사용량 합계로, SDKResultMessage의 total_cost_usd 및 modelUsage와 같은 장부에서 읽습니다. 각 model_usage 항목은 ModelUsage입니다.
  • rate_limits: limits의 플랜 사용량 행과 extra_usage의 사용량 크레딧 지출입니다. 세션의 OAuth 토큰에 user:profile 범위가 없는 경우처럼 Claude Code가 플랜의 사용량을 가져올 수 없으면 null입니다.
Claude Code는 session.total_cost_usd를 토큰 수로부터 로컬에서 계산하므로, 이는 추정치이며 플랜에서 청구하는 금액이 아닙니다. 서버가 보고하는 사용량 크레딧 지출은 별도의 extra_usage 블록입니다. 정확도에 관한 주의 사항은 비용 및 사용량 추적을 참조하십시오. limits는 서버가 보낸 그대로의 사용량 행을 담습니다. 어떤 미터가 적용되는지, 그 범위, 레이블, 심각도, 순서는 서버가 결정하므로 행을 그대로 렌더링하십시오.
  • 빈 배열은 서버가 미터를 보고하지 않았음을 의미합니다.
  • null은 Claude Code가 보고할 행이 없음을 의미합니다.
limits의 각 행은 하나의 사용량 미터를 설명합니다. Agent SDK v0.3.277 이전에는 타입이 severity와 is_active를 선택 사항이자 nullable로 선언했으며, 행이 이 값 없이 도착할 수 있었습니다. extra_usage는 서버가 보고하는 청구 기간의 사용량 크레딧 지출과 상한으로, 플랜에 사용량 크레딧이 있을 때 존재합니다. 금액은 currency의 보조 단위이며, USD의 경우 센트입니다.
  • 이 계정에 자체 지출 상한이 없으면 monthly_limit은 null입니다. Team 및 Enterprise 플랜에서는 null을 무제한으로 렌더링하지 마십시오.
  • 사용량 크레딧으로 요청 비용을 지불할 수 없는 동안 is_enabled는 false입니다.

SDKMessageOrigin

사용자 역할 메시지의 출처입니다. 이는 SDKUserMessage에 origin으로 나타나며, 해당하는 SDKResultMessage로 전달되므로 특정 턴을 무엇이 트리거했는지 알 수 있습니다.

Task-notification 하위 유형

Claude Code가 세션에 작업 알림을 전달할 때, Anthropic 서버가 해당 알림의 출처를 검증한 경우 알림의 origin에 subkind를 설정합니다. 애플리케이션이 직접 메시지를 예약 실행으로 선언한 경우에도 subkind를 설정하며, 이를 위해서는 TypeScript Agent SDK v0.3.280 이상이 필요합니다. subkind에는 Claude Code v2.1.213 이상이 필요하며, 두 값 중 하나를 가집니다.
  • scheduled-trigger: 알림이 루틴의 저장된 프롬프트이며, 루틴의 트리거 중 하나가 실행되어 전달되었습니다. 트리거는 일정, API 트리거, GitHub 트리거, 또는 Run now입니다. 애플리케이션이 예약 실행으로 선언한 프롬프트도 이 값을 가집니다. Claude Code는 이를 세션에 할당된 작업으로 모델에 제시하며, 다른 작업 알림이 가지는 안내문과는 다른 안내문을 사용합니다.
  • peer-send-message: 알림이 사용자의 다른 세션이 클라우드 세션 간 메시지 전송에 사용하는 서버 측 send_message 도구로 보낸 메시지이며(세션 간 SendMessage 도구가 아님), Anthropic 서버가 두 세션이 같은 비공개 세션 그룹에 속한다는 것을 검증했습니다. Claude Code v2.1.224 이상이 필요합니다. 서버가 그렇게 검증하지 않은 send_message 전달에는 subkind가 없습니다.
다른 모든 작업 알림에는 subkind가 없습니다. 여기에는 세션에 전달된 PR 활동과 완료된 작업 같은 백그라운드 이벤트가 포함됩니다. 세션 간 SendMessage 도구의 메시지는 아예 작업 알림이 아닙니다. 같은 머신의 세션에서 왔든 Anthropic 서버를 통해 다른 머신에서 왔든, Claude Code는 이 메시지에 kind: "peer"와 피어 origin 필드를 부여합니다. fireReason은 scheduled-trigger 알림이 실행된 이유를 scheduled, manual, retry, catch_up, api 같은 짧은 소문자 토큰으로 나타냅니다. Anthropic 서버는 루틴의 전달에 이를 설정하며, 애플리케이션은 예약 실행을 선언할 때 이를 설정합니다. 어느 쪽도 보내지 않으면 없습니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다. Claude가 서브에이전트를 재개하는 경우처럼, 백그라운드 작업은 동일한 task_id로 여러 번 실행될 수 있습니다. 각 실행에는 고유한 run_id가 있습니다. 실행의 알림이 사용자 메시지로 세션에 도달하면, 해당 메시지의 task-notification 출처에 있는 runId가 같은 값을 가집니다. 알림은 작업의 다음 실행이 시작된 후에 도착할 수도 있으며, 이 경우에도 이전 실행의 ID를 담고 있습니다. 턴이 어느 실행에 속하는지 구분하려면 task_id가 아니라 runId를 비교하세요. TypeScript Agent SDK v0.3.292 이상이 필요합니다.

예약 실행 선언

애플리케이션이 자체 일정에 따라 프롬프트를 실행하는 경우, 각 실행을 선언하면 Claude Code가 해당 턴을 사용자의 실시간 입력이 아닌 예약 작업으로 모델에 제시합니다. env에서 CLAUDE_CODE_HOST_SCHEDULED_RUN을 1로 설정하여 세션을 시작한 다음, isSynthetic 없이 origin: { kind: "task-notification", subkind: "scheduled-trigger", fireReason: "scheduled" }로 실행의 SDKUserMessage를 보내세요. Claude Code는 해당 변수 없이 시작된 프로세스에서는 선언을 무시합니다. 환경에 CLAUDECODE 또는 CLAUDE_CODE_CHILD_SESSION이 있는 프로세스에서도 선언을 무시합니다. Claude Code는 값이 1~32자의 소문자 또는 밑줄로 이루어진 경우에만 fireReason을 유지합니다. TypeScript Agent SDK v0.3.280 이상이 필요합니다.

Peer origin 필드

peer origin은 메시지를 보낸 에이전트를 식별합니다. 이 에이전트는 SendMessage로 main에 메시지를 보내는 in-process 팀원이거나, 사용자의 또 다른 Claude Code 세션인 cross-session peer입니다. cross-session peer를 사용하려면 macOS 및 Linux에서 Claude Code v2.1.224 이상이 필요합니다. 네이티브 Windows 요구 사항은 cross-session 메시징 사용 가능 여부를 참조하세요. cross-session peer는 같은 머신에서 실행될 수도 있고, 메시지가 Remote Control을 통해 도착하는 경우에는 사용자의 다른 머신이나 클라우드에서 실행될 수도 있습니다. 두 종류의 발신자는 필드를 서로 다르게 채웁니다.
  • from: 팀원의 이름 또는 cross-session peer의 발신자 주소입니다. 단방향 cross-machine 메시지의 경우 발신자에게 회신 주소가 없으므로 from은 "unknown"입니다. 이 값은 발신자가 작성한 것이며, 검증된 신원은 verifiedPeerPid입니다.
  • fromMode: 발신 세션의 권한 클래스(bypass 또는 prompting)로, 데스크톱 앱처럼 사용자의 세션 간에 peer 메시지를 중계하는 호스트가 선언합니다. Claude Code는 인바운드 제어를 적용할 때 수신 세션에서 이 값을 읽습니다. Agent SDK v0.3.234 이상이 필요합니다.
  • senderTaskId: 팀원의 작업 ID입니다. cross-session peer의 경우에는 존재하지 않습니다.
  • name: Claude Code가 정규화한 발신자의 표시 이름입니다. Claude Code는 Unicode 제어, 서식, 서로게이트, 줄 또는 단락 구분자 코드 포인트를 제거한 다음, 결과의 앞뒤 공백을 제거하고 말줄임표를 붙여 최대 64개 코드 포인트로 제한합니다. Claude Code v2.1.205 이상이 필요합니다.
  • body: 피어 엔벨로프를 제거한 디코딩된 메시지 본문으로, 모델이 보는 내용과 바이트 단위로 정확히 일치합니다. 단일 팀원 메시지에는 존재하며, 여러 메시지가 병합된 경우에는 존재하지 않습니다. 세션 간 피어의 경우 턴이 Claude Code가 구성한 정확히 하나의 피어 엔벨로프일 때만 존재합니다. 메시지 텍스트를 다시 파싱하는 대신 name과 body를 렌더링하세요. v2.1.299 이전에는 병합된 메시지가 첫 번째 메시지의 body를 유지했습니다. Claude Code v2.1.205 이상이 필요합니다.
  • fromSession: 발신자의 호스트에서 열 수 있는 세션 ID로, UI가 발신 세션으로 다시 연결할 수 있도록 발신자의 호스트가 설정합니다. from과 마찬가지로 발신자가 주장하는 값이므로 탐색 대상으로만 사용하고, 발신자 신원의 증거로 취급하지 마세요. Claude Code v2.1.216 이상이 필요합니다.
  • verifiedPeerPid: 이 세션의 cross-session 메시징 소켓에 연결한 프로세스의 프로세스 ID로, 커널이 검증하며 페이로드가 아닌 연결 자체에서 읽어옵니다. 발신자를 식별할 때는 from이 아닌 이 값을 사용하세요. from은 같은 사용자의 어떤 프로세스든 위조할 수 있습니다. Windows나 소켓이 아닌 유입 경로처럼 Claude Code가 검증할 수 없는 경우에는 이 필드가 존재하지 않으므로, 값이 없으면 발신자가 검증되지 않았다는 의미입니다. 중계된 트래픽의 경우 이 값은 메시지 작성자가 아닌 중계자를 식별하며, 프로세스 ID는 재사용될 수 있으므로 인증 토큰이 아닌 출처 정보로 취급하세요. Claude Code v2.1.216 이상이 필요합니다.

훅 타입

예제 및 일반적인 패턴을 포함한 훅 사용 가이드는 훅 가이드를 참조하세요.

HookEvent

사용 가능한 훅 이벤트입니다.

HookCallback

훅 콜백 함수 타입입니다.

HookCallbackMatcher

선택적 매처를 포함한 훅 구성입니다.

HookInput

모든 훅 입력 타입의 합집합 타입입니다.

BaseHookInput

모든 훅 입력 타입이 확장하는 기본 인터페이스입니다.
prompt_id 필드는 현재 처리 중인 사용자 프롬프트를 식별하는 UUID입니다. OpenTelemetry 이벤트의 prompt.id 속성과 일치하며 첫 번째 사용자 입력까지는 없습니다. Claude Code v2.1.196 이상이 필요합니다.

PreToolUseHookInput

mcp_server는 도구가 MCP 서버에서 올 때 나타납니다. McpServerProvenance를 참조하세요. PostToolUse, PostToolUseFailure, PermissionRequest 및 PermissionDenied 입력은 동일한 필드를 전달합니다. 이 필드는 Agent SDK v0.3.274 이상이 필요합니다.

PostToolUseHookInput

PostToolUseFailureHookInput

PostToolBatchHookInput

배치의 모든 도구 호출이 해결된 후, 다음 모델 요청 전에 한 번 실행됩니다. tool_response는 모델이 보는 직렬화된 tool_result 콘텐츠를 전달합니다. 형태는 PostToolUseHookInput의 구조화된 Output 객체와 다릅니다.

PermissionDeniedHookInput

NotificationHookInput

UserPromptSubmitHookInput

UserPromptExpansionHookInput

SessionStartHookInput

SessionEndHookInput

StopHookInput

StopFailureHookInput

SubagentStartHookInput

SubagentStopHookInput

PreCompactHookInput

PostCompactHookInput

PreModelSwitchHookInput

요청된 모델 전환이 적용되기 전에 실행됩니다. context_tokens 및 그 이후의 필드는 새 모델로 대화를 다시 전송하는 비용을 추정합니다. 전체 필드 설명 및 차단 의미론은 PreModelSwitch를 참조하세요.

PostModelSwitchHookInput

세션의 모델이 변경된 후 실행됩니다. PreModelSwitchHookInput과 동일한 필드를 전달하며, 두 개의 추가 source 값이 있습니다. PostModelSwitch를 참조하세요.

PermissionRequestHookInput

SetupHookInput

TeammateIdleHookInput

TaskCreatedHookInput

TaskCompletedHookInput

ElicitationHookInput

ElicitationResultHookInput

ConfigChangeHookInput

InstructionsLoadedHookInput

DirectoryAddedHookInput

directory는 추가된 디렉토리의 절대 경로입니다. source는 /add-dir이 추가했을 때 "slash_command"이고 SDK 제어 요청이 했을 때 "register_repo_root"입니다.

WorktreeCreateHookInput

WorktreeRemoveHookInput

CwdChangedHookInput

FileChangedHookInput

MessageDisplayHookInput

HookJSONOutput

훅 반환값입니다.

AsyncHookJSONOutput

SyncHookJSONOutput

도구 입력 타입

기본 제공 Claude Code 도구의 입력 스키마 문서입니다. 이 타입은 @anthropic-ai/claude-agent-sdk/sdk-tools에서 내보내지며 타입 안전 도구 상호작용에 사용할 수 있습니다.

ToolInputSchemas

@anthropic-ai/claude-agent-sdk/sdk-tools에서 내보낸 도구 입력 타입의 합집합입니다. 멤버는 다음을 포함합니다:

Agent

도구 이름: Agent. 이전 이름인 Task는 여전히 별칭으로 수락되며, SDKSystemMessage 초기화 메시지의 tools 배열은 현재 이 도구를 하위 호환성을 위해 Task로 나열합니다.
mode 필드는 Claude Code v2.1.212 이상에서 deprecated되었으며 무시됩니다. 서브에이전트는 부모 세션의 권한 모드 또는 해당 정의의 permissionMode에서 실행되며, 서브에이전트 상속 규칙이 어느 것인지 결정합니다.
복잡한 다단계 작업을 자율적으로 처리할 새로운 에이전트를 시작합니다.

AskUserQuestion

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

Bash

도구 이름: Bash
선택적 타임아웃 및 백그라운드 실행을 포함한 Bash 명령을 실행합니다. 작업 디렉터리는 다중 턴 세션의 이후 턴에서 실행되는 명령을 포함하여 명령 간에 유지됩니다. 내보낸 환경 변수와 같은 셸 상태는 유지되지 않습니다. 어느 디렉터리 변경이 유지되는지에 대한 제한 사항은 명령 간에 유지되는 것을 참조하세요. 포그라운드 상한을 설정하는 것에 대해서는 타임아웃 및 출력 제한을 참조하세요. 백그라운드 시간 제한에 대해서는 백그라운드 명령의 시간 제한을 참조하세요.

Monitor

도구 이름: Monitor
백그라운드 소스를 실행하고 각 이벤트를 Claude에 전달하므로 폴링 없이 반응할 수 있습니다: command는 스크립트를 실행하고 stdout 라인당 하나의 이벤트를 내보내며, ws는 WebSocket을 열고 텍스트 프레임당 하나의 이벤트를 내보냅니다. command 또는 ws 중 정확히 하나를 제공합니다. ws 소스는 Claude Code v2.1.195 이상이 필요합니다. timeout_ms는 감시의 마감 시간(밀리초)입니다. 기본값은 300000이며 최대 3600000까지의 값을 허용합니다. 유효한 마감 시간은 최대 1800000(30분)이므로, 더 큰 허용 값은 그 값으로 단축됩니다. 마감 시간에 감시가 종료되고 Claude는 필요한 경우 새 감시를 시작할 수 있도록 하나의 알림을 받습니다. 내보낸 타입은 스키마가 기본값을 채우기 때문에 timeout_ms를 필수로 표시합니다. 이를 생략한 호출도 유효성 검사를 통과합니다. Monitor가 명령을 실행할 때, Bash와 동일한 권한 규칙을 따릅니다. WebSocket 감시는 별도로 승인을 요청합니다. 동작 및 공급자 가용성은 Monitor 도구 참조를 참조하세요.

TaskOutput

Claude Code v2.1.277에서 제거되었으며, 해당 TaskOutputInput 타입도 함께 제거되었습니다. 이전에는 실행 중이거나 완료된 백그라운드 작업에서 출력을 검색했습니다. Claude는 Read를 사용하여 백그라운드 작업의 출력 파일을 읽습니다. disallowedTools 항목 또는 여전히 TaskOutput의 이름을 지정하는 거부 규칙은 경고 없이 무시됩니다.

Edit

도구 이름: Edit
파일에서 정확한 문자열 교체를 수행합니다.

Read

도구 이름: Read
텍스트, 이미지, PDF 및 Jupyter 노트북을 포함한 로컬 파일 시스템에서 파일을 읽습니다.
  • PDF 페이지 범위의 경우 pages를 사용합니다(예: "1-5").
  • allow_large를 사용하면 세션의 컨텍스트 윈도우에 여유가 있을 때 Claude가 일반적인 크기 제한을 넘는 텍스트 파일을 읽을 수 있습니다. Claude Code v2.1.296을 번들로 포함하는 Agent SDK v0.3.296 이상이 필요합니다.
PDF의 경우 Claude는 Read 호출의 tool_result 콘텐츠 내에서 파일의 내용을 받습니다. pdf 출력을 반환하는 읽기는 요약 text 블록 다음에 document 블록을 전달합니다. parts 출력을 반환하는 읽기는 요약 text 블록 다음에 추출된 페이지당 하나의 블록을 전달합니다: image 블록 또는 Claude Code가 이를 이미지로 렌더링할 수 없을 때 페이지의 이름을 지정하는 text 블록입니다. Agent SDK v0.3.242 이전에는 Claude Code가 도구 결과 후 별도의 user 메시지로 파일의 내용을 전달했습니다.

Write

도구 이름: Write
로컬 파일 시스템에 파일을 작성하고 존재하면 덮어씁니다.

Glob

도구 이름: Glob
모든 코드베이스 크기에서 작동하는 빠른 파일 패턴 매칭입니다.

Grep

도구 이름: Grep
정규식을 지원하는 ripgrep 기반 검색 도구입니다.

TaskStop

도구 이름: TaskStop
ID로 실행 중인 백그라운드 작업 또는 셸을 중지합니다. v2.1.198부터 task_id는 에이전트 팀 팀원 또는 에이전트 ID 또는 이름으로 명명된 백그라운드 에이전트도 수락합니다.

NotebookEdit

도구 이름: NotebookEdit
Jupyter 노트북 파일의 셀을 편집합니다.

WebFetch

도구 이름: WebFetch
URL에서 콘텐츠를 가져오고 AI 모델로 처리합니다. offset은 페이지 시작 부분부터 건너뛸 문자 수입니다. Claude는 긴 페이지를 계속 읽기 위해 이 값을 설정합니다. 이 필드는 Agent SDK v0.3.290 이상이 필요합니다.

WebSearch

도구 이름: WebSearch
웹을 검색하고 형식화된 결과를 반환합니다.

Workflow

도구 이름: Workflow
동적 워크플로를 실행합니다: 백그라운드에서 많은 서브에이전트를 조율하고 하나의 통합된 결과를 반환하는 스크립트입니다. Workflow 도구는 Agent SDK v0.3.149 이상에서 사용 가능합니다. script, name 또는 scriptPath 중 최소 하나가 필요합니다.

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
단일 작업을 만들고 할당된 ID를 반환합니다.

TaskUpdate

도구 이름: TaskUpdate
ID로 하나의 작업을 패치합니다. status를 "deleted"로 설정하여 제거합니다.

TaskGet

도구 이름: TaskGet
하나의 작업에 대한 전체 세부 정보를 반환하거나, ID를 찾을 수 없을 때 null을 반환합니다.

TaskList

도구 이름: TaskList
현재 목록의 모든 작업의 스냅샷을 반환합니다.

ExitPlanMode

도구 이름: ExitPlanMode
플랜 모드를 종료합니다. allowedPrompts 필드는 deprecated되었으며 무시됩니다. Claude Code는 기존 호출자 및 트랜스크립트가 유효성을 검사하도록 여전히 수락합니다. v2.1.205 이전에는 계획을 구현하기 위한 프롬프트 기반 Bash 권한을 요청했습니다.

ListMcpResources

도구 이름: ListMcpResourcesTool
연결된 서버에서 사용 가능한 MCP 리소스를 나열합니다.

ReadMcpResource

도구 이름: ReadMcpResourceTool
서버에서 특정 MCP 리소스를 읽습니다.

EnterWorktree

도구 이름: EnterWorktree
격리된 작업을 위한 임시 git worktree를 만들고 진입합니다. 새 worktree를 만드는 대신 기존 worktree로 전환하려면 path를 전달합니다. 처음 진입할 때 대상은 현재 저장소의 등록된 worktree이거나, 다중 저장소 워크스페이스에서는 그 안에 중첩된 저장소의 등록된 worktree여야 합니다. worktree 세션 내에서는 세션의 저장소의 .claude/worktrees/ 아래에 있어야 합니다. name 및 path는 상호 배타적입니다.

ExitWorktree

도구 이름: ExitWorktree
현재 git worktree를 종료하고 원래 작업 디렉터리로 돌아갑니다. keep 작업은 worktree와 브랜치를 디스크에 남기고, remove는 둘 다 삭제합니다. discard_changes는 커밋되지 않은 파일이나 병합되지 않은 커밋이 있는 worktree를 제거할 때 true여야 합니다.

EnterPlanMode

도구 이름: EnterPlanMode
플랜 모드에 진입합니다. 여기서 Claude는 변경을 수행하기 전에 계획을 연구하고 제시합니다.

CronCreate

도구 이름: CronCreate
로컬 시간의 5필드 cron 일정에서 실행할 프롬프트를 예약합니다. recurring을 false로 설정하여 다음 일치 시 한 번 실행합니다. 작업은 기본적으로 세션 범위이며, --resume 또는 --continue로 재개하면 만료되지 않은 작업이 복원됩니다. 예약 작업을 참조하세요. durable을 true로 설정하면 .claude/scheduled_tasks.json에 지속성을 요청하여 작업이 재시작을 견딜 수 있습니다. 지속적인 예약은 모든 세션에서 사용 가능하지 않습니다: 사용 불가능할 때 Claude Code는 durable: true를 수락하지만 작업을 세션 전용으로 만듭니다. 출력의 durable 필드를 읽어 작업이 지속되었는지 확인하세요.

CronDelete

도구 이름: CronDelete
CronCreate에서 반환된 ID로 예약된 cron 작업을 삭제합니다.

CronList

도구 이름: CronList
예약된 cron 작업을 나열합니다: .claude/scheduled_tasks.json의 지속적인 작업 및 현재 세션의 세션 전용 작업입니다.

ScheduleWakeup

도구 이름: ScheduleWakeup
지연 후 주어진 프롬프트를 실행하는 일회성 웨이크업을 예약합니다. 이 도구는 자체 속도 /loop 명령을 지원합니다. 런타임은 delaySeconds를 60~3600초 사이로 고정합니다. stop이 true가 아닌 한 delaySeconds, reason, prompt 및 noop 필드가 필요합니다. noop: true는 아무것도 변경되지 않은 웨이크업을 보고합니다. stop: true를 설정하면 보류 중인 웨이크업을 취소하고 자체 속도 /loop를 종료합니다. stop 필드는 Claude Code v2.1.202 이상이 필요합니다. 도구 참조의 ScheduleWakeup 행을 참조하세요.

RemoteTrigger

도구 이름: RemoteTrigger
클라우드에서 호스팅되는 예약된 및 트리거된 Claude Code 실행인 루틴을 관리합니다. 이 도구는 /schedule 명령을 지원합니다. trigger_id는 get, update, run 및 list_runs 작업에 필요합니다. body는 create, update 및 create_webhook_trigger에 필요하며 run에는 선택 사항입니다. create_webhook_trigger는 루틴을 실행하는 GitHub 이벤트와 같은 이벤트 소스를 기존 루틴에 연결합니다. body는 소스, 이벤트 및 실행할 루틴의 이름을 지정합니다. Claude Code v2.1.225 이상이 필요합니다. list_runs는 루틴의 최근 실행을 나열하고, get_run_log는 하나의 실행 로그를 읽습니다. session_id는 list_runs 결과에서 읽을 실행의 이름을 지정하고, cursor는 두 작업의 결과를 페이징합니다. 두 작업 모두 Claude Code v2.1.227 이상이 필요합니다. 이 도구는 세션이 루틴이 활성화된 플랜의 claude.ai 계정으로 인증되었을 때만 사용 가능하며, 조직의 정책이 클라우드 세션을 비활성화할 때는 없습니다. Claude Code v2.1.227 이상에서 도구는 소유자가 조직의 루틴을 비활성화했을 때도 없습니다. v2.1.227 이전에는 루틴 토글만 비활성화된 세션이 여전히 도구를 표시했고 서버가 호출을 거부했습니다.

PushNotification

도구 이름: PushNotification
사용자에게 사전 예방적 푸시 알림을 보냅니다. 모바일 운영 체제가 더 긴 텍스트를 자르기 때문에 message를 200자 이하로 유지하세요. 도구 참조의 PushNotification 행에서 공급자 가용성을 참조하세요. 푸시 전달은 Amazon Bedrock, Claude Platform on AWS, Google Cloud의 Agent Platform 또는 Microsoft Foundry에서 액세스할 수 없는 Anthropic 호스팅 인프라를 통해 실행됩니다.

REPL

v2.1.275에서 제거되었습니다. v2.1.274까지 실험적 REPL 도구는 env 옵션에서 CLAUDE_CODE_REPL=1을 설정하여 켤 수 있었습니다.

ReportFindings

도구 이름: ReportFindings
코드 리뷰 결과를 구조화된 목록으로 보고하여 Claude Code가 텍스트로 인쇄하는 대신 렌더링할 수 있습니다. 결과는 가장 심각한 것부터 정렬되며 호출당 최대 32개이고, 배열은 남은 결과가 없을 때 비어 있습니다. Claude Code v2.1.196 이상이 필요합니다. level은 선택 사항이며 Claude가 리뷰에 대해 보고하는 effort 수준을 담습니다. Claude Code는 이를 리뷰가 실행된 수준과 비교하지 않으므로 두 값이 다를 수 있습니다. 각 결과는 다음 필드를 전달합니다:
  • file: 결과가 있는 저장소 상대 경로입니다. 선택적 line은 이를 고정하는 1 인덱싱된 라인입니다.
  • summary: 결함의 한 문장 설명입니다. failure_scenario는 잘못된 출력 또는 충돌로 이어지는 구체적인 입력 및 상태를 설명합니다.
  • short_summary: 컴팩트 디스플레이를 위한 최대 60자의 선택적 압축 레이블입니다. Claude Code v2.1.212 이상이 필요합니다.
  • category: correctness 또는 test-coverage와 같은 결과 타입의 선택적 짧은 kebab-case 슬러그입니다. Claude Code v2.1.199 이상이 필요합니다.
  • verdict: 검증 패스가 실행되었을 때 설정됩니다. 인라인 전용 검토에는 없습니다.
  • outcome: 수정을 적용한 후 다시 보고할 때만 설정됩니다.

Artifact

도구 이름: Artifact
로컬 .html 또는 .md 파일을 호스팅된 아티팩트 페이지로 게시하거나 사용자의 게시된 아티팩트를 나열합니다. action을 생략하거나 "publish"를 전달하여 file_path를 게시합니다. 이는 게시 작업에 필요합니다. 아래의 각 필드는 게시에 적용됩니다:
  • icon: 아티팩트의 브라우저 탭 아이콘에 대한 하나의 짧은 일반 단어(예: chart 또는 map). Claude는 첫 게시에 포함하고 업데이트에서 생략하여 아티팩트의 저장된 아이콘을 유지합니다.
  • favicon: deprecated되었으며 Claude는 생략합니다.
  • title: HTML 파일에 <title> 태그가 없을 때 브라우저 탭 및 갤러리에서 게시된 페이지의 이름을 지정합니다.
  • url: 새 페이지를 만드는 대신 기존 아티팩트를 제자리에서 업데이트하도록 대상을 지정합니다.
force는 다른 세션이 게시한 최신 버전을 버리는 최후의 수단 덮어쓰기입니다. 충돌 시 실패한 게시는 최신 콘텐츠를 반환합니다. Claude는 해당 콘텐츠에 변경 사항을 병합하거나 아티팩트를 다시 읽고 다시 게시합니다. 사용자가 명시적으로 해당 버전을 버리도록 요청할 때만 force를 전달하세요. "list"를 전달하여 사용자의 게시된 아티팩트를 열거합니다. limit 및 scope만 이를 동반할 수 있습니다. scope는 기본값이 "mine"이며, 사용자가 소유한 아티팩트를 나열합니다. "shared"는 다른 사람이 사용자와 공유한 아티팩트를 나열하고, "all"은 둘 다 나열합니다. limit은 목록이 반환하는 최대 아티팩트 수를 1부터 200 사이로 설정합니다. 50을 초과하는 limit은 Agent SDK v0.3.292 이상이 필요합니다. limit이 없으면 목록은 최대 25개를 반환합니다.
  • capabilities: 게시된 페이지가 사용하는 런타임 기능으로, 기능 이름으로 키 지정됩니다(예: 페이지가 호출할 수 있는 커넥터). 아티팩트 서비스는 선언을 검증하고 계정이 사용할 수 없거나 잘못된 구성을 제공하는 기능의 이름을 지정하는 게시를 거부합니다. {}를 전달하여 저장된 선언을 지우고, 재배포 시 필드를 생략하여 유지하세요. Agent SDK v0.3.235 이상이 필요합니다.
  • contract: 게시된 페이지가 실행되는 런타임 버전입니다. 생략하여 아티팩트의 현재 버전을 유지하고, "latest"를 전달하여 업그레이드하거나, 특정 버전을 전달하여 고정하거나 롤백하세요. Agent SDK v0.3.235 이상이 필요합니다.
타입은 내보내지지만 도구는 Agent SDK 세션에서 기본적으로 꺼집니다. 게시는 또한 아티팩트 가용성 표의 모든 조건이 필요하며, API 키로 인증된 세션은 이를 충족하지 않습니다.

Projects

도구 이름: Projects
세션에 연결된 claude.ai 프로젝트를 읽고 씁니다. method에서 디스패치합니다:
  • project_info: 프로젝트 메타데이터 및 문서 목록을 반환합니다.
  • project_read: path로 하나의 문서를 읽습니다.
  • project_search: query로 프로젝트의 지식 기반을 쿼리합니다. n은 히트를 제한하고 기본값은 5입니다.
  • project_write: content(인라인 텍스트 전달) 또는 local_path(작업 디렉터리 내의 파일 이름) 중 정확히 하나에서 path에 문서를 만들거나 바꿉니다. present_to_user: true는 작성된 문서를 사용자가 봐야 할 결과물로 표시합니다.
  • project_delete: path로 문서를 삭제합니다.

ReadMcpResourceDir

도구 이름: ReadMcpResourceDirTool
MCP 서버의 디렉터리 리소스의 직접 자식을 나열합니다. 디렉터리 나열을 지원한다고 선언한 서버에 대해서만 사용 가능합니다. 나열은 재귀적이지 않습니다. 디렉터리 나열은 모든 세션에서 활성화되지 않습니다: 비활성화되면 호출은 빈 resources 목록을 반환하고 error 필드는 디렉터리 나열이 활성화되지 않았음을 보고합니다.

RefreshMcpTools

도구 이름: RefreshMcpTools
연결된 MCP 서버의 도구 목록을 다시 쿼리하고 변경 사항을 적용합니다. 타입은 내보내지지만 env 옵션에서 CLAUDE_CODE_ENABLE_REFRESH_MCP_TOOLS=1을 설정할 때만 Claude Code가 도구를 등록하며, 최소 하나의 MCP 서버가 있는 세션에서만 등록합니다. Claude Code v2.1.211 이상이 필요합니다.

ShowOnboardingRolePicker

도구 이름: ShowOnboardingRolePicker
Cowork 온보딩 중에 클릭 가능한 역할 선택기 칩 행을 렌더링하여 사용자가 역할을 선택하고 일치하는 플러그인을 설치할 수 있습니다. 인수를 사용하지 않습니다. 역할 목록은 클라이언트에서 정의됩니다. 호출은 사용자가 응답할 때까지 차단됩니다.

McpInput

도구 이름: mcp__<server>__<tool> 형식의 동적 MCP 도구 이름
MCP 도구 인수는 개방형 객체입니다: 각 서버는 자체 매개변수를 정의하므로 타입은 필드 이름이나 값에 제약을 두지 않습니다. 특정 도구가 수락하는 필드에 대해 서버의 자체 도구 스키마를 참조하세요.

도구 출력 타입

기본 제공 Claude Code 도구의 출력 스키마 문서입니다. 이 타입은 @anthropic-ai/claude-agent-sdk/sdk-tools에서 내보내지며 각 도구에서 반환된 실제 응답 데이터를 나타냅니다.

ToolOutputSchemas

@anthropic-ai/claude-agent-sdk/sdk-tools에서 내보낸 도구 출력 타입의 합집합입니다. 멤버는 다음을 포함합니다:

Agent

도구 이름: Agent. 이전 이름 Task는 여전히 별칭으로 수락되며, SDKSystemMessage 초기화 메시지의 tools 배열은 현재 이 도구를 하위 호환성을 위해 Task로 나열합니다.
서브에이전트의 결과를 반환합니다. status 필드에서 구분됩니다: 완료된 작업의 경우 "completed", 백그라운드 작업의 경우 "async_launched", Claude Code가 클라우드 세션으로 전달한 작업의 경우 "remote_launched"이며, 여기서 sessionUrl은 해당 세션으로 연결되고 taskId는 이를 식별합니다. completed 변형에서 resolvedModel은 서브에이전트가 시작한 모델의 이름을 지정하며, 이는 availableModels 또는 다른 재정의가 적용될 때 요청된 model 입력과 다를 수 있습니다. 이 필드는 Claude Code v2.1.174 이상이 필요합니다. async_launched에서는 작업이 백그라운드로 이동했을 때 사용 중이던 모델의 이름을 지정합니다. modelsUsed는 서브에이전트가 사용한 모델을 순서대로 나열합니다. 이 필드는 실행 중간에 모델 전환이 발생했을 때만 존재하며, 실행이 이전 모델로 다시 전환되면 해당 모델이 다시 나타납니다. async_launched에서 목록은 백그라운드로 이동하기 전에 사용된 모델을 포함합니다. modelsUsed와 resolvedModel의 백그라운드 처리 동작 모두 Claude Code v2.1.212 이상이 필요합니다. Claude Code가 서브에이전트의 격리된 worktree를 유지한 경우, completed 결과의 worktreePath는 이를 찾을 수 있는 위치입니다. worktreeBranch는 해당 브랜치이며, Claude Code가 git으로 worktree를 생성했을 때 존재합니다. Claude Code는 전체 실행이 아닌 서브에이전트의 최종 API 요청에서 usage와 totalTokens를 채우므로, usage.service_tier는 해당 요청에 대해 API가 보고한 서비스 계층 문자열입니다. 존재할 때, usage.output_tokens_details.thinking_tokens는 해당 요청의 출력 토큰 중 사고 토큰인 토큰의 수입니다. output_tokens_details 필드는 TypeScript SDK v0.3.228 이상이 필요하며, 이는 Claude Code v2.1.228을 번들로 제공합니다. fallback_credit 필드는 TypeScript SDK v0.3.285 이상이 필요하며, 이는 Claude Code v2.1.285를 번들로 제공합니다. usage.output_tokens_details는 의미에서 Usage.output_tokens_details와 일치하며, 해당 최종 요청으로 범위가 지정되지만, 이 모든 수준이 선택 사항입니다. 예를 들어 usage.output_tokens_details?.thinking_tokens ?? 0처럼 객체와 필드 모두를 보호하고, 직접 읽지 마십시오. v2.1.207 이전에는 게시된 타입이 더 좁았습니다. worktreePath, worktreeBranch, citations, toolStats.frameCount, 그리고 inference_geo, speed, iterations 사용 필드를 생략했으며, service_tier의 타입을 "standard" | "priority" | "batch"로 지정했습니다. 타입이 선택 사항으로 표시하는 필드는 이전 버전에서 기록된 결과에 없을 수 있습니다.

AskUserQuestion

도구 이름: AskUserQuestion
질문과 사용자의 답변을 반환합니다. response는 사용자가 구조화된 질문에 답하는 대신 자유 형식 답변을 입력했을 때 설정됩니다. 존재할 때, Claude는 질문별 답변 목록 대신 “The user responded: …”를 받습니다.

Bash

도구 이름: Bash
stdout, stderr, backgroundTaskId 필드는 다음을 전달합니다: timedOutAfterMs는 밀리초 단위의 타임아웃이며, 명령이 명시적으로 백그라운드에서 시작된 것이 아니라 타임아웃에 도달하여 백그라운드로 이동했을 때 설정됩니다. backgroundCwdHint는 백그라운드 명령에 cd, pushd, popd 또는 chdir과 같은 디렉터리 변경 내장 명령이 포함되어 있을 때 설정되며, 세션 작업 디렉터리가 변경되지 않았음을 알립니다. 두 필드 모두 Claude Code v2.1.210 이상이 필요합니다. 포그라운드에서 실행 중인 서브에이전트가 백그라운드 명령을 소유할 때, 명령은 해당 서브에이전트의 실행이 끝날 때 종료됩니다. Claude Code는 이러한 명령에 backgroundEndsWithFinalResponse를 true로 설정하며, 주 대화나 백그라운드 서브에이전트가 시작한 명령처럼 명령이 턴이 끝난 후에도 유지되는 경우에는 이 필드를 생략합니다. 이 필드는 Claude Code v2.1.227 이상이 필요합니다. Claude Code는 gitOperation.commit.branch를 git의 커밋 요약 줄에 명시된 브랜치로 설정하고, 분리된 HEAD에서 만든 커밋의 경우 생략합니다. 이 필드는 Agent SDK v0.3.227 이상이 필요합니다. Claude Code는 gh pr reopen 명령을 reopened PR 작업으로 보고하며, 이는 Agent SDK v0.3.234 이상이 필요합니다.

Monitor

도구 이름: Monitor
실행 중인 모니터의 백그라운드 작업 ID를 반환합니다. 이 ID를 TaskStop과 함께 사용하여 감시를 조기에 취소합니다.

Edit

도구 이름: Edit
편집 작업의 구조화된 diff를 반환합니다.

Read

도구 이름: Read
파일 타입에 적합한 형식의 파일 콘텐츠를 반환합니다. type 필드에서 구분됩니다.

Write

도구 이름: Write
구조화된 diff 정보를 포함한 쓰기 결과를 반환합니다. originalFile과 structuredPatch가 보유하는 내용은 쓰기에 따라 다릅니다:
  • 새로 생성된 파일의 경우, originalFile은 null이고 structuredPatch는 비어 있습니다
  • 덮어쓰기에서 originalFile은 이전 콘텐츠를 전달하지만, 해당 콘텐츠가 약 10MB보다 클 때는 예외입니다: Claude Code는 diff를 건너뛰고 originalFile null과 structuredPatch 빈 상태를 반환합니다
  • 쓰기가 아무것도 변경하지 않거나 diff가 시간 초과되면 structuredPatch도 비어 있습니다

Glob

도구 이름: Glob
glob 패턴과 일치하는 파일 경로를 수정 시간별로 정렬하여 반환합니다. totalMatches와 countIsComplete는 Claude Code v2.1.191 이상이 필요합니다. totalMatches는 잘림 전 일치하는 파일의 수를 보고합니다. countIsComplete가 false일 때, totalMatches는 기본 검색이 자신의 출력을 잘랐기 때문에 하한입니다.

Grep

도구 이름: Grep
검색 결과를 반환합니다. 형태는 mode에 따라 다릅니다: 파일 목록, 일치 항목이 있는 콘텐츠 또는 일치 항목 수. count 모드에서 numFiles와 numMatches는 페이지 매김된 슬라이스가 아닌 전체 결과 집합에 대한 합계입니다. v2.1.208 이전에는 나열된 항목을 자른 head_limit 또는 offset이 해당 합계도 잘랐습니다. totalFiles는 Claude Code v2.1.208 이상이 필요하며 files_with_matches 모드에서 head_limit 및 offset 페이지 매김 전 결과의 총 수를 보고합니다. totalLines는 Claude Code v2.1.210 이상이 필요하며 content 모드에서 페이지 매김 전 줄의 총 수를 보고합니다.

TaskStop

도구 이름: TaskStop
백그라운드 작업 중지 후 확인을 반환합니다.

NotebookEdit

도구 이름: NotebookEdit
원본 및 업데이트된 파일 콘텐츠를 포함한 노트북 편집 결과를 반환합니다.

WebFetch

도구 이름: WebFetch
HTTP 상태 및 메타데이터를 포함한 가져온 콘텐츠를 반환합니다. artifactRead는 Claude Code 자체의 아티팩트 읽기 기록이며, Claude가 세션이 게시할 수 있는 아티팩트를 가져왔을 때만 존재합니다. Claude Code는 세션이 재개될 때 이를 다시 읽어서 나중의 게시가 올바른 버전을 기반으로 하도록 합니다. 코드는 이에 대해 조치할 필요가 없습니다. slug는 아티팩트의 이름을 지정하고, ver는 읽기가 기록한 버전이며 기록된 버전이 없으면 존재하지 않고, seeded: false는 전체 소스가 Claude에 도달하지 않은 읽기를 표시합니다. seeded 필드는 Agent SDK v0.3.239 이상이 필요합니다.

WebSearch

도구 이름: WebSearch
웹에서 검색 결과를 반환합니다.

Workflow

도구 이름: Workflow
도구가 호출을 수락한 후 즉시 반환됩니다. 최종 결과는 나중에 작업 완료로 도착합니다. 실행이 시작된 것으로 취급하기 전에 error를 확인하십시오: 구문 검사에 실패한 스크립트는 status: "async_launched"를 반환하고 error가 설정되며, 실행되지 않습니다.

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
할당된 ID와 함께 생성된 작업을 반환합니다.

TaskUpdate

도구 이름: TaskUpdate
업데이트 결과를 반환하며, 어떤 필드가 변경되었는지 포함합니다.

TaskGet

도구 이름: TaskGet
전체 작업 레코드를 반환하거나, ID를 찾을 수 없을 때 null을 반환합니다.

TaskList

도구 이름: TaskList
현재 목록의 모든 작업의 스냅샷을 반환합니다.

ExitPlanMode

도구 이름: ExitPlanMode
플랜 모드 종료 후 계획 상태를 반환합니다.

ListMcpResources

도구 이름: ListMcpResourcesTool
사용 가능한 MCP 리소스의 배열을 반환합니다.

ReadMcpResource

도구 이름: ReadMcpResourceTool
요청된 MCP 리소스의 콘텐츠를 반환합니다.

EnterWorktree

도구 이름: EnterWorktree
git worktree에 대한 정보를 반환합니다.

ExitWorktree

도구 이름: ExitWorktree
수행된 작업과 종료된 worktree에 대한 세부 정보를 반환합니다.

EnterPlanMode

도구 이름: EnterPlanMode
플랜 모드에 진입했음을 확인하는 메시지를 반환합니다.

CronCreate

도구 이름: CronCreate
작업 ID와 일정에 대한 사람이 읽을 수 있는 설명을 반환합니다.

CronDelete

도구 이름: CronDelete
삭제된 작업의 ID를 반환합니다.

CronList

도구 이름: CronList
예약된 cron 작업을 반환합니다: .claude/scheduled_tasks.json의 지속 가능한 작업과 현재 세션의 세션 전용 작업입니다. 세션 전용 작업은 durable: false를 전달합니다. 디스크에서 읽은 작업은 필드를 생략합니다.

ScheduleWakeup

도구 이름: ScheduleWakeup
웨이크업이 발생할 시간을 epoch 밀리초 타임스탬프로, 실제로 사용된 지연, 요청된 지연이 고정되었는지 여부를 반환합니다. stopped 필드는 호출이 stop: true로 루프를 종료했을 때 true입니다. Claude Code v2.1.202 이상이 필요합니다. cancelledWakeups 필드는 stop: true 호출이 취소한 보류 중인 웨이크업의 수를 계산합니다. 0 값은 아무것도 보류 중이지 않음을 의미하며, 반복 /loop cron은 stop: true로 취소되지 않습니다. Claude Code v2.1.206 이상이 필요합니다.

RemoteTrigger

도구 이름: RemoteTrigger
트리거 작업에 대한 API 응답 상태 및 본문을 반환합니다.

PushNotification

도구 이름: PushNotification
푸시 또는 로컬 알림이 전송되었는지 여부와 전송이 건너뛰어진 이유를 포함한 전송 세부 정보를 반환합니다.

ReportFindings

도구 이름: ReportFindings
보고된 결과의 수, Claude가 전달한 level 값, 결과 본문을 위해 에코백된 결과를 반환합니다. Claude Code v2.1.196 이상이 필요합니다. 에코백된 short_summary 필드는 Claude Code v2.1.212 이상이 필요합니다.

Artifact

도구 이름: Artifact
게시 작업의 경우 게시된 페이지의 url과 게시된 로컬 path를 반환하며, 게시가 기존 아티팩트를 재배포했을 때 updated가 true로 설정되고, warnings는 게시 시점의 권고 사항을 전달합니다. 목록 작업은 대신 artifacts 행을 반환하며, 요청된 제한보다 더 많은 아티팩트가 존재할 때 truncated가 설정됩니다. 범위가 "mine"이 아닌 목록에서 각 행은 사용자가 아티팩트를 소유하는지 또는 공유받았는지를 표시하는 rel을 전달하고, 출력의 scope는 어떤 비기본 범위가 목록을 생성했는지 기록합니다. 둘 다 기본 목록에서는 존재하지 않습니다. 목록 결과는 또한 total을 보고합니다. 이는 나열된 범위와 일치하는 아티팩트의 수로, limit을 초과하는 아티팩트도 포함합니다. total_at_least가 설정되면 이 숫자는 하한이며 더 많은 아티팩트가 존재할 수 있습니다. 두 필드 모두 Agent SDK v0.3.292 이상이 필요합니다.

Projects

도구 이름: Projects
method 필드에서 구분되며, 입력을 반영합니다. project_read는 작은 텍스트 문서를 content에 인라인으로 반환하고 더 큰 문서를 대신 local_file 경로에 작성합니다. project_search는 프로젝트의 인덱스를 사용할 수 있을 때 RAG hits를 rag: true로 반환하고 그렇지 않으면 docs 경로 목록으로 폴백합니다.

ReadMcpResourceDir

도구 이름: ReadMcpResourceDirTool
디렉터리 리소스의 직접 자식을 반환합니다. 하위 디렉터리는 mimeType "inode/directory"로 나타나며, error는 서버가 디렉터리를 나열할 수 없을 때 사람이 읽을 수 있는 메시지를 전달합니다.

RefreshMcpTools

도구 이름: RefreshMcpTools
서버당 하나의 항목을 반환합니다: refreshed는 다시 쿼리된 도구 목록이 적용되었음을 의미하고, error는 다시 쿼리가 실패했고 이전 도구 집합이 유지되었음을 의미하며, not_connected는 서버가 쿼리할 라이브 연결이 없음을 의미합니다.

ShowOnboardingRolePicker

도구 이름: ShowOnboardingRolePicker
사용자의 선택을 반환합니다: 역할 칩을 선택하거나 입력했을 때 role, 피커를 닫았을 때 dismissed: true. 빈 객체는 사용자가 역할을 선택하지 않고 호출을 승인했음을 의미합니다.

McpOutput

도구 이름: mcp__<server>__<tool> 형식의 동적 MCP 도구 이름
MCP 도구 결과는 서버에 따라 문자열 또는 콘텐츠 블록 배열로 반환됩니다. 내보낸 타입의 후행 일반 객체 분기는 스키마 생성 과정의 산출물입니다. structuredContent 또는 리소스 링크도 함께 전달하는 결과의 경우, 이 값을 content 멤버에 담고 있는 tool_use_result를 참조하십시오. 런타임에 값은 undefined일 수도 있지만, 내보낸 타입은 이를 모델링하지 않습니다.

권한 타입

PermissionUpdate

권한을 업데이트하기 위한 작업입니다.

PermissionBehavior

PermissionUpdateDestination

PermissionRuleValue

기타 타입

ApiKeySource

세션의 요청에 대한 API 키가 어디에서 왔는지를 나타내며, SDKSystemMessage 초기화 메시지의 apiKeySource로 보고됩니다.
Claude Code는 다음 네 가지 값 중 하나를 보고합니다: Agent SDK v0.3.234 이상은 타입에서 이 네 가지 값을 나열합니다. 타입은 또한 user, project, org, temporary 및 oauth를 유지하므로 이전 코드는 여전히 컴파일되며, Claude Code는 이들을 보고하지 않습니다.

SdkBeta

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에 접미사를 추가하세요.

SlashCommand

사용 가능한 명령에 대한 정보입니다.
builtin은 명령이 Claude Code 자체이고 /name을 입력하면 실행될 때 행에서 true입니다. 사용자, 프로젝트, 플러그인 또는 MCP 서버에서 정의한 명령이나, 이들 중 하나가 이름으로 대체하는 번들 명령의 경우 없습니다. Agent SDK v0.3.277 이상이 필요합니다.

ModelInfo

사용 가능한 모델에 대한 정보입니다.

AgentInfo

Agent 도구를 통해 호출할 수 있는 사용 가능한 서브에이전트에 대한 정보입니다.

McpServerProvenance

mcp__* 도구를 제공하는 MCP 서버와 해당 서버의 정의가 어디에서 왔는지입니다. PreToolUse, PostToolUse, PostToolUseFailure, PermissionRequest 및 PermissionDenied 훅 입력은 이를 mcp_server로 전달하고, CanUseTool 옵션은 이를 mcpServer로 전달합니다. 둘 다 MCP 서버에서 오지 않는 도구의 경우 이를 생략합니다.
source는 다음 값 중 하나를 취합니다. 집합이 열려 있으므로, 인식하지 못하는 값을 구성된 소스로 취급하고, sdk로 취급하지 마세요:
  • sdk: 애플리케이션이 등록한 인프로세스 서버입니다. SDK 호스트 애플리케이션만 하나를 등록할 수 있으므로, 구성된 서버는 이름이 무엇이든 sdk를 보고하지 않습니다.
  • plugin: 플러그인이 제공하는 서버입니다. 해당 name은 플러그인 제공 MCP 서버 아래에 설명된 범위가 지정된 plugin:<plugin-name>:<server-name> 형식입니다.
  • 구성 범위: user, project, local, dynamic, managed, enterprise, claudeai 또는 agent. .mcp.json 서버는 project를 보고하고, MCP 설치 범위는 local, project 및 user를 정의합니다. 애플리케이션이 mcpServers 옵션에서 전달하는 서버(인프로세스 SDK 서버 제외)는 dynamic을 보고합니다.
name 또는 mcp__<server>__ 도구 이름 접두사가 아닌 source를 기반으로 신뢰 결정을 내리세요. sdk 이외의 모든 소스에 대해 name은 신뢰할 수 없는 텍스트입니다. 표시하기 전에 이스케이프하세요. McpServerProvenance 및 이를 전달하는 필드는 Agent SDK v0.3.274 이상이 필요합니다.

McpServerStatus

연결된 MCP 서버의 상태입니다.
source는 서버의 정의가 어디에서 왔는지를 나타내며, McpServerProvenance의 source와 동일한 값 및 신뢰 규칙을 가집니다. 필드는 Agent SDK v0.3.274 이상이 필요하며 이전 버전에서는 없습니다. tools 항목의 _meta는 해당 도구의 _meta의 MCP Apps 멤버를 전달하므로, 애플리케이션이 readMcpResource()로 렌더링할 ui:// 리소스를 찾을 수 있습니다. Claude Code는 ui 객체와 deprecated된 평면 ui/resourceUri 문자열을 통과시키고, 다른 모든 키를 보류합니다. ui 내에서 resourceUri는 ui:// 문자열이고 visibility는 서버가 설정할 때 "model" 및 "app"의 배열이며, 다른 멤버는 변경되지 않고 통과합니다. Claude Code는 값이 잘못된 형식일 때 어느 키든 삭제하고, 도구가 둘 다 선언하지 않을 때 _meta를 생략합니다. 필드는 초기화 메시지의 capabilities에 mcp_tool_ui_meta_v1이 포함될 때만 나타나며, TypeScript Agent SDK v0.3.280 이상이 필요합니다.

McpServerStatusConfig

mcpServerStatus()에서 보고한 MCP 서버의 구성입니다. 이는 모든 MCP 서버 전송 타입의 합집합입니다.
각 전송 타입의 세부 정보는 McpServerConfig를 참조하세요.

AccountInfo

인증된 사용자의 계정 정보입니다.

ModelUsage

결과 메시지에서 반환된 모델별 사용 통계입니다. costUSD 값은 클라이언트 측 추정입니다. 비용 및 사용량 추적에서 청구 주의 사항을 참조하세요.
thinkingTokens는 이 모델이 생성한 사고 토큰을 계산합니다. outputTokens는 이미 이들을 포함하므로 둘을 함께 더하지 마세요. 필드는 이를 기록하는 Claude Code 버전에서 턴이 실행될 때까지 없으므로, 이전 버전에서 시작된 재개된 세션은 부분 개수를 보고합니다. thinkingTokens는 Agent SDK v0.3.257 이상이 필요합니다. canonicalModel 및 provider 필드는 Claude Code v2.1.218 이상이 필요합니다. canonicalModel은 가격 조회가 사용하는 정규 모델 ID입니다. 예를 들어 해당 문자열이 제공자별 ID 또는 별칭일 때 항목을 키하는 원본 모델 문자열과 다를 수 있습니다. provider는 모델을 제공한 API 백엔드의 이름을 지정합니다. 예를 들어 firstParty, bedrock, vertex, foundry, anthropicAws, mantle 또는 gateway. costBasis는 모델의 최신 요청에 가격을 책정한 가격 테이블의 이름을 지정합니다. 목록 가격의 경우 list, modelPricing 테이블의 경우 managed, 또는 모델 ID와 일치하는 것이 없을 때 unknown. 필드는 Claude Code v2.1.246 이상이 필요합니다.

ConfigScope

NonNullableUsage

fallback_credit을 제외한 모든 nullable 필드가 non-nullable로 만들어진 Usage의 버전입니다. fallback_credit은 여전히 null일 수 있습니다.

Usage

토큰 사용 통계입니다. 이는 @anthropic-ai/sdk의 BetaUsage 타입입니다.
BetaServerToolUsage, BetaIterationsUsage, BetaOutputTokensDetails 및 BetaFallbackCreditUsage는 @anthropic-ai/sdk에서 정의됩니다. output_tokens_details는 청구된 출력을 카테고리별로 분류합니다. 현재 하나의 필드 thinking_tokens: number를 전달하며, 모델이 내부 추론으로 생성한 출력 토큰을 계산합니다. 여기에는 사고 블록 구분 기호가 포함됩니다. output_tokens_details 필드는 TypeScript SDK v0.3.228 이상이 필요하며, 이는 Claude Code v2.1.228을 번들로 제공합니다.
  • 청구: 청구를 위해서가 아니라 관찰 가능성을 위해 분류를 읽으세요. output_tokens는 권위 있는 합계로 유지되며, output_tokens - thinking_tokens는 비추론 출력을 근사합니다.
  • 개수가 포함하는 것: 모델이 생성한 원본 추론이며, 응답 본문에서 반환된 사고 텍스트보다 길 수 있습니다. API는 해당 원본 텍스트를 다시 토큰화하여 계산하므로, 모델의 정확한 생성 개수와 몇 토큰 정도 다를 수 있습니다.
  • 스트리밍: 스트리밍된 어시스턴트 메시지에서 이 분류는 output_tokens처럼 message_start 자리 표시자이며 실제 개수를 전달하지 않으므로, 결과 메시지에서 출력 토큰 읽기에서 설명하는 대로 결과 메시지의 usage에서 읽으세요. 결과 메시지에서 모델 또는 제공자가 분류를 보고하지 않을 때 thinking_tokens는 0입니다.
  • null 경우: output_tokens_details 자체는 Claude Code가 합성하는 어시스턴트 메시지(예: API 오류 메시지)에서 null입니다.
Usage가 fallback_credit을 포함하는지 여부는 설치된 @anthropic-ai/sdk에 따라 달라지며, 이 필드는 0.115.0에서 추가되었습니다.

CallToolResult

MCP 도구 결과 타입 (@modelcontextprotocol/sdk/types.js에서). structuredContent는 content와 함께 반환될 수 있는 JSON 객체이며, 이미지 블록을 포함합니다. 구조화된 데이터 반환을 참조하세요.
MCP 도구가 참조로 반환한 하나의 파일입니다. Claude Code는 도구의 결과에서 resource_link 블록에서 각 항목을 빌드하고 목록을 SDKUserMessage.tool_use_result의 resourceLinks로 전달하거나, 호출이 백그라운드에서 완료되었을 때 SDKTaskNotificationMessage의 resource_links로 전달합니다. Agent SDK v0.3.257 이상이 필요합니다.
Claude Code는 uri 또는 name이 문자열이 아닌 블록을 삭제하고, 값이 나열된 타입이 아닌 선택적 필드를 생략합니다.

ThinkingConfig

Claude의 사고/추론 동작을 제어합니다. deprecated된 maxThinkingTokens보다 우선합니다.
선택적 display 필드는 사고 텍스트가 "summarized" 또는 "omitted"로 반환되는지 제어합니다. Claude Opus 4.7 이상에서 API 기본값은 "omitted"이므로, thinking 블록에서 사고 콘텐츠를 받으려면 "summarized"를 설정하세요. Claude Code는 Amazon Bedrock 및 Google Cloud의 Agent Platform 같은 일부 제공자에는 display 값을 전달하지 않습니다. 이러한 제공자에서 Opus 4.7 이상은 display를 "summarized"로 설정한 경우에도 빈 thinking 블록을 반환합니다.

SpawnedProcess

사용자 정의 프로세스 생성을 위한 인터페이스 (spawnClaudeCodeProcess 옵션과 함께 사용). ChildProcess는 이미 이 인터페이스를 만족합니다.

SpawnOptions

사용자 정의 생성 함수에 전달된 옵션입니다.
signal 필드는 프로세스를 종료할 시기를 생성 함수에 알립니다. 이를 Node의 spawn()에 signal 옵션으로 전달하거나, VM 또는 컨테이너 종료 핸들러에 전달하세요.이 신호는 Options.abortController가 중단되는 순간 즉시 발생하지 않습니다. SDK는 먼저 프로세스의 stdin을 닫고 CLI가 깔끔하게 종료될 수 있도록 약 2초를 기다린 후, 이 신호를 중단합니다. 호출자가 중단되는 순간 즉시 반응하려면, 생성 함수가 인클로징 스코프에서 참조할 수 있는 자신의 Options.abortController.signal을 수신하세요.

McpSetServersResult

setMcpServers() 작업의 결과입니다.
setMcpServers()를 호출할 때, Claude Code는 다음 규칙을 적용합니다:
  • 호출이 이름을 지정하지 않는 서버: 클라우드 세션 외부에서 Claude Code는 이전 setMcpServers() 호출이 추가한 서버와 인프로세스 SDK 서버의 연결을 끊고 이를 removed에 나열합니다. 다른 서버는 계속 실행되며 removed에 나열되지 않습니다. 여기에는 mcpServers 옵션의 stdio, HTTP 및 SSE 서버, 설정 파일의 서버, 플러그인 제공 서버가 포함됩니다.
  • 호출이 이름을 지정하는 서버: Claude Code는 이전 setMcpServers() 호출이 추가한 stdio, HTTP 또는 SSE 서버를 해당 구성이 전달한 것과 다를 때만 교체합니다. 해당 이름으로 이미 등록된 인프로세스 SDK 서버는 그대로 유지되므로, 이를 교체하려면 한 호출에서 제외한 다음 호출에서 추가하세요.
  • CLI가 시작 시 시작한 기본 제공 서버: 호출이 하나를 이름으로 지정하면, Claude Code는 해당 항목을 삭제하고 errors에서 보고합니다.
프로미스는 새로 추가된 stdio, HTTP 및 SSE 서버가 연결되거나 실패한 후 해결되므로, 연결된 서버의 도구는 다음 턴에서 사용 가능합니다. added는 Claude Code가 추가하거나 교체한 서버를 나열하며, 연결 여부와 관계없이 나열합니다. 연결 실패한 서버는 added와 errors 모두에 나타나며, errors 아래에 실패 텍스트가 있고 mcpServerStatus()에서 failed 행이 있습니다. Claude Code v2.1.257 이전에는 연결 시도가 예외를 던진 서버는 errors 아래에만 보고되었습니다.

RewindFilesResult

rewindFiles() 작업의 결과입니다.
skippedLinks는 되감기가 링크 안전을 위해 복원하거나 삭제하기를 거부한 추적된 경로의 개수를 계산합니다. 추적된 경로의 심볼릭 링크, 하드 링크 또는 기타 일반 파일이 아닌 파일, 체크포인트가 생성되었을 때 가리키던 위치로 더 이상 확인되지 않는 부모 디렉토리, 또는 안전하게 읽을 수 없는 백업입니다. 필드는 Claude Code v2.1.216 이상이 필요합니다. rewindFiles(userMessageId, { dryRun: true })를 사용한 미리보기 호출은 이를 설정하지 않습니다.

SDKStatusMessage

상태 업데이트 메시지 (예: 압축).

SDKTaskNotificationMessage

백그라운드 작업이 완료, 실패 또는 중지될 때의 알림입니다. 백그라운드 작업에는 run_in_background Bash 명령, Monitor 감시 및 백그라운드 서브에이전트가 포함됩니다. run_id 및 ambient 필드는 이를 정의하고 버전 요구 사항을 설명하는 SDKTaskStartedMessage를 참조하세요.
reason은 작업이 자체 완료, 실패 또는 중지가 아닌 다른 원인으로 종료될 때 설정되며, Agent SDK v0.3.273 이상이 필요합니다. Claude Code는 claude.ai를 통해 연결되는 세션에서만 이를 설정합니다. 자체 호스팅 러너의 세션을 포함한 클라우드 세션과 Remote Control 세션이 해당됩니다. 로컬 query() 호출은 이를 설정하지 않습니다. 유일한 값인 worker_restart는 작업을 실행하던 Claude Code 프로세스가 다시 시작되었음을 의미합니다. 알림은 상태 "stopped"를 전달하므로, 해당 작업을 완료나 실패로 취급하지 마세요. Claude Code가 긴 MCP 도구 호출을 백그라운드로 이동할 때, 해당 호출에 대한 tool_result 블록은 자리 표시자만 보유하고 호출의 실제 결과는 이 알림에서 도착합니다. tool_use_id를 사용하여 알림을 호출과 일치시킵니다. completed 알림에서 resource_links는 도구가 SDKMcpResourceLink 항목으로 참조로 반환한 파일을 나열하며, tool_use_result.resourceLinks와 동일한 50개 링크 및 64 KiB 제한이 있습니다. Claude Code는 결과에 링크가 없을 때 resource_links를 생략하고 MCP 도구 호출이 아닌 작업에 대한 알림에서 생략합니다. resource_links는 Agent SDK v0.3.257 이상이 필요합니다. Claude Code는 모델에 전송하는 모든 작업 알림 앞에 공지를 추가합니다. 단, scheduled-trigger 서브종류로 스탬프된 전달은 예외이며, 이들은 대신 할당된 작업 프레이밍을 전달합니다. 공지는 사람의 입력이 발생하지 않았음을 명시하므로, 모델은 알림을 사용자 지시나 승인으로 취급하지 않습니다. 작업 알림 턴을 감지하려면, 공지 텍스트와 일치시키는 대신 SDKUserMessage 또는 SDKResultMessage의 origin.kind === "task-notification"을 확인하세요. 무엇이 이를 발생시켰는지 알아야 하는 경우 동일한 필드에서 subkind를 읽으세요. v2.1.205 이전에 Claude Code는 세션이 유휴 상태일 때 도착한 알림에서 공지를 생략했습니다.

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

도구가 실행 중일 때 진행 상황을 나타내기 위해 주기적으로 내보내집니다.
도구 호출이 주 대화에서 실행되는 동안, Claude Code는 heartbeat: true를 사용하여 30초마다 tool_progress 메시지를 내보냅니다. 각 하트비트는 도구 이름과 경과 초를 전달하므로, 장시간 실행되는 호출을 정지된 세션과 구별할 수 있습니다. Claude Code는 서브에이전트 내부의 도구 호출에 대해 하트비트를 내보내지 않습니다. heartbeat 필드는 Agent SDK v0.3.214 이상이 필요합니다. v2.1.257 이전에 Claude Code는 포그라운드 Agent 도구 호출에 대해서도 하트비트를 내보내지 않았습니다. 하트비트가 아닌 Agent 도구에 대한 tool_progress 메시지에서 subagent_type은 실행 중인 서브에이전트 타입의 이름을 지정합니다. 예를 들어 general-purpose. subagent_retry는 해당 서브에이전트가 API 오류 백오프(예: 속도 제한 또는 과부하)를 기다리는 동안 나타나며, 재시도 시도당 하나의 메시지가 있습니다. 두 필드 모두 Agent SDK v0.3.214 이상이 필요합니다. subagent_retry에서 재시도 표시기를 렌더링하려면:
  • parent_tool_use_id로 표시기를 추적합니다. 이는 서브에이전트당 고유합니다. tool_use_id는 하나의 어시스턴트 턴에서 병렬 서브에이전트에 의해 공유되므로, 이를 통해 추적하면 한 서브에이전트의 업데이트가 다른 서브에이전트의 표시기를 지울 수 있습니다.
  • 동일한 parent_tool_use_id에 대한 나중의 tool_progress가 subagent_retry 또는 heartbeat: true 없이 도착하거나 도구의 결과 메시지가 도착할 때 표시기를 지웁니다. heartbeat: true가 있는 프레임은 생동성만 보고하므로, 하나가 도착할 때 표시기를 유지합니다. attempt는 지속적인 재시도 아래에서 max_retries를 초과할 수 있으므로, 카운터에서 지우기를 파생하지 마세요.
  • error_category를 자신의 메시지 텍스트를 선택하기 위한 토큰으로 취급하고, 표시 텍스트로 취급하지 마세요. 값은 rate_limit, overloaded, authentication_failed, server_error, cloud_credential_error 및 unknown입니다. 이후 릴리스에서 값이 추가될 수 있으므로, 인식하지 못하는 값은 unknown을 처리하는 방식으로 처리하세요.

SDKAuthStatusMessage

인증 흐름 중에 내보내집니다.

SDKTaskStartedMessage

작업이 시작될 때 내보내집니다. task_type 필드는 Bash 명령 및 Monitor 감시의 경우 "local_bash", 서브에이전트의 경우 "local_agent" 또는 "remote_agent"입니다.
run_id는 작업의 한 번의 실행을 식별합니다. Claude가 재개하는 서브에이전트처럼 작업이 동일한 task_id로 다시 실행되면, 새 실행은 새 run_id를 받습니다. 필드는 Agent SDK v0.3.292 이상이 필요합니다. 이를 사용하여 한 작업의 실행들을 구분하세요:
  • 메시지를 실행과 일치시키기: 한 실행의 task_started, task_progress, task_updated 및 task_notification 메시지는 동일한 run_id를 전달합니다. 각 SDKBackgroundTasksChangedMessage에 있는 해당 실행의 항목도 이를 전달하며, 해당 실행의 알림을 전달하는 사용자 메시지의 origin에 있는 runId도 마찬가지입니다.
  • 늦게 도착한 메시지 감지하기: 일반 문자열로 비교하면 한 작업의 실행 ID는 실행이 시작된 순서대로 정렬되므로, run_id가 표시 중인 실행보다 앞에 정렬되는 메시지는 이전 실행에서 온 것입니다. 이 비교 외에는 값을 불투명한 것으로 취급하세요.
  • task_id로 대체하기: 이전 프로세스가 시작한 작업을 닫기 위해 재개된 세션이 내보내는 task_notification처럼 메시지에 run_id가 없을 때는 task_id로 귀속시키세요.
예를 들어, 식별 필드만 남기고 줄인 다음 세 메시지는 Claude가 한 번 재개한 백그라운드 서브에이전트에서 온 것입니다. 두 task_started 메시지는 task_id를 공유하며, 첫 번째 실행을 종료한 알림은 첫 번째 실행의 ID를 전달합니다:
ambient는 세션의 작업의 일부가 아닌 작업(예: Claude Code가 자신의 작업을 위해 실행하는 작업)에 대해 true입니다. 라이브 업데이트 감시자도 ambient이며, 여기에는 사용자가 요청한 감시자가 포함됩니다. ambient 작업을 활동 표시기에서 제외하세요. 필드는 Agent SDK v0.3.247 이상이 필요합니다. ambient는 또한 SDKTaskNotificationMessage 및 SDKBackgroundTasksChangedMessage 항목에 나타납니다. is_backgrounded 및 spawn_depth는 Claude Code가 작업을 시작한 방식을 설명합니다. 두 필드 모두 Agent SDK v0.3.238 이상이 필요합니다.
  • is_backgrounded: Claude Code는 "local_agent" 및 "local_bash" 작업에서 이를 설정합니다. true는 작업이 백그라운드에서 실행됨을 의미합니다. false는 작업이 포그라운드에서 실행되고, 이를 시작한 도구 호출은 작업이 완료되거나 백그라운드로 이동할 때까지 차단된 상태로 유지됨을 의미합니다.
  • spawn_depth: Claude Code는 "local_agent" 작업에서만 이를 설정합니다. 주 스레드가 생성한 서브에이전트는 깊이 1을 가집니다. 깊이 1 서브에이전트가 생성한 서브에이전트는 깊이 2를 가지며, 이런 식으로 계속됩니다.
재개된 서브에이전트는 항상 is_backgrounded: true를 보고합니다. Claude Code는 모든 재개된 서브에이전트를 백그라운드에서 실행하기 때문입니다. 포그라운드 작업이 나중에 백그라운드로 이동할 때, Claude Code는 두 번째 task_started를 전송하는 대신 새로운 is_backgrounded 값을 task_updated 메시지에서 보고합니다. parent_task_id는 이 작업을 시작한 서브에이전트의 task_id를 담습니다. 이를 사용하여 각 작업을 해당 작업을 시작한 서브에이전트 아래에 그룹화하세요. Claude Code는 서브에이전트, Bash 및 Monitor 작업에서 이를 설정합니다. 필드는 Agent SDK v0.3.292 이상이 필요합니다. 다음 경우에는 없습니다:
  • 주 스레드가 작업을 시작한 경우
  • Claude Code가 더 이상 부모 작업을 추적하지 않는 경우
  • 팀원 또는 워크플로 내부의 에이전트가 작업을 시작한 경우
부모는 포그라운드 작업이거나 이미 종료된 작업일 수 있으므로, 인식하지 못하는 ID는 부모가 없는 것으로 취급하세요.

SDKTaskProgressMessage

서브에이전트 또는 백그라운드 작업이 실행 중일 때 주기적으로 내보내집니다. run_id 필드는 이를 정의하고 버전 요구 사항을 설명하는 SDKTaskStartedMessage를 참조하세요. 서브에이전트 작업의 경우, summary 필드는 모델 생성 진행 상황 요약을 전달하며 agentProgressSummaries가 활성화되었을 때만 채워집니다. 백그라운드 MCP 도구 호출의 경우, summary는 MCP 서버의 최신 보고된 진행 상황을 전달하며 해당 옵션에 따라 달라지지 않습니다.

SDKTaskUpdatedMessage

백그라운드 작업의 상태가 변경될 때 내보내집니다. 예를 들어 running에서 completed로 전환될 때입니다. patch를 task_id로 키가 지정된 로컬 작업 맵에 병합하세요. end_time 필드는 Unix epoch 타임스탬프(밀리초)이며 Date.now()와 비교할 수 있습니다. run_id 필드는 이를 정의하고 버전 요구 사항을 설명하는 SDKTaskStartedMessage를 참조하세요.

SDKBackgroundTasksChangedMessage

라이브 백그라운드 작업 집합이 변경될 때마다 내보내집니다. 작업이 시작되거나, 완료되거나, 종료되거나, 포그라운드 에이전트가 백그라운드로 전환되거나, 작업의 description, ambient 또는 parent_task_id 필드가 변경될 때입니다. 각 항목의 run_id 및 parent_task_id 필드는 이를 정의하고 버전 요구 사항을 설명하는 SDKTaskStartedMessage를 참조하세요. tasks 배열은 전체 라이브 집합입니다. task_started 및 task_notification 이벤트를 쌍으로 맞추는 대신 각 페이로드로 캐시된 집합을 교체하세요. 그러면 다음 멤버십 변경이 놓친 이벤트를 바로잡습니다. 작업이 종료되면 해당 작업의 task_updated 및 task_notification이 목록에서 해당 작업을 제거하는 background_tasks_changed보다 먼저 도착합니다. 그 외에는 작업별 이벤트에 대한 순서가 지정되지 않습니다. 시작 시 아무것도 내보내지지 않습니다. 세션의 CLI 프로세스가 시작되거나 다시 시작될 때마다 빈 집합으로 재설정하고 다음 멤버십 변경이 다시 채우도록 하세요. 실행 중인 세션에 반복된 initialize 제어 요청을 전송할 때(예: 전송 간격 후 reinitialize() 사용), Claude Code는 응답 뒤에 현재 라이브 집합의 스냅샷을 보냅니다. 비어 있을 때도 마찬가지입니다. 따라서 재연결하는 호스트는 다음 멤버십 변경을 기다리지 않고 실행 중인 것을 알 수 있습니다. Agent SDK v0.3.239 이전에 Claude Code는 반복된 initialize 후 스냅샷을 전송하지 않았습니다. Claude Code v2.1.203 이상이 필요합니다.
subagent_type은 task_type이 "local_agent"인 항목에서 서브에이전트 타입의 이름을 지정합니다. 예를 들어 general-purpose 또는 사용자 정의 서브에이전트의 이름입니다. 필드는 Agent SDK v0.3.293 이상이 필요합니다.

SDKThinkingTokensMessage

Claude가 사고 블록(편집된 블록 포함)을 생성하는 동안 내보내집니다. estimated_tokens는 현재 블록에서 지금까지 생성된 사고 토큰의 누적 추정치이고, estimated_tokens_delta는 이 프레임이 전달하는 증분입니다. 이 추정치는 진행 상황 표시에 사용하세요. 모델 또는 제공자가 분류를 보고할 때, 최상위 에이전트 루프의 최종 개수는 결과 메시지의 usage.output_tokens_details.thinking_tokens입니다. 이는 서브에이전트 토큰을 포함하지 않습니다. Claude Code v2.1.153 이상이 필요합니다.

SDKSessionStateChangedMessage

Claude Code가 세션의 상태를 보고할 때 내보내집니다. 이러한 메시지를 받으려면 CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1을 설정하세요. Claude Code는 동일한 상태를 두 번 이상 보고할 수 있으므로, 메시지를 전환이 아니라 세션의 현재 상태로 해석하세요. state 필드는 다음 값 중 하나를 전달합니다:
  • running: 세션이 작업 중입니다.
  • idle: Claude Code가 다음 프롬프트를 기다리고 있습니다.
  • requires_action: 세션이 호스트에 보낸 요청(예: 권한 프롬프트)에 대한 응답을 기다리며 차단되어 있습니다.
턴의 idle 메시지와 result 메시지는 어느 순서로든 도착할 수 있습니다. 백그라운드 서브에이전트나 워크플로 실행 같은 백그라운드 작업을 idle이 기다릴지 여부를 변경하려면 CLAUDE_CODE_BG_TASKS_REPORT_RUNNING을 참조하세요.

SDKFilesPersistedEvent

파일 체크포인트가 디스크에 지속될 때 내보내집니다.

SDKRateLimitEvent

세션이 속도 제한을 만날 때 내보내집니다.
errorCode가 "credits_required"일 때, 거부는 포함된 사용량이 소진된 claude.ai 구독에서 발생하며, 사용자가 사용량 크레딧을 구매할 때까지 세션을 계속할 수 없습니다. canUserPurchaseCredits는 인증된 사용자가 계정에 대한 크레딧을 구매할 수 있는지 여부를 나타내고, hasChargeableSavedPaymentMethod는 저장된 결제 수단이 등록되어 있는지 여부를 나타냅니다. 세 필드 모두 크레딧 필수 거부가 아닌 속도 제한 이벤트에서는 없습니다. Claude Code v2.1.181 이상이 필요합니다.

SDKLocalCommandOutputMessage

Claude Code는 이 메시지 타입을 내보내지 않습니다. /context 또는 /usage와 같은 명령을 프롬프트로 전송할 때, 해당 출력은 SDKAssistantMessage로 도착합니다.

SDKCommandsChangedMessage

사용 가능한 명령 집합이 세션 중간에 변경될 때 내보내집니다. 예를 들어 에이전트가 하위 디렉토리에 들어갈 때 Claude Code가 스킬을 발견하는 경우입니다. commands 배열은 전체 업데이트된 목록이므로, 캐시된 명령 목록을 이 페이로드로 교체하세요. 이 메시지 후 supportedCommands()를 호출하면 동일한 업데이트된 목록을 반환합니다. 메서드는 최신 푸시를 추적하기 때문입니다. 이는 Agent SDK v0.3.216 이상이 필요합니다. 이전 SDK 버전에서 supportedCommands()는 초기화 시 캡처된 스냅샷을 반환하며 세션 중간 변경을 반영하지 않습니다. Claude Code는 또한 MCP 서버의 프롬프트가 목록에 추가되거나 제거될 때 이 메시지를 내보냅니다. 예를 들어 세션이 시작된 후 서버가 연결을 완료할 때입니다. 이는 Claude Code v2.1.281 이상이 필요합니다.

SDKPromptSuggestionMessage

promptSuggestions가 활성화되어 있고 Claude Code가 해당 턴에 대한 제안을 생성한 경우 턴 후에 내보내집니다. 예측된 다음 사용자 프롬프트를 포함합니다. 제안을 받지 않는 턴은 Claude Code가 제안을 건너뛸 때를 참조하세요.

SDKConversationResetMessage

세션의 대화가 세션을 종료하지 않고 바뀔 때 내보내집니다. query() 호출에서 /clear 및 해당 별칭만 이 메시지를 생성합니다. new_conversation_id 아래에 빈 트랜스크립트를 마운트하고 캐시된 세션 제목을 버리세요.
선택적 필드는 재설정을 설명합니다:
  • trigger: 대화를 버린 것입니다. 이 필드가 없거나 인식하지 못하는 값을 전달하는 경우를 포함하여 모든 conversation_reset 메시지에서 트랜스크립트를 재설정하세요.
  • user_message_uuid: /clear를 전달한 사용자 메시지의 uuid입니다. 이를 사용하여 재설정을 해당 메시지와 일치시키세요.
  • timestamp: 재설정이 발생한 시간이며, UTC의 ISO 8601 문자열입니다. 메시지 순서 지정이 아닌 표시에 사용하세요.
trigger, user_message_uuid 및 timestamp 필드는 Claude Code v2.1.281 이상이 필요합니다. SDK의 게시된 타이핑은 Claude Code v2.1.203 이상에서 SDKConversationResetMessage를 선언합니다. v2.1.203 이전에는 SDKMessage가 타입을 선언하지 않고 참조했으므로, skipLibCheck가 비활성화되었을 때 type === "conversation_reset"에 대한 타입 좁히기가 타입 검사에 실패했습니다.

AbortError

중단 작업을 위한 사용자 정의 오류 클래스입니다.
SDK의 타입 API에서 AbortError는 유일한 오류 클래스입니다. Claude Code 프로세스 종료 또는 시작 실패와 같은 다른 실패는 일치시킬 SDK 클래스가 없는 오류로 메시지 반복을 거부합니다. 문제 해결은 이러한 오류를 메시지별로 정리하여 각각의 원인과 해결 방법을 제공합니다.

샌드박스 구성

SandboxSettings

샌드박스 동작의 구성입니다. 이를 사용하여 명령 샌드박싱을 활성화하고 프로그래밍 방식으로 네트워크 제한을 구성합니다.
샌드박스는 플랫폼 지원에 따라 다르며, Linux에서는 bubblewrap 및 socat과 같은 도구가 필요합니다. enabled가 true이고 샌드박스를 시작할 수 없는 경우 query()는 subtype: "error_during_execution"이 있는 result 메시지를 보고하고 errors에 이유를 표시합니다. 단일 메시지 query() 호출의 경우 SDK는 해당 오류 결과를 생성한 후 예외를 발생시키므로 루프를 try 블록으로 래핑하여 이를 지나 계속 진행합니다. 오류 계약에 대해서는 결과 처리를 참조합니다.대신 샌드박스되지 않은 상태로 실행하려면 failIfUnavailable: false를 설정합니다.

사용 예제

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

SandboxNetworkConfig

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

SandboxFilesystemConfig

샌드박스 모드를 위한 파일 시스템 특정 구성입니다.

샌드박스되지 않은 명령에 대한 권한 폴백

allowUnsandboxedCommands가 활성화되었을 때 모델은 도구 입력에서 dangerouslyDisableSandbox: true를 설정하여 샌드박스 외부에서 명령을 실행하도록 요청할 수 있습니다. 이러한 요청은 기존 권한 시스템으로 폴백되므로 canUseTool 핸들러가 호출되어 사용자 정의 인증 로직을 구현할 수 있습니다. excludedCommands 항목은 대신 샌드박스를 자동으로 무시하며 모델 개입이 없습니다. sandbox.excludedCommands는 항목이 적용되는 시기를 다룹니다. 아래 예제에서 isCommandAuthorized는 사용자가 정의하는 인증 확인을 나타냅니다.
dangerouslyDisableSandbox: true로 실행되는 명령은 전체 시스템 액세스 권한이 있습니다. canUseTool 핸들러가 이러한 요청을 신중하게 검증하는지 확인합니다.permissionMode가 bypassPermissions로 설정되고 allowUnsandboxedCommands가 활성화되면 모델은 작업 자동 승인 안 함 모드를 제외하고 승인 프롬프트 없이 샌드박스 외부에서 명령을 자율적으로 실행할 수 있습니다. 이 조합은 모델이 샌드박스 격리를 조용히 탈출하도록 효과적으로 허용합니다.

참고 항목