Установка
Установите пакет в виртуальное окружение. На недавних установках Debian, Ubuntu и Homebrew Python запускpip install для системного Python завершается ошибкой error: externally-managed-environment.
Выбор между query() и ClaudeSDKClient
Python SDK предоставляет два способа взаимодействия с Claude Code:
Быстрое сравнение
Когда использовать query() (одноразовые задачи)
Лучше всего для:
- Одноразовых вопросов, когда вам не нужна история разговора
- Независимых задач, которые не требуют контекста из предыдущих обменов
- Простых скриптов автоматизации
- Когда вы хотите начать с чистого листа каждый раз
Когда использовать ClaudeSDKClient (непрерывный разговор)
Лучше всего для:
- Продолжения разговоров - Когда вам нужно, чтобы Claude помнил контекст
- Уточняющих вопросов - Построение на основе предыдущих ответов
- Интерактивных приложений - Интерфейсы чата, REPL
- Логики, управляемой ответом - Когда следующее действие зависит от ответа Claude
- Управления сеансом - Явное управление жизненным циклом разговора
Функции
query()
Создает новый сеанс для каждого взаимодействия с Claude Code по умолчанию. Возвращает асинхронный итератор, который выдает сообщения по мере их поступления. Каждый вызов query() начинается с нуля без памяти о предыдущих взаимодействиях, если вы не передадите continue_conversation=True или resume в ClaudeAgentOptions. См. Sessions.
Параметры
Возвращаемое значение
ВозвращаетAsyncIterator[Message], который выдает сообщения из разговора.
Пример - С параметрами
tool()
Декоратор для определения MCP tools с проверкой типов.
Параметры
Варианты схемы ввода
-
Простое сопоставление типов (рекомендуется):
-
Формат JSON Schema (для сложной валидации):
Возвращаемое значение
Функция-декоратор, которая оборачивает реализацию инструмента и возвращает экземплярSdkMcpTool.
Пример
ToolAnnotations
Переэкспортировано из mcp.types (также доступно как from claude_agent_sdk import ToolAnnotations). Все поля являются дополнительными подсказками; клиенты не должны полагаться на них для решений безопасности.
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() - Один разговор: Сеанс сохраняет предыдущие сообщения
- Поддержка прерываний: Может остановить выполнение в середине задачи
- Явный жизненный цикл: Вы контролируете, когда сеанс начинается и заканчивается
- Поток, управляемый ответом: Может реагировать на ответы и отправлять дополнения
- Пользовательские инструменты и hooks: Поддерживает пользовательские инструменты (созданные с помощью декоратора
@tool) и hooks
Методы
Поддержка менеджера контекста
Клиент можно использовать как асинхронный менеджер контекста для автоматического управления соединением:
Важно: При итерации по сообщениям избегайте использования break для раннего выхода, так как это может вызвать проблемы с очисткой asyncio. Вместо этого позвольте итерации завершиться естественным образом или используйте флаги для отслеживания, когда вы нашли то, что вам нужно.
Пример - Продолжение разговора
Пример - Потоковый ввод с ClaudeSDKClient
Пример - Использование прерываний
Поведение буфера после прерывания:
interrupt() отправляет сигнал остановки, но не очищает буфер сообщений. Сообщения, уже созданные прерванной задачей, включая ее ResultMessage (с subtype="error_during_execution"), остаются в потоке. Вы должны слить их с помощью 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. Применяется к основному циклу и всем подагентам.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: сторожевой таймер зависания для подагентов, запущенных сrun_in_background. По умолчанию600000. Сбрасывается при каждом событии потока; при зависании он прерывает подагента, отмечает задачу как неудачную и выводит ошибку родителю с любым частичным результатом. Не применяется к синхронным подагентам.CLAUDE_ENABLE_STREAM_WATCHDOGсCLAUDE_STREAM_IDLE_TIMEOUT_MS: прерывает запрос, когда заголовки прибыли, но тело ответа перестает потоковать. Сторожевой таймер включен по умолчанию для всех поставщиков; установитеCLAUDE_ENABLE_STREAM_WATCHDOG=0для отключения.CLAUDE_STREAM_IDLE_TIMEOUT_MSпо умолчанию300000и зажимается до этого минимума. Прерванный запрос проходит через обычный путь повторной попытки.
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 не затронут.Приоритет параметров
Когда загружаются несколько источников, параметры объединяются с этим приоритетом (от наивысшего к наименьшему):- Локальные параметры (
.claude/settings.local.json) - Параметры проекта (
.claude/settings.json) - Параметры пользователя (
~/.claude/settings.json)
agents и allowed_tools, переопределяют параметры пользователя, проекта и локальной файловой системы. Управляемые параметры политики имеют приоритет над программными опциями.
AgentDefinition
Конфигурация для подагента, определенного программно.
Имена полей
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, никогда его не вызывают. AskUserQuestion, MCP tools, отмеченные requiresUserInteraction, и connector tools установленные вашей организацией на ask достигают обратного вызова даже когда правило разрешения совпадает. В режиме dontAsk эти вызовы вместо этого отклоняются, без вызова обратного вызова. Чтобы контролировать каждый вызов инструмента, используйте вместо этого hook PreToolUse.
ToolPermissionContext
Информация контекста, передаваемая в обратные вызовы разрешения инструмента.
PermissionResult
Тип объединения для результатов обратного вызова разрешения.
PermissionResultAllow
Результат, указывающий, что вызов инструмента должен быть разрешен.
PermissionResultDeny
Результат, указывающий, что вызов инструмента должен быть отклонен.
PermissionUpdate
Конфигурация для программного обновления разрешений.
PermissionRuleValue
Правило для добавления, замены или удаления в обновлении разрешений.
ToolsPreset
Конфигурация предустановленных инструментов для использования набора инструментов Claude Code по умолчанию.
ThinkingConfig
Управляет поведением расширенного мышления. Объединение трех конфигураций:
Дополнительное поле
display управляет тем, возвращается ли текст мышления "summarized" или "omitted". На Claude Opus 4.7 и более поздних версиях API по умолчанию используется "omitted", поэтому установите "summarized" для получения содержимого мышления в выводах ThinkingBlock.
Поскольку это классы TypedDict, они являются простыми словарями во время выполнения. Либо создавайте их как литералы словарей, либо вызывайте класс как конструктор; оба создают dict. Получайте доступ к полям с помощью config["budget_tokens"], а не config.budget_tokens:
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
Сообщение пользовательского ввода.
AssistantMessage
Сообщение ответа помощника с блоками содержимого.
AssistantMessageError
Возможные типы ошибок для сообщений помощника.
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_*.
usage содержит следующие ключи, если они присутствуют:
Словарь
model_usage отображает имена моделей на использование для каждой модели. Внутренние ключи словаря используют camelCase, потому что значение передается без изменений из базового процесса CLI, соответствуя типу TypeScript ModelUsage:
StreamEvent
Событие потока для частичных обновлений сообщений во время потоковой передачи. Получается только когда include_partial_messages=True в ClaudeAgentOptions. Импортируйте через from claude_agent_sdk.types import StreamEvent.
RateLimitEvent
Выдается при изменении статуса ограничения скорости (например, с "allowed" на "allowed_warning"). Используйте это для предупреждения пользователей перед достижением жесткого лимита или для отката, когда статус "rejected".
RateLimitInfo
Состояние ограничения скорости, переносимое RateLimitEvent.
TaskStartedMessage
Выдается при запуске фоновой задачи. Фоновая задача - это все, что отслеживается вне основного хода: фоновая команда Bash, наблюдение Monitor, подагент, порожденный через инструмент Agent, или удаленный агент. Поле task_type говорит вам, какой. Это именование не связано с переименованием инструмента Task на Agent.
TaskUsage
Данные токенов и времени для фоновой задачи.
TaskProgressMessage
Выдается периодически с обновлениями прогресса для выполняющейся фоновой задачи.
TaskNotificationMessage
Выдается при завершении, сбое или остановке фоновой задачи. Фоновые задачи включают команды Bash run_in_background, наблюдения Monitor и фоновые подагенты.
Типы блоков содержимого
ContentBlock
Тип объединения всех блоков содержимого.
TextBlock
Блок содержимого текста.
ThinkingBlock
Блок содержимого мышления (для моделей с возможностью мышления).
ToolUseBlock
Блок запроса использования инструмента.
ToolResultBlock
Блок результата выполнения инструмента.
Типы ошибок
ClaudeSDKError
Базовый класс исключения для всех ошибок SDK.
CLINotFoundError
Вызывается, когда Claude Code CLI не установлен или не найден.
CLIConnectionError
Вызывается, когда соединение с Claude Code не удается.
ProcessError
Вызывается, когда процесс Claude Code не работает.
CLIJSONDecodeError
Вызывается, когда разбор JSON не удается.
Типы hooks
Для полного руководства по использованию hooks с примерами и общими шаблонами см. Hooks guide.HookEvent
Поддерживаемые типы событий hooks.
TypeScript SDK поддерживает дополнительные события hooks, которые еще недоступны в Python:
SessionStart, SessionEnd, Setup, TeammateIdle, TaskCompleted, ConfigChange, WorktreeCreate, WorktreeRemove, PostToolBatch и MessageDisplay.HookCallback
Определение типа для функций обратного вызова hooks.
input: Строго типизированный ввод hooks с дискриминированными объединениями на основеhook_event_name(см.HookInput)tool_use_id: Дополнительный идентификатор использования инструмента (для hooks, связанных с инструментами)context: Контекст hooks с дополнительной информацией
HookJSONOutput, который может содержать:
decision:"block"для блокировки действияsystemMessage: Предупреждающее сообщение, показываемое пользователюhookSpecificOutput: Вывод, специфичный для hooks
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
TypedDict, содержащий имя события hooks и поля, специфичные для события. Форма зависит от значения hookEventName. Для полных деталей доступных полей для каждого события hooks см. Control execution with hooks.
Дискриминированное объединение типов вывода, специфичных для события. Поле hookEventName определяет, какие поля действительны.
AsyncHookJSONOutput
Асинхронный вывод hooks, который откладывает выполнение hooks.
Используйте
async_ (с подчеркиванием) в коде Python. Он автоматически преобразуется в async при отправке в CLI.Пример использования hooks
Этот пример регистрирует два hooks: один, который блокирует опасные команды bash, такие какrm -rf /, и другой, который регистрирует все использование инструментов для аудита. Hooks безопасности работает только на командах Bash (через matcher), в то время как hooks логирования работает на всех инструментах.
Типы ввода/вывода инструментов
Документация схем ввода/вывода для всех встроенных инструментов Claude Code. Хотя Python SDK не экспортирует их как типы, они представляют структуру входов и выходов инструментов в сообщениях.Agent
Имя инструмента:Agent (ранее Task, который все еще принимается как псевдоним)
Ввод:
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
Начиная с Claude Code v2.1.142,
TodoWrite отключен по умолчанию. Используйте вместо этого TaskCreate, TaskGet, TaskUpdate и TaskList. См. Миграция на инструменты Task для обновления кода мониторинга, или установите CLAUDE_CODE_ENABLE_TASKS=0 для возврата к TodoWrite.TaskCreate
Имя инструмента:TaskCreate
Ввод:
TaskUpdate
Имя инструмента:TaskUpdate
Ввод:
TaskGet
Имя инструмента:TaskGet
Ввод:
TaskList
Имя инструмента:TaskList
Ввод:
BashOutput
Имя инструмента:BashOutput
Ввод:
KillBash
Имя инструмента:KillBash
Ввод:
ExitPlanMode
Имя инструмента:ExitPlanMode
Ввод:
ListMcpResources
Имя инструмента:ListMcpResourcesTool
Ввод:
ReadMcpResource
Имя инструмента:ReadMcpResourceTool
Ввод:
Расширенные функции с ClaudeSDKClient
Построение интерфейса непрерывного разговора
Использование hooks для модификации поведения
Мониторинг прогресса в реальном времени
Пример использования
Базовые операции с файлами (используя query)
Обработка ошибок
Режим потоковой передачи с клиентом
Использование пользовательских инструментов с ClaudeSDKClient
Конфигурация 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() вызовет исключение перед выдачей сообщений.Пример использования
SandboxNetworkConfig
Конфигурация, специфичная для сети, для режима sandbox. Эти параметры применяются к sandboxed Bash командам, когда enabled имеет значение True в родительском SandboxSettings. Они не ограничивают инструмент WebFetch, который вместо этого использует правила разрешений.
Встроенный прокси sandbox обеспечивает соблюдение списка разрешенных сетей на основе запрашиваемого имени хоста и не завершает и не проверяет трафик TLS, поэтому такие методы, как domain fronting, потенциально могут его обойти. Подробнее см. в разделе Ограничения безопасности Sandboxing и Безопасное развертывание для настройки прокси, завершающего TLS.
SandboxIgnoreViolations
Конфигурация для игнорирования определенных нарушений sandbox.
Fallback разрешений для команд без sandbox
КогдаallowUnsandboxedCommands включен, модель может запросить выполнение команд вне sandbox, установив dangerouslyDisableSandbox: True во входе инструмента. Эти запросы переходят к существующей системе разрешений, что означает, что ваш обработчик can_use_tool будет вызван, позволяя вам реализовать пользовательскую логику авторизации.
excludedCommands vs allowUnsandboxedCommands:excludedCommands: Статический список команд, которые всегда обходят sandbox автоматически (например,["docker"]). Модель не имеет контроля над этим.allowUnsandboxedCommands: Позволяет модели решать во время выполнения, запрашивать ли выполнение без sandbox, установивdangerouslyDisableSandbox: Trueво входе инструмента.
- Аудит запросов модели: Логируйте, когда модель запрашивает выполнение без sandbox
- Реализовать allowlists: Разрешайте только определенные команды работать без sandbox
- Добавить рабочие процессы одобрения: Требуйте явной авторизации для привилегированных операций
См. также
- SDK overview - Общие концепции SDK
- TypeScript SDK reference - Документация TypeScript SDK
- CLI reference - Интерфейс командной строки
- Common workflows - Пошаговые руководства