Установка
Установите пакет в виртуальное окружение. На недавних установках Debian, Ubuntu и Homebrew Python запускpip install для системного Python завершается ошибкой error: externally-managed-environment.
Выбор между 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 с проверкой типов.
Параметры
Варианты схемы ввода
-
Простое сопоставление типов (рекомендуется):
-
Формат 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 через пользовательский канал (например, удаленное соединение вместо локального подпроцесса).
Импорт:
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, продолжает получатьpingStreamEventсообщения. Читайте эти кадры как живость, а не тайм-аут сеанса на молчание. До 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 не затронут."project" в setting_sources. См. Modify system prompts для того, как загрузка CLAUDE.md взаимодействует с опциями системной подсказки.
Приоритет параметров
Когда загружаются несколько источников, параметры объединяются с этим приоритетом (от наивысшего к наименьшему):- Локальные параметры (
.claude/settings.local.json) - Параметры проекта (
.claude/settings.json) - Параметры пользователя (
~/.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 для включения функций бета-версии.
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.
Пример:
Типы сообщений
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
Возможные типы ошибок для сообщений помощника.
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_reasonTypeScript 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
Ввод:
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:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
TodoWrite instead when you set CLAUDE_CODE_ENABLE_TASKS=0.This default set applies in Claude Code v2.1.268 and later, which the TypeScript Agent SDK bundles from v0.3.268.См. Доступность модели для подключения.TaskCreate
Имя инструмента: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 для контракта ошибки.Пример использования
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 и отклоняет его, если только ваша собственная логика авторизации не разрешит это:
См. также
- SDK overview - Общие концепции SDK
- TypeScript SDK reference - Документация TypeScript SDK
- Custom tools - Определение встроенных инструментов MCP для вызова Claude
- CLI reference - Интерфейс командной строки
- Common workflows - Пошаговые руководства