Перейти к основному содержанию

Установка

npm install @anthropic-ai/claude-agent-sdk
SDK поставляется с нативным бинарным файлом Claude Code для вашей платформы в качестве опциональной зависимости, такой как @anthropic-ai/claude-agent-sdk-darwin-arm64. Вам не нужно устанавливать Claude Code отдельно. Если ваш менеджер пакетов пропускает опциональные зависимости, SDK выбросит ошибку Native CLI binary for <platform> not found; установите pathToClaudeCodeExecutable на отдельно установленный бинарный файл claude вместо этого.

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

Когда вы компилируете приложение в единый исполняемый файл с помощью bun build --compile, SDK не может разрешить упакованный бинарный файл CLI во время выполнения. require.resolve не работает внутри виртуальной файловой системы $bunfs скомпилированного исполняемого файла, поэтому SDK выбросит ошибку Native CLI binary for <platform> not found. Чтобы обойти это, встройте бинарный файл платформы как файловый ресурс, извлеките его на реальный путь при запуске с помощью extractFromBunfs() и передайте этот путь в pathToClaudeCodeExecutable. Вспомогательная функция extractFromBunfs() требует @anthropic-ai/claude-agent-sdk версии 0.3.144 или позже. Пример ниже выполняет сборку для macOS на Apple Silicon:
import binPath from "@anthropic-ai/claude-agent-sdk-darwin-arm64/claude" with { type: "file" };
import { extractFromBunfs } from "@anthropic-ai/claude-agent-sdk/extract";
import { query } from "@anthropic-ai/claude-agent-sdk";

const cliPath = extractFromBunfs(binPath);

for await (const message of query({
  prompt: "Hello",
  options: { pathToClaudeCodeExecutable: cliPath },
})) {
  console.log(message);
}
extractFromBunfs() копирует встроенный бинарный файл из виртуальной файловой системы скомпилированного исполняемого файла в каталог временных файлов для каждого пользователя и возвращает реальный путь. Вне скомпилированного исполняемого файла он возвращает входной путь без изменений, поэтому тот же код работает в разработке без модификации. Каждый скомпилированный исполняемый файл содержит бинарный файл одной платформы. Совместите пакет платформы в импорте с вашим --target:
  • Для кросс-компиляции установите пакет несовпадающей платформы, например npm install @anthropic-ai/claude-agent-sdk-linux-x64 --force.
  • На Windows подпуть бинарного файла — это claude.exe, например @anthropic-ai/claude-agent-sdk-win32-x64/claude.exe.

Функции

query()

Основная функция для взаимодействия с Claude Code. Создаёт асинхронный генератор, который потоком передаёт сообщения по мере их поступления.
function query({
  prompt,
  options
}: {
  prompt: string | AsyncIterable<SDKUserMessage>;
  options?: Options;
}): Query;

Параметры

ПараметрТипОписание
promptstring | AsyncIterable<SDKUserMessage>Входной запрос в виде строки или асинхронного итерируемого объекта для режима потока
optionsOptionsОпциональный объект конфигурации (см. тип Options ниже)

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

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

startup()

Предварительно разогревает подпроцесс CLI, запуская его и завершая инициализационное рукопожатие до того, как запрос будет доступен. Возвращённый дескриптор WarmQuery принимает запрос позже и записывает его в уже готовый процесс, поэтому первый вызов query() разрешается без затрат на запуск подпроцесса и инициализацию в строке.
function startup(params?: {
  options?: Options;
  initializeTimeoutMs?: number;
}): Promise<WarmQuery>;

Параметры

ПараметрТипОписание
optionsOptionsОпциональный объект конфигурации. Аналогичен параметру options функции query()
initializeTimeoutMsnumberМаксимальное время в миллисекундах для ожидания инициализации подпроцесса. По умолчанию 60000. Если инициализация не завершится вовремя, промис отклонится с ошибкой timeout

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

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

Пример

Вызовите startup() рано, например при загрузке приложения, затем вызовите .query() на возвращённом дескрипторе, когда запрос будет готов. Это перемещает запуск подпроцесса и инициализацию из критического пути.
import { startup } from "@anthropic-ai/claude-agent-sdk";

// Оплатите стоимость запуска заранее
const warm = await startup({ options: { maxTurns: 3 } });

// Позже, когда запрос готов, это происходит мгновенно
for await (const message of warm.query("What files are here?")) {
  console.log(message);
}

tool()

Создаёт определение типобезопасного MCP tool для использования с SDK MCP серверами.
function tool<Schema extends AnyZodRawShape>(
  name: string,
  description: string,
  inputSchema: Schema,
  handler: (args: InferShape<Schema>, extra: unknown) => Promise<CallToolResult>,
  extras?: { annotations?: ToolAnnotations }
): SdkMcpToolDefinition<Schema>;

Параметры

ПараметрТипОписание
namestringИмя tool
descriptionstringОписание того, что делает tool
inputSchemaSchema extends AnyZodRawShapeZod схема, определяющая входные параметры tool (поддерживает Zod 3 и Zod 4)
handler(args, extra) => Promise<CallToolResult>Асинхронная функция, которая выполняет логику tool
extras{ annotations?: ToolAnnotations }Опциональные аннотации MCP tool, предоставляющие поведенческие подсказки клиентам

ToolAnnotations

Переэкспортировано из @modelcontextprotocol/sdk/types.js. Все поля являются опциональными подсказками; клиенты не должны полагаться на них для решений безопасности.
ПолеТипПо умолчаниюОписание
titlestringundefinedУдобочитаемое название для tool
readOnlyHintbooleanfalseЕсли true, tool не изменяет свою среду
destructiveHintbooleantrueЕсли true, tool может выполнять деструктивные обновления (имеет смысл только когда readOnlyHint равен false)
idempotentHintbooleanfalseЕсли true, повторные вызовы с одинаковыми аргументами не имеют дополнительного эффекта (имеет смысл только когда readOnlyHint равен false)
openWorldHintbooleantrueЕсли true, tool взаимодействует с внешними сущностями (например, веб-поиск). Если false, область tool закрыта (например, tool памяти)
import { tool } from "@anthropic-ai/claude-agent-sdk";
import { z } from "zod";

const searchTool = tool(
  "search",
  "Search the web",
  { query: z.string() },
  async ({ query }) => {
    return { content: [{ type: "text", text: `Results for: ${query}` }] };
  },
  { annotations: { readOnlyHint: true, openWorldHint: true } }
);

createSdkMcpServer()

Создаёт экземпляр MCP сервера, который работает в том же процессе, что и ваше приложение.
function createSdkMcpServer(options: {
  name: string;
  version?: string;
  tools?: Array<SdkMcpToolDefinition<any>>;
}): McpSdkServerConfigWithInstance;

Параметры

ПараметрТипОписание
options.namestringИмя MCP сервера
options.versionstringОпциональная строка версии
options.toolsArray<SdkMcpToolDefinition>Массив определений tool, созданных с помощью tool()

listSessions()

Обнаруживает и перечисляет прошлые сессии с лёгкими метаданными. Фильтруйте по директории проекта или перечисляйте сессии во всех проектах.
function listSessions(options?: ListSessionsOptions): Promise<SDKSessionInfo[]>;

Параметры

ПараметрТипПо умолчаниюОписание
options.dirstringundefinedДиректория для перечисления сессий. Если опущено, возвращает сессии во всех проектах
options.limitnumberundefinedМаксимальное количество сессий для возврата
options.includeWorktreesbooleantrueКогда dir находится внутри git репозитория, включайте сессии из всех путей worktree

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

СвойствоТипОписание
sessionIdstringУникальный идентификатор сессии (UUID)
summarystringОтображаемое название: пользовательское название, автоматически сгенерированное резюме или первый запрос
lastModifiednumberВремя последнего изменения в миллисекундах с эпохи
fileSizenumber | undefinedРазмер файла сессии в байтах. Заполняется только для локального хранилища JSONL
customTitlestring | undefinedПользовательское название сессии (через /rename)
firstPromptstring | undefinedПервый значимый пользовательский запрос в сессии
gitBranchstring | undefinedGit ветка в конце сессии
cwdstring | undefinedРабочая директория для сессии
tagstring | undefinedПользовательский тег сессии (см. tagSession())
createdAtnumber | undefinedВремя создания в миллисекундах с эпохи, из временной метки первой записи

Пример

Выведите 10 самых последних сессий для проекта. Результаты отсортированы по lastModified в убывающем порядке, поэтому первый элемент является самым новым. Опустите dir для поиска во всех проектах.
import { listSessions } from "@anthropic-ai/claude-agent-sdk";

const sessions = await listSessions({ dir: "/path/to/project", limit: 10 });

for (const session of sessions) {
  console.log(`${session.summary} (${session.sessionId})`);
}

getSessionMessages()

Читает сообщения пользователя и ассистента из прошлой сессии.
function getSessionMessages(
  sessionId: string,
  options?: GetSessionMessagesOptions
): Promise<SessionMessage[]>;

Параметры

ПараметрТипПо умолчаниюОписание
sessionIdstringобязательноUUID сессии для чтения (см. listSessions())
options.dirstringundefinedДиректория проекта для поиска сессии. Если опущено, ищет во всех проектах
options.limitnumberundefinedМаксимальное количество сообщений для возврата
options.offsetnumberundefinedКоличество сообщений для пропуска с начала

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

СвойствоТипОписание
type"user" | "assistant"Роль сообщения
uuidstringУникальный идентификатор сообщения
session_idstringСессия, к которой принадлежит это сообщение
messageunknownНеобработанная полезная нагрузка сообщения из транскрипта
parent_tool_use_idstring | nullДля сообщений подагента, tool_use_id вызова tool Agent, который его запустил. null для сообщений основной сессии и более старых сессий

Пример

import { listSessions, getSessionMessages } from "@anthropic-ai/claude-agent-sdk";

const [latest] = await listSessions({ dir: "/path/to/project", limit: 1 });

if (latest) {
  const messages = await getSessionMessages(latest.sessionId, {
    dir: "/path/to/project",
    limit: 20
  });

  for (const msg of messages) {
    console.log(`[${msg.type}] ${msg.uuid}`);
  }
}

getSessionInfo()

Читает метаданные для одной сессии по ID без сканирования полной директории проекта.
function getSessionInfo(
  sessionId: string,
  options?: GetSessionInfoOptions
): Promise<SDKSessionInfo | undefined>;

Параметры

ПараметрТипПо умолчаниюОписание
sessionIdstringобязательноUUID сессии для поиска
options.dirstringundefinedПуть директории проекта. Если опущено, ищет во всех директориях проектов
Возвращает SDKSessionInfo или undefined, если сессия не найдена.

renameSession()

Переименовывает сессию, добавляя запись пользовательского названия. Повторные вызовы безопасны; побеждает самое последнее название.
function renameSession(
  sessionId: string,
  title: string,
  options?: SessionMutationOptions
): Promise<void>;

Параметры

ПараметрТипПо умолчаниюОписание
sessionIdstringобязательноUUID сессии для переименования
titlestringобязательноНовое название. Должно быть непустым после удаления пробелов
options.dirstringundefinedПуть директории проекта. Если опущено, ищет во всех директориях проектов

tagSession()

Помечает сессию. Передайте null для очистки тега. Повторные вызовы безопасны; побеждает самый последний тег.
function tagSession(
  sessionId: string,
  tag: string | null,
  options?: SessionMutationOptions
): Promise<void>;

Параметры

ПараметрТипПо умолчаниюОписание
sessionIdstringобязательноUUID сессии для пометки
tagstring | nullобязательноСтрока тега или null для очистки
options.dirstringundefinedПуть директории проекта. Если опущено, ищет во всех директориях проектов

resolveSettings()

Разрешает эффективные параметры Claude Code для заданной директории, используя тот же механизм слияния, что и CLI, без запуска Claude CLI. Используйте его для проверки того, какую конфигурацию увидит вызов query() перед его вызовом.
Эта функция находится в альфа-версии и её API может измениться перед стабилизацией. Она читает источники MDM, включая macOS plist и Windows HKLM/HKCU, для паритета с запуском CLI, но не выполняет настроенный администратором подпроцесс policyHelper. Поле permissions.defaultMode возвращается как есть из всех уровней, включая параметры проекта. Фильтр доверия, который CLI применяет перед соблюдением режимов повышенных разрешений, не применяется.
function resolveSettings(
  options?: ResolveSettingsOptions
): Promise<ResolvedSettings>;

Параметры

resolveSettings() принимает один объект параметров. Все поля опциональны.
ПараметрТипПо умолчаниюОписание
options.cwdstringprocess.cwd()Директория для разрешения параметров проекта и локальных параметров относительно
options.settingSourcesSettingSource[]Все источникиКакие источники файловой системы загружать. Передайте [] для пропуска пользовательских, проектных и локальных параметров. Параметры управляемой политики загружаются во всех случаях
options.managedSettingsSettingsundefinedОграничивающие параметры уровня политики, предоставленные хостом встраивания. Отбрасываются по умолчанию, когда присутствует развёрнутый администратором управляемый уровень; объединяются под этим уровнем, когда parentSettingsBehavior равен "merge". Неограничивающие ключи, такие как model, молча отбрасываются, поэтому этот параметр может усилить управляемую политику, но не ослабить её
options.serverManagedSettingsSettingsundefinedПолезная нагрузка параметров, управляемых сервером, из /api/claude_code/settings. Неограничивающие ключи проходят без фильтрации

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

resolveSettings() возвращает объект, описывающий объединённые параметры и источник, который внёс каждый ключ.
СвойствоТипОписание
effectiveSettingsОбъединённые параметры после применения всех включённых источников в порядке приоритета
provenancePartial<Record<keyof Settings, ProvenanceEntry>>Для каждого ключа верхнего уровня в effective, какой источник предоставил значение
sourcesArray<{ source, settings, path?, policyOrigin? }>Необработанные параметры для каждого источника, упорядоченные от самого низкого к самому высокому приоритету

Пример

Пример ниже разрешает параметры для директории проекта и выводит источник, который контролирует период очистки.
import { resolveSettings } from "@anthropic-ai/claude-agent-sdk";

const { effective, provenance } = await resolveSettings({
  cwd: "/path/to/project",
  settingSources: ["user", "project", "local"],
});

console.log(`Cleanup period: ${effective.cleanupPeriodDays} days`);
console.log(`Set by: ${provenance.cleanupPeriodDays?.source}`);

Типы

Options

Объект конфигурации для функции query().
СвойствоТипПо умолчаниюОписание
abortControllerAbortControllernew AbortController()Контроллер для отмены операций
additionalDirectoriesstring[][]Дополнительные директории, к которым Claude может получить доступ
agentstringundefinedИмя агента для основного потока. Агент должен быть определён в опции agents или в настройках
agentsRecord<string, [AgentDefinition](#agentdefinition)>undefinedПрограммно определите подагентов
agentProgressSummariesbooleanfalseКогда true, генерируйте однострочные сводки прогресса для подагентов и пересылайте их на события task_progress через поле summary. Применяется к подагентам переднего плана и фонового режима
allowDangerouslySkipPermissionsbooleanfalseВключите обход разрешений. Требуется при использовании permissionMode: 'bypassPermissions'
allowedToolsstring[][]Инструменты для автоматического одобрения без запроса. Это не ограничивает Claude только этими инструментами; неперечисленные инструменты переходят к permissionMode и canUseTool. Используйте disallowedTools для блокировки инструментов. См. Разрешения
betasSdkBeta[][]Включите бета-функции
canUseToolCanUseToolundefinedПользовательская функция разрешения для использования инструмента
continuebooleanfalseПродолжите самый последний диалог
cwdstringprocess.cwd()Текущая рабочая директория
debugbooleanfalseВключите режим отладки для процесса Claude Code
debugFilestringundefinedЗапишите журналы отладки в определённый путь файла. Неявно включает режим отладки
disallowedToolsstring[][]Инструменты для отклонения. Простое имя, такое как "Bash", удаляет инструмент из контекста Claude. Правило с областью видимости, такое как "Bash(rm *)", оставляет инструмент доступным и отклоняет совпадающие вызовы в каждом режиме разрешения, включая bypassPermissions. См. Разрешения
effort'low' | 'medium' | 'high' | 'xhigh' | 'max''high'Контролирует, сколько усилий Claude вкладывает в свой ответ. Работает с адаптивным мышлением для направления глубины мышления
enableFileCheckpointingbooleanfalseВключите отслеживание изменений файлов для перемотки. См. File checkpointing
envRecord<string, string | undefined>process.envПеременные окружения. Когда установлено, это заменяет окружение подпроцесса вместо объединения с process.env, поэтому передайте { ...process.env, YOUR_VAR: 'value' } для сохранения унаследованных переменных, таких как PATH. См. Обработка медленных или зависших ответов API для примера этого паттерна и Переменные окружения для переменных, которые читает базовый CLI. Установите CLAUDE_AGENT_SDK_CLIENT_APP для идентификации вашего приложения в заголовке User-Agent
executable'bun' | 'deno' | 'node'АвтоопределениеСреда выполнения JavaScript для использования
executableArgsstring[][]Аргументы для передачи исполняемому файлу
extraArgsRecord<string, string | null>{}Дополнительные аргументы
fallbackModelstringundefinedМодель для использования, если основная не работает
forkSessionbooleanfalseПри возобновлении с resume разветвитесь на новый ID сессии вместо продолжения исходной сессии
forwardSubagentTextbooleanfalseПересылайте текст подагента и блоки мышления как сообщения ассистента и пользователя с установленным parent_tool_use_id, чтобы потребители могли отобразить вложенный транскрипт. По умолчанию только блоки tool_use и tool_result от подагентов выдаются
hooksPartial<Record<HookEvent, HookCallbackMatcher[]>>{}Обратные вызовы hooks для событий
includeHookEventsbooleanfalseВключите события жизненного цикла hooks в поток сообщений как SDKHookStartedMessage, SDKHookProgressMessage и SDKHookResponseMessage
includePartialMessagesbooleanfalseВключите события частичных сообщений
loadTimeoutMsnumber60000Alpha. Timeout в миллисекундах для каждого вызова sessionStore.load() и sessionStore.listSubkeys() во время материализации возобновления. Если адаптер не завершится в этом окне, запрос не удаётся вместо зависания. Игнорируется, когда sessionStore не установлен
managedSettingsSettingsundefinedНастройки уровня политики, предоставленные порождающим родительским процессом. Отбрасываются, когда уровень управляемых настроек, контролируемый IT, уже существует на машине, если только этот администратор не согласится с parentSettingsBehavior: 'merge'. Отфильтрованы только для ключей, ограничивающих доступ, независимо
maxBudgetUsdnumberundefinedОстановите запрос, когда оценка стоимости на стороне клиента достигнет этого значения USD. Сравнивается с той же оценкой, что и total_cost_usd; см. Отслеживание стоимости и использования для предостережений точности
maxThinkingTokensnumberundefinedУстарело: Используйте вместо этого thinking. Максимальные токены для процесса мышления
maxTurnsnumberundefinedМаксимальное количество агентских ходов (раунды использования инструмента)
mcpServersRecord<string, [McpServerConfig](#mcpserverconfig)>{}Конфигурации MCP серверов
modelstringПо умолчанию из CLIМодель Claude для использования
onElicitation(request: ElicitationRequest, options: { signal: AbortSignal }) => Promise<ElicitationResult>undefinedОбратный вызов для обработки запросов MCP elicitation. Вызывается, когда MCP сервер запрашивает ввод пользователя и ни один hook не обрабатывает его первым. Если не предоставлено, необработанные запросы elicitation автоматически отклоняются
outputFormat{ type: 'json_schema', schema: JSONSchema }undefinedОпределите формат вывода для результатов агента. См. Structured outputs для деталей
outputStylestringundefinedНе поле Options. Установите outputStyle во встроенном объекте settings или файле настроек вместо этого. См. Activate an output style
pathToClaudeCodeExecutablestringАвтоопределение из встроенного нативного бинарного файлаПуть к исполняемому файлу Claude Code. Требуется только если опциональные зависимости были пропущены при установке или ваша платформа не в поддерживаемом наборе
permissionModePermissionMode'default'Режим разрешения для сессии
permissionPromptToolNamestringundefinedИмя MCP инструмента для запросов разрешения
persistSessionbooleantrueКогда false, отключает сохранение сессии на диск. Сессии не могут быть возобновлены позже
planModeInstructionsstringundefinedПользовательские инструкции рабочего процесса для Plan Mode. Когда permissionMode это 'plan', эта строка заменяет тело рабочего процесса режима плана по умолчанию. CLI по-прежнему оборачивает его с преамбулой принудительного соблюдения только для чтения и нижним колонтитулом протокола ExitPlanMode
pluginsSdkPluginConfig[][]Загружайте пользовательские plugins из локальных путей. См. Plugins для деталей
promptSuggestionsbooleanfalseВключите предложения запросов. Выдаёт сообщение prompt_suggestion после каждого хода с предсказанным следующим пользовательским запросом
resumestringundefinedID сессии для возобновления
resumeSessionAtstringundefinedВозобновите сессию в определённом UUID сообщения
sandboxSandboxSettingsundefinedПрограммно настройте поведение sandbox. См. Sandbox settings для деталей
sessionIdstringАвтогенерируемыйИспользуйте определённый UUID для сессии вместо автогенерирования
sessionStoreSessionStoreundefinedЗеркалируйте транскрипты сессий на внешний бэкенд, чтобы любой хост мог их возобновить. См. Persist sessions to external storage
sessionStoreFlush'batched' | 'eager''batched'Alpha. Режим flush для sessionStore. Игнорируется, когда sessionStore не установлен
settingsstring | SettingsundefinedВстроенный объект settings или путь к файлу настроек. Заполняет слой flag-settings в порядке приоритета. Измените во время выполнения с помощью applyFlagSettings()
settingSourcesSettingSource[]Значения по умолчанию CLI (все источники)Контролируйте, какие настройки файловой системы загружать. Передайте [] для отключения пользовательских, проектных и локальных настроек. Управляемые политикой настройки загружаются независимо. См. Use Claude Code features
skillsstring[] | 'all'undefinedSkills доступные для сессии. Передайте 'all' для включения каждого обнаруженного skill, или список имён skills. Когда установлено, SDK автоматически добавляет инструмент Skill в allowedTools. Если вы также передаёте tools, включите 'Skill' в этот список. См. Skills
spawnClaudeCodeProcess(options: SpawnOptions) => SpawnedProcessundefinedПользовательская функция для запуска процесса Claude Code. Используйте для запуска Claude Code на ВМ, контейнерах или удалённых окружениях
stderr(data: string) => voidundefinedОбратный вызов для вывода stderr
strictMcpConfigbooleanfalseИспользуйте только серверы, переданные в mcpServers, и игнорируйте проект .mcp.json, пользовательские настройки, MCP серверы, предоставленные plugins, и claude.ai connectors
systemPromptstring | { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean }undefined (минимальный запрос)Конфигурация системного запроса. Передайте строку для пользовательского запроса или { type: 'preset', preset: 'claude_code' } для использования системного запроса Claude Code. При использовании формы объекта preset добавьте append для расширения его дополнительными инструкциями и установите excludeDynamicSections: true для перемещения контекста для каждой сессии в первое пользовательское сообщение для лучшего переиспользования prompt caching на разных машинах
taskBudget{ total: number }undefinedAlpha. Бюджет задачи на стороне API в токенах. Когда установлено, модели сообщается её оставшийся бюджет токенов, чтобы она могла регулировать использование инструмента и завершить работу до лимита
thinkingThinkingConfig{ type: 'adaptive' } для поддерживаемых моделейКонтролирует поведение мышления/рассуждения Claude. См. ThinkingConfig для опций
titlestringundefinedОтображаемое название для сессии. При возобновлении через resume или continue, сохранённое название возобновляемой сессии имеет приоритет; используйте renameSession() для переименования существующей сессии
toolAliasesRecord<string, string>undefinedОтображайте встроенные имена инструментов на имена MCP инструментов, чтобы Claude вызывал вашу реализацию MCP вместо встроенной. Например, { Bash: 'mcp__workspace__bash' }
toolConfigToolConfigundefinedКонфигурация для встроенного поведения инструмента. См. ToolConfig для деталей
toolsstring[] | { type: 'preset'; preset: 'claude_code' }undefinedКонфигурация инструмента. Передайте массив имён инструментов или используйте preset для получения встроенных инструментов Claude Code

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

Подпроцесс CLI читает несколько переменных окружения, которые контролируют timeout API и обнаружение зависания. Передайте их через опцию env:
const result = query({
  prompt: "Analyze this code",
  options: {
    env: {
      ...process.env,
      API_TIMEOUT_MS: "120000",
      CLAUDE_CODE_MAX_RETRIES: "2",
      CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: "120000",
    },
  },
});
  • API_TIMEOUT_MS: timeout для каждого запроса на клиенте Anthropic, в миллисекундах. По умолчанию 600000. Применяется к основному циклу и всем подагентам.
  • CLAUDE_CODE_MAX_RETRIES: максимальное количество повторных попыток API. По умолчанию 10. Каждая повторная попытка получает своё собственное окно API_TIMEOUT_MS, поэтому наихудший случай wall time примерно API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1) плюс backoff.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog зависания для подагентов, запущенных с run_in_background. По умолчанию 600000. Сбрасывается при каждом событии потока; при зависании прерывает подагента, отмечает задачу как неудачную и выводит ошибку родителю с любым частичным результатом. Не применяется к синхронным подагентам.
  • CLAUDE_ENABLE_STREAM_WATCHDOG=1 с CLAUDE_STREAM_IDLE_TIMEOUT_MS: прерывает запрос, когда заголовки получены, но тело ответа перестаёт потоком передаваться. По умолчанию отключено. CLAUDE_STREAM_IDLE_TIMEOUT_MS по умолчанию 300000 и зажимается до этого минимума. Прерванный запрос проходит через обычный путь повторной попытки.

Query объект

Интерфейс, возвращаемый функцией query().
interface Query extends AsyncGenerator<SDKMessage, void> {
  interrupt(): Promise<void>;
  rewindFiles(
    userMessageId: string,
    options?: { dryRun?: boolean }
  ): Promise<RewindFilesResult>;
  setPermissionMode(mode: PermissionMode): Promise<void>;
  setModel(model?: string): Promise<void>;
  setMaxThinkingTokens(maxThinkingTokens: number | null): Promise<void>;
  applyFlagSettings(settings: { [K in keyof Settings]?: Settings[K] | null }): Promise<void>;
  initializationResult(): Promise<SDKControlInitializeResponse>;
  supportedCommands(): Promise<SlashCommand[]>;
  supportedModels(): Promise<ModelInfo[]>;
  supportedAgents(): Promise<AgentInfo[]>;
  mcpServerStatus(): Promise<McpServerStatus[]>;
  accountInfo(): Promise<AccountInfo>;
  reconnectMcpServer(serverName: string): Promise<void>;
  toggleMcpServer(serverName: string, enabled: boolean): Promise<void>;
  setMcpServers(servers: Record<string, McpServerConfig>): Promise<McpSetServersResult>;
  streamInput(stream: AsyncIterable<SDKUserMessage>): Promise<void>;
  stopTask(taskId: string): Promise<void>;
  close(): void;
}

Методы

МетодОписание
interrupt()Прерывает запрос (доступно только в режиме потока входных данных)
rewindFiles(userMessageId, options?)Восстанавливает файлы в их состояние в указанном пользовательском сообщении. Передайте { dryRun: true } для предпросмотра изменений. Требует enableFileCheckpointing: true. См. File checkpointing
setPermissionMode()Изменяет режим разрешения (доступно только в режиме потока входных данных)
setModel()Изменяет модель (доступно только в режиме потока входных данных)
setMaxThinkingTokens()Устарело: Используйте вместо этого опцию thinking. Изменяет максимальные токены мышления
applyFlagSettings(settings)Объединяет настройки в слой flag settings сессии во время выполнения (доступно только в режиме потока входных данных). См. applyFlagSettings()
initializationResult()Возвращает полный результат инициализации, включая поддерживаемые команды, модели, информацию об учётной записи и конфигурацию стиля вывода
supportedCommands()Возвращает доступные slash commands
supportedModels()Возвращает доступные модели с информацией отображения
supportedAgents()Возвращает доступные подагентов как AgentInfo[]
mcpServerStatus()Возвращает статус подключённых MCP серверов
accountInfo()Возвращает информацию об учётной записи
reconnectMcpServer(serverName)Переподключитесь к MCP серверу по имени
toggleMcpServer(serverName, enabled)Включите или отключите MCP сервер по имени
setMcpServers(servers)Динамически замените набор MCP серверов для этой сессии. Возвращает информацию о том, какие серверы были добавлены, удалены и какие ошибки
streamInput(stream)Потоком передавайте входные сообщения к запросу для многооборотных диалогов
stopTask(taskId)Остановите выполняющуюся фоновую задачу по ID
close()Закройте запрос и завершите базовый процесс. Принудительно завершает запрос и очищает все ресурсы

applyFlagSettings()

Изменяет любую настройку на работающей сессии без перезагрузки запроса. Используйте её, когда настройка, у которой нет выделенного setter, должна измениться в середине сессии, например, ужесточение permissions после того, как агент прочитает ненадёжный ввод. setModel() и setPermissionMode() являются выделенными setters для этих двух ключей; applyFlagSettings() является общей формой, которая принимает любое подмножество ключей настроек, и передача model здесь ведёт себя так же, как setModel(). Только некоторые ключи вступают в силу в середине сессии:
  • Применяется на следующем ходу: model, effortLevel, ultracode, permissions, hooks, skillOverrides, fastMode, awaySummaryEnabled, agent. Переключение agent также применяет переопределение модели этого агента, hooks и системный запрос на следующем ходу.
  • Нет эффекта в середине сессии: опции системного запроса. Они разрешаются один раз при запуске, поэтому работающая сессия сохраняет исходное значение, даже если вызов успешен. Чтобы их изменить, запустите новую сессию.
Значения записываются в слой flag-settings, тот же слой, который встроенная опция settings функции query() заполняет при запуске. Flag settings находятся рядом с верхней частью порядка приоритета настроек: они переопределяют пользовательские, проектные и локальные настройки, и только управляемые политикой настройки могут их переопределить. Это тот же уровень, который раздел приоритета на странице называет программными опциями. Последовательные вызовы выполняют shallow-merge ключей верхнего уровня. Второй вызов с { permissions: {...} } заменяет весь объект permissions из предыдущего вызова, а не выполняет deep-merge в него. Чтобы очистить ключ из слоя flag и вернуться к источникам с более низким приоритетом, передайте null для этого ключа. Передача undefined не имеет эффекта, потому что сериализация JSON её отбрасывает. Доступно только в режиме потока входных данных, то же ограничение, что и setModel() и setPermissionMode(). Пример ниже переключает активную модель в середине сессии, а затем очищает переопределение, чтобы модель вернулась к тому, что указывают пользовательские или проектные настройки.
const q = query({ prompt: messageStream });

// Переопределите модель для остальной части сессии
await q.applyFlagSettings({ model: "claude-opus-4-6" });

// Позже: очистите переопределение и вернитесь к настройкам с более низким приоритетом
await q.applyFlagSettings({ model: null });
applyFlagSettings() только для TypeScript. Python SDK не предоставляет эквивалентный метод.

WarmQuery

Дескриптор, возвращаемый startup(). Подпроцесс уже запущен и инициализирован, поэтому вызов query() на этом дескрипторе записывает запрос непосредственно в готовый процесс без задержки запуска.
interface WarmQuery extends AsyncDisposable {
  query(prompt: string | AsyncIterable<SDKUserMessage>): Query;
  close(): void;
}

Методы

МетодОписание
query(prompt)Отправьте запрос к предварительно разогретому подпроцессу и верните Query. Может быть вызван только один раз на WarmQuery
close()Закройте подпроцесс без отправки запроса. Используйте это для отказа от тёплого запроса, который больше не нужен
WarmQuery реализует AsyncDisposable, поэтому его можно использовать с await using для автоматической очистки.

SDKControlInitializeResponse

Тип возврата initializationResult(). Содержит данные инициализации сессии.
type SDKControlInitializeResponse = {
  commands: SlashCommand[];
  agents: AgentInfo[];
  output_style: string;
  available_output_styles: string[];
  models: ModelInfo[];
  account: AccountInfo;
  fast_mode_state?: "off" | "cooldown" | "on";
};
Когда клиент отправляет initialize сессии, которая уже работает, обёртка control-response также содержит опциональный массив pending_permission_requests. Поле находится на самой обёртке response, а не в полезной нагрузке SDKControlInitializeResponse выше. Каждая запись является полным сообщением control_request с той же формой { type: "control_request", request_id, request }, которую сессия потоком передаёт для запросов разрешения во время работы. Это запросы, которые были выданы до подключения клиента и всё ещё ожидают ответа, поэтому прочитайте этот массив для немедленного отображения в полёте разрешений; они не будут переотправлены.

AgentDefinition

Конфигурация для подагента, определённого программно.
type AgentDefinition = {
  description: string;
  tools?: string[];
  disallowedTools?: string[];
  prompt: string;
  model?: string;
  mcpServers?: AgentMcpServerSpec[];
  skills?: string[];
  initialPrompt?: string;
  maxTurns?: number;
  background?: boolean;
  memory?: "user" | "project" | "local";
  effort?: "low" | "medium" | "high" | "xhigh" | "max" | number;
  permissionMode?: PermissionMode;
  criticalSystemReminder_EXPERIMENTAL?: string;
};
ПолеОбязательноОписание
descriptionДаОписание на естественном языке, когда использовать этого агента
toolsНетМассив разрешённых имён инструментов. Если опущено, наследует все инструменты от родителя. Для предварительной загрузки Skills в контекст агента используйте поле skills вместо указания 'Skill' здесь
disallowedToolsНетМассив имён инструментов для явного запрещения для этого агента
promptДаСистемный запрос агента
modelНетПереопределение модели для этого агента. Принимает псевдоним, такой как 'sonnet', 'opus', 'haiku', 'inherit', или полный ID модели. Если опущено или 'inherit', использует основную модель
mcpServersНетСпецификации MCP серверов для этого агента
skillsНетМассив имён skills для предварительной загрузки в контекст агента
initialPromptНетАвтоматически отправляется как первый пользовательский ход, когда этот агент работает как агент основного потока
maxTurnsНетМаксимальное количество агентских ходов (раунды API) перед остановкой
backgroundНетЗапустите этого агента как неблокирующую фоновую задачу при вызове
memoryНетИсточник памяти для этого агента: 'user', 'project' или 'local'
effortНетУровень усилий рассуждения для этого агента. Принимает именованный уровень или целое число
permissionModeНетРежим разрешения для выполнения инструмента в этом агенте. См. PermissionMode
criticalSystemReminder_EXPERIMENTALНетЭкспериментально: Критическое напоминание, добавленное в системный запрос

AgentMcpServerSpec

Указывает MCP серверы, доступные подагенту. Может быть именем сервера (строка, ссылающаяся на сервер из конфигурации mcpServers родителя) или встроенной конфигурацией сервера, записью, отображающей имена серверов на конфигурации.
type AgentMcpServerSpec = string | Record<string, McpServerConfigForProcessTransport>;
Где McpServerConfigForProcessTransport это McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig.

SettingSource

Контролирует, какие источники конфигурации на основе файловой системы SDK загружает настройки из.
type SettingSource = "user" | "project" | "local";
ЗначениеОписаниеМестоположение
'user'Глобальные пользовательские настройки~/.claude/settings.json
'project'Общие настройки проекта (контролируемые версией).claude/settings.json
'local'Локальные настройки проекта (gitignored).claude/settings.local.json

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

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

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

Отключите настройки файловой системы:
// Не загружайте пользовательские, проектные или локальные настройки с диска
const result = query({
  prompt: "Analyze this code",
  options: { settingSources: [] }
});
Загружайте все настройки файловой системы явно:
const result = query({
  prompt: "Analyze this code",
  options: {
    settingSources: ["user", "project", "local"] // Загружайте все настройки
  }
});
Загружайте только определённые источники настроек:
// Загружайте только настройки проекта, игнорируйте пользовательские и локальные
const result = query({
  prompt: "Run CI checks",
  options: {
    settingSources: ["project"] // Только .claude/settings.json
  }
});
Тестирование и окружения CI:
// Обеспечьте согласованное поведение в CI, исключив локальные настройки
const result = query({
  prompt: "Run tests",
  options: {
    settingSources: ["project"], // Только общие командные настройки
    permissionMode: "bypassPermissions"
  }
});
SDK-только приложения:
// Определите всё программно.
// Передайте [] для отказа от источников настроек файловой системы.
const result = query({
  prompt: "Review this PR",
  options: {
    settingSources: [],
    agents: {
      /* ... */
    },
    mcpServers: {
      /* ... */
    },
    allowedTools: ["Read", "Grep", "Glob"]
  }
});
Загрузка инструкций проекта CLAUDE.md:
// Загружайте настройки проекта для включения файлов CLAUDE.md
const result = query({
  prompt: "Add a new feature following project conventions",
  options: {
    systemPrompt: {
      type: "preset",
      preset: "claude_code" // Используйте системный запрос Claude Code
    },
    settingSources: ["project"], // Загружает CLAUDE.md из директории проекта
    allowedTools: ["Read", "Write", "Edit"]
  }
});

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

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

PermissionMode

type PermissionMode =
  | "default" // Стандартное поведение разрешения
  | "acceptEdits" // Автоматически принимайте редактирования файлов
  | "bypassPermissions" // Обойдите все проверки разрешения
  | "plan" // Plan Mode - только инструменты чтения
  | "dontAsk" // Не запрашивайте разрешения, отклоняйте, если не предварительно одобрено
  | "auto"; // Используйте классификатор модели для одобрения или отклонения каждого вызова инструмента

CanUseTool

Тип пользовательской функции разрешения для контроля использования инструмента.
type CanUseTool = (
  toolName: string,
  input: Record<string, unknown>,
  options: {
    signal: AbortSignal;
    suggestions?: PermissionUpdate[];
    blockedPath?: string;
    decisionReason?: string;
    toolUseID: string;
    agentID?: string;
  }
) => Promise<PermissionResult>;
ОпцияТипОписание
signalAbortSignalСигнализируется, если операция должна быть отменена
suggestionsPermissionUpdate[]Предложенные обновления разрешения, чтобы пользователь не был запрошен снова для этого инструмента. Запросы Bash включают предложение с назначением localSettings destination, поэтому возврат его в updatedPermissions записывает правило в .claude/settings.local.json и сохраняется между сессиями.
blockedPathstringПуть файла, который вызвал запрос разрешения, если применимо
decisionReasonstringОбъясняет, почему был вызван этот запрос разрешения
toolUseIDstringУникальный идентификатор для этого конкретного вызова инструмента в сообщении ассистента
agentIDstringЕсли работает в подагенте, ID подагента

PermissionResult

Результат проверки разрешения.
type PermissionResult =
  | {
      behavior: "allow";
      updatedInput?: Record<string, unknown>;
      updatedPermissions?: PermissionUpdate[];
      toolUseID?: string;
    }
  | {
      behavior: "deny";
      message: string;
      interrupt?: boolean;
      toolUseID?: string;
    };

ToolConfig

Конфигурация для встроенного поведения инструмента.
type ToolConfig = {
  askUserQuestion?: {
    previewFormat?: "markdown" | "html";
  };
};
ПолеТипОписание
askUserQuestion.previewFormat'markdown' | 'html'Выбирает поле preview на опциях AskUserQuestion и устанавливает его формат содержимого. Если не установлено, Claude не выдаёт предпросмотры

McpServerConfig

Конфигурация для MCP серверов.
type McpServerConfig =
  | McpStdioServerConfig
  | McpSSEServerConfig
  | McpHttpServerConfig
  | McpSdkServerConfigWithInstance;

McpStdioServerConfig

type McpStdioServerConfig = {
  type?: "stdio";
  command: string;
  args?: string[];
  env?: Record<string, string>;
};

McpSSEServerConfig

type McpSSEServerConfig = {
  type: "sse";
  url: string;
  headers?: Record<string, string>;
};

McpHttpServerConfig

type McpHttpServerConfig = {
  type: "http";
  url: string;
  headers?: Record<string, string>;
};

McpSdkServerConfigWithInstance

type McpSdkServerConfigWithInstance = {
  type: "sdk";
  name: string;
  instance: McpServer;
};

McpClaudeAIProxyServerConfig

type McpClaudeAIProxyServerConfig = {
  type: "claudeai-proxy";
  url: string;
  id: string;
};

SdkPluginConfig

Конфигурация для загрузки plugins в SDK.
type SdkPluginConfig = {
  type: "local";
  path: string;
};
ПолеТипОписание
type'local'Должно быть 'local' (в настоящее время поддерживаются только локальные plugins)
pathstringАбсолютный или относительный путь к директории plugin
Пример:
plugins: [
  { type: "local", path: "./my-plugin" },
  { type: "local", path: "/absolute/path/to/plugin" }
];
Для полной информации о создании и использовании plugins см. Plugins.

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

SDKMessage

Тип объединения всех возможных сообщений, возвращаемых запросом.
type SDKMessage =
  | SDKAssistantMessage
  | SDKUserMessage
  | SDKUserMessageReplay
  | SDKResultMessage
  | SDKSystemMessage
  | SDKPartialAssistantMessage
  | SDKCompactBoundaryMessage
  | SDKStatusMessage
  | SDKLocalCommandOutputMessage
  | SDKHookStartedMessage
  | SDKHookProgressMessage
  | SDKHookResponseMessage
  | SDKPluginInstallMessage
  | SDKToolProgressMessage
  | SDKAuthStatusMessage
  | SDKTaskNotificationMessage
  | SDKTaskStartedMessage
  | SDKTaskProgressMessage
  | SDKTaskUpdatedMessage
  | SDKSessionStateChangedMessage
  | SDKCommandsChangedMessage
  | SDKNotificationMessage
  | SDKFilesPersistedEvent
  | SDKToolUseSummaryMessage
  | SDKMemoryRecallMessage
  | SDKRateLimitEvent
  | SDKElicitationCompleteMessage
  | SDKPermissionDeniedMessage
  | SDKPromptSuggestionMessage
  | SDKAPIRetryMessage
  | SDKMirrorErrorMessage;

SDKAssistantMessage

Сообщение ответа ассистента.
type SDKAssistantMessage = {
  type: "assistant";
  uuid: UUID;
  session_id: string;
  message: BetaMessage; // Из Anthropic SDK
  parent_tool_use_id: string | null;
  error?: SDKAssistantMessageError;
};
Поле message это BetaMessage из Anthropic SDK. Оно включает поля, такие как id, content, model, stop_reason и usage. SDKAssistantMessageError это один из: 'authentication_failed', 'oauth_org_not_allowed', 'billing_error', 'rate_limit', 'overloaded', 'invalid_request', 'model_not_found', 'server_error', 'max_output_tokens' или 'unknown'. 'model_not_found' означает, что выбранная модель не существует или недоступна для вашей учётной записи или развёртывания. 'overloaded' означает, что API вернул 529, потому что сервер работает на полную мощность, в отличие от 'rate_limit', который является 429 в отношении вашей квоты.

SDKUserMessage

Сообщение пользовательского ввода.
type SDKUserMessage = {
  type: "user";
  uuid?: UUID;
  session_id?: string;
  message: MessageParam; // Из Anthropic SDK
  parent_tool_use_id: string | null;
  isSynthetic?: boolean;
  shouldQuery?: boolean;
  tool_use_result?: unknown;
  origin?: SDKMessageOrigin;
};
Установите shouldQuery на false для добавления сообщения в транскрипт без запуска хода ассистента. Сообщение удерживается и объединяется в следующее пользовательское сообщение, которое запускает ход. Используйте это для внедрения контекста, такого как вывод команды, которую вы запустили вне полосы, без траты вызова модели на это.

SDKUserMessageReplay

Повторно воспроизведённое пользовательское сообщение с требуемым UUID.
type SDKUserMessageReplay = {
  type: "user";
  uuid: UUID;
  session_id: string;
  message: MessageParam;
  parent_tool_use_id: string | null;
  isSynthetic?: boolean;
  tool_use_result?: unknown;
  origin?: SDKMessageOrigin;
  isReplay: true;
};

SDKResultMessage

Финальное сообщение результата.
type SDKResultMessage =
  | {
      type: "result";
      subtype: "success";
      uuid: UUID;
      session_id: string;
      duration_ms: number;
      duration_api_ms: number;
      is_error: boolean;
      api_error_status?: number | null;
      num_turns: number;
      result: string;
      stop_reason: string | null;
      ttft_ms?: number;
      total_cost_usd: number;
      usage: NonNullableUsage;
      modelUsage: { [modelName: string]: ModelUsage };
      permission_denials: SDKPermissionDenial[];
      structured_output?: unknown;
      deferred_tool_use?: { id: string; name: string; input: Record<string, unknown> };
      terminal_reason?: TerminalReason;
      fast_mode_state?: FastModeState;
      origin?: SDKMessageOrigin;
    }
  | {
      type: "result";
      subtype:
        | "error_max_turns"
        | "error_during_execution"
        | "error_max_budget_usd"
        | "error_max_structured_output_retries";
      uuid: UUID;
      session_id: string;
      duration_ms: number;
      duration_api_ms: number;
      is_error: boolean;
      num_turns: number;
      stop_reason: string | null;
      total_cost_usd: number;
      usage: NonNullableUsage;
      modelUsage: { [modelName: string]: ModelUsage };
      permission_denials: SDKPermissionDenial[];
      errors: string[];
      terminal_reason?: TerminalReason;
      fast_mode_state?: FastModeState;
      origin?: SDKMessageOrigin;
    };
Несколько полей в результате содержат диагностические детали помимо subtype:
  • api_error_status: HTTP код состояния ошибки API, которая завершила диалог. Отсутствует или имеет значение null, когда ход завершился без ошибки API.
  • ttft_ms: время до первого токена в миллисекундах. Присутствует только на успешной ветви.
  • terminal_reason: почему цикл завершился. Один из "completed", "max_turns", "tool_deferred", "aborted_streaming", "aborted_tools", "hook_stopped", "stop_hook_prevented", "blocking_limit", "rapid_refill_breaker", "prompt_too_long", "image_error" или "model_error".
  • fast_mode_state: один из "on", "off" или "cooldown".
Поле origin передаёт SDKMessageOrigin пользовательского сообщения, которое запустило этот результат. Когда фоновая задача завершается и SDK внедряет синтетический ход продолжения, результирующее SDKResultMessage содержит origin: { kind: "task-notification" }. Проверьте это поле, чтобы различить результаты, которые отвечают на ваш запрос, от результатов, выданных для продолжений фоновых задач, чтобы вы могли маршрутизировать или подавлять последние. Поле отсутствует для результатов, выданных перед любым пользовательским ходом, таких как ошибки при запуске. Когда hook PreToolUse возвращает permissionDecision: "defer", результат имеет stop_reason: "tool_deferred" и deferred_tool_use содержит id, name и input ожидающего инструмента. Прочитайте это поле, чтобы отобразить запрос в вашем собственном пользовательском интерфейсе, затем возобновите с тем же session_id для продолжения. Смотрите Отложить вызов инструмента на потом для полного цикла.

SDKSystemMessage

Сообщение инициализации системы.
type SDKSystemMessage = {
  type: "system";
  subtype: "init";
  uuid: UUID;
  session_id: string;
  agents?: string[];
  apiKeySource: ApiKeySource;
  betas?: string[];
  claude_code_version: string;
  cwd: string;
  tools: string[];
  mcp_servers: {
    name: string;
    status: string;
  }[];
  model: string;
  permissionMode: PermissionMode;
  slash_commands: string[];
  output_style: string;
  skills: string[];
  plugins: { name: string; path: string }[];
};

SDKPartialAssistantMessage

Потоковое частичное сообщение (только когда includePartialMessages равен true).
type SDKPartialAssistantMessage = {
  type: "stream_event";
  event: BetaRawMessageStreamEvent; // Из Anthropic SDK
  parent_tool_use_id: string | null;
  uuid: UUID;
  session_id: string;
};

SDKCompactBoundaryMessage

Сообщение, указывающее границу компактирования диалога.
type SDKCompactBoundaryMessage = {
  type: "system";
  subtype: "compact_boundary";
  uuid: UUID;
  session_id: string;
  compact_metadata: {
    trigger: "manual" | "auto";
    pre_tokens: number;
  };
};

SDKPluginInstallMessage

Событие прогресса установки plugin. Выдаётся, когда установлена CLAUDE_CODE_SYNC_PLUGIN_INSTALL, поэтому ваше приложение Agent SDK может отслеживать установку marketplace plugin перед первым ходом. Статусы started и completed заключают в скобки общую установку. Статусы installed и failed сообщают об отдельных marketplaces и включают name.
type SDKPluginInstallMessage = {
  type: "system";
  subtype: "plugin_install";
  status: "started" | "installed" | "failed" | "completed";
  name?: string;
  error?: string;
  uuid: UUID;
  session_id: string;
};

SDKPermissionDeniedMessage

Событие потока, выданное, когда система разрешений автоматически отклоняет вызов инструмента без интерактивного запроса. Используйте его для отображения отклонения в вашем пользовательском интерфейсе по мере его возникновения, а не только наблюдая результат инструмента is_error, который следует за ним. Интерактивный путь запроса достигает вашего приложения отдельно через callback canUseTool. Отклонения, выданные hook PreToolUse, не сообщаются через это событие. Это событие требует Claude Code v2.1.136 или позже.
type SDKPermissionDeniedMessage = {
  type: "system";
  subtype: "permission_denied";
  tool_name: string;
  tool_use_id: string;
  agent_id?: string;
  decision_reason_type?: string;
  decision_reason?: string;
  message: string;
  uuid: UUID;
  session_id: string;
};
ПолеТипОписание
tool_namestringИмя инструмента, который был отклонён
tool_use_idstringID блока tool_use, на который отвечает это отклонение
agent_idstringID подагента, когда отклонённый вызов возник внутри подагента. Зеркалирует поле на can_use_tool для маршрутизации на стороне хоста
decision_reason_typestringДискриминатор для компонента, который принял решение, такой как "rule", "mode", "classifier" или "asyncAgent"
decision_reasonstringПонятная человеку причина от компонента, принявшего решение, если доступна
messagestringСообщение об отказе, возвращённое модели в tool_result

SDKPermissionDenial

Информация об отклонённом использовании tool.
type SDKPermissionDenial = {
  tool_name: string;
  tool_use_id: string;
  tool_input: Record<string, unknown>;
};

SDKMessageOrigin

Происхождение сообщения с ролью пользователя. Это появляется как origin на SDKUserMessage и передаётся на соответствующее SDKResultMessage, чтобы вы могли определить, что запустило данный ход.
type SDKMessageOrigin =
  | { kind: "human" }
  | { kind: "channel"; server: string }
  | { kind: "peer"; from: string; name?: string }
  | { kind: "task-notification" }
  | { kind: "coordinator" };
kindЗначение
humanПрямой ввод от конечного пользователя. На пользовательских сообщениях отсутствующий origin также означает ввод человека.
channelСообщение, поступающее на канал. server это имя исходного MCP сервера.
peerСообщение от другого сеанса агента через SendMessage. from это адрес отправителя; name это отображаемое имя отправителя, если доступно.
task-notificationСинтетический ход, внедрённый после завершения фоновой задачи. Смотрите SDKTaskNotificationMessage.
coordinatorСообщение от координатора команды в команде агентов.

Типы hooks

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

HookEvent

Доступные события hooks.
type HookEvent =
  | "PreToolUse"
  | "PostToolUse"
  | "PostToolUseFailure"
  | "PostToolBatch"
  | "Notification"
  | "UserPromptSubmit"
  | "SessionStart"
  | "SessionEnd"
  | "Stop"
  | "SubagentStart"
  | "SubagentStop"
  | "PreCompact"
  | "PermissionRequest"
  | "Setup"
  | "TeammateIdle"
  | "TaskCompleted"
  | "ConfigChange"
  | "WorktreeCreate"
  | "WorktreeRemove"
  | "MessageDisplay";

HookCallback

Тип функции обратного вызова hook.
type HookCallback = (
  input: HookInput, // Объединение всех типов входных данных hook
  toolUseID: string | undefined,
  options: { signal: AbortSignal }
) => Promise<HookJSONOutput>;

HookCallbackMatcher

Конфигурация hook с опциональным matcher.
interface HookCallbackMatcher {
  matcher?: string;
  hooks: HookCallback[];
  timeout?: number; // Timeout в секундах для всех hooks в этом matcher
}

HookInput

Тип объединения всех типов входных данных hook.
type HookInput =
  | PreToolUseHookInput
  | PostToolUseHookInput
  | PostToolUseFailureHookInput
  | PostToolBatchHookInput
  | NotificationHookInput
  | UserPromptSubmitHookInput
  | SessionStartHookInput
  | SessionEndHookInput
  | StopHookInput
  | SubagentStartHookInput
  | SubagentStopHookInput
  | PreCompactHookInput
  | PermissionRequestHookInput
  | SetupHookInput
  | TeammateIdleHookInput
  | TaskCompletedHookInput
  | ConfigChangeHookInput
  | WorktreeCreateHookInput
  | WorktreeRemoveHookInput
  | MessageDisplayHookInput;

BaseHookInput

Базовый интерфейс, который расширяют все типы входных данных hook.
type BaseHookInput = {
  session_id: string;
  transcript_path: string;
  cwd: string;
  permission_mode?: string;
  effort?: { level: string };
  agent_id?: string;
  agent_type?: string;
};

PreToolUseHookInput

type PreToolUseHookInput = BaseHookInput & {
  hook_event_name: "PreToolUse";
  tool_name: string;
  tool_input: unknown;
  tool_use_id: string;
};

PostToolUseHookInput

type PostToolUseHookInput = BaseHookInput & {
  hook_event_name: "PostToolUse";
  tool_name: string;
  tool_input: unknown;
  tool_response: unknown;
  tool_use_id: string;
  duration_ms?: number;
};

PostToolUseFailureHookInput

type PostToolUseFailureHookInput = BaseHookInput & {
  hook_event_name: "PostToolUseFailure";
  tool_name: string;
  tool_input: unknown;
  tool_use_id: string;
  error: string;
  is_interrupt?: boolean;
  duration_ms?: number;
};

PostToolBatchHookInput

Срабатывает один раз после того, как каждый вызов инструмента в пакете разрешится, перед следующим запросом модели. tool_response содержит сериализованное содержимое tool_result, которое видит модель; форма отличается от структурированного объекта Output в PostToolUseHookInput.
type PostToolBatchHookInput = BaseHookInput & {
  hook_event_name: "PostToolBatch";
  tool_calls: PostToolBatchToolCall[];
};

type PostToolBatchToolCall = {
  tool_name: string;
  tool_input: unknown;
  tool_use_id: string;
  tool_response?: unknown;
};

NotificationHookInput

type NotificationHookInput = BaseHookInput & {
  hook_event_name: "Notification";
  message: string;
  title?: string;
  notification_type: string;
};

UserPromptSubmitHookInput

type UserPromptSubmitHookInput = BaseHookInput & {
  hook_event_name: "UserPromptSubmit";
  prompt: string;
};

SessionStartHookInput

type SessionStartHookInput = BaseHookInput & {
  hook_event_name: "SessionStart";
  source: "startup" | "resume" | "clear" | "compact";
  agent_type?: string;
  model?: string;
};

SessionEndHookInput

type SessionEndHookInput = BaseHookInput & {
  hook_event_name: "SessionEnd";
  reason: ExitReason; // Строка из массива EXIT_REASONS
};

StopHookInput

type StopHookInput = BaseHookInput & {
  hook_event_name: "Stop";
  stop_hook_active: boolean;
  last_assistant_message?: string;
  background_tasks?: BackgroundTaskSummary[];
  session_crons?: SessionCronSummary[];
};

SubagentStartHookInput

type SubagentStartHookInput = BaseHookInput & {
  hook_event_name: "SubagentStart";
  agent_id: string;
  agent_type: string;
};

SubagentStopHookInput

type SubagentStopHookInput = BaseHookInput & {
  hook_event_name: "SubagentStop";
  stop_hook_active: boolean;
  agent_id: string;
  agent_transcript_path: string;
  agent_type: string;
  last_assistant_message?: string;
  background_tasks?: BackgroundTaskSummary[];
  session_crons?: SessionCronSummary[];
};

type BackgroundTaskSummary = {
  id: string;
  type: string;
  status: string;
  description: string;
  command?: string;
  agent_type?: string;
  server?: string;
  tool?: string;
  name?: string;
};

type SessionCronSummary = {
  id: string;
  schedule: string;
  recurring: boolean;
  prompt: string;
};

PreCompactHookInput

type PreCompactHookInput = BaseHookInput & {
  hook_event_name: "PreCompact";
  trigger: "manual" | "auto";
  custom_instructions: string | null;
};

PermissionRequestHookInput

type PermissionRequestHookInput = BaseHookInput & {
  hook_event_name: "PermissionRequest";
  tool_name: string;
  tool_input: unknown;
  permission_suggestions?: PermissionUpdate[];
};

SetupHookInput

type SetupHookInput = BaseHookInput & {
  hook_event_name: "Setup";
  trigger: "init" | "maintenance";
};

TeammateIdleHookInput

type TeammateIdleHookInput = BaseHookInput & {
  hook_event_name: "TeammateIdle";
  teammate_name: string;
  team_name: string;
};

TaskCompletedHookInput

type TaskCompletedHookInput = BaseHookInput & {
  hook_event_name: "TaskCompleted";
  task_id: string;
  task_subject: string;
  task_description?: string;
  teammate_name?: string;
  team_name?: string;
};

ConfigChangeHookInput

type ConfigChangeHookInput = BaseHookInput & {
  hook_event_name: "ConfigChange";
  source:
    | "user_settings"
    | "project_settings"
    | "local_settings"
    | "policy_settings"
    | "skills";
  file_path?: string;
};

WorktreeCreateHookInput

type WorktreeCreateHookInput = BaseHookInput & {
  hook_event_name: "WorktreeCreate";
  name: string;
};

WorktreeRemoveHookInput

type WorktreeRemoveHookInput = BaseHookInput & {
  hook_event_name: "WorktreeRemove";
  worktree_path: string;
};

MessageDisplayHookInput

type MessageDisplayHookInput = BaseHookInput & {
  hook_event_name: "MessageDisplay";
  turn_id: string;
  message_id: string;
  index: number;
  final: boolean;
  delta: string;
};

HookJSONOutput

Возвращаемое значение hook.
type HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput;

AsyncHookJSONOutput

type AsyncHookJSONOutput = {
  async: true;
  asyncTimeout?: number;
};

SyncHookJSONOutput

type SyncHookJSONOutput = {
  continue?: boolean;
  suppressOutput?: boolean;
  stopReason?: string;
  decision?: "approve" | "block";
  systemMessage?: string;
  reason?: string;
  hookSpecificOutput?:
    | {
        hookEventName: "PreToolUse";
        permissionDecision?: "allow" | "deny" | "ask" | "defer";
        permissionDecisionReason?: string;
        updatedInput?: Record<string, unknown>;
        additionalContext?: string;
      }
    | {
        hookEventName: "UserPromptSubmit";
        additionalContext?: string;
      }
    | {
        hookEventName: "SessionStart";
        additionalContext?: string;
      }
    | {
        hookEventName: "Setup";
        additionalContext?: string;
      }
    | {
        hookEventName: "SubagentStart";
        additionalContext?: string;
      }
    | {
        hookEventName: "PostToolUse";
        additionalContext?: string;
        updatedToolOutput?: unknown;
        /** @deprecated Используйте `updatedToolOutput`, который работает для всех инструментов. */
        updatedMCPToolOutput?: unknown;
      }
    | {
        hookEventName: "PostToolUseFailure";
        additionalContext?: string;
      }
    | {
        hookEventName: "PostToolBatch";
        additionalContext?: string;
      }
    | {
        hookEventName: "Notification";
        additionalContext?: string;
      }
    | {
        hookEventName: "PermissionRequest";
        decision:
          | {
              behavior: "allow";
              updatedInput?: Record<string, unknown>;
              updatedPermissions?: PermissionUpdate[];
            }
          | {
              behavior: "deny";
              message?: string;
              interrupt?: boolean;
            };
      };
};

Типы входных данных tool

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

ToolInputSchemas

Объединение всех типов входных данных tool, экспортируемое из @anthropic-ai/claude-agent-sdk.
type ToolInputSchemas =
  | AgentInput
  | AskUserQuestionInput
  | BashInput
  | TaskOutputInput
  | EnterWorktreeInput
  | ExitPlanModeInput
  | FileEditInput
  | FileReadInput
  | FileWriteInput
  | GlobInput
  | GrepInput
  | ListMcpResourcesInput
  | McpInput
  | MonitorInput
  | NotebookEditInput
  | ReadMcpResourceInput
  | SubscribeMcpResourceInput
  | SubscribePollingInput
  | TaskCreateInput
  | TaskGetInput
  | TaskListInput
  | TaskStopInput
  | TaskUpdateInput
  | TodoWriteInput
  | UnsubscribeMcpResourceInput
  | UnsubscribePollingInput
  | WebFetchInput
  | WebSearchInput
  | WorkflowInput;

Agent

Имя tool: Agent (ранее Task, который всё ещё принимается как псевдоним)
type AgentInput = {
  description: string;
  prompt: string;
  subagent_type: string;
  model?: "sonnet" | "opus" | "haiku";
  resume?: string;
  run_in_background?: boolean;
  max_turns?: number;
  name?: string;
  team_name?: string;
  mode?: "acceptEdits" | "bypassPermissions" | "default" | "dontAsk" | "plan";
  isolation?: "worktree";
};
Запускает нового агента для автономной обработки сложных многошаговых задач.

AskUserQuestion

Имя tool: AskUserQuestion
type AskUserQuestionInput = {
  questions: Array<{
    question: string;
    header: string;
    options: Array<{ label: string; description: string; preview?: string }>;
    multiSelect: boolean;
  }>;
};
Задаёт пользователю уточняющие вопросы во время выполнения. См. Обработка одобрений и пользовательского ввода для деталей использования.

Bash

Имя tool: Bash
type BashInput = {
  command: string;
  timeout?: number;
  description?: string;
  run_in_background?: boolean;
  dangerouslyDisableSandbox?: boolean;
};
Выполняет bash команды в постоянной сессии shell с опциональным timeout и фоновым выполнением.

Monitor

Имя tool: Monitor
type MonitorInput = {
  command: string;
  description: string;
  timeout_ms?: number;
  persistent?: boolean;
};
Запускает фоновый скрипт и доставляет каждую строку stdout к Claude как событие, чтобы он мог реагировать без опроса. Установите persistent: true для наблюдений на уровне сессии, таких как хвосты логов. Monitor следует тем же правилам разрешения, что и Bash. См. справочник tool Monitor для поведения и доступности провайдера.

TaskOutput

Имя tool: TaskOutput
type TaskOutputInput = {
  task_id: string;
  block: boolean;
  timeout: number;
};
Получает вывод из выполняющейся или завершённой фоновой задачи.

Edit

Имя tool: Edit
type FileEditInput = {
  file_path: string;
  old_string: string;
  new_string: string;
  replace_all?: boolean;
};
Выполняет точные замены строк в файлах.

Read

Имя tool: Read
type FileReadInput = {
  file_path: string;
  offset?: number;
  limit?: number;
  pages?: string;
};
Читает файлы из локальной файловой системы, включая текст, изображения, PDF и Jupyter notebooks. Используйте pages для диапазонов страниц PDF (например, "1-5").

Write

Имя tool: Write
type FileWriteInput = {
  file_path: string;
  content: string;
};
Записывает файл в локальную файловую систему, перезаписывая, если он существует.

Glob

Имя tool: Glob
type GlobInput = {
  pattern: string;
  path?: string;
};
Быстрое сопоставление паттернов файлов, которое работает с любым размером кодовой базы.

Grep

Имя tool: Grep
type GrepInput = {
  pattern: string;
  path?: string;
  glob?: string;
  type?: string;
  output_mode?: "content" | "files_with_matches" | "count";
  "-i"?: boolean;
  "-n"?: boolean;
  "-B"?: number;
  "-A"?: number;
  "-C"?: number;
  context?: number;
  head_limit?: number;
  offset?: number;
  multiline?: boolean;
};
Мощный tool поиска, построенный на ripgrep с поддержкой regex.

TaskStop

Имя tool: TaskStop
type TaskStopInput = {
  task_id?: string;
  shell_id?: string; // Устарело: используйте task_id
};
Останавливает выполняющуюся фоновую задачу или shell по ID.

NotebookEdit

Имя tool: NotebookEdit
type NotebookEditInput = {
  notebook_path: string;
  cell_id?: string;
  new_source: string;
  cell_type?: "code" | "markdown";
  edit_mode?: "replace" | "insert" | "delete";
};
Редактирует ячейки в файлах Jupyter notebook.

WebFetch

Имя tool: WebFetch
type WebFetchInput = {
  url: string;
  prompt: string;
};
Получает содержимое с URL и обрабатывает его с помощью модели AI.

WebSearch

Имя tool: WebSearch
type WebSearchInput = {
  query: string;
  allowed_domains?: string[];
  blocked_domains?: string[];
};
Ищет в веб и возвращает отформатированные результаты.

Workflow

Имя tool: Workflow
type WorkflowInput = {
  script?: string;
  name?: string;
  scriptPath?: string;
  args?: unknown;
  resumeFromRunId?: string;
};
Запускает динамический workflow: скрипт, который организует множество подагентов в фоне и возвращает один консолидированный результат. Tool Workflow доступен в Agent SDK v0.3.149 и позже. Требуется хотя бы один из script, name или scriptPath.
ПолеТипОписание
scriptstringВстроенный скрипт workflow. Должен начинаться с export const meta = { name, description, phases } как литерал, за которым следует тело скрипта с использованием agent(), parallel(), pipeline() и phase()
namestringИмя встроенного workflow или сохранённого в .claude/workflows/. Разрешается в скрипт
scriptPathstringПуть к файлу скрипта workflow на диске. Имеет приоритет над script и name. Каждый вызов сохраняет свой скрипт и возвращает путь в результате, поэтому вы можете отредактировать этот файл и повторно вызвать с тем же scriptPath для итерации
argsunknownВходное значение, доступное скрипту как глобальная переменная args, для параметризованных именованных workflows, таких как исследовательский вопрос или список путей файлов. Передавайте массивы и объекты как фактические значения JSON, а не как JSON-кодированную строку
resumeFromRunIdstringRun ID предыдущего вызова Workflow для возобновления. Завершённые вызовы agent() с неизменёнными входными данными возвращают кэшированные результаты; только изменённые или новые вызовы выполняются в реальном времени. Только в одной сессии

TodoWrite

Имя tool: TodoWrite
type TodoWriteInput = {
  todos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
};
Создаёт и управляет структурированным списком задач для отслеживания прогресса.
Начиная с TypeScript Agent SDK 0.3.142, TodoWrite отключён по умолчанию. Используйте вместо этого TaskCreate, TaskGet, TaskUpdate и TaskList. См. Миграция на Task tools для обновления кода мониторинга, или установите CLAUDE_CODE_ENABLE_TASKS=0 для возврата к TodoWrite.

TaskCreate

Имя tool: TaskCreate
type TaskCreateInput = {
  subject: string;
  description: string;
  activeForm?: string;
  metadata?: Record<string, unknown>;
};
Создаёт одну задачу и возвращает её назначенный ID.

TaskUpdate

Имя tool: TaskUpdate
type TaskUpdateInput = {
  taskId: string;
  status?: "pending" | "in_progress" | "completed" | "deleted";
  subject?: string;
  description?: string;
  activeForm?: string;
  addBlocks?: string[];
  addBlockedBy?: string[];
  owner?: string;
  metadata?: Record<string, unknown>;
};
Исправляет одну задачу по ID. Установите status на "deleted" для её удаления.

TaskGet

Имя tool: TaskGet
type TaskGetInput = {
  taskId: string;
};
Возвращает полные детали для одной задачи или null, когда ID не найден.

TaskList

Имя tool: TaskList
type TaskListInput = {};
Возвращает снимок всех задач в текущем списке.

ExitPlanMode

Имя tool: ExitPlanMode
type ExitPlanModeInput = {
  allowedPrompts?: Array<{
    tool: "Bash";
    prompt: string;
  }>;
};
Выходит из режима планирования. Опционально указывает разрешения на основе запроса, необходимые для реализации плана.

ListMcpResources

Имя tool: ListMcpResourcesTool
type ListMcpResourcesInput = {
  server?: string;
};
Перечисляет доступные MCP ресурсы из подключённых серверов.

ReadMcpResource

Имя tool: ReadMcpResourceTool
type ReadMcpResourceInput = {
  server: string;
  uri: string;
};
Читает определённый MCP ресурс с сервера.

EnterWorktree

Имя tool: EnterWorktree
type EnterWorktreeInput = {
  name?: string;
  path?: string;
};
Создаёт и входит во временный git worktree для изолированной работы. Передайте path для переключения в существующий worktree текущего репозитория вместо создания нового. name и path являются взаимоисключающими.

Типы выходных данных Tool

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

ToolOutputSchemas

Объединение всех типов выходных данных tool.
type ToolOutputSchemas =
  | AgentOutput
  | AskUserQuestionOutput
  | BashOutput
  | EnterWorktreeOutput
  | ExitPlanModeOutput
  | FileEditOutput
  | FileReadOutput
  | FileWriteOutput
  | GlobOutput
  | GrepOutput
  | ListMcpResourcesOutput
  | MonitorOutput
  | NotebookEditOutput
  | ReadMcpResourceOutput
  | TaskCreateOutput
  | TaskGetOutput
  | TaskListOutput
  | TaskStopOutput
  | TaskUpdateOutput
  | TodoWriteOutput
  | WebFetchOutput
  | WebSearchOutput
  | WorkflowOutput;

Agent

Имя tool: Agent (ранее Task, который всё ещё принимается как псевдоним)
type AgentOutput =
  | {
      status: "completed";
      agentId: string;
      content: Array<{ type: "text"; text: string }>;
      totalToolUseCount: number;
      totalDurationMs: number;
      totalTokens: number;
      usage: {
        input_tokens: number;
        output_tokens: number;
        cache_creation_input_tokens: number | null;
        cache_read_input_tokens: number | null;
        server_tool_use: {
          web_search_requests: number;
          web_fetch_requests: number;
        } | null;
        service_tier: ("standard" | "priority" | "batch") | null;
        cache_creation: {
          ephemeral_1h_input_tokens: number;
          ephemeral_5m_input_tokens: number;
        } | null;
      };
      prompt: string;
    }
  | {
      status: "async_launched";
      agentId: string;
      description: string;
      prompt: string;
      outputFile: string;
      canReadOutputFile?: boolean;
    }
  | {
      status: "sub_agent_entered";
      description: string;
      message: string;
    };
Возвращает результат от подагента. Дискриминирован по полю status: "completed" для завершённых задач, "async_launched" для фоновых задач и "sub_agent_entered" для интерактивных подагентов.

AskUserQuestion

Имя tool: AskUserQuestion
type AskUserQuestionOutput = {
  questions: Array<{
    question: string;
    header: string;
    options: Array<{ label: string; description: string; preview?: string }>;
    multiSelect: boolean;
  }>;
  answers: Record<string, string>;
  response?: string;
};
Возвращает заданные вопросы и ответы пользователя. response устанавливается, когда пользователь ввёл свободный ответ вместо ответа на структурированные вопросы; когда присутствует, Claude получает “Пользователь ответил: …” вместо списка ответов по вопросам.

Bash

Имя tool: Bash
type BashOutput = {
  stdout: string;
  stderr: string;
  rawOutputPath?: string;
  interrupted: boolean;
  isImage?: boolean;
  backgroundTaskId?: string;
  backgroundedByUser?: boolean;
  dangerouslyDisableSandbox?: boolean;
  returnCodeInterpretation?: string;
  structuredContent?: unknown[];
  persistedOutputPath?: string;
  persistedOutputSize?: number;
};
Возвращает вывод команды с разделённым stdout/stderr. Фоновые команды включают backgroundTaskId.

Monitor

Имя tool: Monitor
type MonitorOutput = {
  taskId: string;
  timeoutMs: number;
  persistent?: boolean;
};
Возвращает ID фоновой задачи для выполняющегося монитора. Используйте этот ID с TaskStop для раннего отмены наблюдения.

Edit

Имя tool: Edit
type FileEditOutput = {
  filePath: string;
  oldString: string;
  newString: string;
  originalFile: string;
  structuredPatch: Array<{
    oldStart: number;
    oldLines: number;
    newStart: number;
    newLines: number;
    lines: string[];
  }>;
  userModified: boolean;
  replaceAll: boolean;
  gitDiff?: {
    filename: string;
    status: "modified" | "added";
    additions: number;
    deletions: number;
    changes: number;
    patch: string;
  };
};
Возвращает структурированный diff операции редактирования.

Read

Имя tool: Read
type FileReadOutput =
  | {
      type: "text";
      file: {
        filePath: string;
        content: string;
        numLines: number;
        startLine: number;
        totalLines: number;
      };
    }
  | {
      type: "image";
      file: {
        base64: string;
        type: "image/jpeg" | "image/png" | "image/gif" | "image/webp";
        originalSize: number;
        dimensions?: {
          originalWidth?: number;
          originalHeight?: number;
          displayWidth?: number;
          displayHeight?: number;
        };
      };
    }
  | {
      type: "notebook";
      file: {
        filePath: string;
        cells: unknown[];
      };
    }
  | {
      type: "pdf";
      file: {
        filePath: string;
        base64: string;
        originalSize: number;
      };
    }
  | {
      type: "parts";
      file: {
        filePath: string;
        originalSize: number;
        count: number;
        outputDir: string;
      };
    };
Возвращает содержимое файла в формате, подходящем для типа файла. Дискриминирован по полю type.

Write

Имя tool: Write
type FileWriteOutput = {
  type: "create" | "update";
  filePath: string;
  content: string;
  structuredPatch: Array<{
    oldStart: number;
    oldLines: number;
    newStart: number;
    newLines: number;
    lines: string[];
  }>;
  originalFile: string | null;
  gitDiff?: {
    filename: string;
    status: "modified" | "added";
    additions: number;
    deletions: number;
    changes: number;
    patch: string;
  };
};
Возвращает результат записи с информацией структурированного diff.

Glob

Имя tool: Glob
type GlobOutput = {
  durationMs: number;
  numFiles: number;
  filenames: string[];
  truncated: boolean;
};
Возвращает пути файлов, соответствующие паттерну glob, отсортированные по времени изменения.

Grep

Имя tool: Grep
type GrepOutput = {
  mode?: "content" | "files_with_matches" | "count";
  numFiles: number;
  filenames: string[];
  content?: string;
  numLines?: number;
  numMatches?: number;
  appliedLimit?: number;
  appliedOffset?: number;
};
Возвращает результаты поиска. Форма варьируется по mode: список файлов, содержимое с совпадениями или количество совпадений.

TaskStop

Имя tool: TaskStop
type TaskStopOutput = {
  message: string;
  task_id: string;
  task_type: string;
  command?: string;
};
Возвращает подтверждение после остановки фоновой задачи.

NotebookEdit

Имя tool: NotebookEdit
type NotebookEditOutput = {
  new_source: string;
  cell_id?: string;
  cell_type: "code" | "markdown";
  language: string;
  edit_mode: string;
  error?: string;
  notebook_path: string;
  original_file: string;
  updated_file: string;
};
Возвращает результат редактирования notebook с исходным и обновлённым содержимым файла.

WebFetch

Имя tool: WebFetch
type WebFetchOutput = {
  bytes: number;
  code: number;
  codeText: string;
  result: string;
  durationMs: number;
  url: string;
};
Возвращает полученное содержимое с HTTP статусом и метаданными.

WebSearch

Имя tool: WebSearch
type WebSearchOutput = {
  query: string;
  results: Array<
    | {
        tool_use_id: string;
        content: Array<{ title: string; url: string }>;
      }
    | string
  >;
  durationSeconds: number;
};
Возвращает результаты поиска из веб.

Workflow

Имя tool: Workflow
type WorkflowOutput = {
  status: "async_launched";
  taskId: string;
  runId?: string;
  summary?: string;
  transcriptDir?: string;
  scriptPath?: string;
  error?: string;
};
Возвращает результат сразу после того, как tool принимает вызов. Окончательный результат поступает позже как завершение задачи. Проверьте error перед тем, как рассматривать запуск как начатый: скрипт, который не прошёл проверку синтаксиса, возвращает status: "async_launched" с установленным error и никогда не запускается.
ПолеТипОписание
status"async_launched"Tool принял вызов. Это единственное значение, которое принимает поле
taskIdstringИдентификатор фоновой задачи для запуска
runIdstringИдентификатор запуска workflow для передачи как resumeFromRunId при последующем вызове
summarystringОднострочное описание того, что делает workflow
transcriptDirstringДиректория, где записываются транскрипты подагента во время выполнения
scriptPathstringПуть к сохранённому скрипту workflow для этого запуска. Отредактируйте его и передайте обратно как scriptPath для повторного запуска без повторной отправки скрипта
errorstringУстанавливается, когда скрипт не прошёл проверку синтаксиса. Если присутствует, запуск не начался несмотря на статус async_launched

TodoWrite

Имя tool: TodoWrite
type TodoWriteOutput = {
  oldTodos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
  newTodos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
};
Возвращает предыдущие и обновлённые списки задач.
Начиная с TypeScript Agent SDK 0.3.142, TodoWrite отключён по умолчанию. Используйте вместо этого TaskCreate, TaskGet, TaskUpdate и TaskList. Смотрите Миграция на Task tools для обновления кода мониторинга, или установите CLAUDE_CODE_ENABLE_TASKS=0 для возврата к TodoWrite.

TaskCreate

Имя tool: TaskCreate
type TaskCreateOutput = {
  task: {
    id: string;
    subject: string;
  };
};
Возвращает созданную задачу с назначенным ей ID.

TaskUpdate

Имя tool: TaskUpdate
type TaskUpdateOutput = {
  success: boolean;
  taskId: string;
  updatedFields: string[];
  error?: string;
  statusChange?: {
    from: string;
    to: string;
  };
};
Возвращает результат обновления, включая какие поля изменились.

TaskGet

Имя tool: TaskGet
type TaskGetOutput = {
  task: {
    id: string;
    subject: string;
    description: string;
    status: "pending" | "in_progress" | "completed";
    blocks: string[];
    blockedBy: string[];
  } | null;
};
Возвращает полную запись задачи или null когда ID не найден.

TaskList

Имя tool: TaskList
type TaskListOutput = {
  tasks: Array<{
    id: string;
    subject: string;
    status: "pending" | "in_progress" | "completed";
    owner?: string;
    blockedBy: string[];
  }>;
};
Возвращает снимок всех задач в текущем списке.

ExitPlanMode

Имя tool: ExitPlanMode
type ExitPlanModeOutput = {
  plan: string | null;
  isAgent: boolean;
  filePath?: string;
  hasTaskTool?: boolean;
  awaitingLeaderApproval?: boolean;
  requestId?: string;
};
Возвращает состояние плана после выхода из режима планирования.

ListMcpResources

Имя tool: ListMcpResourcesTool
type ListMcpResourcesOutput = Array<{
  uri: string;
  name: string;
  mimeType?: string;
  description?: string;
  server: string;
}>;
Возвращает массив доступных MCP ресурсов.

ReadMcpResource

Имя tool: ReadMcpResourceTool
type ReadMcpResourceOutput = {
  contents: Array<{
    uri: string;
    mimeType?: string;
    text?: string;
  }>;
};
Возвращает содержимое запрошенного MCP ресурса.

EnterWorktree

Имя tool: EnterWorktree
type EnterWorktreeOutput = {
  worktreePath: string;
  worktreeBranch?: string;
  message: string;
};
Возвращает информацию о git worktree.

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

PermissionUpdate

Операции для обновления разрешений.
type PermissionUpdate =
  | {
      type: "addRules";
      rules: PermissionRuleValue[];
      behavior: PermissionBehavior;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "replaceRules";
      rules: PermissionRuleValue[];
      behavior: PermissionBehavior;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "removeRules";
      rules: PermissionRuleValue[];
      behavior: PermissionBehavior;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "setMode";
      mode: PermissionMode;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "addDirectories";
      directories: string[];
      destination: PermissionUpdateDestination;
    }
  | {
      type: "removeDirectories";
      directories: string[];
      destination: PermissionUpdateDestination;
    };

PermissionBehavior

type PermissionBehavior = "allow" | "deny" | "ask";

PermissionUpdateDestination

type PermissionUpdateDestination =
  | "userSettings" // Глобальные пользовательские настройки
  | "projectSettings" // Настройки проекта для каждой директории
  | "localSettings" // Gitignored локальные настройки
  | "session" // Только текущая сессия
  | "cliArg"; // Аргумент CLI

PermissionRuleValue

type PermissionRuleValue = {
  toolName: string;
  ruleContent?: string;
};

Другие типы

ApiKeySource

type ApiKeySource = "user" | "project" | "org" | "temporary" | "oauth";

SdkBeta

Доступные бета-функции, которые можно включить через опцию betas. См. Заголовки Beta для дополнительной информации.
type SdkBeta = "context-1m-2025-08-07";
Бета context-1m-2025-08-07 снята с производства по состоянию на 30 апреля 2026 года. Передача этого значения с Claude Sonnet 4.5 или Sonnet 4 не имеет эффекта, и запросы, превышающие стандартное окно контекста 200k-токенов, возвращают ошибку. Для использования окна контекста 1M-токенов перейдите на Claude Sonnet 4.6, Claude Opus 4.6 или Claude Opus 4.7, которые включают контекст 1M по стандартной цене без требуемого заголовка beta.

SlashCommand

Информация о доступной slash команде.
type SlashCommand = {
  name: string;
  description: string;
  argumentHint: string;
  aliases?: string[];
};

ModelInfo

Информация о доступной модели.
type ModelInfo = {
  value: string;
  displayName: string;
  description: string;
  supportsEffort?: boolean;
  supportedEffortLevels?: ("low" | "medium" | "high" | "xhigh" | "max")[];
  supportsAdaptiveThinking?: boolean;
  supportsFastMode?: boolean;
};

AgentInfo

Информация о доступном подагенте, который может быть вызван через tool Agent.
type AgentInfo = {
  name: string;
  description: string;
  model?: string;
};
ПолеТипОписание
namestringИдентификатор типа агента (например, "Explore", "general-purpose")
descriptionstringОписание, когда использовать этого агента
modelstring | undefinedПсевдоним модели, который использует этот агент. Если опущено, наследует модель родителя

McpServerStatus

Статус подключённого MCP сервера.
type McpServerStatus = {
  name: string;
  status: "connected" | "failed" | "needs-auth" | "pending" | "disabled";
  serverInfo?: {
    name: string;
    version: string;
  };
  error?: string;
  config?: McpServerStatusConfig;
  scope?: string;
  tools?: {
    name: string;
    description?: string;
    annotations?: {
      readOnly?: boolean;
      destructive?: boolean;
      openWorld?: boolean;
    };
  }[];
};

McpServerStatusConfig

Конфигурация MCP сервера, как сообщается mcpServerStatus(). Это объединение всех типов транспорта MCP сервера.
type McpServerStatusConfig =
  | McpStdioServerConfig
  | McpSSEServerConfig
  | McpHttpServerConfig
  | McpSdkServerConfig
  | McpClaudeAIProxyServerConfig;
См. McpServerConfig для деталей по каждому типу транспорта.

AccountInfo

Информация об учётной записи для аутентифицированного пользователя.
type AccountInfo = {
  email?: string;
  organization?: string;
  subscriptionType?: string;
  tokenSource?: string;
  apiKeySource?: string;
};

ModelUsage

Статистика использования для каждой модели, возвращаемая в сообщениях результата. Значение costUSD это оценка на стороне клиента. См. Отслеживание стоимости и использования для предостережений выставления счётов.
type ModelUsage = {
  inputTokens: number;
  outputTokens: number;
  cacheReadInputTokens: number;
  cacheCreationInputTokens: number;
  webSearchRequests: number;
  costUSD: number;
  contextWindow: number;
  maxOutputTokens: number;
};

ConfigScope

type ConfigScope = "local" | "user" | "project";

NonNullableUsage

Версия Usage со всеми nullable полями, сделанными non-nullable.
type NonNullableUsage = {
  [K in keyof Usage]: NonNullable<Usage[K]>;
};

Usage

Статистика использования токенов. Это тип BetaUsage из @anthropic-ai/sdk.
type Usage = {
  input_tokens: number;
  output_tokens: number;
  cache_creation_input_tokens: number | null;
  cache_read_input_tokens: number | null;
  cache_creation: {
    ephemeral_5m_input_tokens: number;
    ephemeral_1h_input_tokens: number;
  } | null;
  server_tool_use: BetaServerToolUsage | null;
  service_tier: "standard" | "priority" | "batch" | null;
  speed: "standard" | "fast" | null;
  inference_geo: string | null;
  iterations: BetaIterationsUsage | null;
};
BetaServerToolUsage и BetaIterationsUsage определены в @anthropic-ai/sdk.

CallToolResult

Тип результата MCP tool (из @modelcontextprotocol/sdk/types.js). structuredContent это объект JSON, который может быть возвращён вместе с content, включая блоки изображений. См. Возврат структурированных данных.
type CallToolResult = {
  content: Array<{
    type: "text" | "image" | "resource";
    // Дополнительные поля варьируются по типу
  }>;
  structuredContent?: Record<string, unknown>;
  isError?: boolean;
};

ThinkingConfig

Контролирует поведение мышления/рассуждения Claude. Имеет приоритет над устаревшим maxThinkingTokens.
type ThinkingDisplay = "summarized" | "omitted";

type ThinkingConfig =
  | { type: "adaptive"; display?: ThinkingDisplay } // Модель определяет, когда и сколько рассуждать (Opus 4.6+)
  | { type: "enabled"; budgetTokens?: number; display?: ThinkingDisplay } // Фиксированный бюджет токенов мышления
  | { type: "disabled" }; // Без расширенного мышления
Опциональное поле display контролирует, возвращается ли текст мышления "summarized" или "omitted". На Claude Opus 4.7 и позже, значение по умолчанию API это "omitted", поэтому установите "summarized" для получения содержимого мышления в блоках thinking.

SpawnedProcess

Интерфейс для пользовательского запуска процесса (используется с опцией spawnClaudeCodeProcess). ChildProcess уже удовлетворяет этому интерфейсу.
interface SpawnedProcess {
  stdin: Writable;
  stdout: Readable;
  readonly killed: boolean;
  readonly exitCode: number | null;
  kill(signal: NodeJS.Signals): boolean;
  on(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  on(event: "error", listener: (error: Error) => void): void;
  once(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  once(event: "error", listener: (error: Error) => void): void;
  off(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  off(event: "error", listener: (error: Error) => void): void;
}

SpawnOptions

Опции, передаваемые пользовательской функции spawn.
interface SpawnOptions {
  command: string;
  args: string[];
  cwd?: string;
  env: Record<string, string | undefined>;
  signal: AbortSignal;
}
Поле signal сообщает вашей функции spawn, когда нужно разобрать процесс. Передайте его как опцию signal в spawn() Node, или передайте его обработчику разборки вашей VM или контейнера.Этот сигнал не срабатывает в момент отмены Options.abortController. SDK сначала закрывает stdin процесса и ждёт около двух секунд, чтобы CLI мог корректно завершить работу, затем отменяет этот сигнал. Чтобы реагировать в момент отмены вызывающей стороной, слушайте на вашем собственном Options.abortController.signal, на который может ссылаться ваша функция spawn из её охватывающей области.

McpSetServersResult

Результат операции setMcpServers().
type McpSetServersResult = {
  added: string[];
  removed: string[];
  errors: Record<string, string>;
};

RewindFilesResult

Результат операции rewindFiles().
type RewindFilesResult = {
  canRewind: boolean;
  error?: string;
  filesChanged?: string[];
  insertions?: number;
  deletions?: number;
};

SDKStatusMessage

Сообщение обновления статуса (например, компактирование).
type SDKStatusMessage = {
  type: "system";
  subtype: "status";
  status: "compacting" | null;
  permissionMode?: PermissionMode;
  uuid: UUID;
  session_id: string;
};

SDKTaskNotificationMessage

Уведомление, когда фоновая задача завершается, не работает или остановлена. Фоновые задачи включают команды Bash run_in_background, наблюдения Monitor и фоновые подагентов.
type SDKTaskNotificationMessage = {
  type: "system";
  subtype: "task_notification";
  task_id: string;
  tool_use_id?: string;
  status: "completed" | "failed" | "stopped";
  output_file: string;
  summary: string;
  usage?: {
    total_tokens: number;
    tool_uses: number;
    duration_ms: number;
  };
  uuid: UUID;
  session_id: string;
};

SDKToolUseSummaryMessage

Резюме использования tool в диалоге.
type SDKToolUseSummaryMessage = {
  type: "tool_use_summary";
  summary: string;
  preceding_tool_use_ids: string[];
  uuid: UUID;
  session_id: string;
};

SDKHookStartedMessage

Выдаётся, когда hook начинает выполняться.
type SDKHookStartedMessage = {
  type: "system";
  subtype: "hook_started";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  uuid: UUID;
  session_id: string;
};

SDKHookProgressMessage

Выдаётся во время выполнения hook с выводом stdout/stderr.
type SDKHookProgressMessage = {
  type: "system";
  subtype: "hook_progress";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  stdout: string;
  stderr: string;
  output: string;
  uuid: UUID;
  session_id: string;
};

SDKHookResponseMessage

Выдаётся, когда hook завершает выполнение.
type SDKHookResponseMessage = {
  type: "system";
  subtype: "hook_response";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  output: string;
  stdout: string;
  stderr: string;
  exit_code?: number;
  outcome: "success" | "error" | "cancelled";
  uuid: UUID;
  session_id: string;
};

SDKToolProgressMessage

Выдаётся периодически во время выполнения tool для указания прогресса.
type SDKToolProgressMessage = {
  type: "tool_progress";
  tool_use_id: string;
  tool_name: string;
  parent_tool_use_id: string | null;
  elapsed_time_seconds: number;
  task_id?: string;
  uuid: UUID;
  session_id: string;
};

SDKAuthStatusMessage

Выдаётся во время потоков аутентификации.
type SDKAuthStatusMessage = {
  type: "auth_status";
  isAuthenticating: boolean;
  output: string[];
  error?: string;
  uuid: UUID;
  session_id: string;
};

SDKTaskStartedMessage

Выдаётся, когда фоновая задача начинается. Поле task_type это "local_bash" для фоновых команд Bash и наблюдений Monitor, "local_agent" для подагентов или "remote_agent".
type SDKTaskStartedMessage = {
  type: "system";
  subtype: "task_started";
  task_id: string;
  tool_use_id?: string;
  description: string;
  task_type?: string;
  uuid: UUID;
  session_id: string;
};

SDKTaskProgressMessage

Выдаётся периодически во время выполнения подагента или фоновой задачи. Поле summary заполняется только когда включён agentProgressSummaries.
type SDKTaskProgressMessage = {
  type: "system";
  subtype: "task_progress";
  task_id: string;
  tool_use_id?: string;
  description: string;
  subagent_type?: string;
  usage: {
    total_tokens: number;
    tool_uses: number;
    duration_ms: number;
  };
  last_tool_name?: string;
  summary?: string;
  uuid: UUID;
  session_id: string;
};

SDKTaskUpdatedMessage

Выдаётся, когда состояние фоновой задачи изменяется, например, когда она переходит из running в completed. Объедините patch в вашу локальную карту задач, индексированную по task_id. Поле end_time это временная метка Unix epoch в миллисекундах, сравнимая с Date.now().
type SDKTaskUpdatedMessage = {
  type: "system";
  subtype: "task_updated";
  task_id: string;
  patch: {
    status?: "pending" | "running" | "completed" | "failed" | "killed";
    description?: string;
    end_time?: number;
    total_paused_ms?: number;
    error?: string;
    is_backgrounded?: boolean;
  };
  uuid: UUID;
  session_id: string;
};

SDKFilesPersistedEvent

Выдаётся, когда контрольные точки файлов сохраняются на диск.
type SDKFilesPersistedEvent = {
  type: "system";
  subtype: "files_persisted";
  files: { filename: string; file_id: string }[];
  failed: { filename: string; error: string }[];
  processed_at: string;
  uuid: UUID;
  session_id: string;
};

SDKRateLimitEvent

Выдаётся, когда сессия встречает ограничение скорости.
type SDKRateLimitEvent = {
  type: "rate_limit_event";
  rate_limit_info: {
    status: "allowed" | "allowed_warning" | "rejected";
    resetsAt?: number;
    utilization?: number;
  };
  uuid: UUID;
  session_id: string;
};

SDKLocalCommandOutputMessage

Вывод из локальной slash команды (например, /voice или /usage). Отображается как текст в стиле ассистента в транскрипте.
type SDKLocalCommandOutputMessage = {
  type: "system";
  subtype: "local_command_output";
  content: string;
  uuid: UUID;
  session_id: string;
};

SDKCommandsChangedMessage

Выдаётся, когда набор доступных команд изменяется во время сессии, например, когда skills обнаруживаются при входе агента в подпапку. Массив commands это полный обновлённый список, поэтому замените любой кэшированный список команд этим payload. Повторный вызов supportedCommands() не эквивалентен: этот метод возвращает снимок, захваченный при инициализации, и не отражает изменения во время сессии.
type SDKCommandsChangedMessage = {
  type: "system";
  subtype: "commands_changed";
  commands: SlashCommand[];
  uuid: UUID;
  session_id: string;
};

SDKPromptSuggestionMessage

Выдаётся после каждого хода, когда promptSuggestions включён. Содержит предсказанный следующий пользовательский запрос.
type SDKPromptSuggestionMessage = {
  type: "prompt_suggestion";
  suggestion: string;
  uuid: UUID;
  session_id: string;
};

AbortError

Пользовательский класс ошибки для операций отмены.
class AbortError extends Error {}

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

SandboxSettings

Конфигурация для поведения sandbox. Используйте это для включения sandboxing команд и программной конфигурации ограничений сети.
type SandboxSettings = {
  enabled?: boolean;
  failIfUnavailable?: boolean;
  autoAllowBashIfSandboxed?: boolean;
  excludedCommands?: string[];
  allowUnsandboxedCommands?: boolean;
  network?: SandboxNetworkConfig;
  filesystem?: SandboxFilesystemConfig;
  ignoreViolations?: Record<string, string[]>;
  enableWeakerNestedSandbox?: boolean;
  ripgrep?: { command: string; args?: string[] };
};
СвойствоТипПо умолчаниюОписание
enabledbooleanfalseВключите режим sandbox для выполнения команд
failIfUnavailablebooleantrueОстановитесь при запуске, если enabled имеет значение true, но sandbox не может запуститься. Установите false для возврата к выполнению без sandbox с предупреждением на stderr
autoAllowBashIfSandboxedbooleantrueАвтоматически одобряйте bash команды, когда sandbox включён
excludedCommandsstring[][]Команды, которые всегда обходят ограничения sandbox (например, ['docker']). Они работают без sandbox автоматически без участия модели
allowUnsandboxedCommandsbooleantrueРазрешите модели запрашивать выполнение команд вне sandbox. Когда true, модель может установить dangerouslyDisableSandbox в входных данных tool, что переходит к системе разрешений
networkSandboxNetworkConfigundefinedКонфигурация sandbox, специфичная для сети
filesystemSandboxFilesystemConfigundefinedКонфигурация sandbox, специфичная для файловой системы, для ограничений чтения/записи
ignoreViolationsRecord<string, string[]>undefinedКарта категорий нарушений на паттерны для игнорирования (например, { file: ['/tmp/*'], network: ['localhost'] })
enableWeakerNestedSandboxbooleanfalseВключите более слабый вложенный sandbox для совместимости
ripgrep{ command: string; args?: string[] }undefinedКонфигурация пользовательского бинарного файла ripgrep для окружений sandbox
Sandbox зависит от поддержки платформы и, на Linux, инструментов, таких как bubblewrap и socat. Когда enabled имеет значение true и sandbox не может запуститься, query() сообщает сообщение result с subtype: "error_during_execution" и причину в errors, затем останавливается. Следите за этим подтипом, а не ожидайте, что query() выбросит исключение перед выдачей сообщений.Для выполнения без sandbox вместо этого установите failIfUnavailable: false.

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

import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Build and test my project",
  options: {
    sandbox: {
      enabled: true,
      autoAllowBashIfSandboxed: true,
      network: {
        allowLocalBinding: true
      }
    }
  }
})) {
  if ("result" in message) console.log(message.result);
}
Безопасность Unix socket: Опция allowUnixSockets может предоставить доступ к мощным системным сервисам. Например, разрешение /var/run/docker.sock фактически предоставляет полный доступ к хост-системе через Docker API, обходя изоляцию sandbox. Разрешайте только Unix sockets, которые строго необходимы, и поймите последствия безопасности каждого.

SandboxNetworkConfig

Конфигурация, специфичная для сети, для режима sandbox. Эти параметры применяются к sandboxed Bash командам, когда enabled имеет значение true в родительском SandboxSettings. Они не ограничивают инструмент WebFetch, который использует правила разрешений вместо этого.
type SandboxNetworkConfig = {
  allowedDomains?: string[];
  deniedDomains?: string[];
  allowManagedDomainsOnly?: boolean;
  allowLocalBinding?: boolean;
  allowUnixSockets?: string[];
  allowAllUnixSockets?: boolean;
  httpProxyPort?: number;
  socksProxyPort?: number;
};
СвойствоТипПо умолчаниюОписание
allowedDomainsstring[][]Имена доменов, к которым процессы в sandbox могут получить доступ
deniedDomainsstring[][]Имена доменов, к которым процессы в sandbox не могут получить доступ. Имеет приоритет над allowedDomains
allowManagedDomainsOnlybooleanfalseТолько управляемые параметры. Когда установлено в управляемых параметрах, только записи allowedDomains из управляемых параметров учитываются, а записи из пользовательских, проектных или локальных параметров игнорируются. Не имеет эффекта при установке через опции SDK
allowLocalBindingbooleanfalseРазрешите процессам привязываться к локальным портам (например, для dev серверов)
allowUnixSocketsstring[][]Пути Unix socket, к которым процессы могут получить доступ (например, Docker socket)
allowAllUnixSocketsbooleanfalseРазрешите доступ ко всем Unix sockets
httpProxyPortnumberundefinedПорт HTTP прокси для сетевых запросов
socksProxyPortnumberundefinedПорт SOCKS прокси для сетевых запросов
Встроенный прокси sandbox применяет allowedDomains на основе запрашиваемого имени хоста и не завершает и не проверяет трафик TLS, поэтому такие методы, как domain fronting, потенциально могут его обойти. Смотрите Ограничения безопасности Sandboxing для деталей и Безопасное развёртывание для конфигурации прокси, завершающего TLS.

SandboxFilesystemConfig

Конфигурация, специфичная для файловой системы, для режима sandbox.
type SandboxFilesystemConfig = {
  allowWrite?: string[];
  denyWrite?: string[];
  denyRead?: string[];
};
СвойствоТипПо умолчаниюОписание
allowWritestring[][]Паттерны путей файлов для разрешения доступа на запись
denyWritestring[][]Паттерны путей файлов для запрещения доступа на запись
denyReadstring[][]Паттерны путей файлов для запрещения доступа на чтение

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

Когда allowUnsandboxedCommands включён, модель может запросить выполнение команд вне sandbox, установив dangerouslyDisableSandbox: true во входных данных tool. Эти запросы переходят к существующей системе разрешений, что означает, что ваш обработчик canUseTool вызывается, позволяя вам реализовать пользовательскую логику авторизации.
excludedCommands vs allowUnsandboxedCommands:
  • excludedCommands: Статический список команд, которые всегда автоматически обходят sandbox (например, ['docker']). Модель не имеет контроля над этим.
  • allowUnsandboxedCommands: Позволяет модели решать во время выполнения, запрашивать ли выполнение вне sandbox, установив dangerouslyDisableSandbox: true во входных данных tool.
import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Deploy my application",
  options: {
    sandbox: {
      enabled: true,
      allowUnsandboxedCommands: true // Модель может запросить выполнение вне sandbox
    },
    permissionMode: "default",
    canUseTool: async (tool, input) => {
      // Проверьте, запрашивает ли модель обход sandbox
      if (tool === "Bash" && input.dangerouslyDisableSandbox) {
        // Модель запрашивает выполнение этой команды вне sandbox
        console.log(`Unsandboxed command requested: ${input.command}`);

        if (isCommandAuthorized(input.command)) {
          return { behavior: "allow" as const, updatedInput: input };
        }
        return {
          behavior: "deny" as const,
          message: "Command not authorized for unsandboxed execution"
        };
      }
      return { behavior: "allow" as const, updatedInput: input };
    }
  }
})) {
  if ("result" in message) console.log(message.result);
}
Этот паттерн позволяет вам:
  • Аудит запросов модели: Логируйте, когда модель запрашивает выполнение вне sandbox
  • Реализуйте allowlists: Разрешайте только определённые команды работать вне sandbox
  • Добавьте рабочие процессы одобрения: Требуйте явной авторизации для привилегированных операций
Команды, работающие с dangerouslyDisableSandbox: true, имеют полный доступ к системе. Убедитесь, что ваш обработчик canUseTool тщательно проверяет эти запросы.Если permissionMode установлен на bypassPermissions и allowUnsandboxedCommands включён, модель может автономно выполнять команды вне sandbox без каких-либо запросов одобрения. Эта комбинация фактически позволяет модели молча выходить из изоляции sandbox.

См. также