Установка
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 вместо этого.Если ваш менеджер пакетов не применяет поле libc npm, как это делает Yarn 1.x, вы получите оба пакета платформы glibc и musl на Linux, примерно удвоив размер установки. На Agent SDK v0.2.141 или позже SDK всё ещё запускает правильный вариант. Чтобы освободить место в образе контейнера, удалите пакет платформы, который не соответствует libc, где работает ваше приложение; для среды выполнения glibc на x64 это 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 версии 0.3.144 или позже. Пример ниже выполняет сборку для macOS на Apple Silicon:
extractFromBunfs() копирует встроенный бинарный файл из виртуальной файловой системы скомпилированного исполняемого файла в каталог временных файлов для каждого пользователя и возвращает реальный путь. Вне скомпилированного исполняемого файла он возвращает входной путь без изменений, поэтому тот же код работает в разработке без модификации.
Каждый скомпилированный исполняемый файл содержит бинарный файл одной платформы. Совместите пакет платформы в импорте с вашим --target:
- Для кросс-компиляции установите пакет несовпадающей платформы, например
npm install @anthropic-ai/claude-agent-sdk-linux-x64 --force. - На Windows подпуть бинарного файла — это
claude.exe, например@anthropic-ai/claude-agent-sdk-win32-x64/claude.exe.
Импортируйте запись /core при объединении Agent SDK
Если ваше приложение объединяет Agent SDK вместе со своими собственными зависимостями, импортируйте из @anthropic-ai/claude-agent-sdk/core вместо корня пакета. Запись /core требует TypeScript Agent SDK версии 0.3.282 или позже, и её типы требуют TypeScript 5.0 или позже.
Запись /core экспортирует то же самое query(), startup(), tool(), createSdkMcpServer() и resolveSettings(), что и корневая запись, вместе с функциями, которые переименовывают, помечают и удаляют сеансы, AbortError, константы времени выполнения и каждый тип. Она не добавляет имена своего собственного. Чтобы сохранить код, который загружает ваше приложение, небольшим, /core опускает некоторые корневые экспорты, включая prewarm(), класс InMemorySessionStore и вспомогательные функции, которые перечисляют, читают, разветвляют, импортируют и суммируют сеансы. Если вам нужна одна из них, используйте корневую запись вместо этого.
Корневая запись встраивает свои собственные копии zod и @modelcontextprotocol/sdk. Запись /core импортирует их из вашего node_modules в диапазонах, которые объявляют peerDependencies Agent SDK, поэтому пакет, который уже их включает, не несёт вторую копию. Импортируйте либо из корня, либо из /core в данном процессе, но не из обоих: это отдельные пакеты, и загрузка обоих даёт вам две копии классов и состояния Agent SDK.
Функции
query()
Основная функция для взаимодействия с Claude Code. Создаёт асинхронный генератор, который потоком передаёт сообщения по мере их поступления.
Параметры
Возвращаемое значение
Возвращает объектQuery, который расширяет AsyncGenerator<SDKMessage, void> дополнительными методами.
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 МБ памяти во время ожидания. Если ваш spawnClaudeCodeProcess запускает Claude Code на другой машине или в контейнере, установите в options.cwd каталог, который там существует, чтобы запасной процесс ждал в нём.
options и initializeTimeoutMs означают то же самое, что и для startup(), за исключением того, что options.cwd задаёт только каталог, в котором ждёт запасной процесс. Промис разрешается с SpareProcess после того, как процесс завершил инициализационное рукопожатие. prewarm() выбрасывает исключение, если options устанавливает resume, continue или forkSession, потому что у запасного процесса ещё нет сессии. Всё, что привязка не может установить, например mcpServers, hooks, canUseTool, settingSources, systemPrompt и plugins, зафиксировано на время жизни запасного процесса, поэтому держите один запасной процесс на каждый отдельный набор этих параметров и выполняйте предварительный разогрев снова, когда они изменяются.
Пример
Выполните предварительный разогрев при загрузке приложения, затем привяжите запасной процесс, когда пользователь начинает сессию:tool()
Создаёт типобезопасное определение инструмента MCP для использования с MCP-серверами SDK.
Параметры
ToolAnnotations
Определено в @modelcontextprotocol/sdk/types.js. Все поля являются опциональными подсказками; клиенты не должны полагаться на них при принятии решений, связанных с безопасностью.
createSdkMcpServer()
Создаёт экземпляр MCP-сервера, который работает в том же процессе, что и ваше приложение.
Параметры
listSessions()
Обнаруживает и перечисляет прошлые сессии с облегчёнными метаданными. Фильтруйте по каталогу проекта или перечисляйте сессии во всех проектах.
Параметры
Тип возврата: SDKSessionInfo
Пример
Выведите 10 самых последних сессий для проекта. Результаты отсортированы поlastModified в убывающем порядке, поэтому первый элемент является самым новым. Опустите dir для поиска во всех проектах.
getSessionMessages()
Читает сообщения пользователя и ассистента из транскрипта прошлой сессии.
Параметры
Тип возврата: SessionMessage
Пример
getSessionInfo()
Читает метаданные одной сессии по ID без сканирования всего каталога проекта.
Параметры
Возвращает
SDKSessionInfo или undefined, если сессия не найдена.
renameSession()
Переименовывает сессию, добавляя запись пользовательского названия. Повторные вызовы безопасны; действует самое последнее название.
Параметры
tagSession()
Помечает сессию тегом. Передайте null для очистки тега. Повторные вызовы безопасны; действует самый последний тег.
Параметры
forkSession()
Копирует транскрипт сессии в новую сессию, чтобы вы могли направить диалог в другую сторону, а исходная сессия осталась без изменений. Чтобы создать ответвление от более ранней точки диалога, передайте upToMessageId.
Параметры
Возвращает
{ sessionId } — UUID новой сессии. Передайте его как resume, чтобы продолжить ответвление. Ответвление не включает файловые чекпоинты исходной сессии, поэтому его нельзя откатить к чекпоинту, созданному до ответвления.
forkSession() выбрасывает исключение, когда:
sessionIdне является UUID- сессия не найдена или не содержит сообщений
upToMessageIdне соответствует ни одному сообщению в транскрипте
resolveSettings()
Вычисляет действующие настройки Claude Code для заданного каталога, используя тот же механизм объединения, что и CLI, без запуска Claude CLI. Используйте эту функцию, чтобы проверить, какую конфигурацию увидит вызов query(), прежде чем его выполнять.
Эта функция находится в альфа-версии, и её API может измениться до стабилизации.
query():
policyHelper:resolveSettings()читает источники MDM, включая macOS plist и Windows HKLM/HKCU, но не выполняет настроенный администратором подпроцесс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 пингов, хост, задавшийincludePartialMessages, продолжает получать события потокаping, поэтому воспринимайте эти кадры как признак активности, а не завершайте сессию по таймауту из-за отсутствия данных. До v2.1.257 эти кадры прекращались через 5 минут после последнего реального события потока.
Объект Query
Интерфейс, возвращаемый функцией query().
Методы
applyFlagSettings()
Изменяет настройки работающей сессии без перезапуска запроса. Используйте этот метод, когда в ходе сессии нужно изменить настройку, для которой нет отдельного сеттера, например ужесточить permissions после того, как агент прочитал недоверенные входные данные. setModel() и setPermissionMode() — это отдельные сеттеры для этих двух ключей; applyFlagSettings() — общая форма, принимающая любое подмножество ключей настроек, и передача model здесь работает так же, как setModel().
В ходе сессии действуют только некоторые ключи:
- Применяются со следующего хода:
effortLevel,ultracode,permissions,hooks,skillOverrides,fastMode,agent. Переключениеagentтакже применяет переопределение модели и хуки этого агента со следующего хода. Его системный промпт применяется со следующего хода или, в сессии, которая повторно использует записанный системный промпт, после сжатия сессии. - Применяются в течение текущего хода:
model. Если вы переключаетеmodel, пока Claude работает над ходом, ответ, который Claude уже генерирует, завершается на старой модели, а остальная часть хода, начиная со следующего обращения Claude Code к модели, использует новую. Субагенты сохраняют собственную модель. До v2.1.212 переключение в середине хода вступало в силу только со следующего хода. - Не действуют в ходе сессии: параметры системного промпта. Они определяются один раз при запуске, поэтому работающая сессия сохраняет исходное значение, хотя вызов завершается успешно. Чтобы изменить их, запустите новую сессию.
effortLevel принимает название уровня effort. Он также принимает "ultracode", что запрашивает уровень effort xhigh с включённым ultracode. applyFlagSettings() объявляет effortLevel без этого значения, поэтому в TypeScript для того же результата передавайте { ultracode: true, effortLevel: "xhigh" } или только ключ ultracode, чтобы включить ultracode при текущем уровне effort сессии. Значение ultracode требует Claude Code v2.1.203 или новее и принимается только applyFlagSettings(), но не ключом effortLevel в файле настроек. До v2.1.284 один лишь ключ ultracode также устанавливал уровень xhigh.
Значения записываются в уровень настроек флагов поверх того, что встроенный параметр settings функции query() задал при запуске. Это тот же уровень, который раздел о приоритете на этой странице называет программными параметрами.
Последовательные вызовы выполняют поверхностное объединение ключей верхнего уровня. Второй вызов с { permissions: {...} } заменяет весь объект permissions из предыдущего вызова, а не объединяется с ним глубоко.
Чтобы сбросить ключ, заданный через applyFlagSettings(), передайте null для этого ключа. Большинство ключей затем сначала возвращаются к значению, которое параметр settings функции query() задал при запуске, а затем к источникам с более низким приоритетом. Сброшенный model возвращается к модели Claude Code по умолчанию, даже если model задан в файле настроек. Передача undefined ни на что не влияет, потому что сериализация JSON отбрасывает это значение.
Помимо model, ещё три ключа сбрасывают состояние сессии вместо возврата к предыдущим значениям:
effortLevel: nullвозвращает сессию к уровню effort модели по умолчанию, а не к параметруeffortфункцииquery()или кeffortLevelиз файла настроек.agent: nullзапускает основной поток без агента, начиная со следующего хода, вместо восстановления параметраagentфункцииquery()или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и сохраняет его как уровень effort по умолчанию для текущей модели сессии в разделеmodelSettingsвашего пользовательского файла настроек. Передачаmaxничего не записывает, потому чтоmaxдействует только в рамках сессии. В любом случае работающая сессия сохраняет свой текущий уровень effort, поэтому, если вы хотите изменить и его, вызовитеapplyFlagSettings(). Этот источник требует TypeScript SDK v0.3.277 или новее, который включает Claude Code v2.1.277.
settingSources сессии исключают указанный вами источник. Удаление ключа не поддерживается.
toggleMcpServer()
Отключение сервера разрывает соединение с ним и удаляет его инструменты из сессии. Для серверов, добавленных в ходе сессии, и для внутрипроцессных серверов это зависит от версии Claude Code:
- Сервер stdio, SSE или HTTP, добавленный в ходе сессии через
setMcpServers(): удаление его инструментов требует Claude Code v2.1.285 или новее. - Внутрипроцессный сервер, созданный с помощью
createSdkMcpServer(), независимо от того, передали ли вы его вmcpServersили черезsetMcpServers(): разрыв соединения с ним и удаление его инструментов требуют Claude Code v2.1.286 или новее. Отключение такого сервера также приводит к ошибке для его ещё выполняющихся вызовов инструментов, поэтому Claude сразу получает результат с ошибкой для каждого из них, не дожидаясь возврата из вашего обработчика.
WarmQuery
Дескриптор, возвращаемый startup(). Подпроцесс уже запущен и инициализирован, поэтому вызов query() на этом дескрипторе записывает промпт непосредственно в готовый процесс без задержки на запуск.
Методы
WarmQuery реализует AsyncDisposable, поэтому его можно использовать с await using для автоматической очистки.
SpareProcess
Альфа. Дескриптор, возвращаемый prewarm(): запущенный процесс Claude Code, который ещё не привязан к сессии и может быть занят один раз. Требуется TypeScript Agent SDK v0.3.282 или новее.
Члены
options.cwd обязателен. При привязке также можно задать additionalDirectories, model, permissionMode, maxThinkingTokens, наложение настроек флагов в settings, appendSystemPrompt, title, agents и токены для отдельной сессии в env.
Claude Code может отказать в привязке, например для несуществующей папки или папки, настройки проекта которой задают env, agent или model. После отказа промпт, который claim() уже отправил, получает результат с ошибкой, текст которой начинается с not_claimed, после чего возвращённый запрос выбрасывает исключение. Оберните цикл запроса в блок try, чтобы продолжить работу после исключения. Когда claimed отклоняется с сообщением, начинающимся с option_not_applied, сессия работает без запрошенных вами model или maxThinkingTokens. После любого другого отклонения ваш промпт не выполнялся, поэтому запустите сессию через query().
SDKControlInitializeResponse
Тип возвращаемого значения initializationResult(). Содержит данные инициализации сессии.
hooks_applied сообщает, зарегистрировал ли Claude Code хуки hooks, переданные в запросе initialize. SDK отправляет этот запрос один раз при запуске сессии и повторно при каждом вызове reinitialize(). Поле требует Agent SDK v0.3.238 или новее.
Claude Code опускает это поле, если запрос не содержал хуков. Если запрос содержал хуки, значение зависит от того, является ли запрос первой инициализацией сессии, а для повторной — от того, каким путём он достиг сессии:
true: Claude Code зарегистрировал хуки. Первая инициализация сессии возвращает это значение. Повторная инициализация, отправленная через stdin CLI, также возвращаетtrue. В этом случае хуки из нового запроса заменяют зарегистрированные ранее.false: Claude Code проигнорировал хуки. Повторная инициализация, отправленная в удалённую сессию, возвращает это значение, поэтому второй клиент, присоединившийся к сессии, не может заменить хуки, зарегистрированные первым клиентом.
hooks при каждой повторной инициализации.
Поле запроса sdkMcpServerManifests и поле ответа sdk_mcp_manifests_parked предназначены для внутрипроцессных SDK MCP-серверов, созданных вами с помощью createSdkMcpServer(). Ваше приложение не задаёт и не читает ни одно из этих полей.
claude_code_version — версия Claude Code процесса, выполняющего ходы сессии. Это то же значение, что содержится в init-сообщении SDKSystemMessage, поэтому вы можете узнать версию CLI до первого хода.
- Поле требует Agent SDK v0.3.296 или новее, который включает Claude Code v2.1.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 выше. Каждая запись — это полное сообщение control_request той же структуры { type: "control_request", request_id, request }, которую сессия передаёт для запросов разрешений во время работы.
Массив перечисляет запросы разрешений, которые этот процесс Claude Code отправил и которые ещё не разрешены. SDK читает массив за вас и передаёт каждую запись в ваш колбэк canUseTool — так же, как при повторной доставке, которую reinitialize() запускает после разрыва транспорта. Обрабатывайте повторяющиеся ID запросов идемпотентно, потому что запись может повторять запрос, который колбэк уже получил до обрыва соединения.
Массив всегда присутствует в успешном ответе на initialize и пуст, если у этого процесса нет неразрешённых запросов разрешений. Требуется Claude Code v2.1.268 или новее. Более ранние версии могли опускать это поле, поэтому, если вы разбираете протокол самостоятельно, считайте отсутствие поля признаком более старого CLI, а не доказательством того, что ожидающих запросов нет.
SDKControlInterruptResponse
Квитанция о прерывании: значение, которым разрешается interrupt() в CLI, объявляющем возможность interrupt_receipt_v1 в SDKSystemMessage.capabilities. Требуется Claude Code v2.1.205 или новее. Более ранние CLI отвечают на прерывание пустыми данными об успехе, поэтому interrupt() разрешается значением undefined.
still_queued перечисляет UUID сообщений пользователя, ожидавших обработки в момент поступления прерывания: сообщения, всё ещё находящиеся в очереди, а также сообщения, которые Claude Code уже забрал из очереди для следующего хода. После начала первого хода сессии Claude Code обрабатывает перечисленные сообщения после прерывания, если вы предварительно их не отмените, и может объединить несколько из них в один ход. Если вы прерываете до начала первого хода, Claude Code прерывает этот ход сразу после его начала, и перечисленные сообщения в этом ходе не получают ответа.
Используйте квитанцию, чтобы решить, нужно ли что-то отправить повторно. Перечисленное сообщение, которое вы не отменили, попадает в диалог независимо от того, получит ли оно ответ, поэтому его повторная отправка доставит его Claude дважды.
Интерпретируйте список с учётом следующих оговорок:
- В списке появляются только сообщения, поставленные в очередь с UUID. Пустой массив не означает, что больше ничего не будет выполнено.
- В списке есть только сообщения основного потока. Сообщения, адресованные субагенту, в него не входят.
- Список может содержать UUID, которые ваш клиент никогда не отправлял, например триггеры запланированных задач. Игнорируйте незнакомые UUID, а не считайте их ошибкой.
interrupt(), может задать cancel_queued: true в управляющем запросе interrupt. Claude Code v2.1.219 и новее объявляет поддержку с помощью возможности interrupt_cancel_queued_v1 в SDKSystemMessage.capabilities; более старые CLI игнорируют это поле, и сообщения в очереди выполняются как обычно. Такое прерывание также отменяет все сообщения, которые иначе были бы перечислены в still_queued: квитанция перечисляет их в cancelled, still_queued пуст, и ни одно из них не выполняется.
На список cancelled распространяются те же оговорки, что и на still_queued. Метод interrupt() никогда не отправляет cancel_queued, поэтому квитанции, которыми он разрешается, не содержат cancelled.
Квитанция — это снимок, сделанный в момент обработки прерывания, и при чистом прерывании она приходит раньше SDKResultMessage прерванного хода. Читайте квитанцию, а не проверяйте очередь после этого результата: цикл сразу запускает следующий ход из очереди, поэтому очередь, которую вы проверяете после результата, уже изменилась.
SDKControlGetContextUsageResponse
Тип возвращаемого значения getContextUsage(). При значении detail по умолчанию это те же данные, которые Claude Code отображает для команды /context в интерактивной сессии, поэтому наряду с количеством токенов они содержат поля для отображения, такие как color и gridRows, которые Claude Code использует для отрисовки сетки использования /context.
Необязательный аргумент detail метода определяет, как Claude Code подсчитывает каждую категорию. Аргумент detail требует Agent SDK v0.3.257 или новее.
'full': значение по умолчанию. Claude Code подсчитывает каждую категорию с помощью API-запросов подсчёта токенов. Эти запросы не появляются в потоке сообщений, поэтому отслеживание стоимости, основанное на чтении потока, их не увидит. В Anthropic API подсчёт токенов не тарифицируется.'summary': передайте{ detail: 'summary' }, чтобы получить ответ на основе данных об использовании из последнего ответа и локальных оценок. Запросы подсчёта токенов не отправляются, а значения по категориям являются приблизительными.
/context как промпт, Claude Code прикрепляет данные SDKContextUsage к полю context_usage сообщения ассистента, которое доставляет результат. Это поле требует 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 содержит текст файла или данные в base64, если вы запросили encoding: 'base64'; в этом случае поле encoding ответа имеет значение 'base64'. absPath — разрешённый абсолютный путь. truncated устанавливается, если файл был длиннее ограничения maxBytes и содержимое было обрезано на этом пределе.
Что может читать readFile()
readFile() отдаёт более узкий набор файлов, чем инструмент Read:
- Обычный файл внутри одного из рабочих каталогов сессии, таких как
cwdиadditionalDirectories - Некоторые собственные файлы Claude Code для сессии, например результаты инструментов
Read по-прежнему блокируют соответствующий путь, а широкое правило разрешения для Read не открывает readFile() доступ к остальной файловой системе. Для всего остального вызов разрешается значением null.
SDKControlReloadPluginsResponse
Тип возвращаемого значения reloadPlugins().
commands,agentsиmcpServers: команды, субагенты и статусы MCP-серверов сессии в тех же структурах, которые возвращаютsupportedCommands(),supportedAgents()иmcpServerStatus().supportedAgents()продолжает возвращать список, полученный при инициализации, поэтому набор после перезагрузки читайте изagentsздесьplugins: каждый загруженный плагин с егоnameиpathустановки.versionповторяет то, что объявлено в манифесте плагина, и контролируется автором плагина, поэтому проверяйте его, прежде чем доверять. Поле опускается, если манифест не объявляет версиюerror_count: количество ошибок при загрузке плагинов
{ holdOnCacheImpact: true } в reloadPlugins(), чтобы задержать перезагрузку, которая сделала бы недействительным кэш промптов диалога, вместо её применения. Claude Code выполняет ту же проверку, которую интерактивная команда /reload-plugins делает, прежде чем предупредить о стоимости для кэша. Параметр требует Agent SDK v0.3.268 или новее. Исполняемый файл Claude Code старше v2.1.268, например тот, на который вы указываете через pathToClaudeCodeExecutable, игнорирует этот параметр и применяет перезагрузку.
Если вы передаёте этот параметр, читайте 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 перечисляет скиллы, доступные после перезагрузки, в той же структуре SlashCommand, которую возвращает supportedCommands().
SDKControlReloadOutputStylesResponse
Тип возвращаемого значения reloadOutputStyles().
available_output_styles перечисляет имена встроенных и пользовательских стилей вывода, доступных после перезагрузки.
SDKControlMcpReadResourceResponse
Тип возвращаемого значения readMcpResource(), содержащий результат resources/read MCP-сервера. Требуется TypeScript Agent SDK v0.3.280 или новее.
readMcpResource() имя сервера в том виде, в каком его сообщает mcpServerStatus(), и URI ui://, например ui.resourceUri, который инструмент объявляет в своём _meta. Вызов отклоняется для любой другой схемы URI, для SDK MCP-сервера, который ваше приложение размещает само, и для неподключённого сервера. Метод доступен, когда capabilities init-сообщения включают mcp_read_resource_v1.
Каждая запись contents — это один элемент содержимого в том виде, в каком его отправил сервер, за исключением ключей _meta с префиксом com.anthropic/, который зарезервирован для Claude Code. 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: пользовательские, проектные и локальные. Сведения о входных данных, которые считываются независимо от этого параметра, и о том, как их отключить, см. в разделе Что не контролирует settingSources.
Зачем использовать settingSources
Отключение настроек из файловой системы:"project" в settingSources. О том, как загрузка CLAUDE.md взаимодействует с параметрами системного промпта, см. в разделе Изменение системных промптов.
Приоритет настроек
Когда загружается несколько источников, настройки объединяются в следующем порядке приоритета (от высшего к низшему):- Локальные настройки (
.claude/settings.local.json) - Настройки проекта (
.claude/settings.json) - Пользовательские настройки (
~/.claude/settings.json)
agents, allowedTools и settings, переопределяют пользовательские, проектные и локальные настройки из файловой системы. Управляемые настройки политик имеют приоритет над программными параметрами.
PermissionMode
CanUseTool
Тип пользовательской функции разрешений для управления использованием инструментов.
Эта функция заменяет в SDK интерактивный запрос разрешения: она вызывается только тогда, когда процесс оценки разрешений приводит к запросу. Вызовы инструментов, уже одобренные записью allowedTools, разрешающим правилом в настройках или режимом разрешений, например acceptEdits или bypassPermissions, никогда её не вызывают. Чтобы контролировать каждый вызов инструмента, используйте вместо этого хук PreToolUse.
Разрешающее правило не одобряет заранее действия, которые не одобряются автоматически ни в одном режиме; о том, какие из них доходят до callback-функции и что происходит в режимах dontAsk и auto, см. в разделе Как оцениваются разрешения.
Обычно callback-функция разрешает запрос, возвращая
PermissionResult, который SDK записывает обратно через свой транспорт как control_response. Возвращайте null только тогда, когда ваше приложение уже отправило control_response для этого запроса по собственному каналу, повторив 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 — это BetaMessage из Anthropic SDK. Оно включает поля, такие как 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, потому что сервер работает на полную мощность, в отличие от'rate_limit', который является ответом 429 при исчерпании вашей квоты'account_on_hold': ваша учётная запись заморожена'cloud_credential_error': Claude Code не смог получить пригодные учётные данные AWS или Google Cloud на машине, на которой он работает, поэтому запрос не достиг поставщика облачных услуг. Обычная причина — истёкший или никогда не завершённый вход в облако на этой машине, хотя временно недоступный сервис учётных данных сообщает то же значение. См. Could not load AWS or Google Cloud credentials. Требует TypeScript Agent SDK v0.3.267 или позже, который включает Claude Code v2.1.267
aborted имеет значение true, когда прерывание или отмена усекли сообщение ассистента до завершения потока: сообщение не имеет stop_reason, и содержимое может заканчиваться посередине слова. Это поле отсутствует в нормально завершённых сообщениях. Требует Agent SDK v0.3.214 или позже.
agent_id определяет субагента, создавшего сообщение, и отсутствует у сообщений основного потока. Значение совпадает с task_id в событии task_started и других событиях задачи этого субагента и не меняется, когда субагент возобновляется. Поле требует Agent SDK v0.3.292 или новее.
Сопоставляйте сообщения субагента с событиями его задачи по agent_id, а не по паре parent_tool_use_id сообщения и tool_use_id события задачи. Когда вызов инструмента возобновляет субагента, события задачи несут tool_use_id этого вызова, а сообщения сохраняют parent_tool_use_id вызова инструмента, который впервые запустил субагента, поэтому эти значения перестают совпадать.
Claude Code задаёт user_message_uuid и user_message_uuids в первом сообщении ассистента в ходе при условиях, описанных в user_message_uuid. Когда ход продолжает другой ход, прерванный перезапуском, сообщения ассистента, несущие эти поля, несут также resume_reason.
timestamp — это время в формате ISO 8601, когда содержимое сообщения закончило генерироваться в процессе, который его создал. Значение берётся с часов этой машины, поэтому используйте его только для отображения и не упорядочивайте сообщения по нему. Один ход API может создать несколько сообщений ассистента с одинаковым message.id, каждое со своим timestamp. Когда это поле отсутствует, используйте время получения сообщения.
context_usage — это структурированная копия отчёта /context, типизированная как SDKContextUsage; требует 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
- Учётные данные указывают известный тип тарифа или содержат scope
user:profile - Учётная запись не находится на биллинге по фактическому использованию
claude setup-token, переданный как CLAUDE_CODE_OAUTH_TOKEN, по умолчанию не подходит, потому что содержит только scope user:inference. Другие сессии, например сессии с API-ключом, доставляют текст без этого поля, как и более ранние версии. Читайте отчёт из поля, когда оно есть, и используйте текст, когда его нет.
SDKUserMessage
Сообщение пользовательского ввода.
pasted_content для отправки содержимого, которое пользователь вставил в ваш интерфейс ввода промпта, а не напечатал, — одна запись на вставку, каждая является строкой или массивом блоков содержимого. Claude Code добавляет текст каждой записи после напечатанного текста по порядку и может обернуть каждую вставку в теги <pasted_content>. Блоки, отличные от текста, игнорируются, поэтому отправляйте изображения и документы в message.content. Требует Agent SDK v0.3.277 или позже.
Задайте inline_pastes, чтобы сообщить Claude Code, какие части message.content пользователь вставил, а не набрал, — по одной строке на каждую вставку. Текст промпта остаётся там, где его поместил пользователь. Claude Code может обернуть каждую перечисленную вставку в теги <pasted_content> на её месте, чтобы Claude мог отличить вставленный материал от собственных слов пользователя. Оборачиваются только вставки в последнем текстовом блоке промпта. Требуется TypeScript Agent SDK v0.3.280 или новее.
У каждого поля вставки есть ограничение размера:
pasted_content: если записей вместе с блоками содержимого внутри них больше 1000, Claude Code игнорирует всё поле.inline_pastes: Claude Code использует первые 100 непустых записей и игнорирует остальные.
shouldQuery, client_composed или priority, чтобы изменить то, как Claude Code обрабатывает отправленное вами сообщение:
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 удерживает сообщение до завершения хода и отправляет его как новый ход.'now'сorigin: { kind: "human" }: в Claude Code v2.1.286 или новее работа, которая может продолжаться в фоне, переносится туда, и Claude читает сообщение в том же ходе. К переносимой работе относятся shell-команды, субагенты и вызовы инструментов MCP. В v2.1.287 или новее к ней также относятся вызовы WebFetch и WebSearch. Когда Claude только пишет ответ или выполняемую им работу нельзя перенести, Claude Code вместо этого прерывает ход, и Claude читает сообщение следующим.'now'без такого origin: Claude Code прерывает ход, и Claude читает сообщение следующим.
tool_result для одного из его собственных вызовов инструментов, содержит agent_id. См. SDKAssistantMessage, где определены это поле и требования к версии.
В сообщении, содержащем блок tool_result, tool_use_result — это структурированный объект вывода инструмента, а не текст, отправленный модели. Его форма зависит от инструмента, указанного в соответствующем блоке tool_use, поэтому поле имеет тип unknown; встроенные формы перечислены в разделе Типы вывода инструментов. Следующие результаты требуют обработки помимо их указанной формы:
- Инструмент
Agent:tool_use_resultимеет типAgentOutput. Отображайте результат на его основе, а не разбирая текстtool_result. Полеcontentрезультатаcompletedсодержит отчёт субагента или — для субагента, чей отчёт передаётся через вызов инструментаSubagentHandback, — короткую заметку об этой передаче вместо отчёта. В авторежиме в Claude Code v2.1.271 или новее каждый субагент, выдающий результатcompleted, отчитывается таким образом, если только он не является форком, и Claude получает отчёт отдельным сообщением от субагента. - Вызов WebFetch или WebSearch, который Claude Code перенёс в фон, чтобы доставить сообщение
'now': в пользовательском сообщении, содержащемtool_resultэтого вызова,tool_use_resultимеет значение{ detachedToolCall: true }. Вызов всё ещё выполняется, и Claude получит его результат после завершения. Второгоtool_resultдля этогоtool_use_idне последует, поэтому, если ваше приложение отображает строку для каждого вызова инструмента, пометьте эту строку как перенесённую в фон при получении этого сообщения. Требуется Claude Code v2.1.287 или новее. - Инструмент MCP, результат которого содержит блоки
resource_link:tool_use_result— объект с массивомresourceLinksиз записейSDKMcpResourceLink. Claude получает каждую ссылку в виде строки текста в блокеtool_result, поэтому считывайтеresourceLinks, чтобы отобразить файлы, возвращённые сервером, вместо разбора этого текста. Claude Code опускаетresourceLinks, когда в результате нет ссылок, а также в результатах от субагентов, хранит не более 50 ссылок на результат и прекращает добавлять ссылки, когда массив достигает 64 КиБ сериализованного JSON. ДляresourceLinksтребуется Agent SDK v0.3.257 или новее. - Инструмент MCP, возвращающий
structuredContent:tool_use_result— объект, членstructuredContentкоторого содержит то, что отправил сервер, а членcontent— значениеMcpOutput. Результаты от субагентов не содержатstructuredContent. - Инструмент MCP, чей
structuredContentсериализуется в JSON длиной более 1 048 576 символов: Claude Code не включаетstructuredContentвtool_use_resultи устанавливает вместо негоstructuredContentOmitted: true, чтобы ваше приложение могло отличить отброшенный объект от инструмента, который его не отправлял. Остальные члены, такие какcontentиresourceLinks, остаются, и то, что получает Claude, не меняется. Это ограничение применяет Claude Code v2.1.287 или новее. Два вида инструментов отличаются:- Инструменты из внутрипроцессных серверов SDK освобождены от ограничения и доставляют объект целиком.
- Инструмент, чья запись в
tools/listобъявляет ресурс MCP Appsui://, имеет ограничение в 8 388 608 символов в Claude Code v2.1.295 или новее, а версии до v2.1.295 освобождают его от ограничения.
SDKUserMessageReplay
Воспроизведённое пользовательское сообщение с обязательным UUID.
origin имеет вид peer или channel, поступает в поток как воспроизведение независимо от того, был ли он доставлен во время активного хода или запустил новый ход, пока сессия была неактивна. До v2.1.207 внедрённый ход, доставленный, пока сессия была неактивна, не создавал сообщения в потоке и появлялся только при повторном чтении транскрипта.
SDKResultMessage
Финальное сообщение результата.
subtype:
api_error_status: код состояния HTTP ошибки API, которая завершила диалог. Отсутствует или равенnull, когда ход завершился без ошибки API.ttft_ms: время до первого токена в миллисекундах, измеренное при поступлении первого полного сообщения ассистента. Присутствует только в ветви успеха.ttft_stream_ms: время в миллисекундах до первого события потокаmessage_start, когда открывается поток ответа. Меньше, чемttft_ms; разница между ними — это время, потраченное на потоковую передачу первого сообщения. Присутствует только в ветви успеха.user_message_uuid:uuidотправленного вами сообщения, на которое ответил этот ход. См.user_message_uuid, чтобы узнать, какие результаты его содержат.user_message_uuids:uuidкаждого отправленного вами сообщения, на которое Claude Code ответил в этом ходе. См.user_message_uuids.resume_reason: причина, по которой этот ход продолжает ход, прерванный перезапуском. Присутствует в обеих ветвях. См.resume_reason.local_command: имя команды, которую выполнил ход, в результате успеха хода, завершённого командой без входа в цикл агента, например/compact. Имя приводится к строчным буквам и подчёркиваниям, поэтому/reload-pluginsсообщаетreload_plugins. Команда, которую предоставляет MCP-сервер, и встроенная/mcpсообщаютmcp. Команда, которую вы определили сами, сообщаетcustom. Аргументы никогда не включаются. Отсутствует в каждом ходе, который вошёл в цикл агента, и при отправках, не запустивших команду. Требует Agent SDK v0.3.268 или позже.request_sent_wall_ms: миллисекунды эпохи, в которые Claude Code отправил запрос API, для сопоставления с серверными временными метками. Присутствует только вместе сuser_message_uuid, в результате успеха сis_errorравным false, чей ход отправил запрос API.first_content_frame_ms: время в миллисекундах до первого события потокаcontent_block_startилиcontent_block_delta, считая блоки размышлений содержимым. Присутствует только в ветви успеха, когда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. Вспомогательные вызовы вне этого конвейера, такие как классификатор разрешений и запросы подсчёта токенов, исключены. Вызов, который возобновляет сессию, также учитывает итоги по моделям, восстановленные из более ранних вызовов сессии. В сессиях с потоковым вводом итоги накапливаются по ходам, поэтому читайте последний результат, а не суммируйте по результатам. См. Track costs in streaming input mode о сбросах и Recover totals after a session crash об обнулённых результатах.total_cost_usd: кумулятивная оценочная стоимость в USD, охватывающая те же вызовы, что иmodelUsage, и сбрасываемая в тех же точках. Вызов, который возобновляет сессию, также учитывает итоги, восстановленные из более ранних вызовов сессии. Это оценка, а не выписка по счёту. См. Отслеживание затрат и использования о предостережениях по точности.queued_turn_count: количество отправленных вами сообщений сorigin: { kind: "human" }, которые всё ещё ожидают, когда Claude Code создал результат. См.queued_turn_count, чтобы узнать, что означают0и отсутствующее поле.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 или позже.
Та же пара полей присутствует в
SDKSystemMessage и в SDKControlInitializeResponse, поэтому вы можете прочитать состояние быстрого режима перед первым ходом.
Поле origin передаёт SDKMessageOrigin пользовательского сообщения, которое породило этот результат. Когда SDK внедряет синтетический ход продолжения, например для завершённой фоновой задачи, итоговое SDKResultMessage содержит origin: { kind: "task-notification" }. Routine, чей триггер сработал, и проверенные сервером сообщения из ваших других сессий также поступают с этим видом, каждое с subkind, описанным в разделе Подвиды уведомлений задач. Проверяйте kind, чтобы отличить результаты, отвечающие на ваш промпт, от внедрённых продолжений, прежде чем маршрутизировать или подавлять их. Если ваше приложение объявляет запланированные запуски, их результаты также содержат kind: "task-notification", поэтому не подавляйте результаты только на основе kind.
Когда несколько завершений фоновых задач ставятся в очередь вместе, Claude Code может ответить на них в одном ходе, а не в отдельном ходе для каждого. Каждое завершение всё равно создаёт свой результат с этим происхождением. Все завершения, на которые Claude Code отвечает вместе, кроме последнего, по порядку создают пустые результаты с num_turns: 0, а результат последнего содержит ход, который отвечает на них все.
Это поле отсутствует для результатов, выданных до любого пользовательского хода, например для ошибок запуска.
Когда хук PreToolUse возвращает permissionDecision: "defer", результат имеет stop_reason: "tool_deferred", а deferred_tool_use содержит id, name и input ожидающего инструмента. Читайте это поле, чтобы показать запрос в вашем собственном интерфейсе, затем возобновите работу с тем же session_id, чтобы продолжить. См. Defer a tool call for later о полном цикле.
user_message_uuid
uuid SDKUserMessage, на которое отвечает ход, возвращаемый обратно, чтобы вы могли сопоставить ответ 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 генерирует для продолжения прерванного хода при
CLAUDE_CODE_RESUME_INTERRUPTED_TURN: когда последний промпт прерванного хода — это обычное отправленное вами сообщение, открыло ли оно ход или Claude Code подхватил его во время хода, продолжающий ход сначала отвечает на это сообщение.resume_reasonпозволяет отличить фреймы продолжающего хода от фреймов прерванной попытки. Когда последний промпт не является вашим обычным сообщением, продолжающий ход сначала не отвечает ни на одно ваше сообщение. Если Claude Code подхватывает ваше обычное сообщение между вызовами инструментов, с этого момента ход отвечает на подхваченное сообщение. Возврат промпта прерванного хода требует Agent SDK v0.3.268 или новее. - Любой другой промпт, который Claude Code сгенерировал сам: ход сначала не отвечает ни на одно ваше сообщение, и его кадры не содержат возвращаемого значения. Если Claude Code подхватит ваше обычное сообщение между вызовами инструментов, с этого момента ход отвечает на это сообщение. Возврат при подхвате требует Agent SDK v0.3.265 или позже; более ранние версии ничего не возвращают в этих ходах.
uuid сообщения, на которое дан ответ, в трёх видах кадров:
- Результат: каждый результат хода, который ответил на отправленное вами сообщение. В Agent SDK v0.3.265 или позже его содержит каждый такой результат. До v0.3.265 результат успеха хода, запущенного обычным сообщением, не содержал его, когда ход не отправил запрос API или завершился отложенным вызовом инструмента. До v0.3.246 его не содержали и результаты ошибок, а до v0.3.216 — все результаты.
- Первый ответ хода: первое сообщение ассистента, а при
includePartialMessagesтакже первое событие потока, чейevent.typeне являетсяping, чтобы вы могли привязать ответ до поступления результата. Возврат в первом ответе требует Agent SDK v0.3.246 или позже. До v0.3.269 приincludePartialMessagesClaude Code устанавливал его только в этом первом событии потока или в первом сообщении ассистента, если ход ничего не передавал потоком. Когда сообщение, на которое отвечает ход, меняется посреди хода, первый ответ после изменения также содержит это поле в Agent SDK v0.3.265 или позже; более ранние версии устанавливают его в одном кадре ответа за ход. - Каждый кадр
thinking_tokensхода: чтобы вы могли отнести прогресс размышлений к отправленному вами сообщению, не дожидаясь первого ответа хода. Требует Agent SDK v0.3.260 или позже.
- Кадры ответа, кроме этих первых ответов
- Кадры субагентов
- Ходы, которые не отвечают ни на одно ваше сообщение или отвечают на сообщение, отправленное вами без
uuid - Результаты, которые не отвечают ни на одно ваше сообщение, например обнулённый результат после сбоя рабочего процесса
user_message_uuids
uuid каждого отправленного вами сообщения, на которое Claude Code ответил в этом ходе. Когда вы отправляете несколько сообщений почти одновременно, 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 устанавливает это поле в двух видах кадров:
- Результат продолжающего хода: в ветвях success и error одинаково, независимо от того, несёт ли результат
user_message_uuid. - Фреймы ответа продолжающего хода: те, что несут
user_message_uuid.
interrupted_turn.
queued_turn_count
Количество отправленных вами сообщений с origin: { kind: "human" }, которые всё ещё ожидают в очереди команд, когда Claude Code создал результат. Требует Agent SDK v0.3.242 или позже.
Что означают 0 и отсутствующее поле:
0: Claude Code не считает сообщения, отправленные вами без этогоorigin, и не считает уведомления задач, поэтому следующий ход всё ещё может последовать.- Отсутствует: финальный результат, который Claude Code выдаёт после сбоя или фатальной ошибки запуска, опускает это поле и может содержать обнулённые итоги.
startup_failure_reason
Почему Claude Code отказался запускаться, чтобы ваше приложение могло предложить исправление вместо повторной попытки. Claude Code устанавливает его в результате error_during_execution, который он записывает перед выходом при известной ошибке запуска. Этот результат содержит обнулённые итоги, а его массив errors содержит тот же текст, что и stderr. Во всех остальных результатах это поле отсутствует. Требует Agent SDK v0.3.274 или позже.
Установите CLAUDE_CODE_STARTUP_FAILURE_RESULTS в 1 в env, чтобы получать этот результат для каждого значения SDKStartupFailureReason. Без этой переменной Claude Code записывает результат только для следующих ошибок, а остальные завершаются выводом в stderr, ненулевым кодом выхода и без сообщения результата:
- Возобновление, которое 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 или позже.
sourceв каждой записиmcp_servers: откуда взялось определение сервера, с теми же значениями, что иsourceвMcpServerStatus. Требует Agent SDK v0.3.274 или позже.effort: уровень effort, который Claude Code отправляет в следующем запросе сессии, илиnull, когда он его не отправляет. Claude Code устанавливает это поле только в сообщении инициализации, которое он отправляет клиентам Remote Control, и опускает его в сообщении инициализации, которое читает ваше приложение. Требует Agent SDK v0.3.234 или позже.
capabilities называет поведения протокола, которые реализует этот CLI, чтобы вы могли определять поддержку функций вместо сравнения строк claude_code_version. Это открытый набор: игнорируйте значения, которые вы не распознаёте, и проверяйте конкретную возможность, на поведение которой вы полагаетесь. Это поле требует Claude Code v2.1.205 или позже и отсутствует в более ранних CLI.
Массив
plugin_errors перечисляет ошибки загрузки плагинов. Запись описывает либо плагин, который не загрузился и отсутствует в plugins, либо плагин, который загрузился без одной из своих частей, например без файла хуков. Ключ опускается, когда ошибок нет. SDKSystemMessage объявляет plugin_errors в Agent SDK v0.3.283 или позже.
Когда сам каталог или архив из вашей опции plugins не загружается, поле plugin записи содержит позиционный тег, например inline[0], вместо имени плагина. Это происходит, например, когда путь не существует или манифест недействителен. Сопоставляйте такую запись с вашей опцией по её полю path.
В таблице ниже перечислены поля каждой записи plugin_errors.
SDKPartialAssistantMessage
Частичное сообщение при потоковой передаче (только когда includePartialMessages равно true).
Поле parent_tool_use_id всегда равно null: события потока выдаются только для основной сессии. Для определения принадлежности субагентам используйте полные сообщения, которые содержат agent_id и parent_tool_use_id, или включите forwardSubagentText, чтобы получать текст и размышления субагентов в виде полных сообщений.
user_message_uuid и user_message_uuids в первом событии потока хода, отличном от ping, и снова — когда меняется сообщение, на которое отвечает ход, при условиях, описанных в user_message_uuid. Когда ход продолжает ход, прерванный перезапуском, события потока, несущие эти поля, несут также resume_reason.
SDKCompactBoundaryMessage
Сообщение, обозначающее границу сжатия контекста диалога.
SDKInformationalMessage
Общий текстовый баннер, выдаваемый циклом. Содержит предупреждения, уведомления и другие строки состояния, не являющиеся ошибками, которые выдаёт Claude Code, а также обратную связь хуков, например причину блокировки хуком UserPromptSubmit.
В Claude Code v2.1.227 или позже systemMessage хука может поступить как это сообщение, при этом каждая строка начинается с префикса с именем хука, например PostToolUse:Bash says:. В разделе каждого события на странице хуков сказано, как отображается вывод.
Выполняйте рендеринг content как простого текста с заданным level.
SDKWorkerShuttingDownMessage
Выдаётся при корректном завершении рабочего процесса, чтобы удалённые клиенты могли показать, почему рабочий процесс завершился, вместо ожидания таймаута heartbeat. reason — это короткая строка в snake_case, устанавливаемая CLI хоста, например "host_exit" или "remote_control_disabled". Реагируйте на это сообщение только при потоковой передаче в реальном времени. Возобновлённая сессия воспроизводит прошлые экземпляры этого сообщения, поэтому в этом случае игнорируйте их.
SDKPluginInstallMessage
Событие прогресса установки плагинов. Выдаётся, когда установлена переменная CLAUDE_CODE_SYNC_PLUGIN_INSTALL, чтобы ваше приложение Agent SDK могло отслеживать установку плагинов из маркетплейса перед первым ходом. Статусы started и completed обрамляют установку в целом. Статусы installed и failed сообщают об отдельных маркетплейсах и включают name.
SDKPermissionDeniedMessage
Событие потока, выдаваемое, когда система разрешений отклоняет вызов инструмента без интерактивного запроса разрешения. Используйте его, чтобы показывать отказ в вашем интерфейсе в момент его возникновения, а не только по следующему за ним результату инструмента с is_error. О каких отказах сообщает событие, зависит от того, как запуск обрабатывает запросы разрешений:
- С обратным вызовом
canUseToolи значением по умолчаниюpermissionPrompts: 'host': запросы разрешений поступают в ваш обратный вызов, а это событие сообщает об отказах, которые Claude Code принимает самостоятельно, не вызывая его. - Без обоих: простой запуск
-pилиquery(), где не заданы ниcanUseTool, ниpermissionPromptToolName, отклоняет любой вызов инструмента, который потребовал бы запроса, если только его не разрешает хукPermissionRequest, и это событие сообщает об этих отказах, а также о тех, которые Claude Code принимает самостоятельно. До v2.1.223 Claude Code не выдавал это событие в запусках без обратного вызова. - С инструментом запроса разрешений MCP, заданным через
permissionPromptToolNameили флаг--permission-prompt-tool, и значением по умолчаниюpermissionPrompts: 'host': Claude Code вообще не выдаёт это событие, даже для отказов по правилам, которые он принимает самостоятельно. - С
permissionPrompts: 'none': Claude Code отклоняет вызовы, которые потребовали бы запроса разрешения, даже когда также заданыcanUseToolили инструмент запроса разрешений MCP, и это событие сообщает об этих отказах, а также об отказах, которые Claude Code принимает самостоятельно. Требует Claude Code v2.1.259 или позже.
PreToolUse, — независимо от того, отклонил ли вызов сам хук или правило запрета переопределило решение хука разрешить или запросить подтверждение. Кроме того, событие выдаётся по принципу best-effort: иногда Claude Code записывает отказ без выдачи этого события, поэтому авторитетной записью является permission_denials в сообщении результата.
SDKPermissionDenial
Информация об отклонённом использовании инструмента.
SDKContextUsage
Структурированная форма отчёта /context, передаваемая как context_usage в SDKAssistantMessage, которое доставляет результат /context. Agent SDK v0.3.232 и позже экспортируют этот тип. В отличие от SDKControlGetContextUsageResponse, он содержит только данные, необходимые для отображения разбивки использования, без полей отображения, таких как color и gridRows. Claude Code вычисляет отчёт с помощью запросов API для подсчёта токенов, которые не появляются в потоке сообщений; см. как обрабатываются эти запросы.
model до over_limit описывают сессию в целом, а поля-коллекции относят токены к отдельным элементам.
over_limit.kind фиксирует, как Claude Code определил окно, а не то, примет ли API следующий запрос:
hard_limit: окно — это то, что Claude Code считает собственным лимитом модели, за пределами которого API отклоняет запросыcompaction_window: окно — это окно политики сжатия контекста, которое может совпадать или не совпадать с лимитом модели
SDKContextUsageCategory
Одна строка разбивки использования /context по категориям.
Каждое значение
kind указывает, что представляют собой токены строки:
used: содержимое, занимающее контекстное окноfree: оставшаяся часть окнаbuffer: резерв для сжатия контекстаdeferred: схемы инструментов, которые Claude Code держит вне окна и исключает из расчёта использования; перечисляются для информации
SDKUsageReport
Структурированная форма отчёта /usage, передаваемая как usage_report в SDKAssistantMessage, который доставляет результат /usage. Agent SDK v0.3.273 и новее экспортируют этот тип. Тип экспериментальный: его форма может измениться.
session и rate_limits:
session: текущие итоги стоимости и использования Claude Code, считанные из того же реестра, что иtotal_cost_usdиmodelUsageвSDKResultMessage. Каждая записьmodel_usage— этоModelUsage.rate_limits: строки использования тарифа вlimitsи расход кредитов использования вextra_usage. Равноnull, когда Claude Code не удалось получить данные об использовании тарифа, например когда OAuth-токен сессии не имеет scopeuser:profile.
session.total_cost_usd локально по количеству токенов, поэтому это оценка, а не то, что выставляется по вашему тарифу. Расход кредитов использования, сообщаемый сервером, — это отдельный блок extra_usage. Оговорки о точности см. в разделе Отслеживание стоимости и использования.
limits содержит строки использования сервера в том виде, в каком их отправил сервер: какие счётчики применяются, их область действия, метки, серьёзность и порядок определяет сервер, поэтому отображайте строки дословно.
- Пустой массив означает, что сервер не сообщил ни об одном счётчике.
nullозначает, что у Claude Code нет строк для отчёта.
limits описывает один счётчик использования:
До Agent SDK v0.3.277 тип объявлял
severity и is_active как необязательные и допускающие null, и строка могла прийти без них.
extra_usage — расход и лимит кредитов использования за расчётный период по данным сервера; присутствует, когда у тарифа есть кредиты использования. Суммы указаны в минимальных единицах currency, для USD — в центах.
monthly_limitравноnull, когда у этой учётной записи нет собственного лимита расходов. В тарифах Team и Enterprise не отображайтеnullкак безлимит.is_enabledравноfalse, пока кредиты не могут оплачивать запросы.
SDKMessageOrigin
Происхождение сообщения с ролью пользователя. Оно присутствует как origin в SDKUserMessage и передаётся в соответствующее SDKResultMessage, чтобы вы могли определить, что запустило данный ход.
Подвиды уведомлений задач
Когда Claude Code доставляет уведомление задачи в сессию, он устанавливаетsubkind в origin уведомления, если серверы Anthropic проверили, откуда пришло это уведомление. Он также устанавливает subkind, когда ваше приложение само объявляет сообщение запланированным запуском, что требует TypeScript Agent SDK v0.3.280 или позже. subkind требует Claude Code v2.1.213 или позже и принимает одно из двух значений:
scheduled-trigger: уведомление — это сохранённый промпт routine, доставленный потому, что сработал один из триггеров routine: её расписание, её API-триггер, её триггер GitHub или Run now. Промпт, который ваше приложение объявляет запланированным запуском, также имеет это значение. Claude Code представляет их модели как назначенную задачу сессии, с пометкой, отличающейся от пометки, которую содержат другие уведомления задач.peer-send-message: уведомление — это сообщение, которое другая ваша сессия отправила с помощью серверного инструментаsend_message, используемого облачными сессиями для обмена сообщениями друг с другом (а не межсессионного инструментаSendMessage), причём серверы Anthropic проверили, что обе сессии принадлежат одной и той же закрытой группе сессий. Требует Claude Code v2.1.224 или позже. Доставкаsend_message, которую серверы так не проверили, не получает подвида.
subkind. Сюда относятся активность PR, доставленная в сессию, и фоновые события, такие как завершённая задача. Сообщения от межсессионного инструмента SendMessage вообще не являются уведомлениями задач: поступают ли они из сессии на той же машине или через серверы Anthropic с другой машины, Claude Code присваивает им kind: "peer" и поля происхождения peer.
fireReason сообщает, почему сработало уведомление scheduled-trigger, в виде короткого токена в нижнем регистре, например scheduled, manual, retry, catch_up или api. Серверы Anthropic устанавливают его в доставках routine, а ваше приложение устанавливает его, когда объявляет запланированный запуск. Оно отсутствует, когда ни одна из сторон его не отправила. Требует TypeScript Agent SDK v0.3.280 или позже.
Фоновая задача может выполняться более одного раза под одним и тем же task_id, например когда Claude возобновляет субагента. Каждый запуск имеет собственный run_id. Когда уведомление о запуске поступает в вашу сессию как пользовательское сообщение, runId в origin task-notification этого сообщения содержит то же значение. Уведомление может прийти после того, как начался следующий запуск задачи, и всё равно будет содержать ID более раннего запуска. Чтобы определить, к какому запуску относится ход, сравнивайте runId, а не task_id. Требуется TypeScript Agent SDK v0.3.292 или новее.
Объявление запланированного запуска
Если ваше приложение запускает промпты по собственному расписанию, объявляйте каждый запуск, чтобы Claude Code представлял ход модели как запланированную задачу, а не как живой ввод пользователя. Запустите сессию сCLAUDE_CODE_HOST_SCHEDULED_RUN, установленной в 1 в env, затем отправьте SDKUserMessage запуска с origin: { kind: "task-notification", subkind: "scheduled-trigger", fireReason: "scheduled" } и без isSynthetic. Claude Code игнорирует объявление в процессе, запущенном без этой переменной. Он также игнорирует его в процессе, окружение которого содержит CLAUDECODE или CLAUDE_CODE_CHILD_SESSION. Claude Code сохраняет fireReason, только когда значение состоит из 1–32 строчных букв или подчёркиваний. Требует TypeScript Agent SDK v0.3.280 или позже.
Поля происхождения peer
Происхождениеpeer указывает, какой агент отправил сообщение: внутрипроцессный участник команды, отправляющий сообщение в main с помощью SendMessage, или пир из другой сессии, то есть другая ваша сессия Claude Code. Межсессионные пиры требуют Claude Code v2.1.224 или позже в macOS и Linux; о требованиях для нативной Windows см. доступность межсессионного обмена сообщениями. Межсессионный пир может работать на той же машине, а также на другой вашей машине или в облаке, когда его сообщение поступает через Remote Control. Два вида отправителей заполняют поля по-разному:
from: имя участника команды или адрес отправителя для межсессионного пира. Для одностороннего сообщения с другой машины у отправителя нет адреса для ответа, иfromравно"unknown". Значение задаётся отправителем; проверенной идентичностью являетсяverifiedPeerPid.fromMode: класс разрешений отправляющей сессии,bypassилиprompting, объявленный хостом, который передаёт сообщение пира между вашими сессиями, например настольным приложением. Claude Code читает его в принимающей сессии, когда применяет контроль входящих сообщений. Требует Agent SDK v0.3.234 или позже.senderTaskId: ID задачи участника команды. Отсутствует для межсессионного пира.name: отображаемое имя отправителя, нормализованное Claude Code: он удаляет управляющие, форматирующие и суррогатные кодовые точки Unicode, а также разделители строк и абзацев, затем обрезает пробелы и ограничивает результат 64 кодовыми точками с многоточием. Требует Claude Code v2.1.205 или позже.body: декодированное тело сообщения с удалённой peer-обёрткой, побайтово совпадающее с тем, что видит модель. Присутствует для одиночного сообщения участника команды и отсутствует, когда несколько сообщений объединены; для узла из другой сессии присутствует, только если ход состоит ровно из одной peer-обёртки, сформированной Claude Code. Отображайтеnameиbodyвместо повторного разбора текста сообщения. До версии v2.1.299 объединённые сообщения сохранялиbodyпервого сообщения. Требуется Claude Code v2.1.205 или новее.fromSession: ID сессии отправителя, которую может открыть хост; устанавливается хостом отправителя, чтобы ваш интерфейс мог ссылаться на отправляющую сессию. Как иfrom, это значение заявлено отправителем: используйте его только как цель навигации и не рассматривайте как доказательство идентичности отправителя. Требует Claude Code v2.1.216 или позже.verifiedPeerPid: ID процесса, который подключился к сокету межсессионного обмена сообщениями этой сессии, проверенный ядром и прочитанный из самого соединения, а не из данных сообщения. Используйте его, а неfrom, для идентификации отправителя:fromможет подделать любой процесс того же пользователя. Поле отсутствует, когда Claude Code не может его проверить, например в Windows или при поступлении не через сокет, поэтому отсутствие значения означает, что отправитель не проверен. Для ретранслируемого трафика оно идентифицирует ретранслятор, а не автора сообщения, а ID процессов могут переиспользоваться, поэтому рассматривайте его как сведения о происхождении, а не как токен аутентификации. Требует Claude Code v2.1.216 или позже.
Типы hooks
Для полного руководства по использованию хуков с примерами и общими паттернами см. руководство по хукам.HookEvent
Доступные события hooks.
HookCallback
Тип функции обратного вызова hook.
HookCallbackMatcher
Конфигурация hook с опциональным matcher.
HookInput
Тип объединения всех типов входных данных hook.
BaseHookInput
Базовый интерфейс, который расширяют все типы входных данных hook.
prompt_id — это UUID, идентифицирующий пользовательский запрос, который в настоящий момент обрабатывается. Он совпадает с атрибутом prompt.id на событиях OpenTelemetry и отсутствует до первого ввода пользователя. Требуется 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, которое видит модель; форма отличается от структурированного объекта Output в PostToolUseHookInput.
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 — это "slash_command", когда /add-dir добавил её, и "register_repo_root", когда это сделал запрос управления SDK.
WorktreeCreateHookInput
WorktreeRemoveHookInput
CwdChangedHookInput
FileChangedHookInput
MessageDisplayHookInput
HookJSONOutput
Возвращаемое значение hook.
AsyncHookJSONOutput
SyncHookJSONOutput
Типы входных данных инструментов
Документация схем входных данных для встроенных инструментов Claude Code. Эти типы экспортируются из@anthropic-ai/claude-agent-sdk/sdk-tools и могут быть использованы для типобезопасного взаимодействия с инструментами.
ToolInputSchemas
Объединение типов входных данных инструментов, экспортируемое из @anthropic-ai/claude-agent-sdk/sdk-tools; члены включают:
Agent
Имя инструмента:Agent. Предыдущее имя Task всё ещё принимается как псевдоним, и массив tools в сообщении инициализации SDKSystemMessage в настоящее время перечисляет этот инструмент как Task для обратной совместимости.
Поле
mode объявлено устаревшим и игнорируется в Claude Code v2.1.212 или позже. Субагент работает либо в режиме разрешений родительской сессии, либо в режиме permissionMode из своего определения, а правила наследования для субагентов решают, в каком из них.AskUserQuestion
Имя инструмента:AskUserQuestion
Bash
Имя инструмента:Bash
Monitor
Имя инструмента:Monitor
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
- Используйте
pagesдля диапазонов страниц PDF (например,"1-5"). allow_largeпозволяет Claude прочитать текстовый файл сверх обычных ограничений размера, когда в контекстном окне сессии есть место. Требует Agent SDK v0.3.296 или позже, который включает Claude Code v2.1.296.
tool_result вызова Read. Чтение, которое возвращает вывод pdf, содержит блок сводки text, за которым следует блок document. Чтение, которое возвращает вывод parts, содержит блок сводки text, за которым следует один блок на каждую извлечённую страницу: блок image или блок text, называющий страницу, когда Claude Code не смог отобразить её как изображение. До Agent SDK v0.3.242 Claude Code доставлял содержимое файла как отдельное сообщение user после результата инструмента.
Write
Имя инструмента:Write
Glob
Имя инструмента:Glob
Grep
Имя инструмента:Grep
TaskStop
Имя инструмента:TaskStop
task_id также принимает участника команды агентов или именованного фонового агента по ID агента или имени.
NotebookEdit
Имя инструмента:NotebookEdit
WebFetch
Имя инструмента:WebFetch
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 не распознает, они недоступны, если вы не согласитесь на их использование:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
TodoWrite вместо них, когда вы устанавливаете CLAUDE_CODE_ENABLE_TASKS=0.Этот набор по умолчанию применяется в Claude Code v2.1.268 и более поздних версиях, которые TypeScript Agent SDK поставляет начиная с версии v0.3.268.См. Доступность модели, чтобы включить эту возможность.TaskCreate
Имя инструмента:TaskCreate
TaskUpdate
Имя инструмента:TaskUpdate
status в "deleted", чтобы удалить её.
TaskGet
Имя инструмента:TaskGet
null, если ID не найден.
TaskList
Имя инструмента:TaskList
ExitPlanMode
Имя инструмента:ExitPlanMode
allowedPrompts объявлено устаревшим и игнорируется; Claude Code всё ещё принимает его, чтобы существующие вызывающие стороны и транскрипты проходили валидацию. До v2.1.205 оно запрашивало разрешения Bash на основе промптов для реализации плана.
ListMcpResources
Имя инструмента:ListMcpResourcesTool
ReadMcpResource
Имя инструмента:ReadMcpResourceTool
EnterWorktree
Имя инструмента:EnterWorktree
path, чтобы переключиться в существующий worktree вместо создания нового. При первом входе целевой каталог должен быть зарегистрированным worktree текущего репозитория или, в многорепозиторном рабочем пространстве, репозитория, вложенного в него; из сессии worktree он должен находиться в .claude/worktrees/ репозитория сессии. name и path являются взаимоисключающими.
ExitWorktree
Имя инструмента:ExitWorktree
keep оставляет worktree и ветку на диске, а remove удаляет оба. discard_changes должно быть true при удалении worktree, в котором есть незафиксированные файлы или коммиты без слияния.
EnterPlanMode
Имя инструмента:EnterPlanMode
CronCreate
Имя инструмента:CronCreate
recurring в false, чтобы он сработал один раз при следующем совпадении. Задачи по умолчанию ограничены сессией, а возобновление с --resume или --continue восстанавливает задачи, срок действия которых не истёк. См. Запланированные задачи.
Установка durable в true запрашивает сохранение в .claude/scheduled_tasks.json, чтобы задача пережила перезапуски. Долговременное планирование доступно не в каждой сессии: когда оно недоступно, Claude Code принимает durable: true, но создаёт задачу только для текущей сессии. Проверьте поле durable в выводе, чтобы узнать, была ли задача сохранена.
CronDelete
Имя инструмента:CronDelete
CronCreate.
CronList
Имя инструмента:CronList
.claude/scheduled_tasks.json и задачи только для текущей сессии.
ScheduleWakeup
Имя инструмента:ScheduleWakeup
/loop с самостоятельным темпом. Среда выполнения ограничивает delaySeconds диапазоном от 60 до 3600 секунд. Поля delaySeconds, reason, prompt и noop обязательны, если stop не равно true. noop: true сообщает о пробуждении, при котором ничего не изменилось. Установка stop: true отменяет ожидающее пробуждение и завершает /loop с самостоятельным темпом. Поле stop требует Claude Code v2.1.202 или позже. См. строку ScheduleWakeup в справочнике по инструментам.
RemoteTrigger
Имя инструмента:RemoteTrigger
/schedule. trigger_id обязателен для действий get, update, run и list_runs. body обязателен для create, update и create_webhook_trigger и опционален для run.
create_webhook_trigger присоединяет источник событий к существующей routine, например событие GitHub, которое её запускает. body указывает источник, события и routine для запуска. Требует Claude Code v2.1.225 или позже.
list_runs перечисляет недавние запуски routine, а get_run_log читает лог одного запуска. session_id указывает запуск для чтения из результата list_runs, а cursor позволяет постранично перебирать результаты любого из этих действий. Оба действия требуют Claude Code v2.1.227 или позже.
Этот инструмент доступен, только когда сессия аутентифицирована с учётной записью claude.ai на плане с включёнными Routines, и отсутствует, когда политика вашей организации отключает облачные сессии. В Claude Code v2.1.227 или позже инструмент также отсутствует, когда Owner отключил routines для организации. До v2.1.227 сессия, в которой был отключён только переключатель routines, всё ещё показывала инструмент, а сервер отклонял его вызовы.
PushNotification
Имя инструмента:PushNotification
message короче 200 символов, потому что мобильные операционные системы обрезают более длинный текст. См. строку PushNotification в справочнике по инструментам о доступности у провайдеров; доставка push-уведомлений проходит через инфраструктуру, размещённую Anthropic, которая недоступна из Amazon Bedrock, Claude Platform on AWS, Google Cloud’s Agent Platform или Microsoft Foundry.
REPL
Удалён в v2.1.275. До v2.1.274 включительно экспериментальный инструментREPL можно было включить с помощью CLAUDE_CODE_REPL=1 в опции env.
ReportFindings
Имя инструмента:ReportFindings
level опционален и содержит уровень effort, который Claude сообщает для ревью. Claude Code не сравнивает его с уровнем, на котором выполнялось ревью, поэтому они могут различаться.
Каждый результат содержит следующие поля:
file: путь относительно репозитория к файлу, в котором находится результат. Опциональныйline— это строка (нумерация с 1), к которой он привязан.summary: утверждение о дефекте в одно предложение.failure_scenarioописывает конкретные входные данные и состояние, которые приводят к неправильному выводу или сбою.short_summary: опциональная сжатая метка длиной не более 60 символов для компактного отображения. Требует Claude Code v2.1.212 или позже.category: опциональный короткий слаг типа результата в формате kebab-case, напримерcorrectnessилиtest-coverage. Требует Claude Code v2.1.199 или позже.verdict: устанавливается, когда выполнялся проход верификации; отсутствует при ревью только с встроенной проверкой.outcome: устанавливается только при повторном сообщении после применения исправлений.
Artifact
Имя инструмента:Artifact
.html или .md как размещённую страницу артефакта или перечисляет опубликованные артефакты пользователя. Опустите action или передайте "publish", чтобы опубликовать file_path, который обязателен для действия публикации. Каждое поле ниже относится к публикации:
icon: одно короткое общее слово для значка артефакта на вкладке браузера, напримерchartилиmap. Claude включает его при первой публикации и опускает при обновлении, что сохраняет сохранённый значок артефакта.favicon: устаревшее, и Claude его опускает.title: задаёт название опубликованной страницы на вкладке браузера и в галерее, когда в HTML-файле нет тега<title>.url: указывает существующий артефакт, который нужно обновить на месте вместо создания нового.
force — это крайняя мера перезаписи, которая отбрасывает более новую версию, опубликованную другой сессией. При конфликте неудачная публикация возвращает более новое содержимое; Claude переносит свои изменения на это содержимое или повторно читает артефакт и публикует снова. Передавайте force, только когда пользователь явно просит отбросить эту версию.
Передайте "list", чтобы перечислить опубликованные артефакты пользователя; его могут сопровождать только limit и scope. scope по умолчанию равен "mine", что перечисляет артефакты, которыми владеет пользователь; "shared" перечисляет артефакты, которыми другие люди поделились с пользователем, а "all" перечисляет и те, и другие.
limit задаёт максимальное число артефактов, возвращаемых в списке, от 1 до 200. Значение limit больше 50 требует Agent SDK v0.3.292 или позже. Без limit список возвращает до 25 артефактов.
capabilities: возможности среды выполнения, которые использует опубликованная страница, с ключами по названию возможности, например коннекторы, которые может вызывать страница. Сервис артефактов проверяет объявление и отклоняет публикацию, которая указывает возможность, недоступную учётной записи, или задаёт для неё недопустимую конфигурацию. Передайте{}, чтобы очистить сохранённое объявление, и опустите поле при повторном развёртывании, чтобы сохранить его. Требует Agent SDK v0.3.235 или позже.contract: версия среды выполнения, с которой работает опубликованная страница. Опустите её, чтобы сохранить текущую версию артефакта, передайте"latest"для обновления или передайте конкретную версию для закрепления или отката. Требует Agent SDK v0.3.235 или позже.
Projects
Имя инструмента:Projects
method:
project_info: возвращает метаданные проекта и список документов.project_read: читает один документ поpath.project_search: выполняет запрос к базе знаний проекта с помощьюquery.nограничивает число совпадений и по умолчанию равно5.project_write: создаёт или заменяет документ поpathиз ровно одного из источников:content, содержащего встроенный текст, илиlocal_path, указывающего файл внутри рабочего каталога.present_to_user: trueотмечает записанный документ как итоговый результат, который пользователю нужно увидеть.project_delete: удаляет документ поpath.
ReadMcpResourceDir
Имя инструмента:ReadMcpResourceDirTool
resources, а поле error сообщает, что перечисление каталогов не включено.
RefreshMcpTools
Имя инструмента:RefreshMcpTools
CLAUDE_CODE_ENABLE_REFRESH_MCP_TOOLS=1 в опции env, и только в сессиях хотя бы с одним MCP-сервером. Требует Claude Code v2.1.211 или позже.
ShowOnboardingRolePicker
Имя инструмента:ShowOnboardingRolePicker
McpInput
Имя инструмента: динамические имена инструментов MCP видаmcp__<server>__<tool>
Типы вывода инструментов
Документация схем вывода для встроенных инструментов Claude Code. Эти типы экспортируются из@anthropic-ai/claude-agent-sdk/sdk-tools и представляют фактические данные ответа, возвращаемые каждым инструментом.
ToolOutputSchemas
Объединение типов вывода инструментов, экспортируемое из @anthropic-ai/claude-agent-sdk/sdk-tools; в него входят:
Agent
Имя инструмента:Agent. Прежнее имя Task по-прежнему принимается как псевдоним, а массив tools в init-сообщении SDKSystemMessage в настоящее время указывает этот инструмент как Task для обратной совместимости.
status: "completed" для завершённых задач, "async_launched" для фоновых задач и "remote_launched" для задач, которые Claude Code отправил в облачную сессию; в этом случае sessionUrl ссылается на эту сессию, а taskId её идентифицирует.
В варианте completed поле resolvedModel указывает модель, с которой начал работу субагент; она может отличаться от запрошенного входного параметра model, если действует availableModels или другое переопределение. Для этого поля требуется Claude Code v2.1.174 или новее. В варианте async_launched оно указывает модель, которая использовалась в момент перевода задачи в фоновый режим.
modelsUsed перечисляет модели, которые использовал субагент, по порядку. Поле присутствует только в том случае, если во время выполнения произошла смена модели, и модель появляется в списке повторно, если выполнение снова переключилось на неё. В варианте async_launched список охватывает модели, использованные до перевода в фоновый режим. Как для modelsUsed, так и для поведения resolvedModel при переводе в фоновый режим требуется Claude Code v2.1.212 или новее.
Если Claude Code сохранил изолированный worktree субагента, поле worktreePath в результате completed указывает, где его найти. worktreeBranch — его ветка; поле присутствует, если Claude Code создал worktree с помощью git.
Claude Code заполняет usage и totalTokens на основе последнего запроса субагента к API, а не всего выполнения, поэтому 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, и опускает это поле для коммита, сделанного в состоянии detached HEAD. Для этого поля требуется Agent SDK v0.3.227 или новее. Claude Code сообщает о команде gh pr reopen как о действии PR reopened; для этого требуется Agent SDK v0.3.234 или новее.
Monitor
Имя инструмента:Monitor
TaskStop, чтобы досрочно отменить наблюдение.
Edit
Имя инструмента:Edit
Read
Имя инструмента:Read
type.
Write
Имя инструмента:Write
originalFile и structuredPatch зависит от записи:
- Для вновь созданного файла
originalFileравно null, аstructuredPatchпусто - При перезаписи
originalFileсодержит прежнее содержимое, за исключением случаев, когда это содержимое больше примерно 10 МБ: тогда Claude Code пропускает diff и возвращаетoriginalFileравным null и пустойstructuredPatch structuredPatchтакже пусто, если запись ничего не изменила или построение diff превысило таймаут
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 или новее; поле сообщает общее количество результатов до пагинации с помощью head_limit и offset в режиме files_with_matches. Для totalLines требуется Claude Code v2.1.210 или новее; поле сообщает общее количество строк до пагинации в режиме content.
TaskStop
Имя инструмента:TaskStop
NotebookEdit
Имя инструмента:NotebookEdit
WebFetch
Имя инструмента:WebFetch
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 не распознает, они недоступны, если вы не согласитесь на их использование:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
TodoWrite вместо них, когда вы устанавливаете CLAUDE_CODE_ENABLE_TASKS=0.Этот набор по умолчанию применяется в Claude Code v2.1.268 и более поздних версиях, которые TypeScript Agent SDK поставляет начиная с версии v0.3.268.Чтобы включить эту возможность, см. Доступность моделей.TaskCreate
Имя инструмента:TaskCreate
TaskUpdate
Имя инструмента:TaskUpdate
TaskGet
Имя инструмента:TaskGet
null, если идентификатор не найден.
TaskList
Имя инструмента:TaskList
ExitPlanMode
Имя инструмента:ExitPlanMode
ListMcpResources
Имя инструмента:ListMcpResourcesTool
ReadMcpResource
Имя инструмента:ReadMcpResourceTool
EnterWorktree
Имя инструмента:EnterWorktree
ExitWorktree
Имя инструмента:ExitWorktree
EnterPlanMode
Имя инструмента:EnterPlanMode
CronCreate
Имя инструмента:CronCreate
CronDelete
Имя инструмента:CronDelete
CronList
Имя инструмента:CronList
.claude/scheduled_tasks.json и задания текущей сессии, существующие только в её рамках. Задание, существующее только в рамках сессии, содержит durable: false; у заданий, считанных с диска, это поле отсутствует.
ScheduleWakeup
Имя инструмента:ScheduleWakeup
stopped равно true, если вызов завершил цикл с помощью stop: true. Для него требуется Claude Code v2.1.202 или новее. Поле cancelledWakeups содержит количество ожидающих пробуждений, отменённых вызовом stop: true. Значение 0 означает, что ожидающих пробуждений не было; повторяющийся cron /loop вызовом stop: true не отменяется. Для него требуется Claude Code v2.1.206 или новее.
RemoteTrigger
Имя инструмента:RemoteTrigger
PushNotification
Имя инструмента:PushNotification
ReportFindings
Имя инструмента:ReportFindings
level, переданное Claude, и находки, возвращённые обратно для тела результата. Требуется 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
"inode/directory"; error содержит понятное человеку сообщение, если серверу не удалось получить список содержимого каталога.
RefreshMcpTools
Имя инструмента:RefreshMcpTools
refreshed означает, что повторно запрошенный список инструментов был применён, error означает, что повторный запрос завершился ошибкой и был сохранён прежний набор инструментов, а not_connected означает, что у сервера нет активного подключения для запроса.
ShowOnboardingRolePicker
Имя инструмента:ShowOnboardingRolePicker
role, если пользователь выбрал роль из предложенных вариантов или ввёл её, и dismissed: true, если пользователь закрыл окно выбора. Пустой объект означает, что пользователь одобрил вызов, не выбрав роль.
McpOutput
Имя инструмента: динамические имена инструментов MCP видаmcp__<server>__<tool>
structuredContent или ссылки на ресурсы, см. tool_use_result, где это значение хранится в члене content. Во время выполнения значение также может быть undefined, хотя экспортируемый тип этого не отражает.
Типы разрешений
PermissionUpdate
Операции для обновления разрешений.
PermissionBehavior
PermissionUpdateDestination
PermissionRuleValue
Другие типы
ApiKeySource
Источник API-ключа для запросов сессии, сообщаемый как apiKeySource в инициализирующем сообщении SDKSystemMessage.
Agent SDK v0.3.234 и более поздние версии перечисляют в типе эти четыре значения. Тип также сохраняет
user, project, org, temporary и oauth, чтобы старый код продолжал компилироваться, но Claude Code их не сообщает.
SdkBeta
Доступные бета-функции, которые можно включить через опцию betas. См. Beta headers для дополнительной информации.
SlashCommand
Информация о доступной команде.
builtin имеет значение true в строке, когда команда является собственной командой Claude Code и ввод /name её запускает. Поле отсутствует для команды, определённой пользователем, проектом, плагином или 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имеет форму с областьюplugin:<plugin-name>:<server-name>, описанную в разделе MCP-серверы, предоставляемые плагинами.- Область действия конфигурации:
user,project,local,dynamic,managed,enterprise,claudeaiилиagent. Сервер из.mcp.jsonсообщаетproject, а области действия установки MCP определяютlocal,projectиuser. Серверы, которые ваше приложение передаёт в опцииmcpServers, кроме встроенных в процесс SDK-серверов, сообщаютdynamic.
source, а не на name или префиксе имени инструмента mcp__<server>__. Для любого источника, кроме sdk, name является недоверенным текстом: экранируйте его перед отображением.
McpServerProvenance и поля, которые его содержат, требуют Agent SDK v0.3.274 или более поздней версии.
McpServerStatus
Статус подключённого MCP-сервера.
source указывает, откуда поступило определение сервера, с теми же значениями и правилом доверия, что и source в McpServerProvenance. Поле требует Agent SDK v0.3.274 или более поздней версии и отсутствует в более ранних версиях.
_meta в записи tools содержит члены MCP Apps из _meta этого инструмента, чтобы ваше приложение могло найти ресурс ui:// для отображения с помощью readMcpResource(). Claude Code пропускает объект ui и устаревшую плоскую строку ui/resourceUri и скрывает все остальные ключи. Внутри ui значение resourceUri является строкой ui://, а visibility — массивом из "model" и "app", когда сервер их устанавливает, а любой другой член пропускается без изменений. Claude Code отбрасывает любой из этих ключей, если значение имеет неверный формат, и опускает _meta у инструмента, который не объявляет ни один из них. Поле присутствует, только когда capabilities инициализирующего сообщения включают mcp_tool_ui_meta_v1, и требует TypeScript Agent SDK v0.3.280 или более поздней версии.
McpServerStatusConfig
Конфигурация MCP-сервера в том виде, в каком её сообщает mcpServerStatus(). Это объединение всех типов транспорта MCP-сервера.
McpServerConfig для деталей по каждому типу транспорта.
AccountInfo
Информация об учётной записи аутентифицированного пользователя.
ModelUsage
Статистика использования для каждой модели, возвращаемая в сообщениях результата. Значение costUSD — это оценка на стороне клиента. См. Отслеживание стоимости и использования для оговорок о биллинге.
thinkingTokens подсчитывает токены размышлений, которые сгенерировала эта модель. outputTokens уже включает их, поэтому не складывайте эти два значения. Поле отсутствует до тех пор, пока ход не выполнится на версии Claude Code, которая его записывает, поэтому возобновлённая сессия, начатая на более ранней версии, сообщает частичный подсчёт. thinkingTokens требует Agent SDK v0.3.257 или более поздней версии.
Поля canonicalModel и provider требуют Claude Code v2.1.218 или более поздней версии. canonicalModel — это канонический идентификатор модели, который используется для поиска цены; он может отличаться от исходной строки модели, которая является ключом записи, например когда эта строка является идентификатором конкретного провайдера или псевдонимом.
provider называет API-бэкенд, который обслуживал модель, например firstParty, bedrock, vertex, foundry, anthropicAws, mantle или gateway.
costBasis называет таблицу цен, по которой был оценён последний запрос модели: list для прейскурантной цены, managed для таблицы modelPricing или unknown, когда ни одна из них не совпала с идентификатором модели. Поле требует Claude Code v2.1.246 или более поздней версии.
ConfigScope
NonNullableUsage
Версия Usage, в которой все nullable поля сделаны non-nullable, кроме fallback_credit, который по-прежнему может быть null.
Usage
Статистика использования токенов. Это тип BetaUsage из @anthropic-ai/sdk.
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имеет значениеnullв сообщениях ассистента, которые синтезирует Claude Code, например в сообщениях об ошибках API.
Usage поле fallback_credit, зависит от установленной у вас версии @anthropic-ai/sdk, в которой оно появилось начиная с 0.115.0.
CallToolResult
Тип результата MCP-инструмента (из @modelcontextprotocol/sdk/types.js). structuredContent — это объект JSON, который может быть возвращён вместе с content, включая блоки изображений. См. Возврат структурированных данных.
SDKMcpResourceLink
Один файл, который MCP-инструмент вернул по ссылке. Claude Code создаёт каждую запись из блока resource_link в результате инструмента и доставляет список как resourceLinks в SDKUserMessage.tool_use_result или как resource_links в SDKTaskNotificationMessage, когда вызов завершился в фоне. Требует Agent SDK v0.3.257 или более поздней версии.
uri или name не является строкой, и опускает необязательное поле, значение которого не соответствует указанному типу.
ThinkingConfig
Управляет поведением мышления/рассуждений Claude. Имеет приоритет над устаревшим maxThinkingTokens.
display управляет тем, возвращается ли текст размышлений как "summarized" или "omitted". На Claude Opus 4.7 и более поздних версиях значение API по умолчанию — "omitted", поэтому установите "summarized", чтобы получать содержимое размышлений в блоках thinking. Claude Code не передаёт ваше значение display некоторым провайдерам, например Amazon Bedrock и Google Cloud’s Agent Platform. У этих провайдеров Opus 4.7 и более поздние версии возвращают пустые блоки thinking, даже если вы установите display в "summarized".
SpawnedProcess
Интерфейс для пользовательского запуска процесса (используется с опцией spawnClaudeCodeProcess). ChildProcess уже удовлетворяет этому интерфейсу.
SpawnOptions
Опции, передаваемые пользовательской функции spawn.
Поле
signal сообщает вашей функции spawn, когда нужно завершить процесс. Передайте его как опцию signal в spawn() Node или передайте его обработчику завершения вашей VM или контейнера.Этот сигнал не срабатывает в тот же момент, когда отменяется Options.abortController. SDK сначала закрывает stdin процесса и ждёт около двух секунд, чтобы CLI мог корректно завершить работу, а затем отменяет этот сигнал. Чтобы реагировать сразу в момент отмены вызывающей стороной, слушайте собственный Options.abortController.signal, на который ваша функция spawn может ссылаться из охватывающей области видимости.McpSetServersResult
Результат операции setMcpServers().
setMcpServers(), Claude Code применяет следующие правила:
- Серверы, которые вызов не называет: вне облачной сессии Claude Code отключает серверы, добавленные предыдущим вызовом
setMcpServers(), и встроенные в процесс SDK-серверы, и перечисляет их вremoved. Остальные серверы продолжают работать и не перечисляются вremoved, в том числе stdio-, HTTP- и SSE-серверы из опцииmcpServers, серверы из файлов настроек и серверы, предоставленные плагинами. - Серверы, которые вызов называет: Claude Code заменяет stdio-, HTTP- или SSE-сервер, добавленный предыдущим вызовом
setMcpServers(), только если его конфигурация отличается от переданной вами. Встроенный в процесс SDK-сервер, уже зарегистрированный под этим именем, остаётся без изменений, поэтому, чтобы заменить его, исключите его из одного вызова и добавьте в следующем. - Встроенные серверы, которые CLI запустил при старте: если вызов называет такой сервер, Claude Code отбрасывает эту запись и сообщает о ней в
errors.
added перечисляет серверы, которые Claude Code добавил или заменил, независимо от того, подключились они или нет. Сервер, который не смог подключиться, появляется и в added, и в errors, с текстом ошибки в errors и строкой failed в mcpServerStatus(). До Claude Code v2.1.257 сервер, попытка подключения которого выбросила исключение, сообщался только в errors.
RewindFilesResult
Результат операции rewindFiles().
skippedLinks подсчитывает отслеживаемые пути, которые перемотка отказалась восстанавливать или удалять ради безопасности ссылок: символическая ссылка, жёсткая ссылка или другой необычный файл по отслеживаемому пути, родительский каталог, который больше не разрешается туда, куда он указывал при создании контрольной точки, или резервная копия, которую не удалось безопасно прочитать. Поле требует Claude Code v2.1.216 или более поздней версии. Предварительный вызов с rewindFiles(userMessageId, { dryRun: true }) никогда его не устанавливает.
SDKStatusMessage
Сообщение об обновлении статуса (например, компактирование).
SDKTaskNotificationMessage
Уведомление о том, что фоновая задача завершилась, завершилась с ошибкой или была остановлена. Фоновые задачи включают команды Bash с run_in_background, наблюдения Monitor и фоновых субагентов. Описание полей run_id и ambient и требования к версии для них см. в SDKTaskStartedMessage.
reason устанавливается, когда задача завершается по причине, отличной от её собственного завершения, сбоя или остановки, и требует Agent SDK v0.3.273 или более поздней версии. Claude Code устанавливает его только в сессиях, которые подключаются через claude.ai: в облачных сессиях, включая сессии на self-hosted раннерах, и в сессиях Remote Control. Локальный вызов query() никогда его не устанавливает. Его единственное значение, worker_restart, означает, что процесс Claude Code, выполнявший задачу, перезапустился. Уведомление имеет статус "stopped", поэтому считайте задачу ни завершённой, ни завершившейся с ошибкой.
Когда Claude Code переводит долгий вызов MCP-инструмента в фоновый режим, блок tool_result для этого вызова содержит только заполнитель, а реальный результат вызова приходит в этом уведомлении. Сопоставьте уведомление с вызовом с помощью tool_use_id. В уведомлении completed поле resource_links перечисляет файлы, которые инструмент вернул по ссылке, как записи SDKMcpResourceLink, с теми же ограничениями в 50 ссылок и 64 KiB, что и у tool_use_result.resourceLinks. Claude Code опускает resource_links, когда в результате не было ссылок, а также в уведомлениях для задач, которые не являются вызовами MCP-инструментов. resource_links требует Agent SDK v0.3.257 или более поздней версии.
Claude Code добавляет пометку в начало каждого уведомления задачи, которое он отправляет модели, за исключением доставок, помеченных подвидом scheduled-trigger, которые вместо этого оформлены как назначенная задача. Пометка указывает, что никакого ввода от человека не было, поэтому модель не воспринимает уведомление как инструкцию или подтверждение пользователя.
Чтобы обнаружить ход с уведомлением задачи, проверяйте origin.kind === "task-notification" в SDKUserMessage или SDKResultMessage, а не сопоставляйте текст пометки. Читайте 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
Выдаётся периодически во время выполнения инструмента для отображения прогресса.
tool_progress каждые 30 секунд с heartbeat: true. Каждый heartbeat содержит имя инструмента и прошедшее время в секундах, поэтому вы можете отличить долго выполняющийся вызов от зависшей сессии. Claude Code не выдаёт heartbeat для вызовов инструментов внутри субагента. Поле heartbeat требует Agent SDK v0.3.214 или более поздней версии. До v2.1.257 Claude Code также не выдавал heartbeat для вызова инструмента Agent на переднем плане.
В сообщениях tool_progress для инструмента Agent, кроме heartbeat, 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 имеет значение "local_bash" для команд Bash и наблюдений Monitor, "local_agent" для субагентов или "remote_agent".
run_id идентифицирует один запуск задачи. Когда задача снова запускается под тем же task_id, например субагент, которого Claude возобновляет, новый запуск получает новый run_id. Поле требует Agent SDK v0.3.292 или более поздней версии. Используйте его, чтобы различать запуски одной задачи:
- Сопоставление сообщений с запуском: сообщения
task_started,task_progress,task_updatedиtask_notificationодного запуска содержат один и тот жеrun_id. Запись запуска в каждомSDKBackgroundTasksChangedMessageтакже его содержит, как иrunIdв origin пользовательского сообщения, которое доставляет уведомление этого запуска. - Обнаружение запоздавшего сообщения: при сравнении как обычных строк идентификаторы запусков одной задачи сортируются в порядке начала запусков, поэтому сообщение, чей
run_idпри сортировке идёт раньше отображаемого вами запуска, относится к более раннему запуску. Помимо этого сравнения, рассматривайте значение как непрозрачное. - Возврат к
task_id: когда сообщение не содержитrun_id, напримерtask_notification, которое возобновлённая сессия выдаёт, чтобы закрыть задачу, запущенную предыдущим процессом, относите его к задаче поtask_id.
task_started имеют общий task_id, а уведомление, завершившее первый запуск, содержит идентификатор первого запуска:
ambient имеет значение true для задач, которые не являются частью работы сессии, например задач, которые Claude Code запускает для собственной работы. Наблюдатели живых обновлений также являются 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 сообщает новое значение is_backgrounded в сообщении task_updated, а не отправляет второй task_started.
parent_task_id содержит task_id субагента, который запустил эту задачу. Используйте его, чтобы группировать каждую задачу под запустившим её субагентом. Claude Code устанавливает его для задач субагентов, Bash и Monitor. Поле требует Agent SDK v0.3.292 или более поздней версии. Оно отсутствует, когда:
- Задачу запустил основной поток
- Claude Code больше не отслеживает родительскую задачу
- Задачу запустил участник команды или агент внутри рабочего процесса
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 создаёт блок размышлений, в том числе скрытый (redacted). 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:uuidпользовательского сообщения, содержавшего/clear. Используйте его, чтобы сопоставить сброс с этим сообщением.timestamp: время сброса в виде строки ISO 8601 в UTC. Используйте его для отображения, а не для упорядочивания сообщений.
trigger, user_message_uuid и timestamp требуют Claude Code v2.1.281 или более поздней версии.
Опубликованные типизации SDK объявляют SDKConversationResetMessage в Claude Code v2.1.203 и более поздних версиях. До v2.1.203 SDKMessage ссылался на этот тип, не объявляя его, поэтому сужение по type === "conversation_reset" не проходило проверку типов, когда skipLibCheck был отключён.
AbortError
Пользовательский класс ошибки для операций отмены.
AbortError — единственный класс ошибки в типизированном API SDK. Другие сбои, например завершение процесса Claude Code или невозможность его запуска, отклоняют итерацию сообщений с ошибками, у которых нет класса SDK для сопоставления. В разделе Устранение неполадок эти ошибки перечислены по тексту сообщения, с причиной и способом исправления для каждой.
Конфигурация Sandbox
SandboxSettings
Конфигурация для поведения sandbox. Используйте это для включения sandboxing команд и программной конфигурации ограничений сети.
Sandbox зависит от поддержки платформы и, на Linux, инструментов, таких как
bubblewrap и socat. Когда enabled имеет значение true и sandbox не может запуститься, query() сообщает сообщение result с subtype: "error_during_execution" и причину в errors. Для одного вызова сообщения query() SDK выбрасывает после выдачи этого результата ошибки, поэтому оберните цикл в блок try для продолжения после него. Смотрите Handle the result для контракта ошибки.Для выполнения без sandbox вместо этого установите failIfUnavailable: false.Пример использования
SandboxNetworkConfig
Конфигурация, специфичная для сети, для режима sandbox. Эти параметры применяются к sandboxed Bash командам, когда enabled имеет значение true в родительском SandboxSettings. Они не ограничивают инструмент WebFetch, который использует правила разрешений вместо этого.
Встроенный прокси sandbox применяет
allowedDomains на основе запрашиваемого имени хоста и не завершает и не проверяет трафик TLS, поэтому такие методы, как domain fronting, потенциально могут его обойти. Смотрите Ограничения безопасности Sandboxing для деталей и Безопасное развёртывание для конфигурации прокси, завершающего TLS.SandboxFilesystemConfig
Конфигурация, специфичная для файловой системы, для режима sandbox.
Fallback разрешений для команд вне Sandbox
КогдаallowUnsandboxedCommands включён, модель может запросить выполнение команд вне sandbox, установив dangerouslyDisableSandbox: true во входных данных tool. Эти запросы переходят к существующей системе разрешений, что означает, что ваш обработчик canUseTool вызывается, позволяя вам реализовать пользовательскую логику авторизации.
Ваши записи excludedCommands вместо этого автоматически обходят sandbox без участия модели; sandbox.excludedCommands описывает, когда применяется запись.
В примере ниже isCommandAuthorized служит заместителем для проверки авторизации, которую вы определяете.
См. также
- Обзор SDK - Общие концепции SDK
- Справочник Python SDK - Документация Python SDK
- Справочник CLI - Интерфейс командной строки
- Общие рабочие процессы - Пошаговые руководства