Deepseek ArtifactsDeepseek Artifacts
Гайд по автоматизации

Headless-режим Claude Code: -p, CI и GitHub Action

Скриптуйте Claude Code как Unix-инструмент: одноразовые промпты через claude -p, файлы по pipe, парсинг JSON на выходе, возобновление сессий по id, --bare для CI и @claude GitHub Action, собирающая фичу из issue, — straight из собственного разбора Anthropic.

Коротко

  • claude -p "prompt" выполняется один раз и печатает результат — без интерактивной сессии. Компонуется как любой Unix-инструмент: pipe на входе, pipe на выходе, цепочки в скриптах и шагах CI.
  • --output-format json возвращает результат плюс session_id, затраты и метаданные; stream-json выдаёт события с разделением по строкам для потребителей в реальном времени. Парсите jq-ом и надстраивайте своё.
  • Headless стартует без правок и деструктивных разрешений. Выдайте ровно необходимое через --allowedTools "Bash(git diff *),Edit" — синтаксис правил разрешений, совпадение по префиксу.
  • @claude GitHub Action — это headless с фронтендом: отметьте @claude в issue или PR, и он читает код, создаёт PR и коммиты, отвечает на вопросы и ревьюит изменения — на ваших собственных GitHub-раннерах.

Building headless automation with Claude Code | Code w/ Claude

Канал: Anthropic20:59

Смотреть

Headless mode — official documentation

Официальная документация: code.claude.com/docs

Смотреть

Claude Code GitHub Action — official docs

Официальная документация: code.claude.com/docs

Смотреть

Флаги, лимиты и поведение на этой странице сверены с официальной документацией по headless; доклад выше — собственный разбор Anthropic и визуальный источник скриншотов.

Скриншоты принадлежат их авторам и снабжены прямыми ссылками на точные таймкоды. Кадры спикера и зала не используются.

Запускаем Claude Code headless, шаг за шагом

Часть 1 — Основы headless

  1. 1

    Что такое headless-режим

    Headless-режим — это Claude Code без интерактивного UI: тот же агент, управляемый программно. Anthropic подаёт его как простой строительный блок для агентных приложений — используйте как Unix-инструмент в скриптах и пайплайнах, для CI-автоматизации, удалённых сред или как движок за веб-чатом.

    Claude Code SDK slide describing programmatic access to Claude Code in headless environments as a building block for scripts, CI tools and remote environments
    Формулировка самого Anthropic: SDK — это программный доступ к Claude Code в headless-средах.Смотреть на 2:10
  2. 2

    Одноразовые промпты через claude -p

    Флаг -p (--print) выполняет один промпт и завершается: claude -p "Write me a function that calculates the Fibonacci sequence". Ничего не остаётся открытым — вы получаете вывод в stdout и код выхода, который могут проверять ваши скрипты. Права на запись выдавайте заранее через --allowedTools.

    Claude Code headless one-shot command claude -p writing a Fibonacci function with the allowedTools flag in a terminal
    Одноразовый запрос: claude -p генерирует функцию Фибоначчи и выходит — ни TUI, ни уточняющих вопросов.Смотреть на 3:30
  3. 3

    Пайпите файлы прямо в Claude

    Stdin работает как у любого CLI-инструмента: cat app.log | claude -p "summarize the most common error logs". В демо Anthropic 2000 строк лога на входе превращаются в понятный человекам свод ошибок — тот же трюк подходит для падений сборки, стек-трейсов и экспортов. Пайп stdin ограничен 10 МБ.

    Piping app log files into Claude Code headless mode with cat and claude -p to summarize the most common error logs
    cat плюс символ pipe плюс claude -p: две тысячи строк лога становятся диагнозом в три предложения.Смотреть на 3:55
  4. 4

    Расшифруйте вывод, который ненавидите читать

    Тот же приём превращает враждебный вывод в ответы: ifconfig | claude -p "what interfaces do I have configured? don't include lo". Всё, что печатает команда, — состояние сети, ошибки компилятора, планы terraform — можно прогнать через Claude ради человекочитаемой сводки.

    Claude Code headless mode explaining the output of ifconfig after piping the command result into claude -p
    ifconfig, пропущенный через claude -p: каждый интерфейс объяснён, loopback исключён по просьбе.Смотреть на 4:15
  5. 5

    Получите структурированный JSON

    Добавьте --output-format json — и ответ станет парсируемым объектом: текст результата, session_id, длительность и total_cost_usd. Живым потребителям — --output-format stream-json: события построчно, по мере появления; последняя строка и есть итоговый результат.

    Claude Code headless JSON output showing the result field, session id and total cost from the output-format json flag
    JSON-режим: один блоб с результатом, id сессии на будущее возобновление и стоимостью прогона.Смотреть на 4:35

Часть 2 — Скриптуем по-инженерному

  1. 6

    Выдавайте инструменты осознанно

    Headless стартует без правок и деструктивных разрешений. --allowedTools заранее одобряет то, что нужно задаче, по синтаксису правил разрешений: --allowedTools "Bash(npm run build),Bash(npm test:*),Write". MCP-инструменты заносятся в allow-лист так же — выдавайте самый узкий набор, которым работа делается.

    Claude Code SDK deep dive slide listing allowedTools permission rules, output-format stream-json and the system-prompt flag
    Глубокое погружение в SDK: права инструментов, режимы структурированного вывода и кастомные системные промпты — на одном слайде.Смотреть на 11:00
  2. 7

    Держите контекст между запусками

    JSON-режим возвращает session_id — передайте его обратно с --resume "$session_id", чтобы продолжить то же состояние диалога из следующего запуска или другого процесса. Так и строятся интерактивные продукты поверх: пользователь говорит, Claude отвечает, вы сохраняете сессию к следующему ходу.

  3. 8

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

    Если заранее не угадать, какие инструменты понадобятся Claude, --permission-prompt-tool перекладывает решения об одобрении на MCP-сервер в рантайме — тот спрашивает ваш сервис (или пользователя через ваше приложение), пропускать ли каждое действие, вместо того чтобы перечислять всё заранее.

  4. 9

    Для CI берите --bare

    --bare пропускает автопоиск hooks, skills, кастомных команд, субагентов, плагинов, MCP-серверов и CLAUDE.md ради максимально быстрого старта — рекомендован для скриптов и CI и готовится стать дефолтом для -p. Требует ANTHROPIC_API_KEY; контекст передаётся явно флагами.

Часть 3 — @claude GitHub Action

  1. 10

    Знакомьтесь: @claude GitHub Action

    GitHub Action — это headless с фронтендом поверх SDK. Отметьте @claude в любом PR или issue, и он сможет читать ваш код, создавать PR, докидывать коммиты в существующие, отвечать на вопросы и ревьюить изменения — на уже имеющихся у вас GitHub-раннерах, так что нянчить инфраструктуру не придётся.

    Anthropic slide listing what the Claude GitHub Action does when tagged on a pull request or issue, running on existing GitHub runners
    Контракт Action: отметь @claude, опиши, что нужно, — и он поработает над репозиторием на твоих раннерах.Смотреть на 17:10
  2. 11

    Назначьте issue Клоду

    В живой демонстрации Anthropic комментарий "@claude please implement this feature and comment on it" заставил бота ответить планом со скоупом — маркированным списком того, что он построит, — и лишь затем создать ветку, коммиты и pull request; всё отслеживается в логах Action.

    GitHub issue where tagging at-claude produced a scoped implementation plan comment for a per question timer feature
    Комментарий @claude в настоящем issue: Claude отвечает планом со скоупом, не тронув ни строчки кода.Смотреть на 7:50
  3. 12

    Установите на свой репозиторий

    Результат — чек-лист реализации на issue: фичи добавлены, тудушки закрыты. Чтобы добиться этого, откройте Claude Code в репозитории и выполните /install-github-action: интерактивный флоу откроет PR с workflow YAML, дальше — настроить API-ключи как секреты репозитория и вмержить.

    GitHub issue completed by the Claude Code action showing a checked implementation summary and the features added to the quiz app
    Готовый прогон: чек-лист реализации со всеми фичами, которые Action добавила в демо-приложение.Смотреть на 13:30

Headless vs интерактивный vs SDK vs GitHub Action

Четыре способа управлять одним и тем же агентом — выбирайте по тому, кто (или что) спрашивает:

  • 1Интерактивный CLI — сессия в TUI: запросы разрешений, plan-режим, /команды. Лучше всего для человека, который ведёт задачу прямо сейчас.
  • 2Headless claude -p — один программный выстрел: stdin и stdout, коды выхода, без UI. Для скриптов, cron-задач и быстрых вопросов из других инструментов.
  • 3Agent SDK — та же headless-мощь в виде типизированной библиотеки: многоходовые сессии, кастомные инструменты, стриминг. Когда Claude — компонент внутри вашего приложения.
  • 4@claude GitHub Action — headless на событийной модели GitHub: issue, PR и ревью на ваших раннерах. Для автоматизации в масштабе репозитория, которую может запустить вся команда.
  • 5--bare headless — урезанный старт для CI: без CLAUDE.md, hooks, skills, плагинов и автопоиска MCP, контекст явно флагами, самый быстрый холодный старт.

Доступ к модели и система разрешений у них общие — правило, выданное headless, действует везде, потому дисциплина с --allowedTools так важна.

Headless капризничает? Скорая помощь

Пять headless-специфичных граблей и как с ними обходиться:

  • 1Скрипт завершается раньше Claude. Проверяйте код выхода: 0 — успех, всё остальное — провал. SIGTERM выходит с 143 и оставляет ход незаконченным — если нужно прервать посреди хода, завершайте через SIGINT или interrupt() из SDK.
  • 2Пайп-вход тихо обрезается. Stdin ограничен 10 МБ — более крупные данные пишите в файл и ссылайтесь на путь в промпте.
  • 3"--bg rejected" или ошибка --cloud. Флаги интерактивного режима к -p не применяются: --bg отклоняется сразу, а --cloud требует session id для постановки сообщения в очередь, а не описания задачи.
  • 4Прогон CI игнорирует ваши CLAUDE.md и hooks. Это --bare делает свою работу: пропускает автопоиск. Передавайте контекст явно через --settings, --mcp-config, --agents или --plugin-dir.
  • 5Фоновые bash-задачи умирают на середине. Фоновые шеллы убиваются примерно через 5 секунд после получения результата; субагенты и workflow держат процесс до лимита в 10 минут простоя. В CI ждите их явно.

Во всех прочих случаях добавьте --verbose и читайте события stream-json — system/init называет реально загруженные модель, инструменты и MCP-серверы.

FAQ по headless-режиму

Похожие гайды