Skip to main content

Установка

SDK поставляется с нативным бинарным файлом Claude Code для вашей платформы в качестве опциональной зависимости, такой как @anthropic-ai/claude-agent-sdk-darwin-arm64. Большинство установок не требуют отдельной установки Claude Code. Версия SDK отслеживает версию упакованного Claude Code. SDK v0.3.191 поставляется с Claude Code v2.1.191, поэтому функция на этой странице, которая требует определённую версию Claude Code, нуждается в выпуске SDK с тем же номером патча или позже. Если ваш менеджер пакетов пропускает опциональные зависимости, SDK выбросит ошибку Native CLI binary for <platform>-<arch> not found; установите pathToClaudeCodeExecutable на отдельно установленный бинарный файл claude вместо этого.Если ваш менеджер пакетов не применяет поле libc npm, как это делает Yarn 1.x, вы получите оба пакета платформы glibc и musl на Linux, примерно удвоив размер установки. На Agent SDK v0.2.141 или позже SDK всё ещё запускает правильный вариант. Чтобы освободить место в образе контейнера, удалите пакет платформы, который не соответствует libc, где работает ваше приложение; для среды выполнения glibc на x64 это rm -rf node_modules/@anthropic-ai/claude-agent-sdk-linux-x64-musl. На машине разработки удаление временное, так как Yarn переустанавливает пакет при следующем изменении зависимостей.

Компиляция в единый исполняемый файл

Когда вы компилируете приложение в единый исполняемый файл с помощью bun build --compile, SDK не может разрешить упакованный бинарный файл CLI во время выполнения. require.resolve не работает внутри виртуальной файловой системы $bunfs скомпилированного исполняемого файла, поэтому SDK выбросит ошибку Native CLI binary for <platform>-<arch> not found. Чтобы обойти это, встройте бинарный файл платформы как файловый ресурс, извлеките его на реальный путь при запуске с помощью extractFromBunfs() и передайте этот путь в pathToClaudeCodeExecutable. Вспомогательная функция extractFromBunfs() требует @anthropic-ai/claude-agent-sdk версии 0.3.144 или позже. Пример ниже выполняет сборку для macOS на Apple Silicon:
extractFromBunfs() копирует встроенный бинарный файл из виртуальной файловой системы скомпилированного исполняемого файла в каталог временных файлов для каждого пользователя и возвращает реальный путь. Вне скомпилированного исполняемого файла он возвращает входной путь без изменений, поэтому тот же код работает в разработке без модификации. Каждый скомпилированный исполняемый файл содержит бинарный файл одной платформы. Совместите пакет платформы в импорте с вашим --target:
  • Для кросс-компиляции установите пакет несовпадающей платформы, например npm install @anthropic-ai/claude-agent-sdk-linux-x64 --force.
  • На Windows подпуть бинарного файла — это claude.exe, например @anthropic-ai/claude-agent-sdk-win32-x64/claude.exe.

Импортируйте запись /core при объединении Agent SDK

Если ваше приложение объединяет Agent SDK вместе со своими собственными зависимостями, импортируйте из @anthropic-ai/claude-agent-sdk/core вместо корня пакета. Запись /core требует TypeScript Agent SDK версии 0.3.282 или позже, и её типы требуют TypeScript 5.0 или позже. Запись /core экспортирует то же самое query(), startup(), tool(), createSdkMcpServer() и resolveSettings(), что и корневая запись, вместе с функциями, которые переименовывают, помечают и удаляют сеансы, AbortError, константы времени выполнения и каждый тип. Она не добавляет имена своего собственного. Чтобы сохранить код, который загружает ваше приложение, небольшим, /core опускает некоторые корневые экспорты, включая prewarm(), класс InMemorySessionStore и вспомогательные функции, которые перечисляют, читают, разветвляют, импортируют и суммируют сеансы. Если вам нужна одна из них, используйте корневую запись вместо этого. Корневая запись встраивает свои собственные копии zod и @modelcontextprotocol/sdk. Запись /core импортирует их из вашего node_modules в диапазонах, которые объявляют peerDependencies Agent SDK, поэтому пакет, который уже их включает, не несёт вторую копию. Импортируйте либо из корня, либо из /core в данном процессе, но не из обоих: это отдельные пакеты, и загрузка обоих даёт вам две копии классов и состояния Agent SDK.

Функции

query()

Основная функция для взаимодействия с Claude Code. Создаёт асинхронный генератор, который потоком передаёт сообщения по мере их поступления.

Параметры

Возвращаемое значение

Возвращает объект Query, который расширяет AsyncGenerator<SDKMessage, void> дополнительными методами.

startup()

Предварительно разогревает подпроцесс CLI, запуская его и завершая инициализационное рукопожатие до того, как промпт будет доступен. Возвращённый дескриптор WarmQuery принимает промпт позже и записывает его в уже готовый процесс, поэтому первый вызов query() разрешается без затрат на запуск подпроцесса и инициализацию в строке. Если вы ещё не знаете рабочий каталог сессии, используйте вместо этого prewarm().

Параметры

Возвращаемое значение

Возвращает Promise<WarmQuery>, который разрешается после того, как подпроцесс запущен и завершил инициализационное рукопожатие.

Пример

Вызовите startup() рано, например при загрузке приложения, затем вызовите .query() на возвращённом дескрипторе, когда промпт будет готов. Это выносит запуск подпроцесса и инициализацию из критического пути.

prewarm()

Альфа. Запускает процесс Claude Code как запасной до того, как вы узнаете, какую сессию он будет обслуживать, чтобы вы могли привязать его к сессии позже с помощью claim(). Используйте его в приложении, которое загружается до того, как пользователь выберет папку. Требуется TypeScript Agent SDK v0.3.282 или позже. prewarm() завершает то же инициализационное рукопожатие, что и startup(), при этом процесс ожидает в options.cwd, если вы его задали, а в противном случае — в приватном временном каталоге внутри вашего каталога конфигурации Claude Code. Рабочий каталог сессии, её хуки SessionStart, её stdio MCP-серверы, а также её CLAUDE.md и контекст git ждут привязки. Запасной процесс занимает примерно 230–260 МБ памяти во время ожидания. Если ваш spawnClaudeCodeProcess запускает Claude Code на другой машине или в контейнере, установите в options.cwd каталог, который там существует, чтобы запасной процесс ждал в нём.
options и initializeTimeoutMs означают то же самое, что и для startup(), за исключением того, что options.cwd задаёт только каталог, в котором ждёт запасной процесс. Промис разрешается с SpareProcess после того, как процесс завершил инициализационное рукопожатие. prewarm() выбрасывает исключение, если options устанавливает resume, continue или forkSession, потому что у запасного процесса ещё нет сессии. Всё, что привязка не может установить, например mcpServers, hooks, canUseTool, settingSources, systemPrompt и plugins, зафиксировано на время жизни запасного процесса, поэтому держите один запасной процесс на каждый отдельный набор этих параметров и выполняйте предварительный разогрев снова, когда они изменяются.

Пример

Выполните предварительный разогрев при загрузке приложения, затем привяжите запасной процесс, когда пользователь начинает сессию:

tool()

Создаёт типобезопасное определение инструмента MCP для использования с MCP-серверами SDK.

Параметры

ToolAnnotations

Определено в @modelcontextprotocol/sdk/types.js. Все поля являются опциональными подсказками; клиенты не должны полагаться на них при принятии решений, связанных с безопасностью.

createSdkMcpServer()

Создаёт экземпляр MCP-сервера, который работает в том же процессе, что и ваше приложение.

Параметры

listSessions()

Обнаруживает и перечисляет прошлые сессии с облегчёнными метаданными. Фильтруйте по каталогу проекта или перечисляйте сессии во всех проектах.

Параметры

Тип возврата: SDKSessionInfo

Пример

Выведите 10 самых последних сессий для проекта. Результаты отсортированы по lastModified в убывающем порядке, поэтому первый элемент является самым новым. Опустите dir для поиска во всех проектах.

getSessionMessages()

Читает сообщения пользователя и ассистента из транскрипта прошлой сессии.

Параметры

Тип возврата: SessionMessage

Пример

getSessionInfo()

Читает метаданные одной сессии по ID без сканирования всего каталога проекта.

Параметры

Возвращает SDKSessionInfo или undefined, если сессия не найдена.

renameSession()

Переименовывает сессию, добавляя запись пользовательского названия. Повторные вызовы безопасны; действует самое последнее название.

Параметры

tagSession()

Помечает сессию тегом. Передайте null для очистки тега. Повторные вызовы безопасны; действует самый последний тег.

Параметры

forkSession()

Копирует транскрипт сессии в новую сессию, чтобы вы могли направить диалог в другую сторону, а исходная сессия осталась без изменений. Чтобы создать ответвление от более ранней точки диалога, передайте upToMessageId.

Параметры

Возвращает { sessionId } — UUID новой сессии. Передайте его как resume, чтобы продолжить ответвление. Ответвление не включает файловые чекпоинты исходной сессии, поэтому его нельзя откатить к чекпоинту, созданному до ответвления. forkSession() выбрасывает исключение, когда:
  • sessionId не является UUID
  • сессия не найдена или не содержит сообщений
  • upToMessageId не соответствует ни одному сообщению в транскрипте

resolveSettings()

Вычисляет действующие настройки Claude Code для заданного каталога, используя тот же механизм объединения, что и CLI, без запуска Claude CLI. Используйте эту функцию, чтобы проверить, какую конфигурацию увидит вызов query(), прежде чем его выполнять.
Эта функция находится в альфа-версии, и её API может измениться до стабилизации.
Снимок отличается от того, что применяет живая сессия query():
  • policyHelper: resolveSettings() читает источники MDM, включая macOS plist и Windows HKLM/HKCU, но не выполняет настроенный администратором подпроцесс policyHelper.
  • Настройки, управляемые сервером: resolveSettings() не загружает настройки, управляемые сервером. Передайте их как options.serverManagedSettings, чтобы включить их.
  • defaultMode: снимок возвращает permissions.defaultMode как есть из каждого уровня, поэтому он может включать значения 'auto' и 'bypassPermissions' из настроек проекта и локальных настроек, которые живая сессия игнорирует.

Параметры

resolveSettings() принимает один объект параметров. Все поля опциональны.

Тип возврата: ResolvedSettings

resolveSettings() возвращает объект, описывающий объединённые настройки и источник, который предоставил каждый ключ.

Пример

Пример ниже вычисляет настройки для каталога проекта и выводит источник, который задаёт период очистки. На машине, где ни один файл настроек не устанавливает cleanupPeriodDays, обе выведенные строки показывают undefined в качестве значения, что является ожидаемым результатом, а не ошибкой.

Типы

Options

Объект конфигурации для функции query().

Обработка медленных или зависших ответов API

Подпроцесс CLI читает несколько переменных окружения, которые управляют таймаутами API и обнаружением зависаний. Передавайте их через параметр env:
  • API_TIMEOUT_MS: таймаут каждого запроса клиента Anthropic в миллисекундах. По умолчанию 600000. Применяется к основному циклу и ко всем субагентам.
  • CLAUDE_CODE_MAX_RETRIES: максимальное количество повторных попыток API. По умолчанию 10, не более 15. Каждая повторная попытка получает собственное окно API_TIMEOUT_MS. Для автоматических запусков, которым нужно пережидать более длительные сбои, задайте CLAUDE_CODE_RETRY_WATCHDOG=1: эта переменная бесконечно повторяет попытки при временных ошибках нехватки мощностей и, в Claude Code v2.1.199 или новее, повышает значение по умолчанию для других временных ошибок до 300 и снимает ограничение на эту переменную.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: сторожевой таймер зависаний для субагентов. Пока включён сторожевой таймер потока, значение по умолчанию равно CLAUDE_STREAM_IDLE_TIMEOUT_MS плюс 5 минут, что составляет 600000, если вы не увеличили эту переменную. При выключенном сторожевом таймере потока значение по умолчанию — 600000. До v2.1.257 значение по умолчанию всегда было 600000. Таймер сбрасывается при каждом событии потока. При зависании Claude Code прерывает субагента и сообщает о зависании родителю. Для фонового субагента он также помечает задачу как неудавшуюся и прикладывает частичный результат, если он есть.
  • CLAUDE_ENABLE_STREAM_WATCHDOG вместе с CLAUDE_STREAM_IDLE_TIMEOUT_MS: сторожевой таймер потока, который прерывает запрос, когда заголовки уже получены, но тело ответа перестаёт передаваться. Сторожевой таймер включён по умолчанию для всех провайдеров; задайте CLAUDE_ENABLE_STREAM_WATCHDOG=0, чтобы отключить его. CLAUDE_STREAM_IDLE_TIMEOUT_MS по умолчанию равен 300000 и не может быть меньше этого значения. О том, что Claude Code делает после прерывания в зависимости от того, насколько далеко продвинулся ответ, см. Автоматические повторные попытки. Пока сторожевой таймер ожидает ответа, который шлюз за ANTHROPIC_BASE_URL удерживает открытым с помощью keep-alive пингов, хост, задавший includePartialMessages, продолжает получать события потока ping, поэтому воспринимайте эти кадры как признак активности, а не завершайте сессию по таймауту из-за отсутствия данных. До v2.1.257 эти кадры прекращались через 5 минут после последнего реального события потока.

Объект Query

Интерфейс, возвращаемый функцией query().

Методы

applyFlagSettings()

Изменяет настройки работающей сессии без перезапуска запроса. Используйте этот метод, когда в ходе сессии нужно изменить настройку, для которой нет отдельного сеттера, например ужесточить permissions после того, как агент прочитал недоверенные входные данные. setModel() и setPermissionMode() — это отдельные сеттеры для этих двух ключей; applyFlagSettings() — общая форма, принимающая любое подмножество ключей настроек, и передача model здесь работает так же, как setModel(). В ходе сессии действуют только некоторые ключи:
  • Применяются со следующего хода: effortLevel, ultracode, permissions, hooks, skillOverrides, fastMode, agent. Переключение agent также применяет переопределение модели и хуки этого агента со следующего хода. Его системный промпт применяется со следующего хода или, в сессии, которая повторно использует записанный системный промпт, после сжатия сессии.
  • Применяются в течение текущего хода: model. Если вы переключаете model, пока Claude работает над ходом, ответ, который Claude уже генерирует, завершается на старой модели, а остальная часть хода, начиная со следующего обращения Claude Code к модели, использует новую. Субагенты сохраняют собственную модель. До v2.1.212 переключение в середине хода вступало в силу только со следующего хода.
  • Не действуют в ходе сессии: параметры системного промпта. Они определяются один раз при запуске, поэтому работающая сессия сохраняет исходное значение, хотя вызов завершается успешно. Чтобы изменить их, запустите новую сессию.
effortLevel принимает название уровня effort. Он также принимает "ultracode", что запрашивает уровень effort xhigh с включённым ultracode. applyFlagSettings() объявляет effortLevel без этого значения, поэтому в TypeScript для того же результата передавайте { ultracode: true, effortLevel: "xhigh" } или только ключ ultracode, чтобы включить ultracode при текущем уровне effort сессии. Значение ultracode требует Claude Code v2.1.203 или новее и принимается только applyFlagSettings(), но не ключом effortLevel в файле настроек. До v2.1.284 один лишь ключ ultracode также устанавливал уровень xhigh. Значения записываются в уровень настроек флагов поверх того, что встроенный параметр settings функции query() задал при запуске. Это тот же уровень, который раздел о приоритете на этой странице называет программными параметрами. Последовательные вызовы выполняют поверхностное объединение ключей верхнего уровня. Второй вызов с { permissions: {...} } заменяет весь объект permissions из предыдущего вызова, а не объединяется с ним глубоко. Чтобы сбросить ключ, заданный через applyFlagSettings(), передайте null для этого ключа. Большинство ключей затем сначала возвращаются к значению, которое параметр settings функции query() задал при запуске, а затем к источникам с более низким приоритетом. Сброшенный model возвращается к модели Claude Code по умолчанию, даже если model задан в файле настроек. Передача undefined ни на что не влияет, потому что сериализация JSON отбрасывает это значение. Помимо model, ещё три ключа сбрасывают состояние сессии вместо возврата к предыдущим значениям:
  • effortLevel: null возвращает сессию к уровню effort модели по умолчанию, а не к параметру effort функции query() или к effortLevel из файла настроек.
  • agent: null запускает основной поток без агента, начиная со следующего хода, вместо восстановления параметра agent функции query() или agent из файла настроек. Если сброшенный агент применял собственную модель, сессия возвращается к модели, определённой при запуске.
  • ultracode: null отключает ultracode, как и false, вместо восстановления значения ultracode из файла настроек. Сессия сохраняет текущий уровень effort, поэтому, чтобы изменить его, передайте effortLevel в том же вызове.
Доступен только в режиме потокового ввода — то же ограничение, что и у setModel() и setPermissionMode(). В примере ниже активная модель переключается в ходе сессии, а затем переопределение сбрасывается, так что модель возвращается к модели Claude Code по умолчанию.
applyFlagSettings() доступен только в TypeScript. Python SDK не предоставляет эквивалентного метода.

updateSettings()

Записывает один ключ из разрешённого списка в файл настроек на диске, чтобы значение сохранялось для последующих сессий, загружающих этот источник. Каждый источник принимает один ключ со строковым значением:
  • "localSettings": принимает outputStyle и объединяет его с локальным файлом настроек проекта .claude/settings.local.json. Новый стиль вступает в силу со следующего запроса сессии.
  • "userSettings": принимает effortLevel и сохраняет его как уровень effort по умолчанию для текущей модели сессии в разделе modelSettings вашего пользовательского файла настроек. Передача max ничего не записывает, потому что max действует только в рамках сессии. В любом случае работающая сессия сохраняет свой текущий уровень effort, поэтому, если вы хотите изменить и его, вызовите applyFlagSettings(). Этот источник требует TypeScript SDK v0.3.277 или новее, который включает Claude Code v2.1.277.
Вызов отклоняется, если запрос содержит любой другой ключ, если сессия работает через удалённый транспорт и если settingSources сессии исключают указанный вами источник. Удаление ключа не поддерживается.

toggleMcpServer()

Отключение сервера разрывает соединение с ним и удаляет его инструменты из сессии. Для серверов, добавленных в ходе сессии, и для внутрипроцессных серверов это зависит от версии Claude Code:
  • Сервер stdio, SSE или HTTP, добавленный в ходе сессии через setMcpServers(): удаление его инструментов требует Claude Code v2.1.285 или новее.
  • Внутрипроцессный сервер, созданный с помощью createSdkMcpServer(), независимо от того, передали ли вы его в mcpServers или через setMcpServers(): разрыв соединения с ним и удаление его инструментов требуют Claude Code v2.1.286 или новее. Отключение такого сервера также приводит к ошибке для его ещё выполняющихся вызовов инструментов, поэтому Claude сразу получает результат с ошибкой для каждого из них, не дожидаясь возврата из вашего обработчика.

WarmQuery

Дескриптор, возвращаемый startup(). Подпроцесс уже запущен и инициализирован, поэтому вызов query() на этом дескрипторе записывает промпт непосредственно в готовый процесс без задержки на запуск.

Методы

WarmQuery реализует AsyncDisposable, поэтому его можно использовать с await using для автоматической очистки.

SpareProcess

Альфа. Дескриптор, возвращаемый prewarm(): запущенный процесс Claude Code, который ещё не привязан к сессии и может быть занят один раз. Требуется TypeScript Agent SDK v0.3.282 или новее.

Члены

options.cwd обязателен. При привязке также можно задать additionalDirectories, model, permissionMode, maxThinkingTokens, наложение настроек флагов в settings, appendSystemPrompt, title, agents и токены для отдельной сессии в env. Claude Code может отказать в привязке, например для несуществующей папки или папки, настройки проекта которой задают env, agent или model. После отказа промпт, который claim() уже отправил, получает результат с ошибкой, текст которой начинается с not_claimed, после чего возвращённый запрос выбрасывает исключение. Оберните цикл запроса в блок try, чтобы продолжить работу после исключения. Когда claimed отклоняется с сообщением, начинающимся с option_not_applied, сессия работает без запрошенных вами model или maxThinkingTokens. После любого другого отклонения ваш промпт не выполнялся, поэтому запустите сессию через query().

SDKControlInitializeResponse

Тип возвращаемого значения initializationResult(). Содержит данные инициализации сессии.
hooks_applied сообщает, зарегистрировал ли Claude Code хуки hooks, переданные в запросе initialize. SDK отправляет этот запрос один раз при запуске сессии и повторно при каждом вызове reinitialize(). Поле требует Agent SDK v0.3.238 или новее. Claude Code опускает это поле, если запрос не содержал хуков. Если запрос содержал хуки, значение зависит от того, является ли запрос первой инициализацией сессии, а для повторной — от того, каким путём он достиг сессии:
  • true: Claude Code зарегистрировал хуки. Первая инициализация сессии возвращает это значение. Повторная инициализация, отправленная через stdin CLI, также возвращает true. В этом случае хуки из нового запроса заменяют зарегистрированные ранее.
  • false: Claude Code проигнорировал хуки. Повторная инициализация, отправленная в удалённую сессию, возвращает это значение, поэтому второй клиент, присоединившийся к сессии, не может заменить хуки, зарегистрированные первым клиентом.
До Agent SDK v0.3.238 ответ никогда не содержал этого поля, а Claude Code игнорировал hooks при каждой повторной инициализации. Поле запроса sdkMcpServerManifests и поле ответа sdk_mcp_manifests_parked предназначены для внутрипроцессных SDK MCP-серверов, созданных вами с помощью createSdkMcpServer(). Ваше приложение не задаёт и не читает ни одно из этих полей. claude_code_version — версия Claude Code процесса, выполняющего ходы сессии. Это то же значение, что содержится в init-сообщении SDKSystemMessage, поэтому вы можете узнать версию CLI до первого хода.
  • Поле требует Agent SDK v0.3.296 или новее, который включает Claude Code v2.1.296.
  • Если поле равно undefined и вы задали pathToClaudeCodeExecutable, укажите в нём Claude Code v2.1.296 или новее.
Ответ всегда сообщает fast_mode_state, а когда что-то блокирует быстрый режим, вместе с ним в fast_mode_disabled_reason передаётся код причины, чтобы вы могли объяснить заблокированное состояние, а не вычислять доступность заново. Оба поведения требуют Claude Code v2.1.219 или новее. До v2.1.219 ответ опускал fast_mode_state, когда быстрый режим был недоступен, и никогда не содержал причины. Коды причин и их значения см. в описании fast_mode_disabled_reason в сообщении с результатом. Обёртка управляющего ответа на успешный initialize также содержит массив pending_permission_requests. Это поле находится в самой обёртке ответа, а не в данных SDKControlInitializeResponse выше. Каждая запись — это полное сообщение control_request той же структуры { type: "control_request", request_id, request }, которую сессия передаёт для запросов разрешений во время работы. Массив перечисляет запросы разрешений, которые этот процесс Claude Code отправил и которые ещё не разрешены. SDK читает массив за вас и передаёт каждую запись в ваш колбэк canUseTool — так же, как при повторной доставке, которую reinitialize() запускает после разрыва транспорта. Обрабатывайте повторяющиеся ID запросов идемпотентно, потому что запись может повторять запрос, который колбэк уже получил до обрыва соединения. Массив всегда присутствует в успешном ответе на initialize и пуст, если у этого процесса нет неразрешённых запросов разрешений. Требуется Claude Code v2.1.268 или новее. Более ранние версии могли опускать это поле, поэтому, если вы разбираете протокол самостоятельно, считайте отсутствие поля признаком более старого CLI, а не доказательством того, что ожидающих запросов нет.

SDKControlInterruptResponse

Квитанция о прерывании: значение, которым разрешается interrupt() в CLI, объявляющем возможность interrupt_receipt_v1 в SDKSystemMessage.capabilities. Требуется Claude Code v2.1.205 или новее. Более ранние CLI отвечают на прерывание пустыми данными об успехе, поэтому interrupt() разрешается значением undefined.
still_queued перечисляет UUID сообщений пользователя, ожидавших обработки в момент поступления прерывания: сообщения, всё ещё находящиеся в очереди, а также сообщения, которые Claude Code уже забрал из очереди для следующего хода. После начала первого хода сессии Claude Code обрабатывает перечисленные сообщения после прерывания, если вы предварительно их не отмените, и может объединить несколько из них в один ход. Если вы прерываете до начала первого хода, Claude Code прерывает этот ход сразу после его начала, и перечисленные сообщения в этом ходе не получают ответа. Используйте квитанцию, чтобы решить, нужно ли что-то отправить повторно. Перечисленное сообщение, которое вы не отменили, попадает в диалог независимо от того, получит ли оно ответ, поэтому его повторная отправка доставит его Claude дважды. Интерпретируйте список с учётом следующих оговорок:
  • В списке появляются только сообщения, поставленные в очередь с UUID. Пустой массив не означает, что больше ничего не будет выполнено.
  • В списке есть только сообщения основного потока. Сообщения, адресованные субагенту, в него не входят.
  • Список может содержать UUID, которые ваш клиент никогда не отправлял, например триггеры запланированных задач. Игнорируйте незнакомые UUID, а не считайте их ошибкой.
Клиент, который работает с управляющим протоколом CLI напрямую, а не через interrupt(), может задать cancel_queued: true в управляющем запросе interrupt. Claude Code v2.1.219 и новее объявляет поддержку с помощью возможности interrupt_cancel_queued_v1 в SDKSystemMessage.capabilities; более старые CLI игнорируют это поле, и сообщения в очереди выполняются как обычно. Такое прерывание также отменяет все сообщения, которые иначе были бы перечислены в still_queued: квитанция перечисляет их в cancelled, still_queued пуст, и ни одно из них не выполняется. На список cancelled распространяются те же оговорки, что и на still_queued. Метод interrupt() никогда не отправляет cancel_queued, поэтому квитанции, которыми он разрешается, не содержат cancelled. Квитанция — это снимок, сделанный в момент обработки прерывания, и при чистом прерывании она приходит раньше SDKResultMessage прерванного хода. Читайте квитанцию, а не проверяйте очередь после этого результата: цикл сразу запускает следующий ход из очереди, поэтому очередь, которую вы проверяете после результата, уже изменилась.

SDKControlGetContextUsageResponse

Тип возвращаемого значения getContextUsage(). При значении detail по умолчанию это те же данные, которые Claude Code отображает для команды /context в интерактивной сессии, поэтому наряду с количеством токенов они содержат поля для отображения, такие как color и gridRows, которые Claude Code использует для отрисовки сетки использования /context. Необязательный аргумент detail метода определяет, как Claude Code подсчитывает каждую категорию. Аргумент detail требует Agent SDK v0.3.257 или новее.
  • 'full': значение по умолчанию. Claude Code подсчитывает каждую категорию с помощью API-запросов подсчёта токенов. Эти запросы не появляются в потоке сообщений, поэтому отслеживание стоимости, основанное на чтении потока, их не увидит. В Anthropic API подсчёт токенов не тарифицируется.
  • 'summary': передайте { detail: 'summary' }, чтобы получить ответ на основе данных об использовании из последнего ответа и локальных оценок. Запросы подсчёта токенов не отправляются, а значения по категориям являются приблизительными.
Если вместо вызова метода вы отправляете /context как промпт, Claude Code прикрепляет данные SDKContextUsage к полю context_usage сообщения ассистента, которое доставляет результат. Это поле требует Agent SDK v0.3.232 или новее.
Распределение токенов читайте из полей-коллекций:
  • categories содержит итоговые значения по категориям. Поле kind каждой записи классифицирует строку с помощью тех же значений, что и SDKContextUsageCategory. Классифицируйте строки по нему, а не по отображаемому name. Поле требует Agent SDK v0.3.268 или новее.
  • mcpTools и agents распределяют токены по отдельным MCP-инструментам и субагентам.
  • memoryFiles перечисляет каждый загруженный файл памяти с его стоимостью.
  • skills.skillFrontmatter распределяет токены списка скиллов по каждому включённому скиллу. Значения для отдельных скиллов измеряют запись каждого скилла в списке в том виде, в каком Claude Code её фактически отправляет, и она может быть короче полного frontmatter скилла. Сравните skills.totalSkills с skills.includedSkills, чтобы узнать, попали ли в список все обнаруженные скиллы.
totalTokens — текущее использование контекста сессии, а maxTokens — окно, относительно которого измеряется это использование. Это контекстное окно модели или меньшее окно автосжатия, если оно применяется. rawMaxTokens содержит то же значение, что и maxTokens, а percentage — это totalTokens в виде округлённого процента от этого окна. apiUsage содержит данные об использовании из последнего ответа API, а не накопленный итог по сессии. Claude Code не заполняет необязательные диагностические поля deferredBuiltinTools, systemTools и systemPromptSections, поэтому ожидайте, что они будут отсутствовать, хотя тип их объявляет.

SDKControlReadFileResponse

Тип возвращаемого значения readFile().
contents содержит текст файла или данные в base64, если вы запросили encoding: 'base64'; в этом случае поле encoding ответа имеет значение 'base64'. absPath — разрешённый абсолютный путь. truncated устанавливается, если файл был длиннее ограничения maxBytes и содержимое было обрезано на этом пределе.

Что может читать readFile()

readFile() отдаёт более узкий набор файлов, чем инструмент Read:
  • Обычный файл внутри одного из рабочих каталогов сессии, таких как cwd и additionalDirectories
  • Некоторые собственные файлы Claude Code для сессии, например результаты инструментов
Правила запрета и запроса для Read по-прежнему блокируют соответствующий путь, а широкое правило разрешения для Read не открывает readFile() доступ к остальной файловой системе. Для всего остального вызов разрешается значением null.

SDKControlReloadPluginsResponse

Тип возвращаемого значения reloadPlugins().
Поля-коллекции описывают сессию после вызова:
  • commands, agents и mcpServers: команды, субагенты и статусы MCP-серверов сессии в тех же структурах, которые возвращают supportedCommands(), supportedAgents() и mcpServerStatus(). supportedAgents() продолжает возвращать список, полученный при инициализации, поэтому набор после перезагрузки читайте из agents здесь
  • plugins: каждый загруженный плагин с его name и path установки. version повторяет то, что объявлено в манифесте плагина, и контролируется автором плагина, поэтому проверяйте его, прежде чем доверять. Поле опускается, если манифест не объявляет версию
  • error_count: количество ошибок при загрузке плагинов
Передайте { holdOnCacheImpact: true } в reloadPlugins(), чтобы задержать перезагрузку, которая сделала бы недействительным кэш промптов диалога, вместо её применения. Claude Code выполняет ту же проверку, которую интерактивная команда /reload-plugins делает, прежде чем предупредить о стоимости для кэша. Параметр требует Agent SDK v0.3.268 или новее. Исполняемый файл Claude Code старше v2.1.268, например тот, на который вы указываете через pathToClaudeCodeExecutable, игнорирует этот параметр и применяет перезагрузку. Если вы передаёте этот параметр, читайте held, чтобы узнать, что произошло:
  • true: перезагрузка не была применена, и поля-коллекции описывают сессию в её текущем состоянии. cache_impact сообщает, что изменило бы применение. Чтобы всё равно применить перезагрузку, вызовите reloadPlugins() снова без этого параметра.
  • false: проверка не обнаружила влияния на кэш, и перезагрузка была применена.
  • Отсутствует: вы не передали этот параметр, или исполняемый файл Claude Code старше v2.1.268 и применил перезагрузку.
cache_impact присутствует только вместе с held: true. mcp_servers_added и mcp_servers_removed называют MCP-серверы плагинов, которые перезагрузка зарегистрировала бы или удалила, в виде имён с областью действия plugin:<plugin>:<server>. Эти имена задаются авторами плагинов, поэтому проверяйте их перед отображением. lsp_tool_change сообщает, добавило бы или удалило применение инструмент LSP, либо равно null, если не произошло бы ни того, ни другого. Формы с may- означают, что проверка не смогла полностью увидеть ожидающий набор плагинов.

SDKControlReloadSkillsResponse

Тип возвращаемого значения reloadSkills().
skills перечисляет скиллы, доступные после перезагрузки, в той же структуре SlashCommand, которую возвращает supportedCommands().

SDKControlReloadOutputStylesResponse

Тип возвращаемого значения reloadOutputStyles().
available_output_styles перечисляет имена встроенных и пользовательских стилей вывода, доступных после перезагрузки.

SDKControlMcpReadResourceResponse

Тип возвращаемого значения readMcpResource(), содержащий результат resources/read MCP-сервера. Требуется TypeScript Agent SDK v0.3.280 или новее.
Передайте в readMcpResource() имя сервера в том виде, в каком его сообщает mcpServerStatus(), и URI ui://, например ui.resourceUri, который инструмент объявляет в своём _meta. Вызов отклоняется для любой другой схемы URI, для SDK MCP-сервера, который ваше приложение размещает само, и для неподключённого сервера. Метод доступен, когда capabilities init-сообщения включают mcp_read_resource_v1. Каждая запись contents — это один элемент содержимого в том виде, в каком его отправил сервер, за исключением ключей _meta с префиксом com.anthropic/, который зарезервирован для Claude Code. blob содержит данные в base64 для бинарного элемента, а _meta — собственное поле _meta элемента, в которое сервер MCP Apps помещает ui.csp и ui.permissions ресурса. Содержимое представляет собой недоверенный сторонний HTML, поэтому отображайте его в песочнице.

AgentDefinition

Конфигурация субагента, определённого программно.

AgentMcpServerSpec

Определяет MCP-серверы, доступные субагенту. Может быть именем сервера (строкой, ссылающейся на сервер из конфигурации mcpServers родителя) или встроенной записью конфигурации сервера, сопоставляющей имена серверов с конфигурациями.
Где McpServerConfigForProcessTransport — это McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig.

SettingSource

Определяет, из каких источников конфигурации в файловой системе SDK загружает настройки.

Поведение по умолчанию

Если settingSources не указан или равен undefined, query() загружает те же настройки из файловой системы, что и Claude Code CLI: пользовательские, проектные и локальные. Сведения о входных данных, которые считываются независимо от этого параметра, и о том, как их отключить, см. в разделе Что не контролирует settingSources.

Зачем использовать settingSources

Отключение настроек из файловой системы:
Загрузка только определённых источников настроек:
Чтобы загрузить инструкции проекта из CLAUDE.md, включите "project" в settingSources. О том, как загрузка CLAUDE.md взаимодействует с параметрами системного промпта, см. в разделе Изменение системных промптов.

Приоритет настроек

Когда загружается несколько источников, настройки объединяются в следующем порядке приоритета (от высшего к низшему):
  1. Локальные настройки (.claude/settings.local.json)
  2. Настройки проекта (.claude/settings.json)
  3. Пользовательские настройки (~/.claude/settings.json)
Программные параметры, такие как agents, allowedTools и settings, переопределяют пользовательские, проектные и локальные настройки из файловой системы. Управляемые настройки политик имеют приоритет над программными параметрами.

PermissionMode

CanUseTool

Тип пользовательской функции разрешений для управления использованием инструментов. Эта функция заменяет в SDK интерактивный запрос разрешения: она вызывается только тогда, когда процесс оценки разрешений приводит к запросу. Вызовы инструментов, уже одобренные записью allowedTools, разрешающим правилом в настройках или режимом разрешений, например acceptEdits или bypassPermissions, никогда её не вызывают. Чтобы контролировать каждый вызов инструмента, используйте вместо этого хук PreToolUse. Разрешающее правило не одобряет заранее действия, которые не одобряются автоматически ни в одном режиме; о том, какие из них доходят до callback-функции и что происходит в режимах dontAsk и auto, см. в разделе Как оцениваются разрешения.
Обычно callback-функция разрешает запрос, возвращая PermissionResult, который SDK записывает обратно через свой транспорт как control_response. Возвращайте null только тогда, когда ваше приложение уже отправило control_response для этого запроса по собственному каналу, повторив requestId; в этом случае SDK не записывает ответ в свой транспорт. Возврат null в любом другом случае оставляет вызов инструмента заблокированным на неопределённый срок, поскольку control_response так и не отправляется, а у запросов разрешений нет таймаута. Параметр requestId и возвращаемое значение null требуют Claude Code v2.1.199 или новее.

PermissionResult

Результат проверки разрешения.

ToolConfig

Конфигурация поведения встроенных инструментов.

McpServerConfig

Конфигурация MCP-серверов.

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpSdkServerConfigWithInstance

McpClaudeAIProxyServerConfig

SdkPluginConfig

Конфигурация для загрузки плагинов в SDK.
Пример:
Полную информацию о создании и использовании плагинов см. в разделе Плагины.

Типы сообщений

SDKMessage

Тип объединения всех возможных сообщений, возвращаемых запросом.

SDKAssistantMessage

Сообщение ответа ассистента.
Поле message — это BetaMessage из Anthropic SDK. Оно включает поля, такие как id, content, model, stop_reason и usage. SDKAssistantMessageError — это одно из следующих значений: 'authentication_failed', 'oauth_org_not_allowed', 'account_on_hold', 'billing_error', 'rate_limit', 'overloaded', 'invalid_request', 'model_not_found', 'server_error', 'max_output_tokens', 'cloud_credential_error' или 'unknown'. Четыре из этих значений означают больше, чем говорят их названия:
  • 'model_not_found': выбранная модель не существует или недоступна для вашей учётной записи или развёртывания
  • 'overloaded': API вернул 529, потому что сервер работает на полную мощность, в отличие от 'rate_limit', который является ответом 429 при исчерпании вашей квоты
  • 'account_on_hold': ваша учётная запись заморожена
  • 'cloud_credential_error': Claude Code не смог получить пригодные учётные данные AWS или Google Cloud на машине, на которой он работает, поэтому запрос не достиг поставщика облачных услуг. Обычная причина — истёкший или никогда не завершённый вход в облако на этой машине, хотя временно недоступный сервис учётных данных сообщает то же значение. См. Could not load AWS or Google Cloud credentials. Требует TypeScript Agent SDK v0.3.267 или позже, который включает Claude Code v2.1.267
aborted имеет значение true, когда прерывание или отмена усекли сообщение ассистента до завершения потока: сообщение не имеет stop_reason, и содержимое может заканчиваться посередине слова. Это поле отсутствует в нормально завершённых сообщениях. Требует Agent SDK v0.3.214 или позже. agent_id определяет субагента, создавшего сообщение, и отсутствует у сообщений основного потока. Значение совпадает с task_id в событии task_started и других событиях задачи этого субагента и не меняется, когда субагент возобновляется. Поле требует Agent SDK v0.3.292 или новее. Сопоставляйте сообщения субагента с событиями его задачи по agent_id, а не по паре parent_tool_use_id сообщения и tool_use_id события задачи. Когда вызов инструмента возобновляет субагента, события задачи несут tool_use_id этого вызова, а сообщения сохраняют parent_tool_use_id вызова инструмента, который впервые запустил субагента, поэтому эти значения перестают совпадать. Claude Code задаёт user_message_uuid и user_message_uuids в первом сообщении ассистента в ходе при условиях, описанных в user_message_uuid. Когда ход продолжает другой ход, прерванный перезапуском, сообщения ассистента, несущие эти поля, несут также resume_reason. timestamp — это время в формате ISO 8601, когда содержимое сообщения закончило генерироваться в процессе, который его создал. Значение берётся с часов этой машины, поэтому используйте его только для отображения и не упорядочивайте сообщения по нему. Один ход API может создать несколько сообщений ассистента с одинаковым message.id, каждое со своим timestamp. Когда это поле отсутствует, используйте время получения сообщения. context_usage — это структурированная копия отчёта /context, типизированная как SDKContextUsage; требует Agent SDK v0.3.232 или позже. Когда вы отправляете /context как промпт, Claude Code доставляет отчёт как сообщение ассистента, чьё message.content содержит таблицу markdown, и прикрепляет context_usage к этому же сообщению. Claude Code не устанавливает это поле ни в каком другом сообщении ассистента, а более ранние версии доставляют таблицу /context без него, поэтому читайте разбивку из поля, когда оно присутствует, и используйте текст markdown, когда его нет. usage_report — структурированная копия отчёта /usage с типом SDKUsageReport; требуется Agent SDK v0.3.273 или новее. Когда вы отправляете /usage в качестве промпта, Claude Code доставляет отчёт как сообщение ассистента, у которого message.content содержит текст. Он прикрепляет usage_report к этому же сообщению, только если сессия удовлетворяет всем следующим условиям:
  • Сессия аутентифицируется с помощью учётных данных claude.ai
  • Учётные данные указывают известный тип тарифа или содержат scope user:profile
  • Учётная запись не находится на биллинге по фактическому использованию
Токен claude setup-token, переданный как CLAUDE_CODE_OAUTH_TOKEN, по умолчанию не подходит, потому что содержит только scope user:inference. Другие сессии, например сессии с API-ключом, доставляют текст без этого поля, как и более ранние версии. Читайте отчёт из поля, когда оно есть, и используйте текст, когда его нет.

SDKUserMessage

Сообщение пользовательского ввода.
Установите pasted_content для отправки содержимого, которое пользователь вставил в ваш интерфейс ввода промпта, а не напечатал, — одна запись на вставку, каждая является строкой или массивом блоков содержимого. Claude Code добавляет текст каждой записи после напечатанного текста по порядку и может обернуть каждую вставку в теги <pasted_content>. Блоки, отличные от текста, игнорируются, поэтому отправляйте изображения и документы в message.content. Требует Agent SDK v0.3.277 или позже. Задайте inline_pastes, чтобы сообщить Claude Code, какие части message.content пользователь вставил, а не набрал, — по одной строке на каждую вставку. Текст промпта остаётся там, где его поместил пользователь. Claude Code может обернуть каждую перечисленную вставку в теги <pasted_content> на её месте, чтобы Claude мог отличить вставленный материал от собственных слов пользователя. Оборачиваются только вставки в последнем текстовом блоке промпта. Требуется TypeScript Agent SDK v0.3.280 или новее. У каждого поля вставки есть ограничение размера:
  • pasted_content: если записей вместе с блоками содержимого внутри них больше 1000, Claude Code игнорирует всё поле.
  • inline_pastes: Claude Code использует первые 100 непустых записей и игнорирует остальные.
Задайте shouldQuery, client_composed или priority, чтобы изменить то, как Claude Code обрабатывает отправленное вами сообщение:
  • shouldQuery: установите его в false, чтобы добавить сообщение в транскрипт без запуска хода ассистента. Сообщение удерживается и объединяется со следующим пользовательским сообщением, которое запускает ход. Используйте это для внедрения контекста, например вывода команды, которую вы запустили вне основного канала, не тратя на это вызов модели.
  • client_composed: установите его в true, чтобы Claude Code доставил текст сообщения как написано. Claude Code тогда не раскрывает упоминания @path или @server:resource и не запускает текст, начинающийся с /, как команду. Пока опция verbatimPrompts включена, SDK устанавливает это поле в каждом сообщении. Требует TypeScript Agent SDK v0.3.280 или позже и Claude Code v2.1.248 или позже.
  • priority: управляет тем, когда сообщение, отправленное вами во время выполняющегося хода, доходит до Claude:
    • 'next' или отсутствие поля priority: Claude читает сообщение в том же ходе, как только завершатся выполняемые вызовы инструментов. Если ход завершится раньше, сообщение начинает следующий ход.
    • 'later': Claude Code удерживает сообщение до завершения хода и отправляет его как новый ход.
    • 'now' с origin: { kind: "human" }: в Claude Code v2.1.286 или новее работа, которая может продолжаться в фоне, переносится туда, и Claude читает сообщение в том же ходе. К переносимой работе относятся shell-команды, субагенты и вызовы инструментов MCP. В v2.1.287 или новее к ней также относятся вызовы WebFetch и WebSearch. Когда Claude только пишет ответ или выполняемую им работу нельзя перенести, Claude Code вместо этого прерывает ход, и Claude читает сообщение следующим.
    • 'now' без такого origin: Claude Code прерывает ход, и Claude читает сообщение следующим.
Это сообщение, отправленное во время выполняющегося хода, просит Claude сменить направление, не теряя shell-команду, которая всё ещё выполняется:
Пользовательское сообщение, созданное субагентом, например tool_result для одного из его собственных вызовов инструментов, содержит agent_id. См. SDKAssistantMessage, где определены это поле и требования к версии. В сообщении, содержащем блок tool_result, tool_use_result — это структурированный объект вывода инструмента, а не текст, отправленный модели. Его форма зависит от инструмента, указанного в соответствующем блоке tool_use, поэтому поле имеет тип unknown; встроенные формы перечислены в разделе Типы вывода инструментов. Следующие результаты требуют обработки помимо их указанной формы:
  • Инструмент Agent: tool_use_result имеет тип AgentOutput. Отображайте результат на его основе, а не разбирая текст tool_result. Поле content результата completed содержит отчёт субагента или — для субагента, чей отчёт передаётся через вызов инструмента SubagentHandback, — короткую заметку об этой передаче вместо отчёта. В авторежиме в Claude Code v2.1.271 или новее каждый субагент, выдающий результат completed, отчитывается таким образом, если только он не является форком, и Claude получает отчёт отдельным сообщением от субагента.
  • Вызов WebFetch или WebSearch, который Claude Code перенёс в фон, чтобы доставить сообщение 'now': в пользовательском сообщении, содержащем tool_result этого вызова, tool_use_result имеет значение { detachedToolCall: true }. Вызов всё ещё выполняется, и Claude получит его результат после завершения. Второго tool_result для этого tool_use_id не последует, поэтому, если ваше приложение отображает строку для каждого вызова инструмента, пометьте эту строку как перенесённую в фон при получении этого сообщения. Требуется Claude Code v2.1.287 или новее.
  • Инструмент MCP, результат которого содержит блоки resource_link: tool_use_result — объект с массивом resourceLinks из записей SDKMcpResourceLink. Claude получает каждую ссылку в виде строки текста в блоке tool_result, поэтому считывайте resourceLinks, чтобы отобразить файлы, возвращённые сервером, вместо разбора этого текста. Claude Code опускает resourceLinks, когда в результате нет ссылок, а также в результатах от субагентов, хранит не более 50 ссылок на результат и прекращает добавлять ссылки, когда массив достигает 64 КиБ сериализованного JSON. Для resourceLinks требуется Agent SDK v0.3.257 или новее.
  • Инструмент MCP, возвращающий structuredContent: tool_use_result — объект, член structuredContent которого содержит то, что отправил сервер, а член content — значение McpOutput. Результаты от субагентов не содержат structuredContent.
  • Инструмент MCP, чей structuredContent сериализуется в JSON длиной более 1 048 576 символов: Claude Code не включает structuredContent в tool_use_result и устанавливает вместо него structuredContentOmitted: true, чтобы ваше приложение могло отличить отброшенный объект от инструмента, который его не отправлял. Остальные члены, такие как content и resourceLinks, остаются, и то, что получает Claude, не меняется. Это ограничение применяет Claude Code v2.1.287 или новее. Два вида инструментов отличаются:
    • Инструменты из внутрипроцессных серверов SDK освобождены от ограничения и доставляют объект целиком.
    • Инструмент, чья запись в tools/list объявляет ресурс MCP Apps ui://, имеет ограничение в 8 388 608 символов в Claude Code v2.1.295 или новее, а версии до v2.1.295 освобождают его от ограничения.

SDKUserMessageReplay

Воспроизведённое пользовательское сообщение с обязательным UUID.
Пользовательский ход, внедрённый извне сессии, то есть такой, чей origin имеет вид peer или channel, поступает в поток как воспроизведение независимо от того, был ли он доставлен во время активного хода или запустил новый ход, пока сессия была неактивна. До v2.1.207 внедрённый ход, доставленный, пока сессия была неактивна, не создавал сообщения в потоке и появлялся только при повторном чтении транскрипта.

SDKResultMessage

Финальное сообщение результата.
Несколько полей в результате содержат диагностические детали, выходящие за рамки subtype:
  • api_error_status: код состояния HTTP ошибки API, которая завершила диалог. Отсутствует или равен null, когда ход завершился без ошибки API.
  • ttft_ms: время до первого токена в миллисекундах, измеренное при поступлении первого полного сообщения ассистента. Присутствует только в ветви успеха.
  • ttft_stream_ms: время в миллисекундах до первого события потока message_start, когда открывается поток ответа. Меньше, чем ttft_ms; разница между ними — это время, потраченное на потоковую передачу первого сообщения. Присутствует только в ветви успеха.
  • user_message_uuid: uuid отправленного вами сообщения, на которое ответил этот ход. См. user_message_uuid, чтобы узнать, какие результаты его содержат.
  • user_message_uuids: uuid каждого отправленного вами сообщения, на которое Claude Code ответил в этом ходе. См. user_message_uuids.
  • resume_reason: причина, по которой этот ход продолжает ход, прерванный перезапуском. Присутствует в обеих ветвях. См. resume_reason.
  • local_command: имя команды, которую выполнил ход, в результате успеха хода, завершённого командой без входа в цикл агента, например /compact. Имя приводится к строчным буквам и подчёркиваниям, поэтому /reload-plugins сообщает reload_plugins. Команда, которую предоставляет MCP-сервер, и встроенная /mcp сообщают mcp. Команда, которую вы определили сами, сообщает custom. Аргументы никогда не включаются. Отсутствует в каждом ходе, который вошёл в цикл агента, и при отправках, не запустивших команду. Требует Agent SDK v0.3.268 или позже.
  • request_sent_wall_ms: миллисекунды эпохи, в которые Claude Code отправил запрос API, для сопоставления с серверными временными метками. Присутствует только вместе с user_message_uuid, в результате успеха с is_error равным false, чей ход отправил запрос API.
  • first_content_frame_ms: время в миллисекундах до первого события потока content_block_start или content_block_delta, считая блоки размышлений содержимым. Присутствует только в ветви успеха, когда is_error имеет значение false. Требует Agent SDK v0.3.260 или позже.
  • first_stream_post_ms, first_stream_post_ack_ms, first_stream_post_wall_ms: тайминги загрузки первого события потока хода. Claude Code записывает их только в сессиях, которые он транслирует на claude.ai, например в облачных сессиях, и результаты, которые выдаёт query(), их не содержат. Требует Agent SDK v0.3.260 или позже.
  • usage: только основной цикл агента. Исключает вызовы субагентов и вспомогательных моделей и в сессиях с потоковым вводом считается за ход. Для учёта токенов и затрат предпочитайте modelUsage.
  • modelUsage: итоги по моделям для каждого вызова модели, сделанного через конвейер запросов во время этого вызова query(), включая основной цикл, субагентов и внутренние вызовы, такие как сжатие контекста и агенты Workflow. Вспомогательные вызовы вне этого конвейера, такие как классификатор разрешений и запросы подсчёта токенов, исключены. Вызов, который возобновляет сессию, также учитывает итоги по моделям, восстановленные из более ранних вызовов сессии. В сессиях с потоковым вводом итоги накапливаются по ходам, поэтому читайте последний результат, а не суммируйте по результатам. См. Track costs in streaming input mode о сбросах и Recover totals after a session crash об обнулённых результатах.
  • total_cost_usd: кумулятивная оценочная стоимость в USD, охватывающая те же вызовы, что и modelUsage, и сбрасываемая в тех же точках. Вызов, который возобновляет сессию, также учитывает итоги, восстановленные из более ранних вызовов сессии. Это оценка, а не выписка по счёту. См. Отслеживание затрат и использования о предостережениях по точности.
  • queued_turn_count: количество отправленных вами сообщений с origin: { kind: "human" }, которые всё ещё ожидают, когда Claude Code создал результат. См. queued_turn_count, чтобы узнать, что означают 0 и отсутствующее поле.
  • result_index: позиция этого результата в порядке доставки запуска, считая от 0 по всем результатам, которые записывает процесс. Присутствует в обеих ветвях. Результат, запись которого не удалась, всё равно занимает свой номер, поэтому разрыв в последовательности означает, что результат был потерян. Требует Agent SDK v0.3.268 или позже.
  • startup_failure_reason: почему Claude Code отказался запускаться, в результате error_during_execution, который он записывает перед выходом при известной ошибке запуска. См. startup_failure_reason о значениях и о том, какие ошибки его содержат. Требует Agent SDK v0.3.274 или позже.
  • terminal_reason: почему цикл завершился. Одно из значений: "completed", "max_turns", "tool_deferred", "aborted_streaming", "aborted_tools", "hook_stopped", "stop_hook_prevented", "background_requested", "blocking_limit", "rapid_refill_breaker", "prompt_too_long", "image_error", "model_error", "api_error", "malformed_tool_use_exhausted", "budget_exhausted", "structured_output_retry_exhausted", "tool_deferred_unavailable" или "turn_setup_failed".
  • fast_mode_state: одно из значений "on", "off" или "cooldown".
  • fast_mode_disabled_reason: почему быстрый режим сейчас недоступен. Отсутствует, когда ничто не блокирует быстрый режим, хотя запрос всё равно может выполняться на стандартной скорости. Во время периода охлаждения после ограничения частоты запросов быстрого режима Claude Code сообщает fast_mode_state: "cooldown" без кода причины и повторно включает быстрый режим, когда период охлаждения истекает. Требует Claude Code v2.1.219 или позже.
Используйте код причины, чтобы объяснить в вашем собственном интерфейсе, почему быстрый режим отключён, вместо того чтобы заново определять доступность. Каждый код называет проверку, которая заблокировала быстрый режим: Та же пара полей присутствует в SDKSystemMessage и в SDKControlInitializeResponse, поэтому вы можете прочитать состояние быстрого режима перед первым ходом. Поле origin передаёт SDKMessageOrigin пользовательского сообщения, которое породило этот результат. Когда SDK внедряет синтетический ход продолжения, например для завершённой фоновой задачи, итоговое SDKResultMessage содержит origin: { kind: "task-notification" }. Routine, чей триггер сработал, и проверенные сервером сообщения из ваших других сессий также поступают с этим видом, каждое с subkind, описанным в разделе Подвиды уведомлений задач. Проверяйте kind, чтобы отличить результаты, отвечающие на ваш промпт, от внедрённых продолжений, прежде чем маршрутизировать или подавлять их. Если ваше приложение объявляет запланированные запуски, их результаты также содержат kind: "task-notification", поэтому не подавляйте результаты только на основе kind. Когда несколько завершений фоновых задач ставятся в очередь вместе, Claude Code может ответить на них в одном ходе, а не в отдельном ходе для каждого. Каждое завершение всё равно создаёт свой результат с этим происхождением. Все завершения, на которые Claude Code отвечает вместе, кроме последнего, по порядку создают пустые результаты с num_turns: 0, а результат последнего содержит ход, который отвечает на них все. Это поле отсутствует для результатов, выданных до любого пользовательского хода, например для ошибок запуска. Когда хук PreToolUse возвращает permissionDecision: "defer", результат имеет stop_reason: "tool_deferred", а deferred_tool_use содержит id, name и input ожидающего инструмента. Читайте это поле, чтобы показать запрос в вашем собственном интерфейсе, затем возобновите работу с тем же session_id, чтобы продолжить. См. Defer a tool call for later о полном цикле.

user_message_uuid

uuid SDKUserMessage, на которое отвечает ход, возвращаемый обратно, чтобы вы могли сопоставить ответ Claude Code с отправленным вами сообщением. Claude Code возвращает uuid, только если вы установили его в сообщении. Это поле необязательно в SDKUserMessage, а строковый промпт, переданный в query(), его не содержит. На какое из ваших сообщений отвечает ход, зависит от того, как ход начался:
  • Обычное отправленное вами сообщение, то есть без isSynthetic: true: ход отвечает на это сообщение на протяжении всего своего выполнения. Когда вы отправляете несколько сообщений почти одновременно, Claude Code может объединить их в один ход, и тогда поле содержит только uuid последнего сообщения. Чтобы сопоставить ответ с любым из объединённых сообщений, используйте user_message_uuids.
  • Сообщение, отправленное вами с isSynthetic: true: ход сначала отвечает на это сообщение. Если Claude Code подхватит ваше обычное сообщение между вызовами инструментов, с этого момента ход отвечает на подхваченное сообщение. Возврат uuid синтетического сообщения требует Agent SDK v0.3.265 или позже; более ранние версии ничего не возвращают в синтетических ходах.
  • Промпт, который Claude Code генерирует для продолжения прерванного хода при CLAUDE_CODE_RESUME_INTERRUPTED_TURN: когда последний промпт прерванного хода — это обычное отправленное вами сообщение, открыло ли оно ход или Claude Code подхватил его во время хода, продолжающий ход сначала отвечает на это сообщение. resume_reason позволяет отличить фреймы продолжающего хода от фреймов прерванной попытки. Когда последний промпт не является вашим обычным сообщением, продолжающий ход сначала не отвечает ни на одно ваше сообщение. Если Claude Code подхватывает ваше обычное сообщение между вызовами инструментов, с этого момента ход отвечает на подхваченное сообщение. Возврат промпта прерванного хода требует Agent SDK v0.3.268 или новее.
  • Любой другой промпт, который Claude Code сгенерировал сам: ход сначала не отвечает ни на одно ваше сообщение, и его кадры не содержат возвращаемого значения. Если Claude Code подхватит ваше обычное сообщение между вызовами инструментов, с этого момента ход отвечает на это сообщение. Возврат при подхвате требует Agent SDK v0.3.265 или позже; более ранние версии ничего не возвращают в этих ходах.
Claude Code возвращает uuid сообщения, на которое дан ответ, в трёх видах кадров:
  • Результат: каждый результат хода, который ответил на отправленное вами сообщение. В Agent SDK v0.3.265 или позже его содержит каждый такой результат. До v0.3.265 результат успеха хода, запущенного обычным сообщением, не содержал его, когда ход не отправил запрос API или завершился отложенным вызовом инструмента. До v0.3.246 его не содержали и результаты ошибок, а до v0.3.216 — все результаты.
  • Первый ответ хода: первое сообщение ассистента, а при includePartialMessages также первое событие потока, чей event.type не является ping, чтобы вы могли привязать ответ до поступления результата. Возврат в первом ответе требует Agent SDK v0.3.246 или позже. До v0.3.269 при includePartialMessages Claude Code устанавливал его только в этом первом событии потока или в первом сообщении ассистента, если ход ничего не передавал потоком. Когда сообщение, на которое отвечает ход, меняется посреди хода, первый ответ после изменения также содержит это поле в Agent SDK v0.3.265 или позже; более ранние версии устанавливают его в одном кадре ответа за ход.
  • Каждый кадр thinking_tokens хода: чтобы вы могли отнести прогресс размышлений к отправленному вами сообщению, не дожидаясь первого ответа хода. Требует Agent SDK v0.3.260 или позже.
Claude Code опускает это поле в следующих случаях:
  • Кадры ответа, кроме этих первых ответов
  • Кадры субагентов
  • Ходы, которые не отвечают ни на одно ваше сообщение или отвечают на сообщение, отправленное вами без uuid
  • Результаты, которые не отвечают ни на одно ваше сообщение, например обнулённый результат после сбоя рабочего процесса

user_message_uuids

uuid каждого отправленного вами сообщения, на которое Claude Code ответил в этом ходе. Когда вы отправляете несколько сообщений почти одновременно, Claude Code может объединить их в один ход, и тогда user_message_uuid называет только последнее из них. Чтобы сопоставить ответ с любым из объединённых сообщений, ищите uuid этого сообщения в любом месте этого списка. Требует Agent SDK v0.3.259 или позже. Claude Code устанавливает список вместе с user_message_uuid в каждом кадре ответа, который содержит это поле, и в результате. Полный набор кадров хода, которые возвращают uuid сообщения, на которое дан ответ, и требуемую для каждого версию см. в user_message_uuid. Список всегда содержит user_message_uuid и включает не более 64 записей. Когда Claude Code подхватывает обычное сообщение, отправленное вами во время выполнения хода, он добавляет uuid этого сообщения в список результата. Если первый ответ или результат содержит user_message_uuid без списка, он получен от более ранней версии Claude Code, поэтому используйте одиночное поле.

resume_reason

Причина, по которой этот ход продолжает ход, прерванный перезапуском. Claude Code задаёт это поле в ходе, продолжающем прерванный ход при CLAUDE_CODE_RESUME_INTERRUPTED_TURN, чтобы вы могли отличить ответ и результат продолжающего хода от ответа и результата прерванной попытки. Требуется Agent SDK v0.3.268 или новее. Claude Code устанавливает это поле в двух видах кадров:
  • Результат продолжающего хода: в ветвях success и error одинаково, независимо от того, несёт ли результат user_message_uuid.
  • Фреймы ответа продолжающего хода: те, что несут user_message_uuid.
Значение — короткий токен в нижнем регистре, например interrupted_turn.

queued_turn_count

Количество отправленных вами сообщений с origin: { kind: "human" }, которые всё ещё ожидают в очереди команд, когда Claude Code создал результат. Требует Agent SDK v0.3.242 или позже. Что означают 0 и отсутствующее поле:
  • 0: Claude Code не считает сообщения, отправленные вами без этого origin, и не считает уведомления задач, поэтому следующий ход всё ещё может последовать.
  • Отсутствует: финальный результат, который Claude Code выдаёт после сбоя или фатальной ошибки запуска, опускает это поле и может содержать обнулённые итоги.

startup_failure_reason

Почему Claude Code отказался запускаться, чтобы ваше приложение могло предложить исправление вместо повторной попытки. Claude Code устанавливает его в результате error_during_execution, который он записывает перед выходом при известной ошибке запуска. Этот результат содержит обнулённые итоги, а его массив errors содержит тот же текст, что и stderr. Во всех остальных результатах это поле отсутствует. Требует Agent SDK v0.3.274 или позже. Установите CLAUDE_CODE_STARTUP_FAILURE_RESULTS в 1 в env, чтобы получать этот результат для каждого значения SDKStartupFailureReason. Без этой переменной Claude Code записывает результат только для следующих ошибок, а остальные завершаются выводом в stderr, ненулевым кодом выхода и без сообщения результата:
  • Возобновление, которое Claude Code останавливает, потому что не может вернуть сессию в её worktree, с worktree_unverified или worktree_resume_refused. В том разделе сказано, какая ошибка содержит какое значение.
  • Отклонённое continue диалога, который удерживает фоновая сессия, с session_held_by_background. Для отклонённого resume такого диалога Claude Code записывает результат, только когда переменная установлена.
Каждое значение называет один отказ:

SDKSystemMessage

Сообщение инициализации системы.
fast_mode_state сообщает состояние быстрого режима сессии. Когда что-то блокирует быстрый режим, fast_mode_disabled_reason называет проверку, которая его заблокировала; это поле требует Claude Code v2.1.219 или позже. Коды причин и их значения см. в описании fast_mode_disabled_reason в сообщении результата. terminal_slash_commands называет записи в slash_commands, чей интерфейс привязан к локальному терминалу, например exit. Вы можете отправлять их как любую другую запись в slash_commands; это поле существует, чтобы удалённый или мобильный клиент мог скрыть их из своих меню команд. Это поле присутствует, только когда оно непустое, и требует Agent SDK v0.3.229 или позже.
  • source в каждой записи mcp_servers: откуда взялось определение сервера, с теми же значениями, что и source в McpServerStatus. Требует Agent SDK v0.3.274 или позже.
  • effort: уровень effort, который Claude Code отправляет в следующем запросе сессии, или null, когда он его не отправляет. Claude Code устанавливает это поле только в сообщении инициализации, которое он отправляет клиентам Remote Control, и опускает его в сообщении инициализации, которое читает ваше приложение. Требует Agent SDK v0.3.234 или позже.
Массив capabilities называет поведения протокола, которые реализует этот CLI, чтобы вы могли определять поддержку функций вместо сравнения строк claude_code_version. Это открытый набор: игнорируйте значения, которые вы не распознаёте, и проверяйте конкретную возможность, на поведение которой вы полагаетесь. Это поле требует Claude Code v2.1.205 или позже и отсутствует в более ранних CLI. Массив plugin_errors перечисляет ошибки загрузки плагинов. Запись описывает либо плагин, который не загрузился и отсутствует в plugins, либо плагин, который загрузился без одной из своих частей, например без файла хуков. Ключ опускается, когда ошибок нет. SDKSystemMessage объявляет plugin_errors в Agent SDK v0.3.283 или позже. Когда сам каталог или архив из вашей опции plugins не загружается, поле plugin записи содержит позиционный тег, например inline[0], вместо имени плагина. Это происходит, например, когда путь не существует или манифест недействителен. Сопоставляйте такую запись с вашей опцией по её полю path. В таблице ниже перечислены поля каждой записи plugin_errors.

SDKPartialAssistantMessage

Частичное сообщение при потоковой передаче (только когда includePartialMessages равно true). Поле parent_tool_use_id всегда равно null: события потока выдаются только для основной сессии. Для определения принадлежности субагентам используйте полные сообщения, которые содержат agent_id и parent_tool_use_id, или включите forwardSubagentText, чтобы получать текст и размышления субагентов в виде полных сообщений.
Claude Code задаёт user_message_uuid и user_message_uuids в первом событии потока хода, отличном от ping, и снова — когда меняется сообщение, на которое отвечает ход, при условиях, описанных в user_message_uuid. Когда ход продолжает ход, прерванный перезапуском, события потока, несущие эти поля, несут также resume_reason.

SDKCompactBoundaryMessage

Сообщение, обозначающее границу сжатия контекста диалога.

SDKInformationalMessage

Общий текстовый баннер, выдаваемый циклом. Содержит предупреждения, уведомления и другие строки состояния, не являющиеся ошибками, которые выдаёт Claude Code, а также обратную связь хуков, например причину блокировки хуком UserPromptSubmit. В Claude Code v2.1.227 или позже systemMessage хука может поступить как это сообщение, при этом каждая строка начинается с префикса с именем хука, например PostToolUse:Bash says:. В разделе каждого события на странице хуков сказано, как отображается вывод. Выполняйте рендеринг content как простого текста с заданным level.

SDKWorkerShuttingDownMessage

Выдаётся при корректном завершении рабочего процесса, чтобы удалённые клиенты могли показать, почему рабочий процесс завершился, вместо ожидания таймаута heartbeat. reason — это короткая строка в snake_case, устанавливаемая CLI хоста, например "host_exit" или "remote_control_disabled". Реагируйте на это сообщение только при потоковой передаче в реальном времени. Возобновлённая сессия воспроизводит прошлые экземпляры этого сообщения, поэтому в этом случае игнорируйте их.

SDKPluginInstallMessage

Событие прогресса установки плагинов. Выдаётся, когда установлена переменная CLAUDE_CODE_SYNC_PLUGIN_INSTALL, чтобы ваше приложение Agent SDK могло отслеживать установку плагинов из маркетплейса перед первым ходом. Статусы started и completed обрамляют установку в целом. Статусы installed и failed сообщают об отдельных маркетплейсах и включают name.

SDKPermissionDeniedMessage

Событие потока, выдаваемое, когда система разрешений отклоняет вызов инструмента без интерактивного запроса разрешения. Используйте его, чтобы показывать отказ в вашем интерфейсе в момент его возникновения, а не только по следующему за ним результату инструмента с is_error. О каких отказах сообщает событие, зависит от того, как запуск обрабатывает запросы разрешений:
  • С обратным вызовом canUseTool и значением по умолчанию permissionPrompts: 'host': запросы разрешений поступают в ваш обратный вызов, а это событие сообщает об отказах, которые Claude Code принимает самостоятельно, не вызывая его.
  • Без обоих: простой запуск -p или query(), где не заданы ни canUseTool, ни permissionPromptToolName, отклоняет любой вызов инструмента, который потребовал бы запроса, если только его не разрешает хук PermissionRequest, и это событие сообщает об этих отказах, а также о тех, которые Claude Code принимает самостоятельно. До v2.1.223 Claude Code не выдавал это событие в запусках без обратного вызова.
  • С инструментом запроса разрешений MCP, заданным через permissionPromptToolName или флаг --permission-prompt-tool, и значением по умолчанию permissionPrompts: 'host': Claude Code вообще не выдаёт это событие, даже для отказов по правилам, которые он принимает самостоятельно.
  • С permissionPrompts: 'none': Claude Code отклоняет вызовы, которые потребовали бы запроса разрешения, даже когда также заданы canUseTool или инструмент запроса разрешений MCP, и это событие сообщает об этих отказах, а также об отказах, которые Claude Code принимает самостоятельно. Требует Claude Code v2.1.259 или позже.
В любой конфигурации это событие пропускает отказы, принятые на пути хука PreToolUse, — независимо от того, отклонил ли вызов сам хук или правило запрета переопределило решение хука разрешить или запросить подтверждение. Кроме того, событие выдаётся по принципу best-effort: иногда Claude Code записывает отказ без выдачи этого события, поэтому авторитетной записью является permission_denials в сообщении результата.

SDKPermissionDenial

Информация об отклонённом использовании инструмента.

SDKContextUsage

Структурированная форма отчёта /context, передаваемая как context_usage в SDKAssistantMessage, которое доставляет результат /context. Agent SDK v0.3.232 и позже экспортируют этот тип. В отличие от SDKControlGetContextUsageResponse, он содержит только данные, необходимые для отображения разбивки использования, без полей отображения, таких как color и gridRows. Claude Code вычисляет отчёт с помощью запросов API для подсчёта токенов, которые не появляются в потоке сообщений; см. как обрабатываются эти запросы.
В таблице перечислено, что Claude Code помещает в каждое поле. Поля от model до over_limit описывают сессию в целом, а поля-коллекции относят токены к отдельным элементам. over_limit.kind фиксирует, как Claude Code определил окно, а не то, примет ли API следующий запрос:
  • hard_limit: окно — это то, что Claude Code считает собственным лимитом модели, за пределами которого API отклоняет запросы
  • compaction_window: окно — это окно политики сжатия контекста, которое может совпадать или не совпадать с лимитом модели
Claude Code развивает этот тип аддитивно, добавляя новые данные как необязательные поля, а не изменяя структуру существующих. Читайте известные вам поля и игнорируйте те, которые вы не распознаёте.

SDKContextUsageCategory

Одна строка разбивки использования /context по категориям.
В таблице перечислено, что Claude Code помещает в каждое поле строки. Каждое значение kind указывает, что представляют собой токены строки:
  • used: содержимое, занимающее контекстное окно
  • free: оставшаяся часть окна
  • buffer: резерв для сжатия контекста
  • deferred: схемы инструментов, которые Claude Code держит вне окна и исключает из расчёта использования; перечисляются для информации

SDKUsageReport

Структурированная форма отчёта /usage, передаваемая как usage_report в SDKAssistantMessage, который доставляет результат /usage. Agent SDK v0.3.273 и новее экспортируют этот тип. Тип экспериментальный: его форма может измениться.
Поля верхнего уровня — session и rate_limits:
  • session: текущие итоги стоимости и использования Claude Code, считанные из того же реестра, что и total_cost_usd и modelUsage в SDKResultMessage. Каждая запись model_usage — это ModelUsage.
  • rate_limits: строки использования тарифа в limits и расход кредитов использования в extra_usage. Равно null, когда Claude Code не удалось получить данные об использовании тарифа, например когда OAuth-токен сессии не имеет scope user:profile.
Claude Code вычисляет session.total_cost_usd локально по количеству токенов, поэтому это оценка, а не то, что выставляется по вашему тарифу. Расход кредитов использования, сообщаемый сервером, — это отдельный блок extra_usage. Оговорки о точности см. в разделе Отслеживание стоимости и использования. limits содержит строки использования сервера в том виде, в каком их отправил сервер: какие счётчики применяются, их область действия, метки, серьёзность и порядок определяет сервер, поэтому отображайте строки дословно.
  • Пустой массив означает, что сервер не сообщил ни об одном счётчике.
  • null означает, что у Claude Code нет строк для отчёта.
Каждая строка limits описывает один счётчик использования: До Agent SDK v0.3.277 тип объявлял severity и is_active как необязательные и допускающие null, и строка могла прийти без них. extra_usage — расход и лимит кредитов использования за расчётный период по данным сервера; присутствует, когда у тарифа есть кредиты использования. Суммы указаны в минимальных единицах currency, для USD — в центах.
  • monthly_limit равно null, когда у этой учётной записи нет собственного лимита расходов. В тарифах Team и Enterprise не отображайте null как безлимит.
  • is_enabled равно false, пока кредиты не могут оплачивать запросы.

SDKMessageOrigin

Происхождение сообщения с ролью пользователя. Оно присутствует как origin в SDKUserMessage и передаётся в соответствующее SDKResultMessage, чтобы вы могли определить, что запустило данный ход.

Подвиды уведомлений задач

Когда Claude Code доставляет уведомление задачи в сессию, он устанавливает subkind в origin уведомления, если серверы Anthropic проверили, откуда пришло это уведомление. Он также устанавливает subkind, когда ваше приложение само объявляет сообщение запланированным запуском, что требует TypeScript Agent SDK v0.3.280 или позже. subkind требует Claude Code v2.1.213 или позже и принимает одно из двух значений:
  • scheduled-trigger: уведомление — это сохранённый промпт routine, доставленный потому, что сработал один из триггеров routine: её расписание, её API-триггер, её триггер GitHub или Run now. Промпт, который ваше приложение объявляет запланированным запуском, также имеет это значение. Claude Code представляет их модели как назначенную задачу сессии, с пометкой, отличающейся от пометки, которую содержат другие уведомления задач.
  • peer-send-message: уведомление — это сообщение, которое другая ваша сессия отправила с помощью серверного инструмента send_message, используемого облачными сессиями для обмена сообщениями друг с другом (а не межсессионного инструмента SendMessage), причём серверы Anthropic проверили, что обе сессии принадлежат одной и той же закрытой группе сессий. Требует Claude Code v2.1.224 или позже. Доставка send_message, которую серверы так не проверили, не получает подвида.
Все остальные уведомления задач не имеют subkind. Сюда относятся активность PR, доставленная в сессию, и фоновые события, такие как завершённая задача. Сообщения от межсессионного инструмента SendMessage вообще не являются уведомлениями задач: поступают ли они из сессии на той же машине или через серверы Anthropic с другой машины, Claude Code присваивает им kind: "peer" и поля происхождения peer. fireReason сообщает, почему сработало уведомление scheduled-trigger, в виде короткого токена в нижнем регистре, например scheduled, manual, retry, catch_up или api. Серверы Anthropic устанавливают его в доставках routine, а ваше приложение устанавливает его, когда объявляет запланированный запуск. Оно отсутствует, когда ни одна из сторон его не отправила. Требует TypeScript Agent SDK v0.3.280 или позже. Фоновая задача может выполняться более одного раза под одним и тем же task_id, например когда Claude возобновляет субагента. Каждый запуск имеет собственный run_id. Когда уведомление о запуске поступает в вашу сессию как пользовательское сообщение, runId в origin task-notification этого сообщения содержит то же значение. Уведомление может прийти после того, как начался следующий запуск задачи, и всё равно будет содержать ID более раннего запуска. Чтобы определить, к какому запуску относится ход, сравнивайте runId, а не task_id. Требуется TypeScript Agent SDK v0.3.292 или новее.

Объявление запланированного запуска

Если ваше приложение запускает промпты по собственному расписанию, объявляйте каждый запуск, чтобы Claude Code представлял ход модели как запланированную задачу, а не как живой ввод пользователя. Запустите сессию с CLAUDE_CODE_HOST_SCHEDULED_RUN, установленной в 1 в env, затем отправьте SDKUserMessage запуска с origin: { kind: "task-notification", subkind: "scheduled-trigger", fireReason: "scheduled" } и без isSynthetic. Claude Code игнорирует объявление в процессе, запущенном без этой переменной. Он также игнорирует его в процессе, окружение которого содержит CLAUDECODE или CLAUDE_CODE_CHILD_SESSION. Claude Code сохраняет fireReason, только когда значение состоит из 1–32 строчных букв или подчёркиваний. Требует TypeScript Agent SDK v0.3.280 или позже.

Поля происхождения peer

Происхождение peer указывает, какой агент отправил сообщение: внутрипроцессный участник команды, отправляющий сообщение в main с помощью SendMessage, или пир из другой сессии, то есть другая ваша сессия Claude Code. Межсессионные пиры требуют Claude Code v2.1.224 или позже в macOS и Linux; о требованиях для нативной Windows см. доступность межсессионного обмена сообщениями. Межсессионный пир может работать на той же машине, а также на другой вашей машине или в облаке, когда его сообщение поступает через Remote Control. Два вида отправителей заполняют поля по-разному:
  • from: имя участника команды или адрес отправителя для межсессионного пира. Для одностороннего сообщения с другой машины у отправителя нет адреса для ответа, и from равно "unknown". Значение задаётся отправителем; проверенной идентичностью является verifiedPeerPid.
  • fromMode: класс разрешений отправляющей сессии, bypass или prompting, объявленный хостом, который передаёт сообщение пира между вашими сессиями, например настольным приложением. Claude Code читает его в принимающей сессии, когда применяет контроль входящих сообщений. Требует Agent SDK v0.3.234 или позже.
  • senderTaskId: ID задачи участника команды. Отсутствует для межсессионного пира.
  • name: отображаемое имя отправителя, нормализованное Claude Code: он удаляет управляющие, форматирующие и суррогатные кодовые точки Unicode, а также разделители строк и абзацев, затем обрезает пробелы и ограничивает результат 64 кодовыми точками с многоточием. Требует Claude Code v2.1.205 или позже.
  • body: декодированное тело сообщения с удалённой peer-обёрткой, побайтово совпадающее с тем, что видит модель. Присутствует для одиночного сообщения участника команды и отсутствует, когда несколько сообщений объединены; для узла из другой сессии присутствует, только если ход состоит ровно из одной peer-обёртки, сформированной Claude Code. Отображайте name и body вместо повторного разбора текста сообщения. До версии v2.1.299 объединённые сообщения сохраняли body первого сообщения. Требуется Claude Code v2.1.205 или новее.
  • fromSession: ID сессии отправителя, которую может открыть хост; устанавливается хостом отправителя, чтобы ваш интерфейс мог ссылаться на отправляющую сессию. Как и from, это значение заявлено отправителем: используйте его только как цель навигации и не рассматривайте как доказательство идентичности отправителя. Требует Claude Code v2.1.216 или позже.
  • verifiedPeerPid: ID процесса, который подключился к сокету межсессионного обмена сообщениями этой сессии, проверенный ядром и прочитанный из самого соединения, а не из данных сообщения. Используйте его, а не from, для идентификации отправителя: from может подделать любой процесс того же пользователя. Поле отсутствует, когда Claude Code не может его проверить, например в Windows или при поступлении не через сокет, поэтому отсутствие значения означает, что отправитель не проверен. Для ретранслируемого трафика оно идентифицирует ретранслятор, а не автора сообщения, а ID процессов могут переиспользоваться, поэтому рассматривайте его как сведения о происхождении, а не как токен аутентификации. Требует Claude Code v2.1.216 или позже.

Типы hooks

Для полного руководства по использованию хуков с примерами и общими паттернами см. руководство по хукам.

HookEvent

Доступные события hooks.

HookCallback

Тип функции обратного вызова hook.

HookCallbackMatcher

Конфигурация hook с опциональным matcher.

HookInput

Тип объединения всех типов входных данных hook.

BaseHookInput

Базовый интерфейс, который расширяют все типы входных данных hook.
Поле prompt_id — это UUID, идентифицирующий пользовательский запрос, который в настоящий момент обрабатывается. Он совпадает с атрибутом prompt.id на событиях OpenTelemetry и отсутствует до первого ввода пользователя. Требуется Claude Code v2.1.196 или позже.

PreToolUseHookInput

mcp_server присутствует, когда инструмент поступает с сервера MCP; см. McpServerProvenance. Входные данные PostToolUse, PostToolUseFailure, PermissionRequest и PermissionDenied содержат то же поле. Это поле требует Agent SDK v0.3.274 или позже.

PostToolUseHookInput

PostToolUseFailureHookInput

PostToolBatchHookInput

Срабатывает один раз после того, как каждый вызов инструмента в пакете разрешится, перед следующим запросом модели. tool_response содержит сериализованное содержимое tool_result, которое видит модель; форма отличается от структурированного объекта Output в PostToolUseHookInput.

PermissionDeniedHookInput

NotificationHookInput

UserPromptSubmitHookInput

UserPromptExpansionHookInput

SessionStartHookInput

SessionEndHookInput

StopHookInput

StopFailureHookInput

SubagentStartHookInput

SubagentStopHookInput

PreCompactHookInput

PostCompactHookInput

PreModelSwitchHookInput

Срабатывает перед тем, как запрошенное переключение модели вступит в силу. context_tokens и поля после него оценивают, какие затраты на повторную отправку разговора новой модели. Для полного описания полей и семантики блокирования см. PreModelSwitch.

PostModelSwitchHookInput

Срабатывает после изменения модели сессии. Он содержит те же поля, что и PreModelSwitchHookInput, с двумя дополнительными значениями source. См. PostModelSwitch.

PermissionRequestHookInput

SetupHookInput

TeammateIdleHookInput

TaskCreatedHookInput

TaskCompletedHookInput

ElicitationHookInput

ElicitationResultHookInput

ConfigChangeHookInput

InstructionsLoadedHookInput

DirectoryAddedHookInput

directory — это абсолютный путь к добавленной директории. source — это "slash_command", когда /add-dir добавил её, и "register_repo_root", когда это сделал запрос управления SDK.

WorktreeCreateHookInput

WorktreeRemoveHookInput

CwdChangedHookInput

FileChangedHookInput

MessageDisplayHookInput

HookJSONOutput

Возвращаемое значение hook.

AsyncHookJSONOutput

SyncHookJSONOutput

Типы входных данных инструментов

Документация схем входных данных для встроенных инструментов Claude Code. Эти типы экспортируются из @anthropic-ai/claude-agent-sdk/sdk-tools и могут быть использованы для типобезопасного взаимодействия с инструментами.

ToolInputSchemas

Объединение типов входных данных инструментов, экспортируемое из @anthropic-ai/claude-agent-sdk/sdk-tools; члены включают:

Agent

Имя инструмента: Agent. Предыдущее имя Task всё ещё принимается как псевдоним, и массив tools в сообщении инициализации SDKSystemMessage в настоящее время перечисляет этот инструмент как Task для обратной совместимости.
Поле mode объявлено устаревшим и игнорируется в Claude Code v2.1.212 или позже. Субагент работает либо в режиме разрешений родительской сессии, либо в режиме permissionMode из своего определения, а правила наследования для субагентов решают, в каком из них.
Запускает нового агента для автономной обработки сложных многошаговых задач.

AskUserQuestion

Имя инструмента: AskUserQuestion
Задаёт пользователю уточняющие вопросы во время выполнения. См. Обработка подтверждений и пользовательского ввода для деталей использования.

Bash

Имя инструмента: Bash
Выполняет команды Bash с опциональным таймаутом и фоновым выполнением. Рабочий каталог сохраняется между командами, включая команды, запущенные в более поздних ходах многоходовой сессии; состояние оболочки, такое как экспортированные переменные окружения, не сохраняется. Об ограничениях на то, какие изменения каталога переносятся, см. Что сохраняется между командами. О том, что определяет верхний предел для команд переднего плана, см. Таймаут и лимиты вывода. О лимите времени для фоновых команд см. Лимит времени для фоновых команд.

Monitor

Имя инструмента: Monitor
Запускает фоновый источник и доставляет каждое событие Claude, чтобы он мог реагировать без опроса: command запускает скрипт и выдаёт одно событие на строку stdout, а ws открывает WebSocket и выдаёт одно событие на текстовый фрейм. Укажите ровно один из command или ws. Источник ws требует Claude Code v2.1.195 или позже. timeout_ms — это крайний срок наблюдения в миллисекундах. По умолчанию он равен 300000 и принимает значения до 3600000. Эффективный крайний срок составляет максимум 1800000, то есть 30 минут, поэтому большее принятое значение сокращается до него. В крайний срок наблюдение заканчивается, и Claude получает одно уведомление, чтобы он мог начать новое наблюдение, если оно ему всё ещё нужно. Экспортированный тип отмечает timeout_ms как обязательный, потому что схема заполняет значение по умолчанию; вызов, который его опускает, проходит валидацию. Когда Monitor запускает команду, он следует тем же правилам разрешений, что и Bash; наблюдение WebSocket запрашивает подтверждение отдельно. См. справочник по инструменту Monitor о поведении и доступности у провайдеров.

TaskOutput

Удалён в Claude Code v2.1.277 вместе с его типом TaskOutputInput. Ранее получал вывод выполняющейся или завершённой фоновой задачи; теперь Claude читает выходной файл фоновой задачи с помощью Read. Запись disallowedTools или правило запрета, которое всё ещё называет TaskOutput, игнорируется без предупреждения.

Edit

Имя инструмента: Edit
Выполняет точные замены строк в файлах.

Read

Имя инструмента: Read
Читает файлы из локальной файловой системы, включая текст, изображения, PDF и Jupyter notebooks.
  • Используйте pages для диапазонов страниц PDF (например, "1-5").
  • allow_large позволяет Claude прочитать текстовый файл сверх обычных ограничений размера, когда в контекстном окне сессии есть место. Требует Agent SDK v0.3.296 или позже, который включает Claude Code v2.1.296.
Для PDF Claude получает содержимое файла внутри содержимого tool_result вызова Read. Чтение, которое возвращает вывод pdf, содержит блок сводки text, за которым следует блок document. Чтение, которое возвращает вывод parts, содержит блок сводки text, за которым следует один блок на каждую извлечённую страницу: блок image или блок text, называющий страницу, когда Claude Code не смог отобразить её как изображение. До Agent SDK v0.3.242 Claude Code доставлял содержимое файла как отдельное сообщение user после результата инструмента.

Write

Имя инструмента: Write
Записывает файл в локальную файловую систему, перезаписывая его, если он существует.

Glob

Имя инструмента: Glob
Быстрое сопоставление паттернов файлов, которое работает с кодовой базой любого размера.

Grep

Имя инструмента: Grep
Инструмент поиска на основе ripgrep с поддержкой регулярных выражений.

TaskStop

Имя инструмента: TaskStop
Останавливает выполняющуюся фоновую задачу или оболочку по ID. Начиная с v2.1.198, task_id также принимает участника команды агентов или именованного фонового агента по ID агента или имени.

NotebookEdit

Имя инструмента: NotebookEdit
Редактирует ячейки в файлах Jupyter notebook.

WebFetch

Имя инструмента: WebFetch
Получает содержимое по URL и обрабатывает его с помощью модели AI. offset — это число символов, которые нужно пропустить от начала страницы. Claude устанавливает его, чтобы продолжить чтение длинной страницы. Это поле требует Agent SDK v0.3.290 или позже.

WebSearch

Имя инструмента: WebSearch
Выполняет поиск в вебе и возвращает отформатированные результаты.

Workflow

Имя инструмента: Workflow
Запускает динамический workflow: скрипт, который оркестрирует множество субагентов в фоне и возвращает один консолидированный результат. Инструмент Workflow доступен в Agent SDK v0.3.149 и позже. Требуется хотя бы один из script, name или scriptPath.

TodoWrite

Имя инструмента: TodoWrite
Создаёт структурированный список задач для отслеживания прогресса и управляет им.
Следующие инструменты доступны по умолчанию только на моделях Claude Opus 4.7, Claude Sonnet 4.6, Claude Haiku 4.5 и более ранних моделях. На всех остальных моделях, включая идентификаторы моделей, которые Claude Code не распознает, они недоступны, если вы не согласитесь на их использование:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
Везде, где доступны инструменты, Claude Code предоставляет четыре инструмента Task, или TodoWrite вместо них, когда вы устанавливаете CLAUDE_CODE_ENABLE_TASKS=0.Этот набор по умолчанию применяется в Claude Code v2.1.268 и более поздних версиях, которые TypeScript Agent SDK поставляет начиная с версии v0.3.268.См. Доступность модели, чтобы включить эту возможность.

TaskCreate

Имя инструмента: TaskCreate
Создаёт одну задачу и возвращает назначенный ей ID.

TaskUpdate

Имя инструмента: TaskUpdate
Частично обновляет одну задачу по ID. Установите status в "deleted", чтобы удалить её.

TaskGet

Имя инструмента: TaskGet
Возвращает полные сведения об одной задаче или null, если ID не найден.

TaskList

Имя инструмента: TaskList
Возвращает снимок всех задач в текущем списке.

ExitPlanMode

Имя инструмента: ExitPlanMode
Выходит из режима планирования. Поле allowedPrompts объявлено устаревшим и игнорируется; Claude Code всё ещё принимает его, чтобы существующие вызывающие стороны и транскрипты проходили валидацию. До v2.1.205 оно запрашивало разрешения Bash на основе промптов для реализации плана.

ListMcpResources

Имя инструмента: ListMcpResourcesTool
Перечисляет доступные ресурсы MCP с подключённых серверов.

ReadMcpResource

Имя инструмента: ReadMcpResourceTool
Читает определённый ресурс MCP с сервера.

EnterWorktree

Имя инструмента: EnterWorktree
Создаёт временный git worktree для изолированной работы и входит в него. Передайте path, чтобы переключиться в существующий worktree вместо создания нового. При первом входе целевой каталог должен быть зарегистрированным worktree текущего репозитория или, в многорепозиторном рабочем пространстве, репозитория, вложенного в него; из сессии worktree он должен находиться в .claude/worktrees/ репозитория сессии. name и path являются взаимоисключающими.

ExitWorktree

Имя инструмента: ExitWorktree
Выходит из текущего git worktree и возвращается в исходный рабочий каталог. Действие keep оставляет worktree и ветку на диске, а remove удаляет оба. discard_changes должно быть true при удалении worktree, в котором есть незафиксированные файлы или коммиты без слияния.

EnterPlanMode

Имя инструмента: EnterPlanMode
Входит в режим планирования, в котором Claude исследует задачу и представляет план перед внесением изменений.

CronCreate

Имя инструмента: CronCreate
Планирует запуск промпта по расписанию cron из 5 полей в локальном времени. Установите recurring в false, чтобы он сработал один раз при следующем совпадении. Задачи по умолчанию ограничены сессией, а возобновление с --resume или --continue восстанавливает задачи, срок действия которых не истёк. См. Запланированные задачи. Установка durable в true запрашивает сохранение в .claude/scheduled_tasks.json, чтобы задача пережила перезапуски. Долговременное планирование доступно не в каждой сессии: когда оно недоступно, Claude Code принимает durable: true, но создаёт задачу только для текущей сессии. Проверьте поле durable в выводе, чтобы узнать, была ли задача сохранена.

CronDelete

Имя инструмента: CronDelete
Удаляет запланированную задачу cron по ID, возвращённому CronCreate.

CronList

Имя инструмента: CronList
Перечисляет запланированные задачи cron: долговременные задачи из .claude/scheduled_tasks.json и задачи только для текущей сессии.

ScheduleWakeup

Имя инструмента: ScheduleWakeup
Планирует одноразовое пробуждение, которое запускает заданный промпт после задержки. Этот инструмент лежит в основе команды /loop с самостоятельным темпом. Среда выполнения ограничивает delaySeconds диапазоном от 60 до 3600 секунд. Поля delaySeconds, reason, prompt и noop обязательны, если stop не равно true. noop: true сообщает о пробуждении, при котором ничего не изменилось. Установка stop: true отменяет ожидающее пробуждение и завершает /loop с самостоятельным темпом. Поле stop требует Claude Code v2.1.202 или позже. См. строку ScheduleWakeup в справочнике по инструментам.

RemoteTrigger

Имя инструмента: RemoteTrigger
Управляет Routines — запланированными и запускаемыми по триггеру сессиями Claude Code, размещёнными в облаке. Этот инструмент лежит в основе команды /schedule. trigger_id обязателен для действий get, update, run и list_runs. body обязателен для create, update и create_webhook_trigger и опционален для run. create_webhook_trigger присоединяет источник событий к существующей routine, например событие GitHub, которое её запускает. body указывает источник, события и routine для запуска. Требует Claude Code v2.1.225 или позже. list_runs перечисляет недавние запуски routine, а get_run_log читает лог одного запуска. session_id указывает запуск для чтения из результата list_runs, а cursor позволяет постранично перебирать результаты любого из этих действий. Оба действия требуют Claude Code v2.1.227 или позже. Этот инструмент доступен, только когда сессия аутентифицирована с учётной записью claude.ai на плане с включёнными Routines, и отсутствует, когда политика вашей организации отключает облачные сессии. В Claude Code v2.1.227 или позже инструмент также отсутствует, когда Owner отключил routines для организации. До v2.1.227 сессия, в которой был отключён только переключатель routines, всё ещё показывала инструмент, а сервер отклонял его вызовы.

PushNotification

Имя инструмента: PushNotification
Отправляет пользователю проактивное push-уведомление. Держите message короче 200 символов, потому что мобильные операционные системы обрезают более длинный текст. См. строку PushNotification в справочнике по инструментам о доступности у провайдеров; доставка push-уведомлений проходит через инфраструктуру, размещённую Anthropic, которая недоступна из Amazon Bedrock, Claude Platform on AWS, Google Cloud’s Agent Platform или Microsoft Foundry.

REPL

Удалён в v2.1.275. До v2.1.274 включительно экспериментальный инструмент REPL можно было включить с помощью CLAUDE_CODE_REPL=1 в опции env.

ReportFindings

Имя инструмента: ReportFindings
Сообщает о результатах код-ревью в виде структурированного списка, чтобы Claude Code мог отобразить их, а не выводить как текст. Результаты упорядочены от наиболее серьёзных, максимум 32 за вызов, и массив пуст, если ни один результат не остался после проверки. Требует Claude Code v2.1.196 или позже. level опционален и содержит уровень effort, который Claude сообщает для ревью. Claude Code не сравнивает его с уровнем, на котором выполнялось ревью, поэтому они могут различаться. Каждый результат содержит следующие поля:
  • file: путь относительно репозитория к файлу, в котором находится результат. Опциональный line — это строка (нумерация с 1), к которой он привязан.
  • summary: утверждение о дефекте в одно предложение. failure_scenario описывает конкретные входные данные и состояние, которые приводят к неправильному выводу или сбою.
  • short_summary: опциональная сжатая метка длиной не более 60 символов для компактного отображения. Требует Claude Code v2.1.212 или позже.
  • category: опциональный короткий слаг типа результата в формате kebab-case, например correctness или test-coverage. Требует Claude Code v2.1.199 или позже.
  • verdict: устанавливается, когда выполнялся проход верификации; отсутствует при ревью только с встроенной проверкой.
  • outcome: устанавливается только при повторном сообщении после применения исправлений.

Artifact

Имя инструмента: Artifact
Публикует локальный файл .html или .md как размещённую страницу артефакта или перечисляет опубликованные артефакты пользователя. Опустите action или передайте "publish", чтобы опубликовать file_path, который обязателен для действия публикации. Каждое поле ниже относится к публикации:
  • icon: одно короткое общее слово для значка артефакта на вкладке браузера, например chart или map. Claude включает его при первой публикации и опускает при обновлении, что сохраняет сохранённый значок артефакта.
  • favicon: устаревшее, и Claude его опускает.
  • title: задаёт название опубликованной страницы на вкладке браузера и в галерее, когда в HTML-файле нет тега <title>.
  • url: указывает существующий артефакт, который нужно обновить на месте вместо создания нового.
force — это крайняя мера перезаписи, которая отбрасывает более новую версию, опубликованную другой сессией. При конфликте неудачная публикация возвращает более новое содержимое; Claude переносит свои изменения на это содержимое или повторно читает артефакт и публикует снова. Передавайте force, только когда пользователь явно просит отбросить эту версию. Передайте "list", чтобы перечислить опубликованные артефакты пользователя; его могут сопровождать только limit и scope. scope по умолчанию равен "mine", что перечисляет артефакты, которыми владеет пользователь; "shared" перечисляет артефакты, которыми другие люди поделились с пользователем, а "all" перечисляет и те, и другие. limit задаёт максимальное число артефактов, возвращаемых в списке, от 1 до 200. Значение limit больше 50 требует Agent SDK v0.3.292 или позже. Без limit список возвращает до 25 артефактов.
  • capabilities: возможности среды выполнения, которые использует опубликованная страница, с ключами по названию возможности, например коннекторы, которые может вызывать страница. Сервис артефактов проверяет объявление и отклоняет публикацию, которая указывает возможность, недоступную учётной записи, или задаёт для неё недопустимую конфигурацию. Передайте {}, чтобы очистить сохранённое объявление, и опустите поле при повторном развёртывании, чтобы сохранить его. Требует Agent SDK v0.3.235 или позже.
  • contract: версия среды выполнения, с которой работает опубликованная страница. Опустите её, чтобы сохранить текущую версию артефакта, передайте "latest" для обновления или передайте конкретную версию для закрепления или отката. Требует Agent SDK v0.3.235 или позже.
Типы экспортируются, но в сессиях Agent SDK инструмент по умолчанию отключён. Публикация также требует выполнения всех условий из таблицы доступности артефактов, которым сессии, аутентифицированные с помощью API-ключа, не удовлетворяют.

Projects

Имя инструмента: Projects
Читает и записывает Project claude.ai, присоединённый к сессии. Выбирает операцию по method:
  • project_info: возвращает метаданные проекта и список документов.
  • project_read: читает один документ по path.
  • project_search: выполняет запрос к базе знаний проекта с помощью query. n ограничивает число совпадений и по умолчанию равно 5.
  • project_write: создаёт или заменяет документ по path из ровно одного из источников: content, содержащего встроенный текст, или local_path, указывающего файл внутри рабочего каталога. present_to_user: true отмечает записанный документ как итоговый результат, который пользователю нужно увидеть.
  • project_delete: удаляет документ по path.

ReadMcpResourceDir

Имя инструмента: ReadMcpResourceDirTool
Перечисляет непосредственных потомков ресурса-каталога на MCP-сервере. Можно использовать только с сервером, который объявил поддержку перечисления каталогов; перечисление не рекурсивное. Перечисление каталогов включено не в каждой сессии: когда оно отключено, вызов возвращает пустой список resources, а поле error сообщает, что перечисление каталогов не включено.

RefreshMcpTools

Имя инструмента: RefreshMcpTools
Повторно запрашивает список инструментов подключённых MCP-серверов и применяет любые изменения. Типы экспортируются, но Claude Code регистрирует инструмент, только когда вы устанавливаете CLAUDE_CODE_ENABLE_REFRESH_MCP_TOOLS=1 в опции env, и только в сессиях хотя бы с одним MCP-сервером. Требует Claude Code v2.1.211 или позже.

ShowOnboardingRolePicker

Имя инструмента: ShowOnboardingRolePicker
Отображает кликабельный ряд чипов выбора роли во время онбординга Cowork, чтобы пользователь мог выбрать свою роль и получить установленный соответствующий плагин. Не принимает аргументов; список ролей определяется клиентом. Вызов блокируется до ответа пользователя.

McpInput

Имя инструмента: динамические имена инструментов MCP вида mcp__<server>__<tool>
Аргументы инструментов MCP — это открытый объект: каждый сервер определяет собственные параметры, поэтому тип не накладывает ограничений на имена полей или значения. Поля, которые принимает конкретный инструмент, смотрите в собственной схеме инструментов сервера.

Типы вывода инструментов

Документация схем вывода для встроенных инструментов Claude Code. Эти типы экспортируются из @anthropic-ai/claude-agent-sdk/sdk-tools и представляют фактические данные ответа, возвращаемые каждым инструментом.

ToolOutputSchemas

Объединение типов вывода инструментов, экспортируемое из @anthropic-ai/claude-agent-sdk/sdk-tools; в него входят:

Agent

Имя инструмента: Agent. Прежнее имя Task по-прежнему принимается как псевдоним, а массив tools в init-сообщении SDKSystemMessage в настоящее время указывает этот инструмент как Task для обратной совместимости.
Возвращает результат работы субагента. Варианты различаются по полю status: "completed" для завершённых задач, "async_launched" для фоновых задач и "remote_launched" для задач, которые Claude Code отправил в облачную сессию; в этом случае sessionUrl ссылается на эту сессию, а taskId её идентифицирует. В варианте completed поле resolvedModel указывает модель, с которой начал работу субагент; она может отличаться от запрошенного входного параметра model, если действует availableModels или другое переопределение. Для этого поля требуется Claude Code v2.1.174 или новее. В варианте async_launched оно указывает модель, которая использовалась в момент перевода задачи в фоновый режим. modelsUsed перечисляет модели, которые использовал субагент, по порядку. Поле присутствует только в том случае, если во время выполнения произошла смена модели, и модель появляется в списке повторно, если выполнение снова переключилось на неё. В варианте async_launched список охватывает модели, использованные до перевода в фоновый режим. Как для modelsUsed, так и для поведения resolvedModel при переводе в фоновый режим требуется Claude Code v2.1.212 или новее. Если Claude Code сохранил изолированный worktree субагента, поле worktreePath в результате completed указывает, где его найти. worktreeBranch — его ветка; поле присутствует, если Claude Code создал worktree с помощью git. Claude Code заполняет usage и totalTokens на основе последнего запроса субагента к API, а не всего выполнения, поэтому usage.service_tier — это строка уровня обслуживания, которую API сообщил для этого запроса. Если поле usage.output_tokens_details.thinking_tokens присутствует, оно содержит количество выходных токенов этого запроса, которые были токенами мышления. Для поля output_tokens_details требуется TypeScript SDK v0.3.228 или новее, в состав которого входит Claude Code v2.1.228. Для поля fallback_credit требуется TypeScript SDK v0.3.285 или новее, в состав которого входит Claude Code v2.1.285. usage.output_tokens_details по смыслу соответствует Usage.output_tokens_details, но ограничено этим последним запросом, при этом здесь каждый его уровень необязателен. Проверяйте как объект, так и поле, например usage.output_tokens_details?.thinking_tokens ?? 0, а не обращайтесь к нему напрямую. До v2.1.207 опубликованный тип был уже. В нём отсутствовали worktreePath, worktreeBranch, citations, toolStats.frameCount, а также поля использования inference_geo, speed и iterations, а service_tier имел тип "standard" | "priority" | "batch". Поля, помеченные в типе как необязательные, могут отсутствовать в результатах, записанных более ранними версиями.

AskUserQuestion

Имя инструмента: AskUserQuestion
Возвращает заданные вопросы и ответы пользователя. Поле response устанавливается, если пользователь ввёл ответ в свободной форме вместо ответов на структурированные вопросы; если оно присутствует, Claude получает «The user responded: …» вместо списка ответов по каждому вопросу.

Bash

Имя инструмента: Bash
Поля stdout, stderr и backgroundTaskId содержат: timedOutAfterMs — таймаут в миллисекундах; устанавливается, если команда достигла таймаута и была переведена в фоновый режим, а не запущена в нём явно. backgroundCwdHint устанавливается, если фоновая команда содержала встроенную команду смены каталога, например cd, pushd, popd или chdir, и сообщает, что рабочий каталог сессии не изменился. Для обоих полей требуется Claude Code v2.1.210 или новее. Если фоновая команда принадлежит субагенту, работающему на переднем плане, команда завершается, когда завершается выполнение этого субагента. Claude Code устанавливает для таких команд backgroundEndsWithFinalResponse в значение true и опускает это поле, если команда переживает ход, как это происходит с командами, запущенными основным диалогом или фоновыми субагентами. Для этого поля требуется Claude Code v2.1.227 или новее. Claude Code устанавливает gitOperation.commit.branch в значение ветки, указанной в итоговой строке коммита git, и опускает это поле для коммита, сделанного в состоянии detached HEAD. Для этого поля требуется Agent SDK v0.3.227 или новее. Claude Code сообщает о команде gh pr reopen как о действии PR reopened; для этого требуется Agent SDK v0.3.234 или новее.

Monitor

Имя инструмента: Monitor
Возвращает идентификатор фоновой задачи для запущенного монитора. Используйте этот идентификатор с TaskStop, чтобы досрочно отменить наблюдение.

Edit

Имя инструмента: Edit
Возвращает структурированный diff операции редактирования.

Read

Имя инструмента: Read
Возвращает содержимое файла в формате, соответствующем типу файла. Варианты различаются по полю type.

Write

Имя инструмента: Write
Возвращает результат записи со структурированной информацией diff. Содержимое originalFile и structuredPatch зависит от записи:
  • Для вновь созданного файла originalFile равно null, а structuredPatch пусто
  • При перезаписи originalFile содержит прежнее содержимое, за исключением случаев, когда это содержимое больше примерно 10 МБ: тогда Claude Code пропускает diff и возвращает originalFile равным null и пустой structuredPatch
  • structuredPatch также пусто, если запись ничего не изменила или построение diff превысило таймаут

Glob

Имя инструмента: Glob
Возвращает пути к файлам, соответствующие glob-шаблону, отсортированные по времени изменения. Для totalMatches и countIsComplete требуется Claude Code v2.1.191 или новее. totalMatches сообщает количество совпавших файлов до усечения. Если countIsComplete равно false, totalMatches является нижней границей, поскольку лежащий в основе поиск усёк собственный вывод.

Grep

Имя инструмента: Grep
Возвращает результаты поиска. Форма зависит от mode: список файлов, содержимое с совпадениями или количество совпадений. В режиме count поля numFiles и numMatches являются итогами по всему набору результатов, а не по странице пагинации. До v2.1.208 параметры head_limit или offset, усекавшие перечисленные записи, усекали и эти итоги. Для totalFiles требуется Claude Code v2.1.208 или новее; поле сообщает общее количество результатов до пагинации с помощью head_limit и offset в режиме files_with_matches. Для totalLines требуется Claude Code v2.1.210 или новее; поле сообщает общее количество строк до пагинации в режиме content.

TaskStop

Имя инструмента: TaskStop
Возвращает подтверждение после остановки фоновой задачи.

NotebookEdit

Имя инструмента: NotebookEdit
Возвращает результат редактирования блокнота с исходным и обновлённым содержимым файла.

WebFetch

Имя инструмента: WebFetch
Возвращает полученное содержимое с HTTP-статусом и метаданными. artifactRead — собственная запись Claude Code о чтении артефакта; присутствует, только если Claude получил артефакт, в который сессия может публиковать. Claude Code считывает её при возобновлении сессии, чтобы последующая публикация основывалась на правильной версии; вашему коду не нужно ничего с ней делать. slug указывает артефакт, ver — версия, зафиксированная при чтении (отсутствует, если версия не была зафиксирована), а seeded: false помечает чтение, при котором полный исходный код не дошёл до Claude. Для поля seeded требуется Agent SDK v0.3.239 или новее.

WebSearch

Имя инструмента: WebSearch
Возвращает результаты поиска в интернете.

Workflow

Имя инструмента: Workflow
Возвращается сразу после того, как инструмент принял вызов. Итоговый результат поступает позже в виде завершения задачи. Проверьте error, прежде чем считать запуск начавшимся: скрипт, не прошедший проверку синтаксиса, возвращает status: "async_launched" с установленным error и никогда не выполняется.

TodoWrite

Имя инструмента: TodoWrite
Возвращает предыдущий и обновлённый списки задач.
Следующие инструменты доступны по умолчанию только на моделях Claude Opus 4.7, Claude Sonnet 4.6, Claude Haiku 4.5 и более ранних моделях. На всех остальных моделях, включая идентификаторы моделей, которые Claude Code не распознает, они недоступны, если вы не согласитесь на их использование:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
Везде, где доступны инструменты, Claude Code предоставляет четыре инструмента Task, или TodoWrite вместо них, когда вы устанавливаете CLAUDE_CODE_ENABLE_TASKS=0.Этот набор по умолчанию применяется в Claude Code v2.1.268 и более поздних версиях, которые TypeScript Agent SDK поставляет начиная с версии v0.3.268.Чтобы включить эту возможность, см. Доступность моделей.

TaskCreate

Имя инструмента: TaskCreate
Возвращает созданную задачу с присвоенным ей идентификатором.

TaskUpdate

Имя инструмента: TaskUpdate
Возвращает результат обновления, включая сведения о том, какие поля изменились.

TaskGet

Имя инструмента: TaskGet
Возвращает полную запись задачи или null, если идентификатор не найден.

TaskList

Имя инструмента: TaskList
Возвращает снимок всех задач в текущем списке.

ExitPlanMode

Имя инструмента: ExitPlanMode
Возвращает состояние плана после выхода из режима планирования.

ListMcpResources

Имя инструмента: ListMcpResourcesTool
Возвращает массив доступных ресурсов MCP.

ReadMcpResource

Имя инструмента: ReadMcpResourceTool
Возвращает содержимое запрошенного ресурса MCP.

EnterWorktree

Имя инструмента: EnterWorktree
Возвращает информацию о git worktree.

ExitWorktree

Имя инструмента: ExitWorktree
Возвращает выполненное действие и сведения о worktree, из которого был выполнен выход.

EnterPlanMode

Имя инструмента: EnterPlanMode
Возвращает подтверждение входа в режим планирования.

CronCreate

Имя инструмента: CronCreate
Возвращает идентификатор задания и понятное человеку описание расписания.

CronDelete

Имя инструмента: CronDelete
Возвращает идентификатор удалённого задания.

CronList

Имя инструмента: CronList
Возвращает запланированные задания cron: постоянные задания из .claude/scheduled_tasks.json и задания текущей сессии, существующие только в её рамках. Задание, существующее только в рамках сессии, содержит durable: false; у заданий, считанных с диска, это поле отсутствует.

ScheduleWakeup

Имя инструмента: ScheduleWakeup
Возвращает момент срабатывания пробуждения в виде метки времени в миллисекундах от эпохи, фактически использованную задержку и сведения о том, была ли запрошенная задержка ограничена. Поле stopped равно true, если вызов завершил цикл с помощью stop: true. Для него требуется Claude Code v2.1.202 или новее. Поле cancelledWakeups содержит количество ожидающих пробуждений, отменённых вызовом stop: true. Значение 0 означает, что ожидающих пробуждений не было; повторяющийся cron /loop вызовом stop: true не отменяется. Для него требуется Claude Code v2.1.206 или новее.

RemoteTrigger

Имя инструмента: RemoteTrigger
Возвращает статус и тело ответа API для операции с триггером.

PushNotification

Имя инструмента: PushNotification
Возвращает сведения о доставке, в том числе о том, было ли отправлено push-уведомление или локальное уведомление, и почему доставка была пропущена.

ReportFindings

Имя инструмента: ReportFindings
Возвращает количество сообщённых находок, значение level, переданное Claude, и находки, возвращённые обратно для тела результата. Требуется Claude Code v2.1.196 или новее. Для возвращаемого поля short_summary требуется Claude Code v2.1.212 или новее.

Artifact

Имя инструмента: Artifact
Для действия публикации возвращает url опубликованной страницы и локальный path, который был опубликован; updated равно true, если публикация повторно развернула существующий артефакт, а warnings содержит предупреждения, возникшие при публикации. Действие получения списка вместо этого возвращает строки artifacts, а truncated устанавливается, если артефактов больше, чем запрошенный лимит. В списках, область действия которых отличается от "mine", каждая строка содержит rel, указывающее, принадлежит ли артефакт пользователю или им поделились с пользователем, а поле scope в выводе фиксирует, какая нестандартная область действия сформировала список; в списках по умолчанию оба поля отсутствуют. Результат получения списка также сообщает total — количество артефактов, соответствующих области действия списка, включая те, что выходят за пределы limit. Если установлено total_at_least, это число является нижней границей, и артефактов может быть больше. Для обоих полей требуется Agent SDK v0.3.292 или новее.

Projects

Имя инструмента: Projects
Варианты различаются по полю method, как и во входных данных. project_read возвращает небольшие текстовые документы непосредственно в content, а более крупные документы записывает по пути local_file; project_search возвращает RAG-результаты hits с rag: true, если индекс проекта доступен, а в противном случае возвращает список путей docs.

ReadMcpResourceDir

Имя инструмента: ReadMcpResourceDirTool
Возвращает непосредственные дочерние элементы ресурса-каталога. Подкаталоги отображаются с mimeType "inode/directory"; error содержит понятное человеку сообщение, если серверу не удалось получить список содержимого каталога.

RefreshMcpTools

Имя инструмента: RefreshMcpTools
Возвращает по одной записи на сервер: refreshed означает, что повторно запрошенный список инструментов был применён, error означает, что повторный запрос завершился ошибкой и был сохранён прежний набор инструментов, а not_connected означает, что у сервера нет активного подключения для запроса.

ShowOnboardingRolePicker

Имя инструмента: ShowOnboardingRolePicker
Возвращает выбор пользователя: role, если пользователь выбрал роль из предложенных вариантов или ввёл её, и dismissed: true, если пользователь закрыл окно выбора. Пустой объект означает, что пользователь одобрил вызов, не выбрав роль.

McpOutput

Имя инструмента: динамические имена инструментов MCP вида mcp__<server>__<tool>
Результаты инструментов MCP возвращаются в виде строки или массива блоков содержимого в зависимости от сервера. Завершающая ветка с простым объектом в экспортируемом типе является артефактом генерации схемы. Для результата, который также содержит structuredContent или ссылки на ресурсы, см. tool_use_result, где это значение хранится в члене content. Во время выполнения значение также может быть undefined, хотя экспортируемый тип этого не отражает.

Типы разрешений

PermissionUpdate

Операции для обновления разрешений.

PermissionBehavior

PermissionUpdateDestination

PermissionRuleValue

Другие типы

ApiKeySource

Источник API-ключа для запросов сессии, сообщаемый как apiKeySource в инициализирующем сообщении SDKSystemMessage.
Claude Code сообщает одно из четырёх значений: Agent SDK v0.3.234 и более поздние версии перечисляют в типе эти четыре значения. Тип также сохраняет user, project, org, temporary и oauth, чтобы старый код продолжал компилироваться, но Claude Code их не сообщает.

SdkBeta

Доступные бета-функции, которые можно включить через опцию betas. См. Beta headers для дополнительной информации.
В Claude API бета context-1m-2025-08-07 снята с поддержки для Claude Sonnet 4.5 и Claude Sonnet 4. Если вы по-прежнему передаёте её с любой из этих моделей, запросы, превышающие стандартное контекстное окно в 200K токенов, возвращают ошибку, поэтому удалите её из betas. Чтобы запустить сессию с контекстным окном в 1M токенов, установите в model модель, которая по умолчанию работает с окном 1M, например claude-sonnet-5-5 или claude-opus-5-5. Для модели, которая получает 1M только через свой вариант [1m], добавьте суффикс к идентификатору модели, как в claude-opus-4-6[1m].

SlashCommand

Информация о доступной команде.
builtin имеет значение true в строке, когда команда является собственной командой Claude Code и ввод /name её запускает. Поле отсутствует для команды, определённой пользователем, проектом, плагином или MCP-сервером, а также для встроенной команды, которую одна из них заменяет по имени. Требует Agent SDK v0.3.277 или более поздней версии.

ModelInfo

Информация о доступной модели.

AgentInfo

Информация о доступном субагенте, который может быть вызван через инструмент Agent.

McpServerProvenance

MCP-сервер, который обслуживает инструмент mcp__*, и источник определения этого сервера. Входные данные хуков PreToolUse, PostToolUse, PostToolUseFailure, PermissionRequest и PermissionDenied содержат его как mcp_server, а опции CanUseTool содержат его как mcpServer. Оба опускают его для инструментов, которые не поступают от MCP-сервера.
source принимает одно из следующих значений. Набор открыт, поэтому рассматривайте незнакомое значение как настроенный источник, но никогда не как sdk:
  • sdk: встроенный в процесс сервер, который зарегистрировало ваше приложение. Зарегистрировать такой сервер может только приложение-хост SDK, поэтому настроенный сервер никогда не сообщает sdk, независимо от его имени.
  • plugin: сервер, который предоставляет плагин. Его name имеет форму с областью plugin:<plugin-name>:<server-name>, описанную в разделе MCP-серверы, предоставляемые плагинами.
  • Область действия конфигурации: user, project, local, dynamic, managed, enterprise, claudeai или agent. Сервер из .mcp.json сообщает project, а области действия установки MCP определяют local, project и user. Серверы, которые ваше приложение передаёт в опции mcpServers, кроме встроенных в процесс SDK-серверов, сообщают dynamic.
Основывайте решения о доверии на source, а не на name или префиксе имени инструмента mcp__<server>__. Для любого источника, кроме sdk, name является недоверенным текстом: экранируйте его перед отображением. McpServerProvenance и поля, которые его содержат, требуют Agent SDK v0.3.274 или более поздней версии.

McpServerStatus

Статус подключённого MCP-сервера.
source указывает, откуда поступило определение сервера, с теми же значениями и правилом доверия, что и source в McpServerProvenance. Поле требует Agent SDK v0.3.274 или более поздней версии и отсутствует в более ранних версиях. _meta в записи tools содержит члены MCP Apps из _meta этого инструмента, чтобы ваше приложение могло найти ресурс ui:// для отображения с помощью readMcpResource(). Claude Code пропускает объект ui и устаревшую плоскую строку ui/resourceUri и скрывает все остальные ключи. Внутри ui значение resourceUri является строкой ui://, а visibility — массивом из "model" и "app", когда сервер их устанавливает, а любой другой член пропускается без изменений. Claude Code отбрасывает любой из этих ключей, если значение имеет неверный формат, и опускает _meta у инструмента, который не объявляет ни один из них. Поле присутствует, только когда capabilities инициализирующего сообщения включают mcp_tool_ui_meta_v1, и требует TypeScript Agent SDK v0.3.280 или более поздней версии.

McpServerStatusConfig

Конфигурация MCP-сервера в том виде, в каком её сообщает mcpServerStatus(). Это объединение всех типов транспорта MCP-сервера.
См. McpServerConfig для деталей по каждому типу транспорта.

AccountInfo

Информация об учётной записи аутентифицированного пользователя.

ModelUsage

Статистика использования для каждой модели, возвращаемая в сообщениях результата. Значение costUSD — это оценка на стороне клиента. См. Отслеживание стоимости и использования для оговорок о биллинге.
thinkingTokens подсчитывает токены размышлений, которые сгенерировала эта модель. outputTokens уже включает их, поэтому не складывайте эти два значения. Поле отсутствует до тех пор, пока ход не выполнится на версии Claude Code, которая его записывает, поэтому возобновлённая сессия, начатая на более ранней версии, сообщает частичный подсчёт. thinkingTokens требует Agent SDK v0.3.257 или более поздней версии. Поля canonicalModel и provider требуют Claude Code v2.1.218 или более поздней версии. canonicalModel — это канонический идентификатор модели, который используется для поиска цены; он может отличаться от исходной строки модели, которая является ключом записи, например когда эта строка является идентификатором конкретного провайдера или псевдонимом. provider называет API-бэкенд, который обслуживал модель, например firstParty, bedrock, vertex, foundry, anthropicAws, mantle или gateway. costBasis называет таблицу цен, по которой был оценён последний запрос модели: list для прейскурантной цены, managed для таблицы modelPricing или unknown, когда ни одна из них не совпала с идентификатором модели. Поле требует Claude Code v2.1.246 или более поздней версии.

ConfigScope

NonNullableUsage

Версия Usage, в которой все nullable поля сделаны non-nullable, кроме fallback_credit, который по-прежнему может быть null.

Usage

Статистика использования токенов. Это тип BetaUsage из @anthropic-ai/sdk.
BetaServerToolUsage, BetaIterationsUsage, BetaOutputTokensDetails и BetaFallbackCreditUsage определены в @anthropic-ai/sdk. output_tokens_details разбивает тарифицируемый вывод по категориям. В настоящее время он содержит одно поле, thinking_tokens: number, подсчитывающее выходные токены, которые модель сгенерировала как внутренние рассуждения, включая разделители блоков размышлений. Поле output_tokens_details требует TypeScript SDK v0.3.228 или более поздней версии, которая поставляется с Claude Code v2.1.228.
  • Биллинг: используйте разбивку для наблюдаемости, а не для биллинга. output_tokens остаётся авторитетным итогом, а output_tokens - thinking_tokens приблизительно соответствует выводу без рассуждений.
  • Что охватывает подсчёт: исходные рассуждения, которые произвела модель и которые могут быть длиннее текста размышлений, возвращённого в теле ответа. API вычисляет его путём повторной токенизации этого исходного текста, поэтому он может отличаться от точного числа сгенерированных моделью токенов на несколько токенов.
  • Потоковая передача: в потоковых сообщениях ассистента эта разбивка, как и output_tokens, является заполнителем message_start и не содержит реального подсчёта, поэтому читайте её из usage сообщения результата, как описано в разделе Чтение выходных токенов из сообщения результата. В сообщении результата thinking_tokens имеет значение 0, когда модель или провайдер не сообщает разбивку.
  • Случаи null: сам output_tokens_details имеет значение null в сообщениях ассистента, которые синтезирует Claude Code, например в сообщениях об ошибках API.
Содержит ли Usage поле fallback_credit, зависит от установленной у вас версии @anthropic-ai/sdk, в которой оно появилось начиная с 0.115.0.

CallToolResult

Тип результата MCP-инструмента (из @modelcontextprotocol/sdk/types.js). structuredContent — это объект JSON, который может быть возвращён вместе с content, включая блоки изображений. См. Возврат структурированных данных.
Один файл, который MCP-инструмент вернул по ссылке. Claude Code создаёт каждую запись из блока resource_link в результате инструмента и доставляет список как resourceLinks в SDKUserMessage.tool_use_result или как resource_links в SDKTaskNotificationMessage, когда вызов завершился в фоне. Требует Agent SDK v0.3.257 или более поздней версии.
Claude Code отбрасывает блок, у которого uri или name не является строкой, и опускает необязательное поле, значение которого не соответствует указанному типу.

ThinkingConfig

Управляет поведением мышления/рассуждений Claude. Имеет приоритет над устаревшим maxThinkingTokens.
Необязательное поле display управляет тем, возвращается ли текст размышлений как "summarized" или "omitted". На Claude Opus 4.7 и более поздних версиях значение API по умолчанию — "omitted", поэтому установите "summarized", чтобы получать содержимое размышлений в блоках thinking. Claude Code не передаёт ваше значение display некоторым провайдерам, например Amazon Bedrock и Google Cloud’s Agent Platform. У этих провайдеров Opus 4.7 и более поздние версии возвращают пустые блоки thinking, даже если вы установите display в "summarized".

SpawnedProcess

Интерфейс для пользовательского запуска процесса (используется с опцией spawnClaudeCodeProcess). ChildProcess уже удовлетворяет этому интерфейсу.

SpawnOptions

Опции, передаваемые пользовательской функции spawn.
Поле signal сообщает вашей функции spawn, когда нужно завершить процесс. Передайте его как опцию signal в spawn() Node или передайте его обработчику завершения вашей VM или контейнера.Этот сигнал не срабатывает в тот же момент, когда отменяется Options.abortController. SDK сначала закрывает stdin процесса и ждёт около двух секунд, чтобы CLI мог корректно завершить работу, а затем отменяет этот сигнал. Чтобы реагировать сразу в момент отмены вызывающей стороной, слушайте собственный Options.abortController.signal, на который ваша функция spawn может ссылаться из охватывающей области видимости.

McpSetServersResult

Результат операции setMcpServers().
Когда вы вызываете setMcpServers(), Claude Code применяет следующие правила:
  • Серверы, которые вызов не называет: вне облачной сессии Claude Code отключает серверы, добавленные предыдущим вызовом setMcpServers(), и встроенные в процесс SDK-серверы, и перечисляет их в removed. Остальные серверы продолжают работать и не перечисляются в removed, в том числе stdio-, HTTP- и SSE-серверы из опции mcpServers, серверы из файлов настроек и серверы, предоставленные плагинами.
  • Серверы, которые вызов называет: Claude Code заменяет stdio-, HTTP- или SSE-сервер, добавленный предыдущим вызовом setMcpServers(), только если его конфигурация отличается от переданной вами. Встроенный в процесс SDK-сервер, уже зарегистрированный под этим именем, остаётся без изменений, поэтому, чтобы заменить его, исключите его из одного вызова и добавьте в следующем.
  • Встроенные серверы, которые CLI запустил при старте: если вызов называет такой сервер, Claude Code отбрасывает эту запись и сообщает о ней в errors.
Промис разрешается после того, как вновь добавленные stdio-, HTTP- и SSE-серверы подключатся или не смогут подключиться, поэтому инструменты подключившихся серверов доступны на следующем ходу. added перечисляет серверы, которые Claude Code добавил или заменил, независимо от того, подключились они или нет. Сервер, который не смог подключиться, появляется и в added, и в errors, с текстом ошибки в errors и строкой failed в mcpServerStatus(). До Claude Code v2.1.257 сервер, попытка подключения которого выбросила исключение, сообщался только в errors.

RewindFilesResult

Результат операции rewindFiles().
skippedLinks подсчитывает отслеживаемые пути, которые перемотка отказалась восстанавливать или удалять ради безопасности ссылок: символическая ссылка, жёсткая ссылка или другой необычный файл по отслеживаемому пути, родительский каталог, который больше не разрешается туда, куда он указывал при создании контрольной точки, или резервная копия, которую не удалось безопасно прочитать. Поле требует Claude Code v2.1.216 или более поздней версии. Предварительный вызов с rewindFiles(userMessageId, { dryRun: true }) никогда его не устанавливает.

SDKStatusMessage

Сообщение об обновлении статуса (например, компактирование).

SDKTaskNotificationMessage

Уведомление о том, что фоновая задача завершилась, завершилась с ошибкой или была остановлена. Фоновые задачи включают команды Bash с run_in_background, наблюдения Monitor и фоновых субагентов. Описание полей run_id и ambient и требования к версии для них см. в SDKTaskStartedMessage.
reason устанавливается, когда задача завершается по причине, отличной от её собственного завершения, сбоя или остановки, и требует Agent SDK v0.3.273 или более поздней версии. Claude Code устанавливает его только в сессиях, которые подключаются через claude.ai: в облачных сессиях, включая сессии на self-hosted раннерах, и в сессиях Remote Control. Локальный вызов query() никогда его не устанавливает. Его единственное значение, worker_restart, означает, что процесс Claude Code, выполнявший задачу, перезапустился. Уведомление имеет статус "stopped", поэтому считайте задачу ни завершённой, ни завершившейся с ошибкой. Когда Claude Code переводит долгий вызов MCP-инструмента в фоновый режим, блок tool_result для этого вызова содержит только заполнитель, а реальный результат вызова приходит в этом уведомлении. Сопоставьте уведомление с вызовом с помощью tool_use_id. В уведомлении completed поле resource_links перечисляет файлы, которые инструмент вернул по ссылке, как записи SDKMcpResourceLink, с теми же ограничениями в 50 ссылок и 64 KiB, что и у tool_use_result.resourceLinks. Claude Code опускает resource_links, когда в результате не было ссылок, а также в уведомлениях для задач, которые не являются вызовами MCP-инструментов. resource_links требует Agent SDK v0.3.257 или более поздней версии. Claude Code добавляет пометку в начало каждого уведомления задачи, которое он отправляет модели, за исключением доставок, помеченных подвидом scheduled-trigger, которые вместо этого оформлены как назначенная задача. Пометка указывает, что никакого ввода от человека не было, поэтому модель не воспринимает уведомление как инструкцию или подтверждение пользователя. Чтобы обнаружить ход с уведомлением задачи, проверяйте origin.kind === "task-notification" в SDKUserMessage или SDKResultMessage, а не сопоставляйте текст пометки. Читайте subkind из того же поля, если вам нужно знать, что вызвало уведомление. До v2.1.205 Claude Code не добавлял пометку к уведомлениям, которые приходили, пока сессия была неактивна.

SDKToolUseSummaryMessage

Сводка использования инструментов в диалоге.

SDKHookStartedMessage

Выдаётся, когда хук начинает выполняться. Claude Code доставляет это сообщение, SDKHookProgressMessage и SDKHookResponseMessage в поток сообщений немедленно, в том числе пока хук SessionStart или Setup ещё выполняется во время запуска сессии. Claude Code с v2.1.169 по v2.1.203 доставлял эти сообщения одним пакетом после завершения хука SessionStart или Setup; v2.1.204 восстановил доставку в реальном времени.

SDKHookProgressMessage

Выдаётся во время выполнения хука с выводом stdout/stderr.

SDKHookResponseMessage

Выдаётся, когда хук завершает выполнение.

SDKToolProgressMessage

Выдаётся периодически во время выполнения инструмента для отображения прогресса.
Пока вызов инструмента выполняется в основном диалоге, Claude Code выдаёт сообщение tool_progress каждые 30 секунд с heartbeat: true. Каждый heartbeat содержит имя инструмента и прошедшее время в секундах, поэтому вы можете отличить долго выполняющийся вызов от зависшей сессии. Claude Code не выдаёт heartbeat для вызовов инструментов внутри субагента. Поле heartbeat требует Agent SDK v0.3.214 или более поздней версии. До v2.1.257 Claude Code также не выдавал heartbeat для вызова инструмента Agent на переднем плане. В сообщениях tool_progress для инструмента Agent, кроме heartbeat, subagent_type называет тип выполняющегося субагента, например general-purpose. subagent_retry присутствует, пока этот субагент выжидает паузу после ошибки API, такой как ограничение частоты запросов или перегрузка, с одним сообщением на каждую повторную попытку. Оба поля требуют Agent SDK v0.3.214 или более поздней версии. Чтобы отобразить индикатор повторной попытки из subagent_retry:
  • Отслеживайте индикатор по parent_tool_use_id, который уникален для каждого субагента. tool_use_id общий для параллельных субагентов из одного хода ассистента, поэтому при отслеживании по нему обновление одного субагента могло бы сбросить индикатор другого.
  • Сбрасывайте индикатор, когда для того же parent_tool_use_id приходит более поздний tool_progress без subagent_retry и без heartbeat: true, или когда приходит сообщение с результатом инструмента. Кадры с heartbeat: true сообщают только о том, что процесс жив, поэтому при их получении сохраняйте индикатор. attempt может превышать max_retries при постоянных повторных попытках, поэтому не определяйте момент сброса по счётчикам.
  • Рассматривайте error_category как токен для выбора собственного текста сообщения, а не как текст для отображения. Возможные значения: rate_limit, overloaded, authentication_failed, server_error, cloud_credential_error и unknown. Обрабатывайте незнакомое значение так же, как unknown, поскольку в более поздних выпусках могут появиться новые значения.

SDKAuthStatusMessage

Выдаётся во время процессов аутентификации.

SDKTaskStartedMessage

Выдаётся, когда задача начинается. Поле task_type имеет значение "local_bash" для команд Bash и наблюдений Monitor, "local_agent" для субагентов или "remote_agent".
run_id идентифицирует один запуск задачи. Когда задача снова запускается под тем же task_id, например субагент, которого Claude возобновляет, новый запуск получает новый run_id. Поле требует Agent SDK v0.3.292 или более поздней версии. Используйте его, чтобы различать запуски одной задачи:
  • Сопоставление сообщений с запуском: сообщения task_started, task_progress, task_updated и task_notification одного запуска содержат один и тот же run_id. Запись запуска в каждом SDKBackgroundTasksChangedMessage также его содержит, как и runId в origin пользовательского сообщения, которое доставляет уведомление этого запуска.
  • Обнаружение запоздавшего сообщения: при сравнении как обычных строк идентификаторы запусков одной задачи сортируются в порядке начала запусков, поэтому сообщение, чей run_id при сортировке идёт раньше отображаемого вами запуска, относится к более раннему запуску. Помимо этого сравнения, рассматривайте значение как непрозрачное.
  • Возврат к task_id: когда сообщение не содержит run_id, например task_notification, которое возобновлённая сессия выдаёт, чтобы закрыть задачу, запущенную предыдущим процессом, относите его к задаче по task_id.
Например, эти три сообщения, сокращённые до идентифицирующих полей, получены от фонового субагента, которого Claude возобновил один раз. Два сообщения task_started имеют общий task_id, а уведомление, завершившее первый запуск, содержит идентификатор первого запуска:
ambient имеет значение true для задач, которые не являются частью работы сессии, например задач, которые Claude Code запускает для собственной работы. Наблюдатели живых обновлений также являются ambient, включая наблюдателей, запрошенных пользователем. Исключайте ambient-задачи из индикаторов активности. Поле требует Agent SDK v0.3.247 или более поздней версии. ambient также присутствует в SDKTaskNotificationMessage и в записях SDKBackgroundTasksChangedMessage. is_backgrounded и spawn_depth описывают, как Claude Code запустил задачу. Оба поля требуют Agent SDK v0.3.238 или более поздней версии.
  • is_backgrounded: Claude Code устанавливает его для задач "local_agent" и "local_bash". true означает, что задача выполняется в фоне. false означает, что задача выполняется на переднем плане, и вызов инструмента, который её запустил, остаётся заблокированным, пока задача не завершится или не перейдёт в фоновый режим.
  • spawn_depth: Claude Code устанавливает его только для задач "local_agent". Субагент, запущенный основным потоком, имеет глубину 1. Субагент, запущенный субагентом глубины 1, имеет глубину 2, и так далее.
Возобновлённый субагент всегда сообщает is_backgrounded: true, потому что Claude Code запускает каждого возобновлённого субагента в фоне. Когда задача на переднем плане позже переходит в фоновый режим, Claude Code сообщает новое значение is_backgrounded в сообщении task_updated, а не отправляет второй task_started. parent_task_id содержит task_id субагента, который запустил эту задачу. Используйте его, чтобы группировать каждую задачу под запустившим её субагентом. Claude Code устанавливает его для задач субагентов, Bash и Monitor. Поле требует Agent SDK v0.3.292 или более поздней версии. Оно отсутствует, когда:
  • Задачу запустил основной поток
  • Claude Code больше не отслеживает родительскую задачу
  • Задачу запустил участник команды или агент внутри рабочего процесса
Родителем может быть задача на переднем плане или задача, которая уже завершилась, поэтому рассматривайте незнакомый идентификатор как отсутствие родителя.

SDKTaskProgressMessage

Выдаётся периодически во время выполнения субагента или фоновой задачи. Описание поля run_id и требование к версии для него см. в SDKTaskStartedMessage. Для задачи субагента поле summary содержит сгенерированную моделью сводку прогресса и заполняется, только когда включён agentProgressSummaries. Для вызова MCP-инструмента, переведённого в фоновый режим, summary содержит последний прогресс, сообщённый MCP-сервером, и не зависит от этой опции.

SDKTaskUpdatedMessage

Выдаётся при изменении состояния фоновой задачи, например когда она переходит из running в completed. Объединяйте patch с вашей локальной картой задач, индексированной по task_id. Поле end_time — это временная метка Unix epoch в миллисекундах, сравнимая с Date.now(). Описание поля run_id и требование к версии для него см. в SDKTaskStartedMessage.

SDKBackgroundTasksChangedMessage

Выдаётся всякий раз, когда меняется набор активных фоновых задач: задача запускается, завершается или принудительно останавливается; агент на переднем плане переводится в фоновый режим; или меняется поле description, ambient или parent_task_id задачи. Описание полей run_id и parent_task_id в каждой записи и требования к версии для них см. в SDKTaskStartedMessage. Массив tasks — это полный активный набор. Заменяйте любой кэшированный набор данными каждого сообщения, а не сопоставляйте события task_started и task_notification, чтобы следующее изменение состава исправляло любое пропущенное событие. Когда задача завершается, её task_updated и task_notification приходят раньше, чем background_tasks_changed, который удаляет её из списка. В остальном порядок относительно событий отдельных задач не определён. При запуске ничего не выдаётся. Сбрасывайте набор до пустого всякий раз, когда процесс CLI сессии запускается или перезапускается, и позвольте следующему изменению состава заново его заполнить. Когда вы отправляете повторный управляющий запрос initialize работающей сессии, например с помощью reinitialize() после разрыва транспорта, Claude Code отправляет после ответа снимок текущего активного набора, даже если он пуст. Таким образом, переподключающийся хост узнаёт, что выполняется, не дожидаясь следующего изменения состава. До Agent SDK v0.3.239 Claude Code не отправлял снимок после повторного initialize. Требуется Claude Code v2.1.203 или более поздней версии.
subagent_type называет тип субагента в записях, у которых task_type имеет значение "local_agent", например general-purpose или имя пользовательского субагента. Поле требует Agent SDK v0.3.293 или более поздней версии.

SDKThinkingTokensMessage

Выдаётся, пока Claude создаёт блок размышлений, в том числе скрытый (redacted). estimated_tokens — это текущая оценка числа токенов размышлений, сгенерированных к этому моменту в текущем блоке, а estimated_tokens_delta — приращение, которое несёт этот кадр. Используйте эти оценки для отображения прогресса. Когда модель или провайдер сообщает разбивку, окончательный подсчёт для цикла агента верхнего уровня — это usage.output_tokens_details.thinking_tokens сообщения результата, который не включает токены субагентов. Требуется Claude Code v2.1.153 или более поздней версии.

SDKSessionStateChangedMessage

Выдаётся, когда Claude Code сообщает состояние сессии. Чтобы получать эти сообщения, установите CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1. Claude Code может сообщать одно и то же состояние несколько раз, поэтому воспринимайте сообщение как текущее состояние сессии, а не как переход. Поле state содержит одно из следующих значений:
  • running: сессия выполняет работу.
  • idle: Claude Code ожидает вашего следующего промпта.
  • requires_action: сессия заблокирована в ожидании ответа на запрос, который она отправила вашему хосту, например на запрос разрешения.
Сообщение idle хода и его сообщение result могут прийти в любом порядке. Чтобы изменить, ожидает ли idle завершения фоновой работы, такой как фоновый субагент или запуск рабочего процесса, см. CLAUDE_CODE_BG_TASKS_REPORT_RUNNING.

SDKFilesPersistedEvent

Выдаётся, когда контрольные точки файлов сохраняются на диск.

SDKRateLimitEvent

Выдаётся, когда сессия сталкивается с ограничением частоты запросов.
Когда errorCode имеет значение "credits_required", отклонение вызвано подпиской claude.ai, у которой исчерпано включённое использование, и сессия не может продолжиться, пока пользователь не купит кредиты использования. canUserPurchaseCredits указывает, может ли аутентифицированный пользователь купить кредиты для учётной записи, а hasChargeableSavedPaymentMethod указывает, сохранён ли способ оплаты. Все три поля отсутствуют в событиях ограничения частоты запросов, которые не являются отклонениями из-за необходимости кредитов. Требуется Claude Code v2.1.181 или более поздней версии.

SDKLocalCommandOutputMessage

Claude Code не выдаёт этот тип сообщения. Когда вы отправляете команду, такую как /context или /usage, в качестве промпта, её вывод приходит как SDKAssistantMessage.

SDKCommandsChangedMessage

Выдаётся, когда набор доступных команд меняется во время сессии, например когда Claude Code обнаруживает скиллы при входе агента в подкаталог. Массив commands — это полный обновлённый список, поэтому заменяйте любой кэшированный список команд этими данными. Вызов supportedCommands() после этого сообщения возвращает тот же обновлённый список, потому что метод отслеживает последнее полученное обновление; для этого требуется Agent SDK v0.3.216 или более поздней версии. В более ранних версиях SDK supportedCommands() возвращает снимок, сделанный при инициализации, и никогда не отражает изменения во время сессии. Claude Code также выдаёт это сообщение, когда промпты MCP-сервера добавляются в список или удаляются из него, например когда сервер завершает подключение после запуска сессии. Для этого требуется Claude Code v2.1.281 или более поздней версии.

SDKPromptSuggestionMessage

Выдаётся после хода, когда включён promptSuggestions и Claude Code сгенерировал предложение для этого хода. Содержит предсказанный следующий промпт пользователя. О ходах, для которых предложения не создаются, см. Когда Claude Code пропускает предложения.

SDKConversationResetMessage

Выдаётся, когда диалог сессии заменяется без завершения сессии. В вызове query() это сообщение порождают только /clear и его псевдонимы. Создайте пустой транскрипт под new_conversation_id и отбросьте любой кэшированный заголовок сессии.
Необязательные поля описывают сброс:
  • trigger: что привело к отбрасыванию диалога. Сбрасывайте транскрипт при каждом сообщении conversation_reset, в том числе когда это поле отсутствует или содержит незнакомое значение.
  • user_message_uuid: uuid пользовательского сообщения, содержавшего /clear. Используйте его, чтобы сопоставить сброс с этим сообщением.
  • timestamp: время сброса в виде строки ISO 8601 в UTC. Используйте его для отображения, а не для упорядочивания сообщений.
Поля trigger, user_message_uuid и timestamp требуют Claude Code v2.1.281 или более поздней версии. Опубликованные типизации SDK объявляют SDKConversationResetMessage в Claude Code v2.1.203 и более поздних версиях. До v2.1.203 SDKMessage ссылался на этот тип, не объявляя его, поэтому сужение по type === "conversation_reset" не проходило проверку типов, когда skipLibCheck был отключён.

AbortError

Пользовательский класс ошибки для операций отмены.
AbortError — единственный класс ошибки в типизированном API SDK. Другие сбои, например завершение процесса Claude Code или невозможность его запуска, отклоняют итерацию сообщений с ошибками, у которых нет класса SDK для сопоставления. В разделе Устранение неполадок эти ошибки перечислены по тексту сообщения, с причиной и способом исправления для каждой.

Конфигурация Sandbox

SandboxSettings

Конфигурация для поведения sandbox. Используйте это для включения sandboxing команд и программной конфигурации ограничений сети.
Sandbox зависит от поддержки платформы и, на Linux, инструментов, таких как bubblewrap и socat. Когда enabled имеет значение true и sandbox не может запуститься, query() сообщает сообщение result с subtype: "error_during_execution" и причину в errors. Для одного вызова сообщения query() SDK выбрасывает после выдачи этого результата ошибки, поэтому оберните цикл в блок try для продолжения после него. Смотрите Handle the result для контракта ошибки.Для выполнения без sandbox вместо этого установите failIfUnavailable: false.

Пример использования

Безопасность Unix socket: Опция allowUnixSockets может предоставить доступ к системным сервисам, которые выходят за пределы sandbox. Например, разрешение /var/run/docker.sock фактически предоставляет полный доступ к хост-системе через Docker API, обходя изоляцию sandbox. Разрешайте только Unix sockets, которые строго необходимы, и поймите последствия безопасности каждого.

SandboxNetworkConfig

Конфигурация, специфичная для сети, для режима sandbox. Эти параметры применяются к sandboxed Bash командам, когда enabled имеет значение true в родительском SandboxSettings. Они не ограничивают инструмент WebFetch, который использует правила разрешений вместо этого.
Встроенный прокси sandbox применяет allowedDomains на основе запрашиваемого имени хоста и не завершает и не проверяет трафик TLS, поэтому такие методы, как domain fronting, потенциально могут его обойти. Смотрите Ограничения безопасности Sandboxing для деталей и Безопасное развёртывание для конфигурации прокси, завершающего TLS.

SandboxFilesystemConfig

Конфигурация, специфичная для файловой системы, для режима sandbox.

Fallback разрешений для команд вне Sandbox

Когда allowUnsandboxedCommands включён, модель может запросить выполнение команд вне sandbox, установив dangerouslyDisableSandbox: true во входных данных tool. Эти запросы переходят к существующей системе разрешений, что означает, что ваш обработчик canUseTool вызывается, позволяя вам реализовать пользовательскую логику авторизации. Ваши записи excludedCommands вместо этого автоматически обходят sandbox без участия модели; sandbox.excludedCommands описывает, когда применяется запись. В примере ниже isCommandAuthorized служит заместителем для проверки авторизации, которую вы определяете.
Команды, работающие с dangerouslyDisableSandbox: true, имеют полный доступ к системе. Убедитесь, что ваш обработчик canUseTool тщательно проверяет эти запросы.Если permissionMode установлен на bypassPermissions и allowUnsandboxedCommands включён, модель может автономно выполнять команды вне sandbox без запросов одобрения, кроме действий, которые режим no не одобряет автоматически. Эта комбинация фактически позволяет модели молча выходить из изоляции sandbox.

См. также