9 мин · +150 баллов
Claude в скриптах: claude -p
Выполняем одну задачу без интерактивного окна и используем ответ в скрипте.
К концу этого урока
Ты сможешь вызывать Claude Code из скрипта, задавать, что ему разрешено, читать ответ в JSON и ограничивать расходы одного запуска.
С флагом -p (режим печати) Claude Code берёт одну задачу, выполняет её и печатает ответ без интерактивного окна. Поэтому его можно вызывать из shell-скрипта, задания по расписанию или шага сборки, как любую другую утилиту командной строки. При успехе он завершается с кодом 0, при сбое — с ненулевым, и скрипт может на это реагировать.
«Напиши скрипт 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 МБ; для файлов больше назови файл в запросе, а не передавай его через конвейер.
Вывод, который читает скрипт
Три формата вывода
- 1text, по умолчанию: обычный текст.
- 2json: один объект с result, session_id, total_cost_usd с разбивкой по моделям и другими метаданными.
- 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 задаёт основу для всего остального.
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--permission-mode dontAsk: всё, что не разрешено заранее, отклоняется. Подходит для закрытых запусков в CI.
- 2--permission-mode acceptEdits: запись файлов и обычные файловые команды вроде mkdir, mv и cp выполняются; остальным shell-командам всё равно нужно правило allow.
- 3--permission-mode auto: действия вместо тебя проверяет классификатор. Добавь --permission-prompts none, чтобы всё, что ждало бы человека, отклонялось, а Claude знал, что повторять не нужно.
Скрипты, которые везде ведут себя одинаково
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