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 (для сложной валидации):

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

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

Пример

ToolAnnotations

Подсказки поведения для инструмента, передаваемые как аргумент annotations функции tool(). ToolAnnotations расширяет mcp.types.ToolAnnotations SDK MCP с полем maxResultSizeChars, и вы можете писать каждую подсказку в camelCase или snake_case: ToolAnnotations(readOnlyHint=True) и ToolAnnotations(read_only_hint=True) эквивалентны. Вы также можете передать простой 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 для очистки существующего тега.

Классы

ClaudeSDKClient

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

Методы

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

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

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

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

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

Поведение буфера после прерывания: 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, созданного с помощью декоратора @tool.

Transport

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

ClaudeAgentOptions

Dataclass конфигурации для запросов Claude Code.

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

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

OutputFormat

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

SystemPromptPreset

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

SystemPromptFile

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

SettingSource

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

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

Когда setting_sources опущено или None, query() загружает те же параметры файловой системы, что и Claude Code CLI: пользовательские, проектные и локальные. Управляемые параметры политики загружаются во всех случаях; параметры, управляемые сервером, загружаются, когда сеанс аутентифицируется с учетными данными организации на подходящей конфигурации. См. What settingSources does not control для входов, которые читаются независимо от этой опции, и как их отключить.

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

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

Приоритет параметров

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

AgentDefinition

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

PermissionMode

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

EffortLevel

Уровни усилий для руководства глубиной мышления.

CanUseTool

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

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. Получайте доступ к полям с помощью config["budget_tokens"], а не config.budget_tokens:

TaskBudget

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

SdkBeta

Тип Literal для функций бета-версии SDK.
Используйте с полем betas в ClaudeAgentOptions для включения функций бета-версии.
Бета-версия context-1m-2025-08-07 снята с производства по состоянию на 30 апреля 2026 года. Передача этого заголовка с Claude Sonnet 4.5 или Sonnet 4 не имеет эффекта, и запросы, превышающие стандартное окно контекста 200k-токенов, возвращают ошибку. Чтобы использовать окно контекста 1M-токенов, перейдите на Claude Opus 5, Claude Sonnet 5, Claude Sonnet 4.6, Claude Opus 4.6, Claude Opus 4.7 или Claude Opus 4.8, которые включают контекст 1M по стандартной цене без требования заголовка бета-версии.

McpSdkServerConfig

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

McpServerConfig

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

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpServerStatusConfig

Конфигурация MCP server, как сообщается get_mcp_status(). Это объединение всех вариантов транспорта McpServerConfig плюс вариант claudeai-proxy только для вывода для servers, проксированных через 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 server, содержащийся в McpStatusResponse.

SdkPluginConfig

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

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

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

Системное сообщение с метаданными.

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 или позже.
Словарь 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 после выдачи финального сообщения результата. Версии Python Agent SDK до 0.2.140 вызывали простое Exception, которое не было подклассом ClaudeSDKError.

CLINotFoundError

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

CLIConnectionError

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

ProcessError

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

ResultError

Вызывается после финального ResultMessage, когда процесс 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: Строго типизированный ввод hooks с дискриминированными объединениями на основе 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 не экспортирует их как типы, они представляют структуру входов и выходов инструментов в сообщениях.

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.

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 Ввод:
Вывод (текстовые файлы):
Вывод (изображения):

Write

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

Glob

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

Grep

Имя инструмента: Grep Ввод:
Вывод (режим content):
Вывод (режим files_with_matches):

NotebookEdit

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

WebFetch

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

WebSearch

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

TodoWrite

Имя инструмента: TodoWrite
The following tools are available by default only on Claude 3.x models, Opus 4 through 4.7, Sonnet 4 through 4.6, and Haiku 4.5. On every other model, including model IDs Claude Code doesn’t recognize, they aren’t available unless you opt in:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
Wherever the tools are available, Claude Code provides the four Task tools, or TodoWrite instead when you set CLAUDE_CODE_ENABLE_TASKS=0.This default set applies in Claude Code v2.1.268 and later, which the TypeScript Agent SDK bundles from v0.3.268.См. Доступность модели для подключения.
Ввод:
Вывод:

TaskCreate

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

TaskUpdate

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

TaskGet

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

TaskList

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

TaskOutput

Имя инструмента: TaskOutput. Предыдущее имя BashOutput по-прежнему принимается как псевдоним.
TaskOutput устарело; предпочитайте Read на пути выходного файла задачи. Приведенные ниже схемы остаются действительными для hooks и обработчиков разрешений, которые встречают инструмент.
Ввод:
Вывод:

TaskStop

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

ExitPlanMode

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

ListMcpResources

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

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 в параметрах sandbox, чтобы остановиться вместо этого. Ключ еще не объявлен на SandboxSettings, но SDK передает его в Claude Code, который его соблюдает. query() затем сообщает ResultMessage с subtype="error_during_execution" и причину в errors. Поскольку это одноразовый вызов query(), SDK вызывает исключение после выдачи этого результата ошибки, поэтому оберните цикл в блок try, чтобы продолжить после него. См. Handle the result для контракта ошибки.

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

Безопасность 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 без участия модели; см. SandboxSettings. Следующий пример регистрирует каждый запрос без sandbox и отклоняет его, если только ваша собственная логика авторизации не разрешит это:
Команды, выполняемые с dangerouslyDisableSandbox: True, имеют полный доступ к системе. Убедитесь, что ваш обработчик can_use_tool тщательно проверяет эти запросы.Если permission_mode установлен на bypassPermissions и allow_unsandboxed_commands включен, модель может автономно выполнять команды вне sandbox без запросов одобрения, кроме действий, которые ни один режим не одобряет автоматически. Эта комбинация фактически позволяет модели молча выходить из изоляции sandbox.

См. также