Установка
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.
Функции
query()
Основная функция для взаимодействия с Claude Code. Создаёт асинхронный генератор, который потоком передаёт сообщения по мере их поступления.
Параметры
Возвращаемое значение
Возвращает объектQuery, который расширяет AsyncGenerator<SDKMessage, void> дополнительными методами.
startup()
Предварительно разогревает подпроцесс CLI, запуская его и завершая инициализационное рукопожатие до того, как запрос будет доступен. Возвращённый дескриптор WarmQuery принимает запрос позже и записывает его в уже готовый процесс, поэтому первый вызов query() разрешается без затрат на запуск подпроцесса и инициализацию в строке.
Параметры
Возвращаемое значение
ВозвращаетPromise<WarmQuery>, который разрешается после того, как подпроцесс запущен и завершил инициализационное рукопожатие.
Пример
Вызовитеstartup() рано, например при загрузке приложения, затем вызовите .query() на возвращённом дескрипторе, когда запрос будет готов. Это перемещает запуск подпроцесса и инициализацию из критического пути.
tool()
Создаёт определение типобезопасного MCP tool для использования с SDK MCP серверами.
Параметры
ToolAnnotations
Переэкспортировано из @modelcontextprotocol/sdk/types.js. Все поля являются опциональными подсказками; клиенты не должны полагаться на них для решений безопасности.
createSdkMcpServer()
Создаёт экземпляр MCP сервера, который работает в том же процессе, что и ваше приложение.
Параметры
listSessions()
Обнаруживает и перечисляет прошлые сессии с лёгкими метаданными. Фильтруйте по директории проекта или перечисляйте сессии во всех проектах.
Параметры
Тип возврата: SDKSessionInfo
Пример
Выведите 10 самых последних сессий для проекта. Результаты отсортированы поlastModified в убывающем порядке, поэтому первый элемент является самым новым. Опустите dir для поиска во всех проектах.
getSessionMessages()
Читает сообщения пользователя и ассистента из прошлой сессии.
Параметры
Тип возврата: SessionMessage
Пример
getSessionInfo()
Читает метаданные для одной сессии по ID без сканирования полной директории проекта.
Параметры
Возвращает
SDKSessionInfo или undefined, если сессия не найдена.
renameSession()
Переименовывает сессию, добавляя запись пользовательского названия. Повторные вызовы безопасны; побеждает самое последнее название.
Параметры
tagSession()
Помечает сессию. Передайте null для очистки тега. Повторные вызовы безопасны; побеждает самый последний тег.
Параметры
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().
Handle slow or stalled API responses
Подпроцесс CLI читает несколько переменных окружения, которые контролируют timeout API и обнаружение зависания. Передайте их через опциюenv:
-
API_TIMEOUT_MS: timeout для каждого запроса на клиенте Anthropic, в миллисекундах. По умолчанию600000. Применяется к основному циклу и всем подагентам. -
CLAUDE_CODE_MAX_RETRIES: максимальное количество повторных попыток API. По умолчанию10, ограничено15. Каждая повторная попытка получает своё собственное окноAPI_TIMEOUT_MS, поэтому наихудший случай wall time примерноAPI_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)плюс backoff. Для автоматических запусков, которым нужно ждать через более длительные сбои, установитеCLAUDE_CODE_RETRY_WATCHDOG=1: он повторяет ошибки ёмкости бесконечно и, на Claude Code v2.1.199 или позже, повышает значение по умолчанию для других переходящих ошибок до300и удаляет ограничение на эту переменную. -
CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog зависания для подагентов. Пока watchdog потока включен, значение по умолчанию этоCLAUDE_STREAM_IDLE_TIMEOUT_MSплюс 5 минут, что составляет600000, если вы не повысите эту переменную. С отключённым watchdog потока, значение по умолчанию это600000. До v2.1.257 значение по умолчанию всегда было600000. Таймер сбрасывается при каждом событии потока. При зависании Claude Code прерывает подагента и сообщает о зависании родителю. Для фонового подагента он также отмечает задачу как неудачную и прикрепляет любой частичный результат. -
CLAUDE_ENABLE_STREAM_WATCHDOGсCLAUDE_STREAM_IDLE_TIMEOUT_MS: watchdog потока, который прерывает запрос, когда заголовки получены, но тело ответа перестаёт потоком передаваться. Watchdog включен по умолчанию для всех поставщиков; установитеCLAUDE_ENABLE_STREAM_WATCHDOG=0для отключения.CLAUDE_STREAM_IDLE_TIMEOUT_MSпо умолчанию300000и зажимается до этого минимума. После прерывания, Automatic retries охватывает то, что Claude Code делает, на основе того, как далеко прошёл ответ. Пока watchdog ждёт ответ, который шлюз позадиANTHROPIC_BASE_URLдержит открытым с keep-alive пингами, хост, который устанавливаетincludePartialMessages, продолжает получатьpingсобытия потока, поэтому читайте эти кадры как живость, а не синхронизируйте сессию на молчании. До v2.1.257 кадры останавливались через 5 минут после последнего реального события потока.
Query object
Интерфейс, возвращаемый функцией query().
Methods
applyFlagSettings()
Изменяет настройки на работающей сессии без перезагрузки запроса. Используйте её, когда настройка, у которой нет выделенного setter, должна измениться в середине сессии, например, ужесточение permissions после того, как агент прочитает ненадёжный ввод. setModel() и setPermissionMode() являются выделенными setters для этих двух ключей; applyFlagSettings() является общей формой, которая принимает любое подмножество ключей настроек, и передача model здесь ведёт себя так же, как setModel().
Только некоторые ключи вступают в силу в середине сессии:
- Применяется на следующем ходу:
effortLevel,ultracode,permissions,hooks,skillOverrides,fastMode,agent. Переключениеagentтакже применяет переопределение модели этого агента и hooks на следующем ходу. Его системный запрос применяется на следующем ходу или, в сессии, которая переиспользует записанный системный запрос, один раз сессия компактна. - Применяется во время текущего хода:
model. Если вы переключаетеmodelпока Claude работает над ходом, ответ, который Claude уже генерирует, завершается на старой модели, и остаток хода, начиная со следующего вызова Claude Code к модели, использует новую. Подагенты сохраняют свою собственную модель. До v2.1.212 переключение в середине хода ждало следующего хода. - Нет эффекта в середине сессии: опции системного запроса. Они разрешаются один раз при запуске, поэтому работающая сессия сохраняет исходное значение, даже если вызов успешен. Чтобы их изменить, запустите новую сессию.
effortLevel принимает имя уровня усилий. Он также принимает "ultracode", который запускает xhigh усилия с ultracode на. applyFlagSettings() объявляет effortLevel без этого значения, поэтому передайте эквивалент { ultracode: true } в TypeScript. Значение ultracode требует Claude Code v2.1.203 или позже и принимается только applyFlagSettings(), а не ключом effortLevel в файле настроек.
Значения записываются в слой flag-settings, тот же слой, который встроенная опция settings функции query() заполняет при запуске. Это тот же уровень, который раздел приоритета на странице называет программными опциями.
Последовательные вызовы выполняют shallow-merge ключей верхнего уровня. Второй вызов с { permissions: {...} } заменяет весь объект permissions из предыдущего вызова, а не выполняет deep-merge в него. Чтобы очистить ключ из слоя flag и вернуться к источникам с более низким приоритетом, передайте null для этого ключа. Передача undefined не имеет эффекта, потому что сериализация JSON её отбрасывает.
Доступно только в режиме потока входных данных, то же ограничение, что и setModel() и setPermissionMode().
Пример ниже переключает активную модель в середине сессии, а затем очищает переопределение, чтобы модель вернулась к тому, что указывают пользовательские или проектные настройки.
applyFlagSettings() только для TypeScript. Python SDK не предоставляет эквивалентный метод.WarmQuery
Дескриптор, возвращаемый startup(). Подпроцесс уже запущен и инициализирован, поэтому вызов query() на этом дескрипторе записывает запрос непосредственно в готовый процесс без задержки запуска.
Methods
WarmQuery реализует AsyncDisposable, поэтому его можно использовать с await using для автоматической очистки.
SDKControlInitializeResponse
Тип возврата initializationResult(). Содержит данные инициализации сессии.
hooks_applied сообщает, зарегистрировал ли Claude Code hooks, которые несёт запрос initialize. SDK отправляет этот запрос один раз при запуске сессии и снова при каждом вызове reinitialize(). Поле требует Agent SDK v0.3.238 или позже.
Claude Code опускает поле, когда запрос не несёт hooks. Когда запрос несёт hooks, значение зависит от того, является ли запрос первой инициализацией сессии и, для повторного, как он достиг сессии:
true: Claude Code зарегистрировал hooks. Первая инициализация сессии возвращает это значение. Так же повторная инициализация, отправленная через stdin CLI. В этом случае hooks в новом запросе заменяют hooks, зарегистрированные ранее.false: Claude Code игнорировал hooks. Повторная инициализация, отправленная удалённой сессии, возвращает это значение, поэтому второй клиент, который присоединяется к сессии, не может заменить hooks, которые зарегистрировал первый клиент.
hooks при каждой повторной инициализации.
Ответ всегда сообщает fast_mode_state, и когда что-то блокирует fast mode, fast_mode_disabled_reason несёт код причины рядом с ним, поэтому вы можете объяснить заблокированное состояние вместо переопределения доступности. Оба поведения требуют Claude Code v2.1.219 или позже. До v2.1.219 ответ опускал fast_mode_state, когда fast mode не был доступен, и никогда не нёс причину. Для кодов причин и их значений см. fast_mode_disabled_reason на сообщении результата.
Обёртка control-response для успешного initialize также несёт массив pending_permission_requests. Поле находится на самой обёртке response, а не в полезной нагрузке 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, которые ваш клиент никогда не отправлял, такие как триггеры scheduled task. Игнорируйте 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 подсчитывает каждую категорию. С опцией по умолчанию, 'full', Claude Code подсчитывает каждую категорию с запросами API подсчёта токенов. Передайте { detail: 'summary' } для получения ответа из использования последнего ответа и локальных оценок вместо этого. Никакие запросы подсчёта токенов не выходят, и числа для каждой категории приблизительны. Аргумент detail требует Agent SDK v0.3.257 или позже.
Когда вы отправляете /context как запрос вместо вызова метода, Claude Code прикрепляет полезную нагрузку SDKContextUsage к полю context_usage сообщения ассистента, которое доставляет результат. Это поле требует Agent SDK v0.3.232 или позже.
categoriesсодержит итоги для каждой категории.mcpToolsиagentsатрибутируют токены отдельным MCP инструментам и подагентам.memoryFilesперечисляет каждый загруженный файл памяти с его стоимостью.skills.skillFrontmatterатрибутирует токены listing skills каждому включённому skill. Подсчёты для каждого skill измеряют запись listing каждого skill, как Claude Code фактически её отправляет, что может быть короче, чем полный frontmatter skill. Сравнитеskills.totalSkillsсskills.includedSkills, чтобы увидеть, попал ли каждый обнаруженный skill в listing.
totalTokens это текущее использование контекста сессии, и maxTokens это окно, против которого измеряется использование. Это окно это контекстное окно модели или более низкое окно auto-compaction, когда оно применяется. rawMaxTokens несёт то же значение, что и maxTokens, и percentage это totalTokens как округлённый процент этого окна.
Claude Code оставляет опциональные диагностики deferredBuiltinTools, systemTools и systemPromptSections неустановленными, поэтому ожидайте их отсутствия, даже хотя тип их объявляет.
SDKControlReadFileResponse
Тип возврата readFile().
contents содержит текст файла или данные base64, когда вы запросили encoding: 'base64'; поле encoding ответа установлено на 'base64' в этом случае. absPath это разрешённый абсолютный путь. truncated установлено, когда файл был длиннее лимита maxBytes и содержимое было обрезано на этом лимите.
What readFile() can read
readFile() служит более узким набором файлов, чем инструмент Read:
- Обычный файл внутри одной из рабочих директорий сессии, такой как
cwdиadditionalDirectories - Несколько собственных файлов Claude Code для сессии, такие как результаты инструментов
readFile(). Для чего-либо ещё вызов разрешается с null.
SDKControlReloadSkillsResponse
Тип возврата reloadSkills().
skills перечисляет skills, доступные после перезагрузки, в той же форме SlashCommand, которую возвращает supportedCommands().
AgentDefinition
Конфигурация для подагента, определённого программно.
AgentMcpServerSpec
Указывает MCP серверы, доступные подагенту. Может быть именем сервера (строка, ссылающаяся на сервер из конфигурации mcpServers родителя) или встроенной конфигурацией сервера, записью, отображающей имена серверов на конфигурации.
McpServerConfigForProcessTransport это McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig.
SettingSource
Контролирует, какие источники конфигурации на основе файловой системы SDK загружает настройки из.
Default behavior
КогдаsettingSources опущено или undefined, query() загружает те же настройки файловой системы, что и CLI Claude Code: пользовательские, проектные и локальные. См. What settingSources does not control для входных данных, которые читаются независимо от этой опции, и как их отключить.
Why use settingSources
Отключите настройки файловой системы:"project" в settingSources. См. Modify system prompts для того, как загрузка CLAUDE.md взаимодействует с опциями системного запроса.
Settings precedence
Когда загружаются несколько источников, настройки объединяются с этим приоритетом (от высшего к низшему):- Локальные настройки (
.claude/settings.local.json) - Настройки проекта (
.claude/settings.json) - Пользовательские настройки (
~/.claude/settings.json)
agents, allowedTools и settings, переопределяют пользовательские, проектные и локальные настройки файловой системы. Управляемые политикой настройки имеют приоритет над программными опциями.
PermissionMode
CanUseTool
Тип пользовательской функции разрешения для контроля использования инструмента.
Функция является заменой SDK для интерактивного запроса разрешения: она вызывается только когда поток оценки разрешения разрешается в запрос. Вызовы инструментов, уже одобренные записью allowedTools, правилом настроек разрешения или режимом разрешения, такие как acceptEdits или bypassPermissions, никогда её не вызывают. Чтобы контролировать каждый вызов инструмента, используйте вместо этого hook PreToolUse.
Правило разрешения не предварительно одобряет действия, которые ни один режим не одобряет автоматически; см. How permissions are evaluated для того, какие из них достигают обратного вызова и что происходит в режиме dontAsk и auto.
Обратный вызов обычно разрешает запрос, возвращая
PermissionResult, который SDK записывает обратно через свой транспорт как control_response. Возвращайте null только когда ваше приложение уже отправило control_response для этого запроса через свой собственный канал, повторив requestId; SDK затем пропускает запись ответа в свой транспорт. Возврат null в любом другом случае оставляет вызов инструмента заблокированным бесконечно, потому что control_response никогда не отправляется и запросы разрешения не имеют timeout.
Опция requestId и возвращаемое значение null требуют Claude Code v2.1.199 или позже.
PermissionResult
Результат проверки разрешения.
ToolConfig
Конфигурация для встроенного поведения инструмента.
McpServerConfig
Конфигурация для MCP серверов.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
McpSdkServerConfigWithInstance
McpClaudeAIProxyServerConfig
SdkPluginConfig
Конфигурация для загрузки plugins в 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 на машине, на которой он работает, поэтому запрос не достиг поставщика облачных услуг. Обычная причина — вход в облако, который истёк или никогда не был завершён на этой машине, хотя кратковременно недоступный сервис учётных данных сообщает то же значение. Смотрите Не удалось загрузить учётные данные AWS или Google Cloud. Требует TypeScript Agent SDK v0.3.267 или позже, который включает Claude Code v2.1.267
aborted имеет значение true, когда прерывание или отмена усекли сообщение ассистента перед завершением потока: сообщение не имеет stop_reason и содержимое может заканчиваться в середине слова. Поле отсутствует на нормально завершённых сообщениях. Требует Agent SDK v0.3.214 или позже.
Claude Code устанавливает user_message_uuid и user_message_uuids на первое сообщение ассистента хода при условиях, описанных в user_message_uuid.
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, когда его нет.
SDKUserMessage
Сообщение пользовательского ввода.
shouldQuery на false для добавления сообщения в транскрипт без запуска хода ассистента. Сообщение удерживается и объединяется в следующее пользовательское сообщение, которое запускает ход. Используйте это для внедрения контекста, такого как вывод команды, которую вы запустили вне полосы, без траты вызова модели на это.
На сообщении, которое содержит блок tool_result, tool_use_result это объект структурированного вывода инструмента, а не текст, отправленный модели. Его форма зависит от инструмента, названного соответствующим блоком tool_use, поэтому поле типизировано как unknown; встроенные формы перечислены в разделе Типы вывода инструментов.
Для инструмента Agent, tool_use_result это AgentOutput. На результате completed, content содержит отчёт подагента без ID агента и трейлера использования, которые Claude Code добавляет к тексту tool_result, поэтому отображайте из tool_use_result вместо анализа этого текста.
Для инструмента MCP, чей результат содержит блоки resource_link, tool_use_result это объект с массивом resourceLinks записей SDKMcpResourceLink. Claude получает каждую ссылку как строку текста в блоке tool_result, поэтому читайте resourceLinks для отображения файлов, которые вернул сервер, вместо анализа этого текста. Claude Code опускает resourceLinks, когда результат не содержит ссылок и на результатах от подагентов, сохраняет максимум 50 ссылок на результат и прекращает добавление ссылок, когда массив достигает 64 КиБ сериализованного JSON. resourceLinks требует Agent SDK v0.3.257 или позже.
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:uuids каждого сообщения, которое вы отправили и на которое Claude Code ответил в этом ходе. Смотритеuser_message_uuids.request_sent_wall_ms: эпоха миллисекунд, в которую Claude Code отправил запрос API, для объединения с серверными временными метками. Присутствует только вместе сuser_message_uuid, на успешном результате сis_errorfalse, чей ход отправил запрос API.first_content_frame_ms: время в миллисекундах до первого события потокаcontent_block_startилиcontent_block_delta, считая блоки размышлений как содержимое. Присутствует на успешной ветви только, когдаis_errorfalse. Требует 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. Вспомогательные вызовы вне этого конвейера, такие как классификатор разрешений и запросы подсчёта токенов, исключены. В сеансах потокового ввода итоги кумулятивны по ходам, поэтому читайте последний результат, а не суммируйте по результатам. Смотрите Отслеживание затрат в режиме потокового ввода для сбросов и Восстановление итогов после сбоя сеанса для обнулённых результатов.total_cost_usd: кумулятивная предполагаемая стоимость в USD для этого вызоваquery(), охватывающая те же вызовы, что иmodelUsage, и сбрасываемая в тех же точках. Это оценка, а не выписка по счёту. Смотрите Отслеживание затрат и использования для оговорок по точности.queued_turn_count: количество сообщений, которые вы отправили сorigin: { kind: "human" }, которые всё ещё ожидают, когда Claude Code создал результат. Смотритеqueued_turn_countдля того, что говорят вам0и отсутствующее поле.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" }. Подпрограммы, чьи триггеры сработали и сообщения, проверенные сервером, из ваших других сеансов прибывают с этим видом, каждое с subkind, описанным в Подвиды уведомлений о задачах. Проверьте kind, чтобы различить результаты, которые отвечают на ваш запрос, от внедрённых продолжений перед маршрутизацией или подавлением их.
Поле отсутствует для результатов, выданных перед любым пользовательским ходом, таких как ошибки при запуске.
Когда hook PreToolUse возвращает permissionDecision: "defer", результат имеет stop_reason: "tool_deferred" и deferred_tool_use содержит id, name и input ожидающего инструмента. Прочитайте это поле, чтобы отобразить запрос в вашем собственном пользовательском интерфейсе, затем возобновите с тем же session_id для продолжения. Смотрите Отложить вызов инструмента на потом для полного цикла.
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 подхватит обычное сообщение вашего между вызовами инструментов, ход отвечает на это сообщение с этого момента. Повтор подхвата требует 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, поэтому вы можете привязать ответ перед поступлением результата. Когда ход ничего не потоком передаёт, Claude Code устанавливает его на первое сообщение ассистента вместо этого. Повтор первого ответа требует Agent SDK v0.3.246 или позже. Когда сообщение, на которое отвечает ход, изменяется в середине хода, первый ответ после изменения также содержит поле на Agent SDK v0.3.265 или позже; более ранние версии устанавливают его на один кадр ответа за ход. - Каждый кадр
thinking_tokensхода: чтобы вы могли приписать прогресс размышления сообщению, которое вы отправили, без ожидания первого ответа хода. Требует Agent SDK v0.3.260 или позже.
- Кадры ответа, отличные от тех первых ответов
- Кадры подагента
- Ходы, которые не отвечают на сообщение с
uuid: ход ответил на сообщение, которое вы отправили без одного, или Claude Code запустил ход сам и не подхватил обычное сообщение, которое имеет один - Результаты, которые не отвечают на сообщение, которое вы отправили, такие как обнулённый результат после сбоя рабочего процесса
user_message_uuids
uuids каждого сообщения, которое вы отправили и на которое Claude Code ответил в этом ходе. Когда вы отправляете несколько сообщений близко друг к другу, Claude Code может объединить их в один ход, и user_message_uuid затем называет только последнее из них. Чтобы сопоставить ответ с любым из объединённых сообщений, ищите uuid этого сообщения где-нибудь в этом списке. Требует Agent SDK v0.3.259 или позже.
Claude Code устанавливает список вместе с user_message_uuid на каждом кадре ответа, который содержит это поле, и на результате. Для полного набора кадров, которые содержат user_message_uuid, и версии, которую требует каждый, смотрите user_message_uuid. Список всегда содержит user_message_uuid и содержит максимум 64 записи.
Когда Claude Code подхватит обычное сообщение, которое вы отправили, пока ход выполнялся, он добавляет uuid этого сообщения в список результата.
Когда первый ответ или результат содержит user_message_uuid без списка, он поступил из более ранней версии Claude Code, поэтому вернитесь к одному полю.
queued_turn_count
Количество сообщений, которые вы отправили с origin: { kind: "human" }, которые всё ещё ожидают в очереди команд, когда Claude Code создал результат. Требует Agent SDK v0.3.242 или позже.
Что говорят вам 0 и отсутствующее поле:
0: Claude Code не считает сообщения, которые вы отправили без этогоorigin, и не считает уведомления о задачах, поэтому ход может всё ещё следовать.- Отсутствует: финальный результат, который 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 или позже.
effort: уровень усилий, который Claude Code отправляет на следующий запрос сеанса, или null, когда он не отправляет ни один. Claude Code устанавливает поле только на сообщение инициализации, которое отправляет клиентам Remote Control, и опускает его из сообщения инициализации, которое читает ваше приложение. Требует Agent SDK v0.3.234 или позже.
Массив capabilities называет поведения протокола, которые реализует этот CLI, поэтому вы можете обнаруживать функции вместо сравнения строк claude_code_version. Это открытый набор: игнорируйте значения, которые вы не распознаёте, и проверяйте конкретную возможность, поведение которой вы используете. Поле требует Claude Code v2.1.205 или позже и отсутствует на более ранних CLI.
SDKPartialAssistantMessage
Потоковое частичное сообщение (только когда includePartialMessages равен true). Поле parent_tool_use_id всегда имеет значение null: события потока выдаются только для основного сеанса. Для атрибуции подагента используйте полные сообщения, которые содержат parent_tool_use_id, или включите forwardSubagentText для получения текста и размышлений подагента в виде полных сообщений.
user_message_uuid и user_message_uuids на первое событие потока хода, не являющееся ping, и снова, когда сообщение, на которое отвечает ход, изменяется, при условиях в user_message_uuid.
SDKCompactBoundaryMessage
Сообщение, указывающее границу компактирования диалога.
SDKInformationalMessage
Универсальный текстовый баннер, выданный циклом. Содержит строки статуса без ошибок, обратную связь hook, такую как причина блокировки hook UserPromptSubmit, и вывод команды. На Claude Code v2.1.227 или позже, systemMessage hook может прибыть как это сообщение, с каждой строкой с префиксом имени hook, такой как PostToolUse:Bash says:. Прибывает ли systemMessage hook как это сообщение, зависит от события. Каждый раздел события на странице hooks говорит, как выводится вывод. Отобразите content как простой текст на заданном level.
SDKWorkerShuttingDownMessage
Выданное при корректном завершении работника, чтобы удалённые клиенты могли показать, почему работник исчез, вместо ожидания истечения времени ожидания сердцебиения. reason это короткая строка в формате snake_case, установленная хост-CLI, такая как "host_exit" или "remote_control_disabled". Действуйте на основе этого только при потоковой передаче в реальном времени. Возобновленный сеанс воспроизводит прошлые экземпляры этого сообщения, поэтому игнорируйте их в этом случае.
SDKPluginInstallMessage
Событие прогресса установки plugin. Выдаётся, когда установлена CLAUDE_CODE_SYNC_PLUGIN_INSTALL, поэтому ваше приложение Agent SDK может отслеживать установку marketplace plugin перед первым ходом. Статусы started и completed заключают в скобки общую установку. Статусы installed и failed сообщают об отдельных marketplaces и включают name.
SDKPermissionDeniedMessage
Событие потока, выданное, когда система разрешений отклоняет вызов инструмента без интерактивного запроса. Используйте его для отображения отклонения в вашем пользовательском интерфейсе по мере его возникновения, а не только наблюдая результат инструмента is_error, который следует за ним. Какие отклонения оно сообщает, зависит от того, как запуск обрабатывает запросы разрешений:
- С callback
canUseToolи по умолчаниюpermissionPrompts: 'host': запросы разрешений идут в ваш callback, и это событие сообщает об отклонениях, которые Claude Code решает самостоятельно без его вызова. - Ни с чем: голый запуск
-pилиquery(), который не устанавливает ниcanUseTool, ниpermissionPromptToolName, отклоняет любой вызов инструмента, который бы запросил, и это событие сообщает об этих отклонениях, а также об отклонениях, которые Claude Code решает самостоятельно. До v2.1.223 Claude Code не выдавал это событие в запусках без callback. - С инструментом запроса MCP, установленным с
permissionPromptToolNameили флагом--permission-prompt-tool, и по умолчаниюpermissionPrompts: 'host': Claude Code вообще не выдаёт это событие, даже для отклонений правил, которые оно решает самостоятельно. - С
permissionPrompts: 'none': Claude Code отклоняет вызовы, которые бы запросили, даже когда также установленыcanUseToolили инструмент запроса MCP, и это событие сообщает об этих отклонениях, а также об отклонениях, которые Claude Code решает самостоятельно. Требует Claude Code v2.1.259 или позже.
PreToolUse, независимо от того, отклонил ли hook вызов сам или правило отрицания переопределило решение hook разрешить или спросить. Событие также является лучшим усилием: иногда Claude Code записывает отклонение без выдачи этого события, поэтому permission_denials на сообщении результата является авторитетным записью.
SDKPermissionDenial
Информация об отклонённом использовании tool.
SDKContextUsage
Структурированная форма отчёта /context, переносимая как context_usage на SDKAssistantMessage, который доставляет результат /context. Agent SDK v0.3.232 и позже экспортируют тип. В отличие от SDKControlGetContextUsageResponse, он содержит только данные, необходимые для отображения разбивки использования, без полей отображения, таких как color и gridRows.
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 держит вне окна и исключает из расчёта использования, перечисленные для осведомления
SDKMessageOrigin
Происхождение сообщения с ролью пользователя. Это появляется как origin на SDKUserMessage и передаётся на соответствующее SDKResultMessage, чтобы вы могли определить, что запустило данный ход.
Подвиды уведомлений о задачах
Когда Claude Code доставляет уведомление о задаче в сеанс, он устанавливаетsubkind на origin уведомления только если серверы Anthropic проверили, откуда поступило это уведомление. subkind требует Claude Code v2.1.213 или позже и принимает одно из двух значений:
scheduled-trigger: уведомление это сохранённый запрос подпрограммы, доставленный, потому что один из триггеров подпрограммы сработал: её расписание, её триггер API, её триггер GitHub или Запустить сейчас. Claude Code кадрирует их модели как назначенную задачу сеанса с другим уведомлением от уведомления, которое несут другие уведомления о задачах.
peer-send-message: уведомление это сообщение, которое другой из ваших сеансов отправил с инструментом send_message на стороне сервера, который используют сеансы Claude Code на веб-сайте для обмена сообщениями друг с другом, а не кросс-сеансовый инструмент SendMessage, и серверы Anthropic проверили, что оба сеанса принадлежат одной и той же приватной группе сеансов. Требует Claude Code v2.1.224 или позже. Доставка send_message, которую серверы не проверили таким образом, не получает subkind.
Каждое другое уведомление о задаче не имеет subkind. Это включает запланированные задачи, которые срабатывают на вашей собственной машине, активность PR, доставленную в сеанс, и фоновые события, такие как завершённая задача. Сообщения от кросс-сеансового инструмента SendMessage вообще не являются уведомлениями о задачах: независимо от того, поступают ли они из сеанса на той же машине или через серверы Anthropic с другой машины, Claude Code даёт им kind: "peer" и поля происхождения пира.
Поля происхождения пира
Происхождениеpeer идентифицирует, какой агент отправил сообщение: внутрипроцессный товарищ по команде, отправляющий на main с SendMessage, или кросс-сеансовый пир, другой из ваших сеансов Claude Code. Кросс-сеансовые пиры требуют Claude Code v2.1.224 или позже на macOS и Linux; смотрите доступность кросс-сеансового обмена сообщениями для требования собственного Windows. Кросс-сеансовый пир может работать на той же машине или на другой из ваших машин или Claude Code на веб-сайте, когда его сообщение прибывает через 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: декодированное тело сообщения с удалённой оболочкой пира, побайтово совпадающее с тем, что видит модель. Всегда присутствует для сообщения товарища по команде; для кросс-сеансового пира присутствует только, когда ход точно представляет собой одну оболочку пира, сформированную Claude Code. Отобразите name и 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
Для полного руководства по использованию hooks с примерами и общими паттернами см. руководство Hooks.HookEvent
Доступные события hooks.
HookCallback
Тип функции обратного вызова hook.
HookCallbackMatcher
Конфигурация hook с опциональным matcher.
HookInput
Тип объединения всех типов входных данных hook.
BaseHookInput
Базовый интерфейс, который расширяют все типы входных данных hook.
prompt_id — это UUID, идентифицирующий пользовательский запрос, который в настоящий момент обрабатывается. Он совпадает с атрибутом prompt.id на событиях OpenTelemetry и отсутствует до первого ввода пользователя. Требуется Claude Code v2.1.196 или позже.
PreToolUseHookInput
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
Типы входных данных tool
Документация схем входных данных для всех встроенных tools Claude Code. Эти типы экспортируются из@anthropic-ai/claude-agent-sdk и могут быть использованы для типобезопасного взаимодействия с tools.
ToolInputSchemas
Объединение типов входных данных tool, экспортируемое из @anthropic-ai/claude-agent-sdk; члены включают:
Agent
Имя tool:Agent. Предыдущее имя Task всё ещё принимается как псевдоним, и массив tools в сообщении инициализации SDKSystemMessage в настоящее время перечисляет этот tool как Task для обратной совместимости.
Поле
mode устарело и игнорируется в Claude Code v2.1.212 или позже. Подагент работает либо в режиме разрешений родительской сессии, либо в режиме его определения permissionMode, и правила наследования подагента решают, какой из них.AskUserQuestion
Имя tool:AskUserQuestion
Bash
Имя tool:Bash
Monitor
Имя tool:Monitor
command запускает скрипт и выдаёт одно событие на строку stdout, а ws открывает WebSocket и выдаёт одно событие на текстовый фрейм. Укажите ровно один из command или ws. Источник ws требует Claude Code v2.1.195 или позже.
Установите persistent: true для наблюдений на уровне сессии, таких как хвосты логов. Когда Monitor запускает команду, он следует тем же правилам разрешения, что и Bash; наблюдение WebSocket запрашивает одобрение отдельно. См. справочник tool Monitor для поведения и доступности провайдера. Экспортированный тип отмечает timeout_ms и persistent как обязательные, потому что схема заполняет их значения по умолчанию, 300000 и false; вызов, который их опускает, проходит валидацию.
TaskOutput
Имя tool:TaskOutput
TaskOutput устарело; предпочитайте Read на пути выходного файла задачи. Приведённые ниже схемы остаются действительными для hooks и обработчиков разрешений, которые встречают tool.Edit
Имя tool:Edit
Read
Имя tool:Read
pages для диапазонов страниц PDF (например, "1-5").
Для PDF Claude получает содержимое файла внутри tool_result вызова Read. Чтение, которое возвращает выход pdf output, содержит блок сводки text, за которым следует блок document. Чтение, которое возвращает выход parts, содержит блок сводки text, за которым следует один блок на извлечённую страницу: блок image или блок text, называющий страницу, когда Claude Code не смог отобразить её как изображение. До Agent SDK v0.3.242 Claude Code доставлял содержимое файла как отдельное сообщение user после результата tool.
Write
Имя tool:Write
Glob
Имя tool:Glob
Grep
Имя tool:Grep
TaskStop
Имя tool:TaskStop
task_id также принимает товарища по команде agent-team или именованного фонового агента по ID агента или имени.
NotebookEdit
Имя tool:NotebookEdit
WebFetch
Имя tool:WebFetch
WebSearch
Имя tool:WebSearch
Workflow
Имя tool:Workflow
Workflow доступен в Agent SDK v0.3.149 и позже. Требуется хотя бы один из script, name или scriptPath.
TodoWrite
Имя tool:TodoWrite
The following tools are available by default only on Claude 3.x models, Opus 4 through 4.7, Sonnet 4 through 4.6, and Haiku 4.5. On every other model, including model IDs Claude Code doesn’t recognize, they aren’t available unless you opt in:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
TodoWrite instead when you set CLAUDE_CODE_ENABLE_TASKS=0.This default set applies in Claude Code v2.1.268 and later, which the TypeScript Agent SDK bundles from v0.3.268.См. Доступность модели для подключения.TaskCreate
Имя tool:TaskCreate
TaskUpdate
Имя tool:TaskUpdate
status на "deleted" для её удаления.
TaskGet
Имя tool:TaskGet
null, когда ID не найден.
TaskList
Имя tool:TaskList
ExitPlanMode
Имя tool:ExitPlanMode
allowedPrompts устарело и игнорируется; Claude Code всё ещё принимает его, чтобы существующие вызывающие стороны и транскрипты проходили валидацию. До v2.1.205 он запрашивал разрешения Bash на основе запроса для реализации плана.
ListMcpResources
Имя tool:ListMcpResourcesTool
ReadMcpResource
Имя tool:ReadMcpResourceTool
EnterWorktree
Имя tool:EnterWorktree
path для переключения в существующий worktree вместо создания нового. На первом входе целевой объект должен быть зарегистрированным worktree текущего репозитория или, в многорепозиторном рабочем пространстве, репозитория, вложенного внутри него; из сессии worktree он должен находиться под .claude/worktrees/ репозитория сессии. name и path являются взаимоисключающими.
ExitWorktree
Имя tool:ExitWorktree
keep оставляет worktree и ветку на диске, а remove удаляет оба. discard_changes должно быть true при удалении worktree, который имеет незафиксированные файлы или неслитые коммиты.
EnterPlanMode
Имя tool:EnterPlanMode
CronCreate
Имя tool:CronCreate
recurring на false для срабатывания один раз при следующем совпадении. Задачи по умолчанию ограничены сессией: запуск новой беседы очищает их, а возобновление с --resume или --continue восстанавливает задачи, которые не истекли. См. Запланированные задачи.
Установка durable на true запрашивает сохранение в .claude/scheduled_tasks.json, чтобы задача пережила перезагрузки. Долговечное планирование доступно не в каждой сессии: когда оно недоступно, Claude Code принимает durable: true, но создаёт задачу только для сессии. Прочитайте поле durable в выводе, чтобы увидеть, сохранилась ли задача.
CronDelete
Имя tool:CronDelete
CronCreate.
CronList
Имя tool:CronList
.claude/scheduled_tasks.json и задачи только для сессии из текущей сессии.
ScheduleWakeup
Имя tool:ScheduleWakeup
/loop с собственным темпом. Среда выполнения зажимает delaySeconds между 60 и 3600 секундами. Поля delaySeconds, reason, prompt и noop обязательны, если stop не true. noop: true сообщает о пробуждении, где ничего не изменилось. Установка stop: true отменяет ожидающее пробуждение и завершает самостоятельный /loop. Поле stop требует Claude Code v2.1.202 или позже. См. строку ScheduleWakeup в справочнике tools.
RemoteTrigger
Имя tool: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 или позже.
Этот tool доступен только когда сессия аутентифицирована с учётной записью claude.ai на плане с включённой функцией Routines, и отсутствует, когда политика вашей организации отключает Claude Code в веб. В Claude Code v2.1.227 или позже tool также отсутствует, когда Owner отключил routines для организации. До v2.1.227 сессия с отключённым только переключателем routines всё ещё показывала tool, и сервер отклонял его вызовы.
PushNotification
Имя tool:PushNotification
message под 200 символами, потому что мобильные операционные системы обрезают более длинный текст. См. строку PushNotification в справочнике tools для доступности провайдера; доставка push проходит через инфраструктуру, размещённую Anthropic, которая недоступна из Amazon Bedrock, Claude Platform на AWS, Google Cloud’s Agent Platform или Microsoft Foundry.
REPL
Имя tool:REPL
timeout в миллисекундах, по умолчанию 30000 и максимум 600000.
Типы экспортируются, но tool отключён в сессиях SDK, если вы не установите CLAUDE_CODE_REPL=1 в опции env. Он также требует исполняемый файл claude на основе Bun, который предоставляет встроенный установщик.
ReportFindings
Имя tool:ReportFindings
level — это уровень усилий, на котором выполнялась проверка. Результаты упорядочены от наиболее серьёзных, максимум 32 на вызов, и массив пуст, когда ничего не выжило. Требует Claude Code v2.1.196 или позже.
Каждый результат содержит эти поля:
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
Имя tool:Artifact
.html или .md как размещённую страницу артефакта или перечисляет опубликованные артефакты пользователя. Опустите action или передайте "publish" для публикации file_path, который обязателен для действия публикации вместе с favicon, одним или двумя эмодзи, которые отмечают артефакт в галерее пользователя. title называет опубликованную страницу на вкладке браузера и в галерее, когда HTML файл не имеет тега <title>. url нацеливается на существующий артефакт для обновления на месте вместо создания нового.
force — это последняя мера перезаписи, которая отбрасывает более новую версию, опубликованную другой сессией. При конфликте неудачная публикация возвращает более новое содержимое; Claude объединяет его изменения с этим содержимым или повторно читает артефакт и публикует снова. Передавайте force только, когда пользователь явно просит отбросить эту версию.
Передайте "list" для перечисления опубликованных артефактов пользователя; только limit и scope могут его сопровождать. scope по умолчанию "mine", который перечисляет артефакты, которыми владеет пользователь; "shared" перечисляет артефакты, которыми другие люди поделились с пользователем, и "all" перечисляет оба.
capabilities: возможности среды выполнения, которые использует опубликованная страница, ключ по названию возможности, такой как коннекторы, которые может вызывать страница. Сервис артефактов проверяет объявление и отклоняет публикацию, которая называет возможность, которую учётная запись не может использовать, или даёт ей недействительную конфигурацию. Передайте{}для очистки сохранённого объявления и опустите поле при повторном развёртывании, чтобы сохранить его. Требует Agent SDK v0.3.235 или позже.contract: версия среды выполнения, на которой работает опубликованная страница. Опустите её, чтобы сохранить текущую версию артефакта, передайте"latest"для обновления или передайте конкретную версию для закрепления или отката. Требует Agent SDK v0.3.235 или позже.
Projects
Имя tool: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
Имя tool:ReadMcpResourceDirTool
resources и поле error сообщает, что перечисление каталогов не включено.
RefreshMcpTools
Имя tool:RefreshMcpTools
CLAUDE_CODE_ENABLE_REFRESH_MCP_TOOLS=1 в опции env, и только в сессиях с хотя бы одним сервером MCP. Требует Claude Code v2.1.211 или позже.
ShowOnboardingRolePicker
Имя tool:ShowOnboardingRolePicker
McpInput
Имя tool: динамические имена tools MCP формыmcp__<server>__<tool>
Типы выходных данных Tool
Документация схем выходных данных для всех встроенных tools Claude Code. Эти типы экспортируются из@anthropic-ai/claude-agent-sdk и представляют фактические данные ответа, возвращаемые каждым tool.
ToolOutputSchemas
Объединение типов выходных данных tool, экспортируемых из @anthropic-ai/claude-agent-sdk; члены включают:
Agent
Имя tool:Agent. Предыдущее имя Task всё ещё принимается как псевдоним, и массив tools в инициализирующем сообщении SDKSystemMessage в настоящее время перечисляет этот tool как 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.
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
Имя tool:AskUserQuestion
response устанавливается, когда пользователь ввёл свободный ответ вместо ответа на структурированные вопросы; когда присутствует, Claude получает “Пользователь ответил: …” вместо списка ответов по вопросам.
Bash
Имя tool:Bash
stdout, stderr и backgroundTaskId содержат:
timedOutAfterMs — это timeout в миллисекундах, установленный, когда команда достигла своего timeout и перешла в фоновый режим вместо явного запуска там. backgroundCwdHint устанавливается, когда фоновая команда содержала встроенную команду изменения директории, такую как cd, pushd, popd или chdir, и отмечает, что рабочая директория сеанса не изменилась. Оба поля требуют Claude Code v2.1.210 или позже.
Когда подагент, работающий на переднем плане, владеет фоновой командой, Claude Code завершает команду, когда этот подагент даёт свой финальный ответ. Claude Code устанавливает backgroundEndsWithFinalResponse в true на таких командах и опускает поле, когда команда сохраняется в течение хода, как команды, запущенные основным разговором или фоновыми подагентами. Поле требует Claude Code v2.1.227 или позже.
Claude Code устанавливает gitOperation.commit.branch в ветку, названную в строке сводки коммита git, и опускает её для коммита, сделанного на отсоединённом HEAD. Поле требует Agent SDK v0.3.227 или позже. Claude Code сообщает команду gh pr reopen как действие PR reopened, что требует Agent SDK v0.3.234 или позже.
Monitor
Имя tool:Monitor
TaskStop для раннего отмены наблюдения.
Edit
Имя tool:Edit
Read
Имя tool:Read
type.
Write
Имя tool:Write
originalFile и structuredPatch, зависит от записи:
- Для вновь созданного файла
originalFileравен null иstructuredPatchпуст - При перезаписи
originalFileсодержит предыдущее содержимое, за исключением случаев, когда это содержимое больше примерно 10 МБ: Claude Code затем пропускает diff и возвращаетoriginalFilenull иstructuredPatchпуст structuredPatchтакже пуст, когда запись ничего не изменила или diff истёк по времени
Glob
Имя tool:Glob
totalMatches и countIsComplete требуют Claude Code v2.1.191 или позже. totalMatches сообщает количество совпадающих файлов перед усечением. Когда countIsComplete равен false, totalMatches является нижней границей, потому что базовый поиск усёк свой собственный вывод.
Grep
Имя tool: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
Имя tool:TaskStop
NotebookEdit
Имя tool:NotebookEdit
WebFetch
Имя tool:WebFetch
artifactRead — это собственная запись Claude Code о прочитанном артефакте, присутствующая только когда Claude получил артефакт, который сеанс может опубликовать. Claude Code читает его обратно, когда сеанс возобновляется, чтобы последующая публикация строилась на правильной версии; ваш код не должен действовать на это. slug называет артефакт, ver — это версия, которую чтение записало, и отсутствует, когда оно ничего не записало, и seeded: false отмечает чтение, чей полный источник не достиг Claude. Поле seeded требует Agent SDK v0.3.239 или позже.
WebSearch
Имя tool:WebSearch
Workflow
Имя tool:Workflow
error перед тем, как рассматривать запуск как начатый: скрипт, который не прошёл проверку синтаксиса, возвращает status: "async_launched" с установленным error и никогда не запускается.
TodoWrite
Имя tool:TodoWrite
The following tools are available by default only on Claude 3.x models, Opus 4 through 4.7, Sonnet 4 through 4.6, and Haiku 4.5. On every other model, including model IDs Claude Code doesn’t recognize, they aren’t available unless you opt in:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
TodoWrite instead when you set CLAUDE_CODE_ENABLE_TASKS=0.This default set applies in Claude Code v2.1.268 and later, which the TypeScript Agent SDK bundles from v0.3.268.Смотрите Доступность модели для подключения.TaskCreate
Имя tool:TaskCreate
TaskUpdate
Имя tool:TaskUpdate
TaskGet
Имя tool:TaskGet
null когда ID не найден.
TaskList
Имя tool:TaskList
ExitPlanMode
Имя tool:ExitPlanMode
ListMcpResources
Имя tool:ListMcpResourcesTool
ReadMcpResource
Имя tool:ReadMcpResourceTool
EnterWorktree
Имя tool:EnterWorktree
ExitWorktree
Имя tool:ExitWorktree
EnterPlanMode
Имя tool:EnterPlanMode
CronCreate
Имя tool:CronCreate
CronDelete
Имя tool:CronDelete
CronList
Имя tool:CronList
.claude/scheduled_tasks.json и задачи только для сеанса из текущего сеанса. Задача только для сеанса содержит durable: false; задачи, прочитанные с диска, опускают поле.
ScheduleWakeup
Имя tool:ScheduleWakeup
stopped равно true, когда вызов завершил цикл с stop: true. Это требует Claude Code v2.1.202 или позже. Поле cancelledWakeups подсчитывает, сколько ожидающих пробуждений отменил вызов stop: true. Значение 0 означает, что ничего не было в ожидании, и повторяющийся /loop cron не отменяется stop: true. Это требует Claude Code v2.1.206 или позже.
RemoteTrigger
Имя tool:RemoteTrigger
PushNotification
Имя tool:PushNotification
REPL
Имя tool:REPL
Read.
ReportFindings
Имя tool:ReportFindings
short_summary требует Claude Code v2.1.212 или позже.
Artifact
Имя tool:Artifact
url опубликованной страницы и локальный path, который был опубликован для действия публикации, с updated, установленным в true, когда публикация переразвернула существующий артефакт, и warnings, содержащие любые рекомендации времени публикации. Действие списка возвращает строки artifacts вместо этого, с truncated, установленным, когда существует больше артефактов, чем запрошенный лимит. На списках, чья область не "mine", каждая строка содержит rel, отмечающий, владеет ли пользователь артефактом или он был с ними поделён, и scope вывода записывает, какая область, отличная от по умолчанию, произвела список; оба отсутствуют на списках по умолчанию.
Projects
Имя tool:Projects
method, отражающему входные данные. project_read возвращает небольшие текстовые документы встроенными в content и записывает более крупные документы в путь local_file вместо этого; project_search возвращает RAG hits с rag: true, когда индекс проекта доступен, и возвращается к списку пути docs в противном случае.
ReadMcpResourceDir
Имя tool:ReadMcpResourceDirTool
"inode/directory"; error содержит понятное для человека сообщение, когда сервер не смог перечислить директорию.
RefreshMcpTools
Имя tool:RefreshMcpTools
refreshed означает, что переопрошенный список tools был применён, error означает, что переопрос не удался и предыдущий набор tools был сохранён, и not_connected означает, что сервер не имеет живого соединения для опроса.
ShowOnboardingRolePicker
Имя tool:ShowOnboardingRolePicker
role, когда они выбрали чип роли или ввели один, и dismissed: true, когда они закрыли средство выбора. Пустой объект означает, что пользователь одобрил вызов без выбора роли.
McpOutput
Имя tool: динамические имена MCP tools видаmcp__<server>__<tool>
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
Информация о доступной команде.
ModelInfo
Информация о доступной модели.
AgentInfo
Информация о доступном подагенте, который может быть вызван через tool Agent.
McpServerStatus
Статус подключённого MCP сервера.
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.
Usage
Статистика использования токенов. Это тип BetaUsage из @anthropic-ai/sdk.
BetaServerToolUsage, BetaIterationsUsage и BetaOutputTokensDetails определены в @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.
CallToolResult
Тип результата MCP tool (из @modelcontextprotocol/sdk/types.js). structuredContent это объект JSON, который может быть возвращён вместе с content, включая блоки изображений. См. Возврат структурированных данных.
SDKMcpResourceLink
Один файл, который MCP tool вернул по ссылке. Claude Code создаёт каждую запись из блока resource_link в результате tool и доставляет список как 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 держит серверы, предоставленные плагинами, работающими. Требует Agent SDK v0.3.210 или позже.
- Серверы, которые вызов называет: за исключением встроенных серверов, которые CLI запустил при запуске, Claude Code заменяет работающий сервер только когда его конфигурация отличается от переданной вами.
- Встроенные серверы, которые 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 и фоновые подагенты. Для поля ambient см. SDKTaskStartedMessage, которое его определяет и его требование версии.
tool_result для этого вызова содержит только заполнитель и реальный результат вызова приходит в этом уведомлении. Сопоставьте уведомление с вызовом с помощью tool_use_id. На уведомлении completed, resource_links перечисляет файлы, которые tool вернул по ссылке как записи SDKMcpResourceLink, с теми же ограничениями 50-ссылок и 64 KiB, что и tool_use_result.resourceLinks. Claude Code опускает resource_links, когда результат не имел ссылок и на уведомлениях для задач, которые не являются вызовами MCP tool. resource_links требует Agent SDK v0.3.257 или позже.
Claude Code добавляет уведомление к каждому уведомлению задачи, которое он отправляет модели, за исключением доставок с меткой подвида scheduled-trigger, которые несут вместо этого фреймворк назначенной задачи. Уведомление указывает, что не произошло никакого взаимодействия с человеком, поэтому модель не рассматривает уведомление как инструкцию пользователя или одобрение.
Чтобы обнаружить ход уведомления задачи, проверьте origin.kind === "task-notification" на SDKUserMessage или SDKResultMessage вместо сопоставления текста уведомления. Читайте subkind из того же поля, если вам нужно знать, что его вызвало. До v2.1.205 Claude Code оставлял уведомление на уведомлениях, которые приходили, пока сессия была неактивна.
SDKToolUseSummaryMessage
Резюме использования tool в диалоге.
SDKHookStartedMessage
Выдаётся, когда hook начинает выполняться.
Claude Code доставляет это сообщение, SDKHookProgressMessage и SDKHookResponseMessage в поток сообщений немедленно, включая во время выполнения hook SessionStart или Setup во время запуска сессии. Claude Code v2.1.169 через v2.1.203 доставляли эти сообщения в одном пакете после завершения hook SessionStart или Setup; v2.1.204 восстановил живую доставку.
SDKHookProgressMessage
Выдаётся во время выполнения hook с выводом stdout/stderr.
SDKHookResponseMessage
Выдаётся, когда hook завершает выполнение.
SDKToolProgressMessage
Выдаётся периодически во время выполнения tool для указания прогресса.
tool_progress каждые 30 секунд с heartbeat: true. Каждый heartbeat содержит имя tool и прошедшие секунды, поэтому вы можете отличить долгоживущий вызов от зависшей сессии. Claude Code не выдаёт heartbeats для вызовов tool внутри подагента. Поле heartbeat требует Agent SDK v0.3.214 или позже. До v2.1.257 Claude Code не выдавал heartbeats для вызова Agent tool на переднем плане либо.
На сообщениях tool_progress для tool Agent, кроме heartbeats, subagent_type называет работающий тип подагента, такой как general-purpose. subagent_retry присутствует, пока этот подагент ждёт отката ошибки API, такой как ограничение скорости или перегрузка, с одним сообщением на попытку повтора. Оба поля требуют Agent SDK v0.3.214 или позже.
Чтобы отобразить индикатор повтора из subagent_retry:
- Отслеживайте индикатор по
parent_tool_use_id, который уникален для каждого подагента.tool_use_idсовместно используется параллельными подагентами из одного хода ассистента, поэтому отслеживание по нему позволило бы обновлению одного подагента очистить индикатор другого. - Очистите индикатор, когда позже приходит
tool_progressдля того жеparent_tool_use_idбезsubagent_retryи безheartbeat: true, или когда приходит сообщение результата tool. Кадры с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".
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означает, что задача выполняется на переднем плане, и вызов tool, который её запустил, остаётся заблокированным до тех пор, пока задача не завершится или не переместится в фоновый режим.spawn_depth: Claude Code устанавливает его только на задачах"local_agent". Подагент, который основной поток запустил, имеет глубину1. Подагент, который подагент глубины1запустил, имеет глубину2, и так далее.
is_backgrounded: true, потому что Claude Code запускает каждый возобновлённый подагент в фоне. Когда задача на переднем плане позже переместится в фоновый режим, Claude Code сообщает новое значение is_backgrounded в сообщении task_updated вместо отправки второго task_started.
SDKTaskProgressMessage
Выдаётся периодически во время выполнения подагента или фоновой задачи. Поле summary заполняется только когда включён agentProgressSummaries.
SDKTaskUpdatedMessage
Выдаётся, когда состояние фоновой задачи изменяется, например, когда она переходит из running в completed. Объедините patch в вашу локальную карту задач, индексированную по task_id. Поле end_time это временная метка Unix epoch в миллисекундах, сравнимая с Date.now().
SDKBackgroundTasksChangedMessage
Выдаётся всякий раз, когда набор активных фоновых задач изменяется: задача начинается, завершается, убивается, задача на переднем плане переводится в фоновый режим, или поле description или ambient задачи изменяется.
Массив tasks это полный активный набор. Замените любой кэшированный набор каждым payload вместо сопряжения событий task_started и task_notification, поэтому следующее изменение членства исправит любое событие, которое вы пропустили.
Порядок относительно этих событий для каждой задачи не определён, поэтому не коррелируйте два потока.
Ничего не выдаётся при запуске. Сбросьте на пустой набор всякий раз, когда процесс CLI сессии запускается или перезапускается, и позвольте следующему изменению членства переполнить его.
Когда вы отправляете повторный запрос управления initialize работающей сессии, такой как с reinitialize() после разрыва транспорта, Claude Code следует ответу снимком текущего активного набора, даже когда он пуст. Переподключающийся хост поэтому узнаёт, что работает, без ожидания следующего изменения членства. До Agent SDK v0.3.239 Claude Code не отправлял снимок после повторного initialize.
Требуется Claude Code v2.1.203 или позже.
SDKThinkingTokensMessage
Выдаётся во время создания Claude блока мышления, включая отредактированный. estimated_tokens это текущая оценка токенов мышления, сгенерированных до сих пор в текущем блоке, и estimated_tokens_delta это приращение, переносимое этим кадром. Используйте эти оценки для отображения прогресса.
Когда модель или провайдер сообщает разбивку, окончательный подсчёт для цикла агента верхнего уровня это usage.output_tokens_details.thinking_tokens сообщения результата, который не включает токены подагентов.
Требуется Claude Code v2.1.153 или позже.
SDKFilesPersistedEvent
Выдаётся, когда контрольные точки файлов сохраняются на диск.
SDKRateLimitEvent
Выдаётся, когда сессия встречает ограничение скорости.
errorCode это "credits_required", отклонение происходит от подписки claude.ai, чьё включённое использование исчерпано, и сессия не может продолжаться, пока пользователь не купит кредиты использования. canUserPurchaseCredits указывает, может ли аутентифицированный пользователь купить кредиты для учётной записи, и hasChargeableSavedPaymentMethod указывает, есть ли сохранённый способ оплаты в файле. Все три поля отсутствуют на событиях ограничения скорости, которые не являются отклонениями, требующими кредитов. Требуется Claude Code v2.1.181 или позже.
SDKLocalCommandOutputMessage
Claude Code не выдаёт этот тип сообщения. Когда вы отправляете команду, такую как /context или /usage, как запрос, её вывод приходит как SDKAssistantMessage.
SDKCommandsChangedMessage
Выдаётся, когда набор доступных команд изменяется во время сессии, например, когда Claude Code обнаруживает skills при входе агента в подпапку. Массив commands это полный обновлённый список, поэтому замените любой кэшированный список команд этим payload. Вызов supportedCommands() после этого сообщения возвращает тот же обновлённый список, потому что метод отслеживает последний push; это требует Agent SDK v0.3.216 или позже. В более ранних версиях SDK supportedCommands() возвращает снимок, захваченный при инициализации, и никогда не отражает изменения во время сессии.
SDKPromptSuggestionMessage
Выдаётся после хода, когда promptSuggestions включён и Claude Code сгенерировал предложение для этого хода. Содержит предсказанный следующий пользовательский запрос. Для ходов, которые не получают никаких, см. Когда Claude Code пропускает предложения.
SDKConversationResetMessage
Выдаётся, когда диалог сессии заменяется без завершения сессии. В вызове query() только /clear и его псевдонимы производят это сообщение. Смонтируйте пустой транскрипт под new_conversation_id и отбросьте любой кэшированный заголовок сессии.
SDKConversationResetMessage в Claude Code v2.1.203 и позже. До v2.1.203, SDKMessage ссылалась на тип без его объявления, поэтому сужение на type === "conversation_reset" не прошло проверку типов, когда skipLibCheck был отключён.
AbortError
Пользовательский класс ошибки для операций отмены.
AbortError это единственный класс ошибки в типизированном API SDK. Другие сбои, такие как выход процесса Claude Code или неудача при запуске, отклоняют итерацию сообщения с ошибками, которые не несут класс SDK для сопоставления. Troubleshooting ключает эти ошибки по сообщению, с причиной и исправлением для каждого.
Конфигурация 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, без участия модели; см. SandboxSettings.
В примере ниже isCommandAuthorized служит заместителем для проверки авторизации, которую вы определяете.
См. также
- Обзор SDK - Общие концепции SDK
- Справочник Python SDK - Документация Python SDK
- Справочник CLI - Интерфейс командной строки
- Общие рабочие процессы - Пошаговые руководства