Курс/Автоматизация для опытных

9 мин · +150 баллов

Claude в скриптах: claude -p

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

К концу этого урока

Ты сможешь вызывать Claude Code из скрипта, задавать, что ему разрешено, читать ответ в JSON и ограничивать расходы одного запуска.

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

💬 Пусть скрипт напишет Claude

«Напиши скрипт explain-build-error.sh, который отправляет build-error.txt в claude -p, просит назвать первопричину в двух предложениях и сохраняет ответ в output.txt. Разреши только инструмент Read, ограничь расход $1, запусти один раз и покажи результат.»

Claude напишет скрипт с нужными флагами и запустит его. Команды ниже — то, что у него получится, чтобы их можно было прочитать и поправить.

Спросить о проекте
claude -p "Что делает модуль auth?"

Запускай внутри папки проекта. Claude прочитает нужное, напечатает ответ и завершится.

Данные на вход, ответ в файл
cat build-error.txt | claude -p 'коротко объясни первопричину этой ошибки сборки' > output.txt

В режиме печати читается стандартный ввод. Через конвейер можно передать до 10 МБ; для файлов больше назови файл в запросе, а не передавай его через конвейер.

Вывод, который читает скрипт

Три формата вывода

  1. 1text, по умолчанию: обычный текст.
  2. 2json: один объект с result, session_id, total_cost_usd с разбивкой по моделям и другими метаданными.
  3. 3stream-json: по одному JSON-событию на строку по ходу работы. Добавь --verbose, а для текста по мере генерации — --include-partial-messages.
Ответ по схеме
claude -p "Выпиши имена основных функций из auth.py" \
  --output-format json \
  --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}' \
  | jq '.structured_output'

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

Разрешения без человека

В режиме печати некому отвечать на вопросы о разрешениях, поэтому реши заранее, что Claude можно делать. --allowedTools перечисляет инструменты, которые работают без вопросов, в том же синтаксисе правил, что и настройки. --permission-mode задаёт основу для всего остального.

Разрешить только нужные команды git
claude -p "Посмотри подготовленные изменения и сделай подходящий коммит" \
  --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"

Пробел перед * важен. Bash(git diff *) разрешает любую команду, начинающуюся с git diff; Bash(git diff*) совпал бы и с git diff-index.

Выбор основы

  1. 1--permission-mode dontAsk: всё, что не разрешено заранее, отклоняется. Подходит для закрытых запусков в CI.
  2. 2--permission-mode acceptEdits: запись файлов и обычные файловые команды вроде mkdir, mv и cp выполняются; остальным shell-командам всё равно нужно правило allow.
  3. 3--permission-mode auto: действия вместо тебя проверяет классификатор. Добавь --permission-prompts none, чтобы всё, что ждало бы человека, отклонялось, а Claude знал, что повторять не нужно.

Скрипты, которые везде ведут себя одинаково

Режим bare с ограничением расходов
claude --bare -p "Кратко перескажи README.md" --allowedTools "Read" --max-budget-usd 1.00

--bare пропускает хуки, скиллы, плагины, MCP-серверы, автопамять и CLAUDE.md, найденные на машине, поэтому чужие настройки не меняют результат. Вход по подписке в этом режиме не читается, нужен ANTHROPIC_API_KEY. --max-budget-usd останавливает запуск, когда оценка расходов достигает суммы; расход может немного превысить предел, так что оставляй запас.

Продолжить определённый разговор
session_id=$(claude -p "Начни ревью" --output-format json | jq -r '.session_id')
claude -p "Продолжи это ревью" --resume "$session_id"

--continue продолжает последний разговор в этой папке; --resume с ID выбирает конкретный, из любого проекта на этом компьютере.

Тот же агентный цикл доступен как Agent SDK, пакеты для Python и TypeScript; раньше он назывался Claude Code SDK. Переходи на него, когда скрипт вырастает в программу и нужны объекты сообщений, обратные вызовы для одобрения инструментов и структурированный вывод. Для большинства скриптов хватает claude -p.

!Режим печати доверяет папке

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

Проверь себя

Задание в CI должно давать одинаковый результат на любой машине и не подхватывать чьи-то личные хуки и CLAUDE.md. Какой флаг?

Проверь себя

Ты передаёшь --json-schema и читаешь .structured_output, но иногда поля нет. Почему?

Факты проверены по официальной документации Claude Code 24 октября 2026 г. · источник

ЕАЕвгений Арсентьев

Автор

Евгений Арсентьев

PhD · CEO, digital health