Skip to main content

Установка

Установите пакет в виртуальное окружение. На недавних установках Debian, Ubuntu и Homebrew Python запуск pip install для системного Python завершается ошибкой error: externally-managed-environment.
Для uv, Windows PowerShell и настройки API ключа см. Начало работы в быстром старте Agent SDK.

Выбор между query() и ClaudeSDKClient

Python SDK предоставляет два способа взаимодействия с Claude Code: Используйте ClaudeSDKClient для интерактивных приложений, таких как интерфейсы чата, или когда следующее действие зависит от ответа Claude.

Функции

Блоки сигнатур и голые фрагменты async for / async with на этой странице являются иллюстративными. Чтобы их запустить, оберните тело в async def main(): ... и вызовите asyncio.run(main()).

query()

Создает новый сеанс для каждого взаимодействия с Claude Code по умолчанию. Возвращает асинхронный итератор, который выдает сообщения по мере их поступления. Каждый вызов query() начинается с нуля без памяти о предыдущих взаимодействиях, если вы не передадите continue_conversation=True или resume в ClaudeAgentOptions. См. Sessions.

Параметры

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

Возвращает AsyncIterator[Message], который выдает сообщения из разговора.

Пример - С параметрами

tool()

Декоратор для определения MCP tools с проверкой типов.

Параметры

Варианты схемы ввода

  1. Простое сопоставление типов (рекомендуется):
  2. Формат JSON Schema (для сложной валидации):
  3. Класс TypedDict: типизированная схема, ключи NotRequired которой не включаются в required.
    • Python 3.11 и новее: импортируйте TypedDict и NotRequired из typing.
    • Python 3.10: в typing нет NotRequired. Импортируйте TypedDict и NotRequired из typing_extensions, который SDK устанавливает на Python 3.10.
В формах простого сопоставления и TypedDict оберните тип в Annotated[type, "description"], чтобы задать описание поля.

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

Функция-декоратор, которая оборачивает реализацию инструмента и возвращает экземпляр SdkMcpTool.

Пример

ToolAnnotations

Подсказки поведения для инструмента, передаваемые как аргумент annotations функции tool(). ToolAnnotations расширяет mcp.types.ToolAnnotations SDK MCP с полем maxResultSizeChars, и вы можете писать каждую подсказку в camelCase или snake_case: ToolAnnotations(readOnlyHint=True) и ToolAnnotations(read_only_hint=True) эквивалентны. Чтобы прочитать подсказку обратно из объекта, используйте написание, объявленное в установленном у вас пакете mcp: .readOnlyHint в mcp 1.x и .read_only_hint в 2.x, тогда как .maxResultSizeChars работает в обоих. Вы также можете передать простой mcp.types.ToolAnnotations везде, где SDK принимает аннотации. Имена snake_case и типизированное поле maxResultSizeChars требуют Python Agent SDK 0.2.140 или позже. Версии 0.1.31 по 0.2.139 переэкспортируют mcp.types.ToolAnnotations без изменений. В версиях 0.1.55 по 0.2.139 вы все еще можете передать maxResultSizeChars как аргумент ключевого слова: класс MCP принимает дополнительные поля, и SDK пересылает значение в Claude Code. Все поля являются дополнительными. Клиенты не должны полагаться на подсказки для решений безопасности.

create_sdk_mcp_server()

Создайте встроенный MCP server, который работает в вашем приложении Python.

Параметры

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

Возвращает объект McpSdkServerConfig, который можно передать в ClaudeAgentOptions.mcp_servers.

Пример

list_sessions()

Выводит список прошлых сеансов с метаданными. Фильтруйте по каталогу проекта или выводите сеансы во всех проектах. Синхронно; возвращается немедленно.

Параметры

Тип возвращаемого значения: SDKSessionInfo

Пример

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

get_session_messages()

Извлекает сообщения из прошлого сеанса. Синхронно; возвращается немедленно.

Параметры

Тип возвращаемого значения: SessionMessage

Пример

get_session_info()

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

Параметры

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

Пример

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

rename_session()

Переименовывает сеанс, добавляя запись с пользовательским названием. Повторные вызовы безопасны; побеждает самое последнее название. Синхронно.

Параметры

Вызывает ValueError, если session_id не является допустимым UUID или title пуст; FileNotFoundError, если сеанс не найден.

Пример

Переименуйте самый последний сеанс, чтобы его было легче найти позже. Новое название появляется в SDKSessionInfo.custom_title при последующих чтениях.

tag_session()

Помечает сеанс. Передайте None для очистки тега. Повторные вызовы безопасны; побеждает самый последний тег. Синхронно.

Параметры

Вызывает ValueError, если session_id не является допустимым UUID или tag пуст после очистки; FileNotFoundError, если сеанс не найден.

Пример

Пометьте сеанс, затем отфильтруйте по этому тегу при последующем чтении. Передайте None для очистки существующего тега.

fork_session()

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

Параметры

Возвращает ForkSessionResult, в котором session_id — это UUID новой сессии. Передайте его как resume, чтобы продолжить форк. Форк не включает чекпоинты файлов исходной сессии, поэтому вы не сможете откатить его к чекпоинту, созданному до форка. fork_session() вызывает:
  • ValueError: session_id или up_to_message_id не является допустимым UUID
  • ValueError: в сессии нет сообщений, или up_to_message_id не соответствует ни одному сообщению в транскрипте
  • FileNotFoundError: сессия не найдена

Пример

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

Классы

ClaudeSDKClient

Поддерживает сеанс разговора через несколько обменов. Это эквивалент Python того, как функция query() TypeScript SDK работает внутри - она создает объект клиента, который может продолжать разговоры. См. сравнение с query().

Методы

Поддержка менеджера контекста

Клиент можно использовать как асинхронный менеджер контекста для автоматического управления соединением:
Важно: При итерации по сообщениям избегайте использования break для раннего выхода, так как это может вызвать проблемы с очисткой asyncio. Вместо этого позвольте итерации завершиться естественным образом или используйте флаги для отслеживания, когда вы нашли то, что вам нужно.

Пример - Продолжение разговора

Пример - Потоковый ввод с ClaudeSDKClient

query() также принимает асинхронный итерируемый объект словарей пользовательских сообщений, поэтому вы можете собрать подсказку во время отправки или включить блоки содержимого, такие как изображения. Claude Code начинает отвечать на первое полученное сообщение сразу же по его прибытии, не дожидаясь завершения итерируемого объекта, и receive_response() останавливается на ResultMessage, который завершает этот ответ. Поместите все, что Claude должен прочитать перед ответом, в одно сообщение, как это делает этот генератор, и свяжите каждый вызов query() с его собственным циклом receive_response().

Пример - Использование прерываний

Поведение буфера после прерывания: interrupt() отправляет сигнал остановки, но не очищает буфер сообщений. Сообщения, уже созданные прерванной задачей, включая ее ResultMessage, остаются в потоке. Вы должны слить их с помощью receive_response() перед чтением ответа на новый запрос. Если вы отправите новый запрос сразу после interrupt() и вызовете receive_response() только один раз, вы получите сообщения прерванной задачи, а не ответ на новый запрос.

Пример - Расширенное управление разрешениями

Типы

@dataclass vs TypedDict: Этот SDK использует два вида типов. Классы, украшенные @dataclass (такие как ResultMessage, AgentDefinition, TextBlock), являются экземплярами объектов во время выполнения и поддерживают доступ к атрибутам: msg.result. Классы, определённые с помощью TypedDict (такие как ThinkingConfigEnabled, McpStdioServerConfig, SyncHookJSONOutput), являются простыми словарями во время выполнения и требуют доступа по ключам: config["budget_tokens"], а не config.budget_tokens. Синтаксис вызова ClassName(field=value) работает для обоих, но только dataclasses создают объекты с атрибутами.

SdkMcpTool

Определение инструмента SDK MCP, созданного с помощью декоратора @tool.

Transport

Абстрактный базовый класс для пользовательских реализаций транспорта. Используйте это для связи с процессом Claude через пользовательский канал (например, удалённое соединение вместо локального подпроцесса).
Это низкоуровневый внутренний API. Интерфейс может измениться в будущих версиях. Пользовательские реализации должны быть обновлены в соответствии с любыми изменениями интерфейса.
Импорт: from claude_agent_sdk import Transport

ClaudeAgentOptions

Конфигурационный dataclass для запросов Claude Code.

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

Подпроцесс CLI читает несколько переменных окружения, которые управляют таймаутами API и обнаружением зависаний. Передайте их через ClaudeAgentOptions.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 пингов, хост, установивший include_partial_messages, продолжает получать сообщения ping StreamEvent. Воспринимайте эти кадры как признак активности, а не завершайте сессию по таймауту из-за отсутствия данных. До v2.1.257 эти кадры прекращались через 5 минут после последнего реального события потока.

OutputFormat

Конфигурация для валидации структурированного вывода. Передайте это как dict в поле output_format в ClaudeAgentOptions:

SystemPromptPreset

Конфигурация для использования предустановленного системного промпта Claude Code с необязательными дополнениями.

SystemPromptCustom

Пользовательский системный промпт в форме объекта, эквивалентный передаче строки в system_prompt, который также может задавать snapshot. Требует claude-agent-sdk v0.2.153 или новее.

SystemPromptFile

Конфигурация для загрузки пользовательского системного промпта из файла вместо передачи его строкой. SDK сопоставляет это с флагом CLI --system-prompt-file. Используйте форму с файлом, когда промпт большой: строковый system_prompt SDK передаёт в argv подпроцесса CLI, что подпадает под ограничения длины командной строки ОС ещё до того, как SDK отправит какой-либо запрос к API. В Linux отдельный аргумент длиннее примерно 128 КБ приводит к сбою при запуске процесса с ошибкой Argument list too long. В Windows вся командная строка ограничена примерно 32 КБ, поэтому строковая форма даёт сбой при ещё меньшем размере.

SettingSource

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

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

Когда setting_sources опущен или равен None и skills не задан, query() загружает те же настройки файловой системы, что и CLI Claude Code: пользовательские, проектные и локальные. Если skills задан, текущее значение по умолчанию описано в строке setting_sources. Политика, управляемая на конечном устройстве, загружается во всех случаях; настройки, управляемые сервером, извлекаются, когда сессия аутентифицируется с учётными данными организации в подходящей конфигурации. Дополнительную информацию см. в разделе Что settingSources не контролирует.

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

Отключить настройки файловой системы:
В Python SDK 0.1.59 и более ранних версиях пустой список обрабатывался так же, как отсутствие опции, поэтому setting_sources=[] не отключал настройки файловой системы. Обновитесь до более новой версии, если вам нужно, чтобы пустой список вступал в силу. TypeScript SDK это не затрагивает.
Загрузить только определённые источники настроек:
Приложения только на SDK:
Чтобы загрузить инструкции проекта из CLAUDE.md, включите "project" в setting_sources. О том, как загрузка CLAUDE.md взаимодействует с опциями системного промпта, см. Изменение системных промптов.

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

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

AgentDefinition

Конфигурация для субагента, определённого программно.
Имена полей AgentDefinition используют camelCase, например disallowedTools, permissionMode и maxTurns. Эти имена напрямую соответствуют формату передачи данных, общему с TypeScript SDK. Это отличается от ClaudeAgentOptions, где для эквивалентных полей верхнего уровня используется принятый в Python snake_case, например disallowed_tools и permission_mode. Поскольку AgentDefinition является dataclass, передача ключевого аргумента в snake_case вызывает TypeError при создании объекта.

PermissionMode

Режимы разрешений для управления выполнением инструментов.

EffortLevel

Уровни effort, определяющие глубину мышления.

CanUseTool

Псевдоним типа для функций обратного вызова разрешений инструментов.
Обратный вызов получает:
  • tool_name: Имя вызываемого инструмента
  • input_data: Входные параметры инструмента
  • context: ToolPermissionContext с дополнительной информацией
Возвращает PermissionResult (либо PermissionResultAllow, либо PermissionResultDeny). Обратный вызов заменяет в SDK интерактивный запрос разрешения: он вызывается только тогда, когда процесс проверки разрешений приводит к запросу разрешения. Вызовы инструментов, уже одобренные записью в allowed_tools, правилом разрешения в настройках или режимом разрешений, таким как acceptEdits или bypassPermissions, никогда его не вызывают. Чтобы контролировать каждый вызов инструмента, используйте вместо этого хук PreToolUse. Правило разрешения не одобряет заранее действия, которые ни один режим не одобряет автоматически; о том, какие из них доходят до обратного вызова и что происходит в режимах dontAsk и auto, см. Как проверяются разрешения.

ToolPermissionContext

Контекстная информация, передаваемая обратным вызовам разрешений инструментов.

PermissionResult

Тип объединения для результатов обратного вызова разрешений.

PermissionResultAllow

Результат, указывающий, что вызов инструмента должен быть разрешён.

PermissionResultDeny

Результат, указывающий, что вызов инструмента должен быть отклонён.

PermissionUpdate

Конфигурация для программного обновления разрешений.

PermissionRuleValue

Правило для добавления, замены или удаления при обновлении разрешений.

ToolsPreset

Предустановленная конфигурация инструментов для использования набора инструментов Claude Code по умолчанию.

ThinkingConfig

Управляет поведением расширенного мышления. Объединение трёх конфигураций:
Необязательное поле display определяет, возвращается ли текст размышлений в виде "summarized" или "omitted". В Claude Opus 4.7 и новее значение API по умолчанию — "omitted", поэтому установите "summarized", чтобы получать содержимое размышлений в выходных данных ThinkingBlock. Claude Code не передаёт ваше значение display некоторым поставщикам, таким как Amazon Bedrock и Google Cloud’s Agent Platform. У этих поставщиков Opus 4.7 и новее возвращают пустые выходные данные ThinkingBlock, даже если вы установили display в "summarized". Поскольку это классы TypedDict, во время выполнения они являются простыми словарями. Можно либо создавать их как dict-литералы, либо вызывать класс как конструктор; в обоих случаях получается dict. Обращайтесь к полям через config["budget_tokens"], а не config.budget_tokens:

TaskBudget

Бюджет задачи на стороне API в токенах, используемый с полем task_budget в ClaudeAgentOptions.
Поскольку это TypedDict, передавайте его как простой dict, например ClaudeAgentOptions(task_budget={"total": 50000}).

SdkBeta

Литеральный тип для бета-функций SDK.
Используйте с полем betas в ClaudeAgentOptions для включения бета-функций.
В 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], добавьте этот суффикс к ID модели, как в claude-opus-4-6[1m].

McpSdkServerConfig

Конфигурация для SDK MCP-серверов, созданных с помощью create_sdk_mcp_server().

McpServerConfig

Тип объединения для конфигураций MCP-серверов.

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpServerStatusConfig

Конфигурация MCP-сервера в том виде, в котором её возвращает get_mcp_status(). Это объединение всех транспортных вариантов McpServerConfig плюс доступный только в выходных данных вариант claudeai-proxy для серверов, проксируемых через claude.ai.
McpSdkServerConfigStatus — это сериализуемая форма McpSdkServerConfig, содержащая только поля type ("sdk") и name (str); внутрипроцессный instance опущен. McpClaudeAIProxyServerConfig имеет поля type ("claudeai-proxy"), url (str) и id (str).

McpStatusResponse

Ответ от ClaudeSDKClient.get_mcp_status(). Содержит список статусов серверов под ключом mcpServers.

McpServerStatus

Статус подключённого MCP-сервера, содержащийся в McpStatusResponse.

ContextUsageResponse

Ответ от ClaudeSDKClient.get_context_usage(). Это те же данные, которые Claude Code отображает для команды /context в интерактивной сессии, поэтому помимо количества токенов они содержат поля отображения, такие как color и gridRows, которые Claude Code использует для отрисовки сетки использования /context. Claude Code формирует эти данные, отправляя несколько запросов к API подсчёта токенов. Эти запросы не отображаются в потоке сообщений, поэтому отслеживание стоимости, основанное на чтении потока, их не увидит. В Anthropic API подсчёт токенов не тарифицируется.
Каждая запись ContextUsageCategory содержит name, tokens, color и необязательный флаг isDeferred. totalTokens — это текущее использование контекста в сессии, а maxTokens — окно, относительно которого измеряется это использование. Этим окном является контекстное окно модели или меньшее окно автосжатия, если оно применяется, а rawMaxTokens содержит то же значение, что и maxTokens. apiUsage содержит данные об использовании из последнего ответа API, а не накопленный итог для сессии. Claude Code не заполняет необязательные ключи deferredBuiltinTools, systemTools и systemPromptSections, поэтому рассчитывайте на их отсутствие, даже несмотря на то, что тип их объявляет.

SdkPluginConfig

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

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

Message

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

UserMessage

Сообщение пользовательского ввода.
SDK передает tool_use_result из CLI без изменений. Для инструмента на внешнем MCP сервере, результат которого содержит блоки resource_link, словарь имеет ключ resourceLinks, содержащий список словарей с ключами типа TypeScript SDKMcpResourceLink. Claude получает каждую ссылку как строку текста в результате инструмента. Для отображения файлов, возвращенных сервером, читайте resourceLinks вместо анализа этого текста. Ключ resourceLinks требует Python Agent SDK 0.2.150 или позже и Claude Code v2.1.257 или позже; CLI, поставляемый с этой версией SDK, удовлетворяет требованию Claude Code. CLI опускает ключ, когда результат не содержит ссылок и при результатах от подагентов. CLI сохраняет максимум 50 ссылок на результат и прекращает добавление ссылок, когда список достигает 64 КиБ сериализованного JSON. Инструмент, который вы определяете внутри процесса с помощью tool(), никогда не создает ключ, потому что SDK преобразует его блоки resource_link в текст перед тем, как CLI увидит результат.

AssistantMessage

Сообщение ответа помощника с блоками содержимого.

AssistantMessageError

Возможные типы ошибок для сообщений помощника.
Базовый процесс CLI может выдавать типы ошибок, которые этот Literal не перечисляет, такие как max_output_tokens. SDK передает значение без изменений, поэтому обрабатывайте строки вне этого списка так же, как вы обрабатываете unknown. Тип TypeScript SDKAssistantMessageError перечисляет полный набор значений, которые может выдать CLI.

SystemMessage

Системное сообщение с метаданными.
Подтипы, у которых нет собственного dataclass, поступают как SystemMessage. Чтобы отслеживать состояние сессии между ходами, установите CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1 и читайте message.data["state"] в каждом сообщении, у которого subtype равен session_state_changed. SDKSessionStateChangedMessage перечисляет состояния, которые оно может содержать. Чтобы читать их, выполняйте итерацию с помощью receive_messages(): receive_response() останавливается на ResultMessage, а сообщение session_state_changed может следовать после этого результата.

ResultMessage

Финальное сообщение результата с информацией о стоимости и использовании.
Поле subtype определяет, какие другие поля заполнены. Это одно из "success", "error_during_execution", "error_max_turns", "error_max_budget_usd" или "error_max_structured_output_retries". Dataclass Python объединяет все варианты в одну форму, поэтому поля, которые не применяются к возвращаемому подтипу, имеют значение None. Несколько полей содержат диагностические детали о том, как разговор закончился:
  • is_error: True, когда разговор закончился в состоянии ошибки. Всегда True на подтипах error_*. На subtype="success" это True, когда финальный запрос модели не удался, что означает, что цикл агента завершился, но последний вызов API вернул ошибку.
  • api_error_status: код состояния HTTP завершающей ошибки API. None, когда ход закончился без ошибки. Заполняется только на subtype="success".
  • result: текст финального сообщения помощника на subtype="success" или None на подтипах error_*. Когда subtype="success" и is_error=True, это содержит строку ошибки API, если она доступна, но может быть пустой, поэтому проверьте api_error_status и предыдущее содержимое AssistantMessage для деталей.
  • errors: строки ошибок уровня цикла, такие как сообщение о максимальных ходах. Заполняется только на подтипах error_*.
  • terminal_reason: почему цикл запроса закончился, например "completed", "max_turns", "api_error", "aborted_streaming" или "aborted_tools". Значение "aborted_streaming" или "aborted_tools" означает, что ход был прерван до завершения. Частые причины - interrupt() и callback разрешения, возвращающий PermissionResultDeny с interrupt=True. None на версиях CLI, которые предшествуют полю, на результатах локальных команд, таких как /voice или /usage, которые обходят цикл запроса, или на синтезированных результатах ошибок, выданных при критическом отказе сеанса. Зеркалирует SDKResultMessage.terminal_reason TypeScript SDK, который перечисляет полный набор значений.
  • origin: происхождение пользовательского сообщения, которое запустило этот ход. В режиме потоковой передачи входных данных проверьте это, чтобы отличить результат вашего собственного запроса, где origin равен None или {"kind": "human"}, от результата внедренного хода, такого как уведомление фоновой задачи. Требуется Python Agent SDK 0.2.137 или позже.
Когда несколько фоновых задач завершаются почти одновременно, Claude Code может ответить на их уведомления за один ход, а не за отдельный ход на каждое. Вы всё равно получаете по одному ResultMessage на каждое уведомление, по порядку, и у каждого из них origin имеет kind, равный "task-notification". У всех, кроме последнего, num_turns равен 0, а result пуст, а последний содержит ход, который отвечает на все из них. Словарь usage охватывает только основной цикл агента и исключает подагентов и другие вложенные или вспомогательные вызовы модели. В режиме потоковой передачи входных данных значения указаны за ход. Предпочитайте model_usage для учета токенов и стоимости. Словарь usage содержит следующие ключи, если они присутствуют: Словарь model_usage отображает имена моделей на использование для каждой модели. Он охватывает каждый вызов модели, сделанный через конвейер запроса: основной цикл, подагентов и внутренние вызовы, такие как компактирование и агентов Workflow. Вспомогательные вызовы вне этого конвейера, такие как классификатор разрешений и запросы подсчета токенов, исключены из model_usage. Рассматривайте model_usage как оценку, а не как выписку по счету. В режиме потоковой передачи входных данных model_usage и total_cost_usd являются кумулятивными по ходам, поэтому читайте последний результат вместо суммирования по результатам. Вызов, который возобновляет сеанс, также учитывает итоги, восстановленные из более ранних вызовов сеанса. См. Track costs in streaming input mode для сбросов и Recover totals after a session crash для обнуленных результатов. Каждое значение в model_usage - это TypedDict ModelUsage, импортируемый через from claude_agent_sdk.types import ModelUsage. Его ключи используют camelCase, потому что SDK передает значение без изменений из базового процесса CLI, соответствуя типу TypeScript ModelUsage:

StreamEvent

Событие потока для частичных обновлений сообщений во время потоковой передачи. Получается только когда include_partial_messages=True в ClaudeAgentOptions. Импортируйте через from claude_agent_sdk.types import StreamEvent.

RateLimitEvent

Выдается при изменении статуса ограничения скорости (например, с "allowed" на "allowed_warning"). Используйте это для предупреждения пользователей перед достижением жесткого лимита или для отката, когда статус "rejected".

RateLimitInfo

Состояние ограничения скорости, переносимое RateLimitEvent.

ConversationResetMessage

Выдается при замене разговора без завершения соединения, например после /clear. См. Track costs in streaming input mode для того, как сброс влияет на текущие итоги на последующих объектах ResultMessage. Требуется Python Agent SDK 0.2.137 или позже.

TaskStartedMessage

Выдается при запуске фоновой задачи. Фоновая задача - это все, что отслеживается вне основного хода: фоновая команда Bash, наблюдение Monitor, подагент, порожденный через инструмент Agent, или удаленный агент. Поле task_type говорит вам, какой. Это именование не связано с переименованием инструмента Task на Agent.

TaskUsage

Данные токенов и времени для фоновой задачи.

TaskProgressMessage

Выдается периодически с обновлениями прогресса для выполняющейся фоновой задачи.

TaskNotificationMessage

Выдается при завершении, сбое или остановке фоновой задачи. Фоновые задачи включают команды Bash run_in_background, наблюдения Monitor и фоновые подагенты.
Когда CLI перемещает длительный вызов инструмента MCP в фон, результат инструмента для этого вызова содержит только заполнитель, и реальный результат вызова поступает в это сообщение. При уведомлении "completed" для такого вызова CLI добавляет ключ resource_links, перечисляющий файлы, возвращенные инструментом по ссылке, с теми же записями и ограничениями, что и ключ resourceLinks на UserMessage.tool_use_result. Ключ resource_links требует Python Agent SDK 0.2.150 или позже и Claude Code v2.1.257 или позже; CLI, поставляемый с этой версией SDK, удовлетворяет требованию Claude Code. Dataclass не имеет поля для resource_links. Читайте его из словаря data, который сообщение наследует от SystemMessage: message.data.get("resource_links"). Сопоставьте уведомление с вызовом, используя tool_use_id. CLI опускает ключ, когда результат не содержал ссылок и при уведомлениях для задач, которые не являются вызовами инструментов MCP.

Типы блоков содержимого

ContentBlock

Тип объединения всех блоков содержимого.

TextBlock

Блок содержимого текста.

ThinkingBlock

Блок содержимого мышления (для моделей с возможностью мышления).

ToolUseBlock

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

ToolResultBlock

Блок результата выполнения инструмента.

Типы ошибок

Типы ниже определяют, что ваш код перехватывает. Для записей, привязанных к сообщениям об ошибках, которые эти типы вызывают, с причиной и исправлением для каждого, см. Troubleshooting.

ClaudeSDKError

Базовый класс исключения для всех ошибок SDK.
Когда одноразовый query() заканчивается результатом ошибки, например ошибкой превышения лимита ходов, SDK вызывает ResultError.

CLINotFoundError

Вызывается, когда Claude Code CLI не установлен или не найден.

CLIConnectionError

Вызывается, когда соединение с Claude Code не удается.

ProcessError

Вызывается, когда процесс Claude Code не работает.

ResultError

Вызывается, когда процесс Claude Code завершается, потому что запуск закончился сообщением результата с ошибкой, таким как ошибка превышения лимита ходов или ошибка API. ResultError является подклассом ProcessError, поэтому существующий обработчик except ProcessError также его перехватывает. Его атрибуты содержат поля этого сообщения результата, поэтому вы можете разветвляться в зависимости от причины сбоя запуска без анализа текста сообщения. Требуется Python Agent SDK версии 0.2.140 или позже.
Чтобы различить сбои, проверьте terminal_reason перед subtype. Когда финальный запрос не удается, например при ошибке API, Claude Code сообщает subtype "success" с причиной в terminal_reason, например "api_error"; когда лимит, который вы установили, завершает запуск, такой как max_turns или max_budget_usd, он сообщает подтип error_*.

CLIJSONDecodeError

Вызывается, когда разбор JSON не удается.

Типы hooks

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

HookEvent

Поддерживаемые типы событий hooks.
TypeScript SDK поддерживает дополнительные события hooks, которые еще недоступны в Python. См. таблицу доступности hooks для поддержки по SDK.

HookCallback

Определение типа для функций обратного вызова hooks.
Параметры:
  • input: Строго типизированные входные данные хука с дискриминированными объединениями на основе hook_event_name (см. HookInput)
  • tool_use_id: Дополнительный идентификатор использования инструмента (для hooks, связанных с инструментами)
  • context: Контекст hooks с дополнительной информацией
Возвращает HookJSONOutput.

HookContext

Информация контекста, передаваемая в обратные вызовы hooks.

HookMatcher

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

HookInput

Тип объединения всех типов ввода hooks. Фактический тип зависит от поля hook_event_name.

BaseHookInput

Базовые поля, присутствующие во всех типах ввода hooks.

PreToolUseHookInput

Входные данные для событий hooks PreToolUse.

PostToolUseHookInput

Входные данные для событий hooks PostToolUse.

PostToolUseFailureHookInput

Входные данные для событий hooks PostToolUseFailure. Вызывается, когда выполнение инструмента не удается.

UserPromptSubmitHookInput

Входные данные для событий hooks UserPromptSubmit.

StopHookInput

Входные данные для событий hooks Stop.

SubagentStopHookInput

Входные данные для событий hooks SubagentStop.

PreCompactHookInput

Входные данные для событий hooks PreCompact.

NotificationHookInput

Входные данные для событий hooks Notification.

SubagentStartHookInput

Входные данные для событий hooks SubagentStart.

PermissionRequestHookInput

Входные данные для событий hooks PermissionRequest. Позволяет hooks программно обрабатывать решения разрешений.

HookJSONOutput

Тип объединения для возвращаемых значений обратного вызова hooks.

SyncHookJSONOutput

Синхронный вывод hooks с полями управления и решения.
Используйте continue_ (с подчеркиванием) в коде Python. Он автоматически преобразуется в continue при отправке в CLI.

HookSpecificOutput

Дискриминированное объединение типов вывода, специфичных для события. Поле hookEventName определяет, какие поля действительны. Для полных деталей доступных полей для каждого события hooks см. Control execution with hooks.

AsyncHookJSONOutput

Асинхронный вывод hooks, который откладывает выполнение hooks.
Используйте async_ (с подчеркиванием) в коде Python. Он автоматически преобразуется в async при отправке в CLI.

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

Этот пример регистрирует два hooks: один, который блокирует опасные команды bash, такие как rm -rf /, и другой, который регистрирует все использование инструментов для аудита. Hooks безопасности работает только на командах Bash (через matcher), в то время как hooks логирования работает на всех инструментах.

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

Документация схем ввода/вывода для встроенных инструментов Claude Code. Хотя Python SDK не экспортирует их как типы, они представляют структуру входов и выходов инструментов в сообщениях. Каждый показанный вывод — это значение, которое вы читаете из UserMessage.tool_use_result для этого инструмента. Названия ключей появляются точно так, как их выдает Claude Code. Ключ, аннотированный | None с комментарием “present when” или “optional”, опускается, когда он не применяется.

Agent

Имя инструмента: Agent. Предыдущее имя Task по-прежнему принимается как псевдоним, и список tools в инициализации SystemMessage сообщает об этом инструменте как Task для обратной совместимости. Ввод:
Запускает нового агента для автономной обработки сложных многошаговых задач. Вывод (статус: "completed"):
Вывод (статус: "async_launched"):
Вывод (статус: "remote_launched"):
Возвращает результат от субагента. Вывод различается по полю status: "completed" для завершенных задач, "async_launched" для фоновых задач и "remote_launched" для задач, которые Claude Code отправил в облачную сессию, где sessionUrl ссылается на эту сессию и taskId ее идентифицирует. Если Claude Code сохранил изолированный worktree субагента, worktreePath в варианте completed — это место, где его найти, и worktreeBranch — это его ветка, когда Claude Code создал worktree с git. В варианте completed, resolvedModel называет модель, на которой запустился субагент, которая может отличаться от запрошенного входа model, когда применяется availableModels или другое переопределение. Это поле требует Claude Code v2.1.174 или позже. В варианте async_launched, resolvedModel называет модель, используемую, когда агент перешел в фоновый режим, поэтому обмен, произошедший перед фоновым режимом, отражается там. Поле modelsUsed в обоих вариантах перечисляет использованные модели по порядку, с коллапсированными последовательными повторениями; оно устанавливается только при обмене модели во время выполнения. modelsUsed и поведение resolvedModel во время фонового режима требуют Claude Code v2.1.212 или позже. Claude Code заполняет usage и totalTokens из финального запроса API субагента, не из всего запуска. Когда присутствует, thinking_tokens под output_tokens_details в usage — это количество выходных токенов этого запроса, которые были токенами мышления. Ключ output_tokens_details требует Python SDK v0.2.136 или позже, который поставляется с Claude Code v2.1.228. Ключ fallback_credit требует Python SDK v0.2.162 или позже, который поставляется с Claude Code v2.1.285.

AskUserQuestion

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

Bash

Имя инструмента: Bash Для информации о том, что устанавливает потолок переднего плана, см. Таймаут и ограничения вывода. Для ограничения времени фонового режима см. Ограничение времени для фоновых команд. Ввод:
Вывод:

Monitor

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

Edit

Имя инструмента: Edit Ввод:
Вывод:

Read

Имя инструмента: Read Ввод:
Вывод принимает одну из следующих форм в зависимости от того, что прочитал Claude. Проверьте ключ type, чтобы их различить. Вывод (type: "text"):
Вывод (type: "image"):
Вывод (type: "notebook"):
Вывод (type: "pdf"):
Вывод (type: "parts"):
Вывод (type: "file_unchanged"):

Write

Имя инструмента: Write Ввод:
Вывод:

Glob

Имя инструмента: Glob Ввод:
Вывод:
totalMatches и countIsComplete требуют Claude Code v2.1.191 или позже.

Grep

Имя инструмента: Grep Ввод:
Вывод:
Grep возвращает эту форму dict в каждом режиме вывода. Какие необязательные ключи присутствуют, зависит от output_mode. totalFiles требует Claude Code v2.1.208 или позже. totalLines требует Claude Code v2.1.210 или позже.

NotebookEdit

Имя инструмента: NotebookEdit Ввод:
Вывод:

WebFetch

Имя инструмента: WebFetch Ввод:
Вывод:

WebSearch

Имя инструмента: WebSearch Ввод:
Вывод:

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 Ввод:
Вывод:

TaskList

Имя инструмента: TaskList Ввод:
Вывод:

TaskOutput

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

TaskStop

Имя инструмента: TaskStop. Предыдущие имена KillShell и KillBash по-прежнему принимаются как псевдонимы. Ввод:
Вывод:

ExitPlanMode

Имя инструмента: ExitPlanMode Ввод:
Вывод:

ListMcpResources

Имя инструмента: ListMcpResourcesTool Ввод:
Результат — это список, а не dict, поэтому tool_use_result содержит list для этого инструмента. Вывод:

ReadMcpResource

Имя инструмента: ReadMcpResourceTool Ввод:
Вывод:

Построение интерфейса непрерывного разговора

Следующий пример сохраняет один ClaudeSDKClient подключённым на протяжении нескольких ходов, поэтому Claude помнит предыдущие сообщения. Введите new для отключения и повторного подключения для новой сессии или exit для завершения разговора.

Обработка ошибок

Следующий пример оборачивает вызов query() в обработчики для четырех из типов ошибок, которые вызывает SDK. Этот пример перехватывает ResultError, что требует Python Agent SDK версии 0.2.140 или позже.

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

SandboxSettings

Конфигурация для поведения sandbox. Используйте это для включения sandboxing команд и программной настройки ограничений сети.
Sandbox зависит от поддержки платформы и, на Linux, инструментов, таких как bubblewrap и socat. По умолчанию, когда enabled имеет значение True, но sandbox не может запуститься, команды выполняются без sandbox с предупреждением на stderr. Это поведение отличается от TypeScript SDK, где failIfUnavailable по умолчанию имеет значение true.Установите "failIfUnavailable": True в настройках песочницы, чтобы вместо этого остановить выполнение. SDK передаёт failIfUnavailable в Claude Code вместе с объявленными полями SandboxSettings. Затем query() сообщает ResultMessage с subtype="error_during_execution" и причиной в errors. Поскольку это одноразовый вызов query(), SDK вызывает исключение после выдачи этого результата ошибки, поэтому оберните цикл в блок try, чтобы продолжить после него. См. Handle the result для контракта ошибки.
Чтобы запретить командам в песочнице запись в файл, укажите его абсолютный путь в denyWrite в настройках песочницы, например "filesystem": {"denyWrite": ["/home/user/project/.env"]}. SDK передаёт filesystem в Claude Code вместе с объявленными полями SandboxSettings. После запуска песочница блокирует запись по каждому указанному вами абсолютному пути.

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

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

SandboxNetworkConfig

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

SandboxIgnoreViolations

Конфигурация для игнорирования определенных нарушений sandbox.

Fallback системы разрешений для команд без Sandbox

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

См. также