← Claude Code: Agentic Development in the Terminal
07 / 08 · 50 min

Headless Mode and CI Automation

claude -p as a unix utility: output formats, permission flags, GitHub Actions, and safe code-automation patterns.

Lesson content is currently available in Russian.

What you will learn

  • →Встраивать claude -p в скрипты и конвейеры с JSON-выводом и кодами возврата.
  • →Задавать безопасные рамки автономного запуска: allowedTools, permission-mode, max-turns.
  • →Настраивать GitHub Actions с @claude и строить автоматизации, заканчивающиеся PR.

claude -p: агент как unix-утилита

Флаг -p (print) превращает Claude Code в неинтерактивную команду: прочитал промпт, выполнил, напечатал результат, завершился. Это открывает композицию с обычным unix-конвейером:

# разовый вопрос к репозиторию
claude -p "перечисли публичные функции без тестов в src/billing"

# stdin как вход
cat build-error.log | claude -p "найди первопричину, ответь одной строкой"

# структурированный вывод для скриптов
claude -p "суммаризируй изменения за неделю" --output-format json

Формат json возвращает объект с результатом, стоимостью и метаданными сессии — его удобно разбирать jq и складывать в логи. Формат stream-json отдаёт события по мере работы: он нужен длинным задачам, где важен прогресс, и конвейерам, реагирующим на промежуточные шаги. Код возврата стандартный: ноль при успехе, ненулевой при ошибке — привычные условия в bash-скриптах работают без обвязки.

Ментальная модель: claude -p — это grep по смыслу и sed по намерению. Логи, диффы, отчёты линтеров — всё, что течёт по конвейеру, можно пропустить через агента. Начинайте с read-only сценариев: суммаризация, классификация, поиск первопричин. Они безопасны при любой ошибке модели и окупаются с первого дня.

Флаги автономии и границы прав

В headless-режиме некому нажать «разрешить», поэтому права задаются заранее флагами:

claude -p "почини падающие юнит-тесты в пакете billing" \
  --allowedTools "Read,Grep,Edit,Bash(npm run test:*)" \
  --permission-mode acceptEdits \
  --max-turns 30

--allowedTools — белый список инструментов на весь запуск: всё, чего нет в списке, недоступно. --permission-mode acceptEdits автоматически подтверждает правки файлов, оставляя остальные действия под запретом; режим plan разрешает только исследование без правок; bypassPermissions снимает всё — использовать исключительно в изолированном контейнере. --max-turns страхует от зацикливания: агент, не уложившийся в лимит шагов, останавливается, а не выжигает бюджет бесконечным циклом.

Принцип наименьших прав здесь не абстракция. Headless-агент с широкими правами и без человека рядом — худшая комбинация из возможных. Правильная рамка: read-only инструменты по умолчанию; запись — точечными allow-правилами; разрушительные команды — в deny; окружение — контейнер без продакшен-секретов и с ограниченной сетью.

И журналируйте всё: сохраняйте json-вывод каждого прогона с меткой времени. Когда автоматизация однажды сделает что-то странное — а это вопрос времени, — разбирать инцидент будете по фактам, а не по памяти.

GitHub Actions: @claude в PR

Официальный экшен anthropics/claude-code-action добавляет агента в CI. Базовая настройка:

name: Claude
on:
  issue_comment:
    types: [created]
jobs:
  claude:
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

После этого упоминание @claude в комментарии issue или pull request запускает агента: «@claude почини этот баг» — он прочитает тред, внесёт правки и откроет PR; «@claude почему падает этот тест?» — ответит анализом в комментарии. Быстрая установка из терминала — команда /install-github-app: она проведёт через выдачу прав и настройку секретов.

Тот же экшен работает и без упоминаний — по событиям. Параметр prompt задаёт задачу, а триггером может быть pull_request или расписание. Так строятся автоматические ревью каждого PR по чек-листу проекта, еженедельная сводка изменений, триаж свежих issues по меткам. Важная деталь: агент в CI получает тот же CLAUDE.md, те же команды и hooks, что и локальный, — конфигурация проекта, которую вы строили в прошлых уроках, работает и здесь. Чем лучше настроен проект, тем полезнее автоматика.

Паттерны автоматизации и техника безопасности

Рабочие паттерны, проверенные командами в проде.

  • Авторевью: на каждый PR агент проходит по диффу с чек-листом проекта и оставляет комментарии. Человек решает, агент подсвечивает.
  • Триаж issues: по расписанию агент размечает новые issues метками, находит дубликаты, вежливо запрашивает недостающие детали воспроизведения.
  • Санитары кодовой базы: ночной прогон чинит линт, обновляет сгенерированную документацию, открывает PR с результатом.
  • Release notes: по диффу между тегами агент собирает черновик изменений для человека-редактора.

Общий инвариант всех паттернов: результат работы агента — pull request, а не прямой пуш в защищённую ветку. PR даёт ревью, прогон CI и откат одним нажатием; прямой пуш не даёт ничего из этого.

Техника безопасности. Токены — минимальные: права на contents и pull-requests, никакого admin. Бюджет — ограничен: max-turns в каждом прогоне, лимиты расходов на API-ключе. Мониторинг — обязателен: стоимость и длительность прогонов из json-вывода собираются в дашборд, аномалии видны за день, а не за квартал. Автоматизация без этих рамок однажды сгенерирует тысячу строк в main в пятницу вечером. Рамки дешевле разбора последствий — установите их до первого инцидента.

Practice

Конвейер с агентом внутри

Соберите один headless-сценарий: либо локальный скрипт, где claude -p анализирует вывод линтера и предлагает фиксы в json-формате, либо GitHub Action, где агент комментирует PR сводкой изменений. Ограничьте права белым списком инструментов и --max-turns.

Deliverable

Скрипт или workflow-файл, json-вывод успешного прогона и список выданных прав с обоснованием каждого.

Checkpoint

Покажите ваш headless-прогон: какие права выданы, чем ограничен бюджет и куда попадает результат?

  • ✓ Инструменты ограничены явным белым списком, разрушительные действия недоступны.
  • ✓ Есть предохранители: --max-turns, изоляция окружения, отсутствие продакшен-секретов.
  • ✓ Результат оформлен как PR или отчёт, а не прямой пуш в защищённую ветку.

Check yourself

Что делает флаг -p у команды claude?

01Что делает флаг -p у команды claude?

Когда нужен --output-format stream-json вместо json?

02Когда нужен --output-format stream-json вместо json?

Где единственно допустим режим bypassPermissions?

03Где единственно допустим режим bypassPermissions?

Что запускает агента при комментарии «@claude почини баг» в issue?

04Что запускает агента при комментарии «@claude почини баг» в issue?

Почему результат автоматизации — PR, а не прямой пуш в main?

05Почему результат автоматизации — PR, а не прямой пуш в main?

Sources

Headless Mode and CI Automation · Claude Code: Agentic Development in the Terminal · VORCL