SpyBara
Go Premium

headless.md 2026-10-09 23:02 UTC to 2026-10-10 11:01 UTC

This page contains 79 additions and 77 deletions.

2026
Thu 1 23:59 Fri 2 22:59 Sun 4 23:58 Tue 6 23:59 Wed 7 23:59 Thu 8 22:58 Fri 9 23:02 Sat 10 14:00

Запуск Claude Code программно

Используйте Agent SDK для программного запуска Claude Code из CLI, Python или TypeScript.

Agent SDK предоставляет вам те же инструменты, цикл агента и управление контекстом, которые питают Claude Code. Он доступен как CLI для скриптов и CI/CD, или как пакеты Python и TypeScript для полного программного управления.

Чтобы запустить Claude Code в неинтерактивном режиме, передайте -p с вашим запросом и параметрами CLI, которые вам нужны:

claude -p "Find and fix the bug in auth.py" --allowedTools "Read,Edit,Bash"

На этой странице рассматривается использование Agent SDK через CLI (claude -p). Для пакетов Python и TypeScript SDK со структурированными выходами, обратными вызовами одобрения инструментов и собственными объектами сообщений см. полную документацию Agent SDK.

Базовое использование

Добавьте флаг -p (или --print) к любой команде claude для запуска её в неинтерактивном режиме. Не все параметры CLI работают с -p. Claude Code отклоняет --bg и отклоняет --cloud с описанием задачи с ошибкой, указывающей на конфликт; --cloud с ID сессии и -p вместо этого ставит сообщение в очередь в эту облачную сессию и выходит. Параметры, которые вы часто будете использовать с -p, включают:

Этот пример задаёт Claude вопрос о вашей кодовой базе и выводит ответ:

claude -p "What does the auth module do?"

Claude Code выходит с кодом 0 при успехе и с ненулевым кодом при сбое запуска, поэтому ваши скрипты могут ветвиться в зависимости от кода выхода. Если вы передадите неверный флаг, Claude Code сообщит об ошибке в stderr перед началом запуска. Когда сбой происходит внутри запуска, например отсутствие аутентификации, Claude Code выводит сбой как результат на stdout.

Начните быстрее с режима bare

Добавьте --bare для сокращения времени запуска путём пропуска автоматического обнаружения хуков, скиллов, пользовательских команд, субагентов, установленных плагинов, MCP-серверов, автоматической памяти и CLAUDE.md. Без этого claude -p загружает тот же контекст, что и интерактивная сессия, включая всё, что настроено в рабочем каталоге или ~/.claude.

Режим bare полезен для CI и скриптов, где вам нужен одинаковый результат на каждой машине. Хук в ~/.claude коллеги или MCP-сервер в .mcp.json проекта не будут запущены, потому что режим bare никогда их не читает. Каталог, который вы указываете с помощью --add-dir, является частичным исключением: режим bare загружает скиллы из его папки .claude/skills/, но всё ещё пропускает его папки .claude/commands/ и .claude/agents/. Скиллы из дополнительных каталогов охватывает то, что загружается и что не загружается.

Без --bare сессия -p запускает хуки в .claude/settings.json проекта и подключает серверы в его .mcp.json, даже в папке, которой вы никогда не доверяли. Сессия -p не показывает диалоговое окно доверия рабочему пространству и не показывает запрос подтверждения для каждого сервера. Что запускается перед тем, как вы доверите папку охватывает каждый вид содержимого репозитория под -p и как его избежать.

Этот пример запускает одноразовую задачу суммирования в режиме bare и предварительно одобряет инструмент Read, чтобы вызов завершился без запроса разрешения. Установите ANTHROPIC_API_KEY перед запуском, потому что режим bare не использует вашу подписку:

claude --bare -p "Summarize README.md" --allowedTools "Read"

В режиме bare Claude Code никогда не читает учётные данные OAuth или системную связку ключей. Для Anthropic API установите ANTHROPIC_API_KEY в окружении с ключом, созданным в Claude Console, или предоставьте apiKeyHelper в JSON --settings. Amazon Bedrock, Google Cloud's Agent Platform и Microsoft Foundry продолжают читать свои собственные учётные данные поставщика как обычно.

В режиме bare Claude имеет доступ к инструментам Bash, чтения файлов и редактирования файлов. Передайте любой необходимый контекст с флагом:

Для загрузки Используйте
Дополнения системного промпта --append-system-prompt, --append-system-prompt-file
Настройки --settings <file-or-json>
MCP-серверы --mcp-config <file-or-json>
Пользовательские агенты --agents <file-or-json>
Плагин --plugin-dir <path>, --plugin-url <url>

Режим bare также ограничивает то, что происходит во время работы сессии:

  • MCP-серверы: подключаются только серверы, переданные в командной строке, например с помощью --mcp-config. В интерактивной сессии Claude Code также пропускает автоматическое подключение к IDE, если вы не передадите --ide.
  • Системные напоминания: Claude получает ваши промпты и результаты инструментов без системных напоминаний, которые Claude Code добавил бы к ним. Например, Claude не сообщается, когда файл, прочитанный им ранее, изменяется на диске, и он не получает список доступных скиллов, включая скиллы из папки --add-dir.
  • Фоновые задачи: не запускаются. Команда, достигшая своего таймаута, останавливается, а не переходит в фоновый режим.

До v2.1.286 эти ограничения действовали лишь частично: интерактивная сессия --bare подключала те же MCP-серверы, что и обычная сессия, каждая сессия --bare отправляла системные напоминания, а фоновые задачи оставались доступными.

Фоновые задачи при выходе

После того как Claude завершит свой ход и stdin закроется, запуск claude -p может оставаться открытым, чтобы дождаться фоновой работы, которую запустил Claude.

Если только не выполняется ещё фоновая команда, запущенная основным диалогом, Claude Code по умолчанию останавливает всё, что ещё выполняется, после 10 минут непрерывного ожидания в простое и отбрасывает частичный результат. Чтобы изменить 10-минутный лимит, установите CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS или установите его на 0 для ожидания без ограничений.

Запуск ожидает фоновую работу, такую как фоновые команды, субагенты и рабочие процессы, наблюдения Monitor и ожидающие пробуждения /loop:

  • Фоновые команды: для команды, запущенной основным диалогом, например сервера разработки или сборки с отслеживанием, запуск ждёт, пока команда не завершится или не достигнет своего ограничения по времени. Затем Claude делает ещё один ход с полученным результатом. Пока команда выполняется, 10-минутный лимит не завершает ожидание.
  • Фоновые субагенты и рабочие процессы: запуск остаётся открытым до завершения этой работы, потому что её результат является частью окончательного вывода.
  • Наблюдения Monitor: запуск ждёт, пока не истечёт время наблюдения или пока 10-минутный лимит не завершит ожидание, в зависимости от того, что произойдёт раньше. Пока запуск ждёт, Claude продолжает отвечать на то, что сообщает наблюдение. По умолчанию наблюдение истекает через пять минут после того, как Claude его запустит.
  • Ожидающие пробуждения: в запуске, промпт которого вы передали как текст, а не с помощью --input-format stream-json, если Claude запланировал пробуждение /loop в собственном темпе, запуск ждёт срабатывания каждого пробуждения и выполняет его итерацию, пока цикл не завершится, даже после 10-минутного лимита.

Когда stderr является терминалом и запуск ожидает уже пять секунд, Claude Code выводит в stderr строку, которая начинается с Waiting for background work to finish и указывает, какую работу он ожидает. При выводе json или stream-json эта строка выводится только тогда, когда stdout не является терминалом, поэтому JSON, который читает ваш скрипт, никогда её не содержит.

Если запуск достигает своего лимита --max-budget-usd, Claude Code останавливает оставшуюся фоновую работу вместо того, чтобы ждать.

Когда фоновая работа запускает ещё один ход, запуск выводит результат каждого хода при выводе по умолчанию text и результат последнего хода при выводе json. До v2.1.295 запуск и при выводе text выводил только результат последнего хода.

Остановите запуск с помощью SIGTERM

Если вы остановите запуск claude -p с помощью SIGTERM, например с помощью kill или от супервизора процесса, Claude Code выходит с кодом 143. Claude Code оставляет ход, который был в процессе, незавершённым и не записывает для него результат. Чтобы вместо этого завершить ход, отправьте SIGINT или вызовите interrupt() Agent SDK перед остановкой процесса.

При SIGTERM Claude Code завершает дерево процессов любой команды Bash, которая всё ещё выполняется. Claude Code затем запускает хуки SessionEnd и выходит. При выходе Claude Code не запускает новый вызов инструмента, не отправляет новый запрос модели и не запускает никакой хук, кроме SessionEnd. Если запуск был в середине команды или ожидал ответа на запрос разрешения, когда пришёл сигнал, Claude Code обрабатывает этот шаг следующим образом:

  • Выполнение команды: Claude Code записывает команду как убитую в сессии.
  • Ожидание ответа на запрос разрешения: если вы отправите SIGTERM процессу, Claude Code оставляет запрос без ответа. Если ваша программа закрывает сессию через Agent SDK, SDK завершает ввод Claude Code перед отправкой любого сигнала, и Claude Code отменяет запрос, как только ввод завершается.

Когда вы возобновляете сессию, Claude Code оставляет прерванный ход как есть, и ваш следующий промпт ведёт диалог. Чтобы Claude Code продолжил прерванный ход при возобновлении вместо этого, установите CLAUDE_CODE_RESUME_INTERRUPTED_TURN=1.

Если рабочий каталог удалён

Если рабочий каталог сессии claude -p или Agent SDK удалён во время сессии, сессия продолжает работать. Когда ход начинается, пока каталог отсутствует, Claude Code выдаёт предупреждающее сообщение в выводе stream-json, и команды оболочки не выполняются до тех пор, пока каталог снова не существует.

Примеры

Эти примеры демонстрируют распространённые паттерны CLI. Если команда указывает файл, например auth.py или build-error.txt, замените его файлом из вашего проекта. В CI или других скриптовых окружениях добавьте --bare, чтобы Claude Code запустился без загрузки хуков, плагинов, автоматической памяти или CLAUDE.md хоста.

Передача данных через Claude

Неинтерактивный режим читает stdin, поэтому вы можете передавать данные и перенаправлять ответ, как в любом другом инструменте командной строки.

Этот пример передаёт лог сборки в Claude и записывает объяснение в файл:

cat build-error.txt | claude -p 'concisely explain the root cause of this build error' > output.txt

С --output-format json данные ответа включают total_cost_usd и разбивку затрат по моделям, поэтому вызывающие скрипты могут отслеживать расходы без обращения к панели использования. Когда вы продолжаете более ранний диалог с --continue или --resume, запуск сообщает общую сумму диалога, включая расходы более ранних запусков. Обе цифры являются оценками на стороне клиента и могут отличаться от вашего фактического счёта.

Если Claude Code не может прочитать stdin, например потому что процесс, который его запустил, отключил свой конец, Claude Code выводит предупреждение в stderr и продолжает работу с промптом из командной строки. До версии 2.1.211 нечитаемый stdin на Windows приводил к сбою сессии или к молчаливому завершению без вывода.

Добавление Claude в скрипт сборки

Вы можете обернуть неинтерактивный вызов в скрипт, чтобы использовать Claude как линтер или рецензента для конкретного проекта.

Этот скрипт package.json передаёт diff относительно main в Claude и просит его сообщить об опечатках. Передача diff означает, что Claude не нужно разрешение Bash для его чтения, а экранированные двойные кавычки делают скрипт переносимым на Windows:

{
  "scripts": {
    "lint:claude": "git diff main | claude -p \"you are a typo linter. for each typo in this diff, report filename:line on one line and the issue on the next. return nothing else.\""
  }
}

Запустите его с помощью npm run lint:claude.

Получение структурированного вывода

Используйте --output-format для управления тем, как возвращаются ответы:

  • text (по умолчанию): простой текстовый вывод
  • json: структурированный JSON с результатом, ID сессии и метаданными
  • stream-json: JSON с разделением по строкам для потоковой передачи в реальном времени

Этот пример возвращает сводку проекта в виде JSON с метаданными сессии, с текстовым результатом в поле result:

claude -p "Summarize this project" --output-format json

Чтобы получить вывод, соответствующий определённой схеме, используйте --output-format json с --json-schema и определением JSON Schema. Ответ включает метаданные о запросе (ID сессии, использование и т. д.) со структурированным выводом в поле structured_output.

Этот пример извлекает имена функций и возвращает их как массив строк:

claude -p "Extract the main function names from auth.py" \
  --output-format json \
  --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}'

Если значение не является допустимой JSON Schema, claude завершается с Error: --json-schema is not a valid JSON Schema, за которым следует диагностика валидатора. Claude Code принимает схемы, использующие ключевое слово format, такие как "format": "email", но рассматривает format как аннотацию и не применяет его. До версии 2.1.205 Claude Code молча игнорировал недопустимую схему и возвращал неструктурированный текст, а также рассматривал любую схему, содержащую format, как недопустимую.

Потоковая передача ответов

Используйте --output-format stream-json с --verbose и --include-partial-messages для получения токенов по мере их генерации. Каждая строка — это объект JSON, представляющий событие:

claude -p "Explain recursion" --output-format stream-json --verbose --include-partial-messages

Последняя строка потока — это сообщение result с итоговым текстом ответа, стоимостью и метаданными сессии.

Если ваш потребитель читает поток медленно, Claude Code перед завершением ждёт, пока очередь вывода опустеет, масштабируя ожидание в зависимости от того, сколько ещё осталось в очереди, максимум 30 секунд. До версии 2.1.214 ожидание при завершении было ограничено примерно двумя секундами, что могло обрезать конец большого ответа.

Следующий пример использует jq для фильтрации текстовых дельт и отображения только потокового текста. Флаг -r выводит необработанные строки (без кавычек), а -j объединяет их без переводов строк, поэтому токены выводятся непрерывно:

claude -p "Write a poem" --output-format stream-json --verbose --include-partial-messages | \
  jq -rj 'select(.type == "stream_event" and .event.delta.type? == "text_delta") | .event.delta.text'

Для программной потоковой передачи с обратными вызовами и объектами сообщений см. Потоковая передача ответов в реальном времени в документации Agent SDK.

Отслеживание сообщений субагентов

Сообщения от субагентов и от скиллов, которые работают в субагенте, появляются в потоке как сообщения assistant и user. Их поле parent_tool_use_id указывает, к какому запуску относится каждое из них. Сообщения из основного диалога содержат null в этом поле.

Первое сообщение от разветвлённого скилла или от субагента, работающего на переднем плане, — это сообщение user, содержащее промпт или содержимое скилла, которое им управляет. После этого первого сообщения Claude Code выдаёт:

  • По умолчанию: блоки tool_use и tool_result запуска.
  • С --forward-subagent-text или CLAUDE_CODE_FORWARD_SUBAGENT_TEXT: также текстовые блоки и блоки размышлений запуска, чтобы вы могли восстановить транскрипт каждого запуска.

Когда вы включаете любой из этих параметров, Claude Code пересылает сообщения от субагентов на каждом уровне вложенности, независимо от того, был ли каждый из них порождён инструментом Agent или запущен как разветвлённый скилл. В parent_tool_use_id сообщения вложенного субагента содержат ID вызова инструмента Agent или Skill, который его запустил, поэтому вы можете перестроить полное дерево вложенности, следуя этим ID.

Запуск, который Claude начинает вызовом инструмента, содержит ID этого вызова инструмента. У разветвлённого скилла, который вы запускаете, передавая /<skill-name> в качестве промпта, нет вызова инструмента, поэтому его сообщения вместо этого содержат значение forked-command- и поступают после его завершения. Найдите способ запуска в первом столбце:

Как начинается запуск parent_tool_use_id Когда поступают его сообщения
Claude вызывает инструмент Agent из основного диалога ID этого блока tool_use инструмента Agent Пока субагент работает
Claude вызывает инструмент Skill для разветвлённого скилла из основного диалога ID этого блока tool_use инструмента Skill Пока разветвлённый скилл работает
Вы передаёте /<skill-name> в качестве промпта Значение, начинающееся с forked-command- Вместе и по порядку после завершения разветвлённого скилла

Для разветвлённого скилла, запущенного из промпта, сопоставляйте parent_tool_use_id по префиксу forked-command-, потому что имя после него может отличаться от того, которое вы ввели.

Если каких-то из этих сообщений нет в вашем потоке, сверьте версию Claude Code с этими минимальными требованиями:

  • --forward-subagent-text и CLAUDE_CODE_FORWARD_SUBAGENT_TEXT: версия 2.1.211 или новее
  • Пересылка на каждом уровне вложенности: версия 2.1.219 или новее
  • Разветвлённый скилл, который Claude запускает инструментом Skill из основного диалога: версия 2.1.86 или новее для его блоков tool_use и tool_result и версия 2.1.265 или новее для его первого сообщения user, а также текстовых блоков и блоков размышлений
  • Сообщения субагентов, которых порождает разветвлённый скилл, и разветвлённых скиллов, запущенных внутри субагента или другого разветвлённого скилла: версия 2.1.275 или новее
  • Сообщения разветвлённого скилла, который вы запускаете, передавая /<skill-name> в качестве промпта: версия 2.1.287 или новее

Обработка повторных попыток API

Когда запрос к API завершается ошибкой, допускающей повторную попытку, Claude Code выдаёт событие system/api_retry перед повторной попыткой. В версии 2.1.246 или новее, когда 401 или 403 отклоняет учётные данные apiKeyHelper, Claude Code делает первые две повторные попытки молча, без события, а начиная с третьей последовательной повторной попытки выдаёт событие как обычно. Молчаливые повторные попытки всё равно учитываются в attempt. Вы можете использовать событие для отображения хода повторных попыток в вашем собственном интерфейсе.

Поле Тип Описание
type "system" тип сообщения
subtype "api_retry" идентифицирует это как событие повторной попытки
attempt целое число номер текущей попытки, начиная с 1
max_retries целое число общее число повторных попыток, разрешённых для причины этого сбоя
retry_delay_ms целое число миллисекунды до следующей попытки
error_status целое число или null код состояния HTTP неудачной попытки или null, когда попытка не получила HTTP-ответ от API
no_response объект, опционально присутствует, только когда неудачная попытка не получила заголовки ответа вовремя. waited_ms — это время ожидания этой попытки, а retry_wait_ms — время ожидания повторной попытки. Требует Claude Code версии 2.1.261 или новее
error строка категория ошибки: authentication_failed, oauth_org_not_allowed, account_on_hold, billing_error, rate_limit, overloaded, invalid_request, model_not_found, server_error, max_output_tokens, cloud_credential_error или unknown
uuid строка уникальный идентификатор события
session_id строка сессия, к которой относится событие

Чтение метаданных сессии

Событие system/init сообщает метаданные сессии, включая модель, инструменты, MCP-серверы и загруженные плагины. Это первое событие в потоке, если ему не предшествуют события запуска:

  • События plugin_install, когда задана CLAUDE_CODE_SYNC_PLUGIN_INSTALL.
  • События hook_started, hook_progress и hook_response, пока выполняется настроенный хук SessionStart или Setup. Они передаются в потоке по мере их создания хуком. Claude Code версий с 2.1.169 по 2.1.203 доставлял их одной партией после завершения хука, всё равно раньше system/init; версия 2.1.204 восстановила доставку в реальном времени.

Событие также содержит опциональный массив строк capabilities, называющих поведения протокола, которые реализует эта версия Claude Code, такие как interrupt_receipt_v1 или interrupt_cancel_queued_v1. Проверяйте его для обнаружения возможностей вместо сравнения строк версий и игнорируйте значения, которые вы не распознаёте. Поле требует Claude Code версии 2.1.205 или новее и отсутствует в более ранних версиях. См. SDKSystemMessage для списка возможностей.

Сбой CI, когда плагин или MCP-сервер не загружается

Используйте поля плагинов в событии system/init, чтобы обнаружить плагин, который не загрузился:

Поле Тип Описание
plugins массив плагины, которые успешно загрузились, каждый с name и path
plugin_errors массив ошибки загрузки плагинов, каждая с plugin, type и message. Включает неудовлетворённые версии зависимостей и ошибки загрузки --plugin-dir, такие как отсутствующий путь или недопустимый архив. Плагин, который не загрузился, отсутствует в plugins. Ключ опускается, когда ошибок нет

Когда не удаётся загрузить сам каталог или архив --plugin-dir, его запись plugin_errors включает разрешённый абсолютный путь в виде path. Используйте его, чтобы определить, какое из нескольких значений --plugin-dir не загрузилось. Поле path требует Claude Code версии 2.1.283 или новее.

Используйте поля MCP-серверов так же. Когда вы передаёте --mcp-config с -p, Claude Code перед первым ходом ждёт серверы, которые ещё подключаются, в пределах таймаута запуска MCP_TIMEOUT, по умолчанию 30 секунд. Удалённый сервер с кэшированным списком инструментов пропускает ожидание, показывает pending в system/init и подключается при первом вызове инструмента. В самостоятельно размещённом окружении вместо этого применяется более короткое ожидание. Ожидание требует Claude Code версии 2.1.221 или новее.

Claude Code проверяет каждую запись --mcp-config при запуске и пропускает записи, которые не прошли проверку, например запись url без type. Запуск продолжается и завершается без ошибок, поэтому проверяйте эти поля, чтобы обнаружить сервер, который так и не загрузился:

Поле Тип Описание
mcp_servers массив MCP-серверы в сессии, каждый с name и status
mcp_server_errors массив записи --mcp-config, пропущенные при проверке конфигурации, каждая с name, type и message. type — это категория пропуска, такая как unknown_type, url_missing_type, invalid_config или reserved_name; рассматривайте значения, которые вы не распознаёте, как общий пропуск. Затронутые серверы отсутствуют в mcp_servers. Ключ опускается, когда ошибок нет, поэтому проверка в CI может завершаться сбоем при непустом массиве. Требует Claude Code версии 2.1.219 или новее

Когда вы запускаете команду вручную в терминале, Claude Code также выводит в stderr предупреждение при запуске, например Warning: 1 MCP server skipped due to invalid config:, за которым следует причина для каждой пропущенной записи. Когда вы перенаправляете stderr или когда его перехватывает программа, такая как CI runner или хост SDK, Claude Code не выводит предупреждение и сообщает о пропущенных записях только в поле mcp_server_errors. Предупреждение требует Claude Code версии 2.1.219 или новее.

Отслеживание установки плагинов

Когда задана CLAUDE_CODE_SYNC_PLUGIN_INSTALL, Claude Code выдаёт события system/plugin_install во время установки плагинов из маркетплейсов перед первым ходом. Используйте их для отображения хода установки в вашем собственном UI.

Поле Тип Описание
type "system" тип сообщения
subtype "plugin_install" идентифицирует это как событие установки плагина
status "started", "installed", "failed" или "completed" started и completed обрамляют всю установку; installed и failed сообщают об отдельных маркетплейсах
name строка, опционально имя маркетплейса, присутствует в installed и failed
error строка, опционально сообщение об ошибке, присутствует в failed
uuid строка уникальный идентификатор события
session_id строка сессия, к которой относится событие

Автоматическое подтверждение инструментов

Используйте --allowedTools, чтобы разрешить Claude использовать определённые инструменты без запроса. Перечисление Read и Edit позволяет Claude читать и редактировать файлы без запроса разрешения. Перечисление Bash делает то же самое для shell-команд, за исключением запуска, который начинается в авторежиме: там Claude Code отбрасывает голую запись Bash как слишком широкое разрешающее правило, и вместо этого авторежим оценивает каждую команду. Этот пример запускает набор тестов и исправляет сбои, указав эти три инструмента:

claude -p "Run the test suite and fix any failures" \
  --allowedTools "Bash,Read,Edit"

Чтобы задать базовый уровень для всей сессии вместо перечисления отдельных инструментов, передайте режим разрешений. Запуск, в котором режим разрешений ничем не задан, использует встроенный начальный режим разрешений, которым может быть auto, поэтому передайте нужный вам режим:

  • auto: передайте --permission-mode auto, чтобы большинство действий проверял классификатор вместо вас
  • dontAsk: Claude Code отклоняет каждый вызов, который иначе вызвал бы запрос, что полезно для строго ограниченных запусков в CI. Действия, не требующие подтверждения в режиме Manual, по-прежнему выполняются, например чтение файлов в ваших рабочих каталогах и набор команд только для чтения, как и действия, охваченные вашими записями --allowedTools или правилами permissions.allow. AskUserQuestion, инструменты коннекторов, для которых ваша организация установила ask, и MCP-инструменты, помеченные requiresUserInteraction, отклоняются, даже когда совпадает разрешающее правило
  • acceptEdits: Claude записывает файлы без запроса, и Claude Code автоматически подтверждает распространённые команды файловой системы, такие как mkdir, touch, mv и cp. Действия, которые ни один режим не подтверждает автоматически, по-прежнему действуют. Помимо набора команд только для чтения, другие shell-команды и сетевые запросы по-прежнему требуют записи --allowedTools или правила permissions.allow. См. что acceptEdits подтверждает автоматически для полного списка

Этот пример применяет исправления линтера с acceptEdits в качестве базового уровня:

claude -p "Apply the lint fixes" --permission-mode acceptEdits

Отключение запросов разрешений в автоматических запусках

Передайте --permission-prompts none, когда отвечать на запросы разрешений некому, например в запланированном задании. Флаг важнее всего, когда у вашего запуска есть хост разрешений: приложение Agent SDK с обратным вызовом canUseTool или MCP-инструмент, который вы передаёте с --permission-prompt-tool. Без флага ваш запуск ждёт, пока этот хост ответит на каждый запрос разрешения.

С флагом ваш запуск не обращается к хосту и не ждёт его. Всё, что вызвало бы запрос, отклоняется, если это не разрешает хук PermissionRequest; Claude сообщается, что подтвердить запрос некому и что повторять попытку не нужно, и запуск продолжается. В запуске -p без хоста эти запросы отклоняются в любом случае, а флаг дополнительно сообщает Claude не повторять их. Правила разрешений, хуки PermissionRequest и заданный вами режим разрешений по-прежнему решают судьбу каждого вызова в первую очередь; Claude Code отклоняет только те запросы, которые ничто другое не разрешает.

Этот пример выполняет автоматическое задание в авторежиме. Классификатор проверяет каждое действие как обычно, а Claude Code отклоняет всё, что иначе привело бы к запросу:

claude -p "Update the dependency pins and run the tests" --permission-mode auto --permission-prompts none

С --permission-prompts none Claude Code удаляет инструменты, которым нужен ответ от человека, такие как AskUserQuestion, поэтому Claude не может их вызвать. Любой запрос MCP elicitation, на который не отвечает ни один хук Elicitation, отменяется.

С --output-format stream-json отклонения появляются как системные сообщения permission_denied, а итоговое сообщение результата перечисляет их в permission_denials.

Создание коммита

Этот пример просматривает проиндексированные изменения и создаёт коммит с подходящим сообщением:

claude -p "Look at my staged changes and create an appropriate commit" \
  --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"

Флаг --allowedTools использует синтаксис правил разрешений. Завершающий * включает сопоставление по префиксу, поэтому Bash(git diff *) разрешает любую команду, начинающуюся с git diff. Пробел перед * важен: без него Bash(git diff*) также совпадал бы с git diff-index.

Настройка системного промпта

Используйте --append-system-prompt, чтобы добавить инструкции, сохранив поведение Claude Code по умолчанию. Этот пример передаёт diff PR в Claude и поручает ему проверить код на уязвимости безопасности. Сохраните его как shell-скрипт, например review.sh:

gh pr diff "$1" | claude -p \
  --append-system-prompt "You are a security engineer. Review for vulnerabilities." \
  --output-format json

В скрипте "$1" обозначает первый аргумент, который вы передаёте в командной строке. Запустите bash review.sh 123, и оболочка заменит "$1" на 123, поэтому скрипт получит diff для PR 123. Claude Code выводит рецензию в виде JSON, с текстом в поле result.

См. флаги системного промпта для дополнительных параметров, включая --system-prompt для полной замены промпта по умолчанию.

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

Используйте --continue для продолжения самого последнего диалога или --resume с ID сессии для продолжения определённого диалога. В Claude Code версии 2.1.257 или новее при передаче --continue Claude Code открывает фоновую сессию, которая завершилась, но не ту, которая ещё выполняется. Этот пример запускает рецензию, а затем отправляет последующие промпты:

# First request
claude -p "Review this codebase for performance issues"

# Continue the most recent conversation
claude -p "Now focus on the database queries" --continue
claude -p "Generate a summary of all issues found" --continue

Если вы ведёте несколько диалогов, сохраните ID сессии, чтобы возобновить определённый:

session_id=$(claude -p "Start a review" --output-format json | jq -r '.session_id')
claude -p "Continue that review" --resume "$session_id"

Вы можете запускать эти две команды из разных каталогов: Claude Code находит сессию по её ID в любом проекте на этой машине. До версии 2.1.223 Claude Code искал ID только в текущем каталоге проекта и его git worktree, поэтому обе команды приходилось запускать из одного каталога.

Вместо ID сессии вы можете передать --resume абсолютный путь к файлу транскрипта .jsonl сессии, и Claude Code продолжит диалог, сохранённый в этом файле.

Следующие шаги

  • Agent SDK quickstart: создайте своего первого агента с помощью Python или TypeScript
  • CLI reference: все флаги и параметры CLI
  • GitHub Actions: используйте Agent SDK в рабочих процессах GitHub
  • GitLab CI/CD: используйте Agent SDK в конвейерах GitLab