GitHub Actions и автоматический code review

claude-code-action — это GitHub Action, построенный поверх Claude Agent SDK. Проще говоря: тот же движок агентного цикла, что работает у вас в терминале, теперь запускается прямо в CI-раннере GitHub. Агент получает контекст из репозитория, читает файлы, пишет код и взаимодействует с GitHub API — всё на стандартных ubuntu-latest runners, ваш инфраструктуры не касаясь.

Важно разделить два режима с самого начала, потому что их часто путают:

  • Интерактивный режим — агент реагирует на упоминание @claude в комментариях к PR или issue. Это on-demand запуск: кто-то написал, агент прочитал контекст и выполнил задачу.
  • Автоматизированный режим — агент запускается без триггера из комментария: по расписанию, при открытии PR, по любому GitHub-событию. Здесь вы передаёте инструкцию через параметр prompt прямо в YAML-файле.

Есть и третий вариант — Code Review, управляемый сервис на инфраструктуре Anthropic. Его мы разберём отдельно в конце.

Архитектура: что происходит за кулисами

Когда кто-то пишет @claude в комментарии к PR, вот что происходит:

sequenceDiagram actor Dev as Разработчик participant GH as GitHub participant App as Claude GitHub App participant Runner as GitHub Runner participant Agent as Агент (Agent SDK) participant API as Anthropic API Dev->>GH: Комментарий «@claude fix the bug» GH->>App: Webhook: issue_comment event App->>Runner: Запуск workflow Runner->>Runner: actions/checkout (опц.) Runner->>Agent: anthropics/claude-code-action@v1 Agent->>GH: Читает PR-контекст, диффы, файлы Agent->>API: Агентный цикл (plan → tool calls) loop Инструменты Agent->>Runner: Read / Edit / Bash Agent->>GH: GitHub API (get_pr_files и т.д.) end Agent->>GH: Создаёт коммит / оставляет комментарий GH->>Dev: Уведомление о результате
sequenceDiagram
    actor Dev as Разработчик
    participant GH as GitHub
    participant App as Claude GitHub App
    participant Runner as GitHub Runner
    participant Agent as Агент (Agent SDK)
    participant API as Anthropic API

    Dev->>GH: Комментарий «@claude fix the bug»
    GH->>App: Webhook: issue_comment event
    App->>Runner: Запуск workflow
    Runner->>Runner: actions/checkout (опц.)
    Runner->>Agent: anthropics/claude-code-action@v1
    Agent->>GH: Читает PR-контекст, диффы, файлы
    Agent->>API: Агентный цикл (plan → tool calls)
    loop Инструменты
        Agent->>Runner: Read / Edit / Bash
        Agent->>GH: GitHub API (get_pr_files и т.д.)
    end
    Agent->>GH: Создаёт коммит / оставляет комментарий
    GH->>Dev: Уведомление о результате
Поток событий от комментария @claude до результата в PR

1. GitHub App (github.com/apps/claude) получает webhook-событие

2. Запускается workflow из .github/workflows/

3. Action anthropics/claude-code-action@v1 запускает агентный цикл

4. Агент читает контекст: диффы, файлы, историю комментариев

5. Выполняет инструменты (Read/Edit/Bash/GitHub API)

6. Публикует результат как комментарий или создаёт PR/коммит

Главное отличие от локального запуска: агент работает на раннере GitHub (изолированная виртуальная машина), имеет доступ к репозиторию через actions/checkout, и общается с GitHub API через токен GitHub App.

Проверь себя
Агент claude-code-action читает файлы репозитория прямо через API GitHub или ему нужен шаг `actions/checkout`? Подумайте: что именно нужно агенту для редактирования файлов.

Быстрая установка: /install-github-app

Для большинства репозиториев самый простой путь — запустить в терминале:

claudeproject:~$ claude
/install-github-app

Команда пройдёт по шагам: установит GitHub App (https://github.com/apps/claude) в репозиторий, добавит секрет ANTHROPIC_API_KEY и создаст файл .github/workflows/claude.yml.

Ограничение: /install-github-app работает только если вы используете Anthropic API напрямую. Для Amazon Bedrock или Google Vertex AI — только ручная настройка (см. ниже).

Ручная настройка

Если автоустановка не подходит или нужен полный контроль:

Шаг 1. Установить GitHub App: https://github.com/apps/claude. Необходимые permissions репозитория: Contents (read & write), Issues (read & write), Pull requests (read & write).

Шаг 2. Добавить секрет ANTHROPIC_API_KEY в Settings → Secrets and variables → Actions.

Шаг 3. Создать файл .github/workflows/claude.yml.

Минимальный рабочий workflow для интерактивного режима:

name: Claude Code
on:
  issue_comment:
    types: [created]
  pull_request_review_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

Action сам определит режим: если в workflow нет prompt, он ждёт триггера @claude в комментарии.

Проверь себя
Вы настроили workflow с `ANTHROPIC_API_KEY` в секретах, но `@claude` в комментарии не запускает агента. Какие три вещи нужно проверить в первую очередь?

Работа с @claude: что умеет агент в PR

После настройки можно писать в любом комментарии к PR или issue:

@claude реализуй фичу из описания issue
@claude почини TypeError в компоненте UserDashboard
@claude сделай ревью этого PR на предмет безопасности
@claude добавь unit-тесты для функции parseExpiry

Агент читает весь контекст: описание PR, изменённые файлы, историю комментариев, CLAUDE.md вашего репозитория. Затем — агентный цикл: планирует, редактирует файлы, коммитит прямо в ветку PR, оставляет комментарий с результатом.

Прогресс виден в виде динамических чекбоксов в комментарии агента — удобно отслеживать, что он делает.

Автоматизированные workflow: prompt без триггера

Для задач, которые не требуют ручного вызова:

name: Ежедневный отчёт
on:
  schedule:
    - cron: "0 9 * * 1-5"  # будни в 9:00 UTC

jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: "Проанализируй вчерашние коммиты и открытые issues, составь краткий отчёт"
          claude_args: "--model claude-opus-4 --max-turns 5"

Параметр claude_args — это прямой проброс CLI-флагов, как если бы вы запускали claude в терминале. Можно передать --model, --max-turns, --allowedTools, --mcp-config — всё, что поддерживает CLI.

Автоматический ревью каждого PR при открытии:

name: Code Review on PR
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: "Проверь этот PR на предмет багов, безопасности и соответствия стилю проекта"
          claude_args: "--max-turns 3"

Использование плагинов и навыков

В prompt можно передать не просто текст, но и вызов навыка или команду из плагина. Например, установить плагин code-review из официального маркетплейса и вызвать его навык:

- uses: anthropics/claude-code-action@v1
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    plugin_marketplaces: "https://github.com/anthropics/claude-code.git"
    plugins: "code-review@claude-code-plugins"
    prompt: "/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}"

Для навыков из самого репозитория — сначала actions/checkout, потом Action.

Code Review: управляемый сервис

Отдельно от claude-code-action существует Code Review — managed-сервис, который запускается на инфраструктуре Anthropic (не на ваших раннерах). Доступен для Team и Enterprise подписок.

Отличия принципиальные:

  • Не требует YAML-файла и настройки workflow
  • Запускает флот специализированных агентов параллельно
  • Каждый агент ищет отдельный класс проблем; затем — верификационный проход
  • Результаты — инлайн-комментарии прямо на строках кода в диффе, с маркерами 🔴 (баг перед мерджем) и 🟡 (нит)
  • Среднее время — 20 минут; средняя стоимость — $15–25 за ревью

Кастомизация поведения через два файла в корне репозитория:

  • CLAUDE.md — общие правила проекта (нарушения → нит-уровень)
  • REVIEW.md — review-специфичные инструкции, инжектируются как высший приоритет в каждый агент флота

Пример REVIEW.md, который ограничивает «важные» находки только production-багами:

# Review instructions


::widget{id="rc-3"}


::widget{id="rc-2"}


::widget{id="rc-1"}

## Что считать Important
Только то, что сломает поведение в продакшне: некорректная логика,
унскопированные DB-запросы, PII в логах. Стиль — Nit максимум.

## Лимит нитов
Не более 5 Nit на ревью; остальное — как "плюс N похожих" в саммари.

## Не проверять
- Всё, что покрывает CI (линтинг, типы, форматирование)
- Файлы под src/gen/ и любые *.lock

Вручную запустить ревью можно комментарием @claude review на PR.

Enterprise: Bedrock и Vertex AI

Для организаций с требованиями к data residency — claude-code-action поддерживает Amazon Bedrock и Google Vertex AI. Вместо ANTHROPIC_API_KEY используется OIDC-аутентификация:

# Amazon Bedrock
- uses: anthropics/claude-code-action@v1
  with:
    use_bedrock: "true"
    github_token: ${{ steps.app-token.outputs.token }}
    claude_args: '--model us.anthropic.claude-sonnet-4-6 --max-turns 10'

Обратите внимание: модели Bedrock используют региональный префикс в имени (us.anthropic.claude-sonnet-4-6). Для Vertex — другой формат (claude-sonnet-4-5@20250929). При переходе на облачного провайдера это одна из самых частых причин ошибок.

Несколько практических соображений

Стоимость. Каждый @claude в комментарии = GitHub Actions минуты + токены API. При pull_request: synchronize агент запускается на каждый push, что быстро накапливается. Ограничивайте --max-turns и используйте concurrency на уровне workflow, чтобы новый push отменял предыдущий запуск.

Безопасность. Никогда не кладите API-ключи напрямую в YAML. Секрет ANTHROPIC_API_KEY — через Settings → Secrets. О том, почему bypassPermissions опасен при prompt injection — в Модель разрешений, безопасность и доверие.

CLAUDE.md в репозитории. Агент читает его так же, как при локальном запуске. Это главный способ передать контекст проекта: стиль кода, запрещённые паттерны, структуру директорий. Без него агент действует вслепую относительно конвенций команды — детально разобрано в CLAUDE.md и система памяти.

Версия @v1. Актуальная мажорная версия — @v1 (вышла в августе 2025). Если у вас старые workflows с @beta и параметрами mode, direct_prompt, custom_instructions — это бета-версия с несовместимым API. Обновить несложно: заменить @beta на @v1, direct_promptprompt, остальные опции перенести в claude_args.

Проверь себя
В чём принципиальное различие между `claude-code-action` в GitHub Actions и функцией Code Review (managed service)? Когда выбрать первое, а когда второе?

See also

Источники

  1. Claude Code GitHub Actions — официальная документация
  2. anthropics/claude-code-action — GitHub репозиторий
  3. Claude Code Review — официальная документация