TGViewer
DartWay Ru | Flutter & Fullstack Dart DartWay Ru | Flutter & Fullstack Dart @dartway_dev_ru · 596 subscribers
Post #131 495
🤖 Авто-ревью на Claude: как настроили и на какие грабли наступили

Подключили автоматическое код-ревью (Anthropic Claude) на каждый PR в develop. Ниже — рецепт и нюансы, чтобы вы не потратили на это полдня, как мы 🙂

Что нужно один раз

Поставить GitHub App Claude на репо (/install-github-app из Claude Code или вручную).

Сгенерить долгоживущий OAuth-токен: claude setup-token (логин аккаунтом с активной подпиской Claude) → положить в секрет репо CLAUDE_CODE_OAUTH_TOKEN: gh secret set CLAUDE_CODE_OAUTH_TOKEN --repo <org>/<repo>

(при таком подходе - action будет использовать лимиты вашей подписки, альтернатива сделать через API ключ - тогда использование будет оплачиваться по токенам)

Добавить workflow .github/workflows/claude-review.yml.

Рабочий конфиг (в тексте промта есть плейсхолдер для добавления вводных по архитектуре вашего проекта)
name: Claude PR Review
on:
pull_request:
types: [opened, synchronize, ready_for_review, reopened]

permissions:
contents: read
pull-requests: write
issues: write
id-token: write # ← без этого не пройдёт OIDC-обмен токена

concurrency:
group: claude-review-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
review:
if: ${{ github.event.pull_request.head.repo.fork != true }}
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
track_progress: true # ← сводный комментарий
prompt: |
REPO: ${{ github.repository }}
PR NUMBER: ${{ github.event.pull_request.number }}
<инструкции ревью + что пропускать>
Для построчных замечаний используй mcp__github_inline_comment__create_inline_comment (confirmed: true).
Для сводки — gh pr comment. Публикуй только через GitHub-комментарии.
claude_args: |
--model claude-opus-4-8
--max-turns 50
--allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*)"


Грабли, на которые наступили (главное)

Workflow validation failed на каждом PR. Экшен требует, чтобы файл workflow был идентичен версии на default-ветке репо. У нас default = master, а файл лежал только на develop → падало всегда. Фикс: workflow должен быть на default-ветке.

Нет id-token: write → OIDC-обмен токена не проходит. Это разрешение обязательно.

401 Invalid bearer token. Токен в секрете был невалиден - скопирован с переносом строки. Проще всего просто перевыпустить токен claude setup-token и скопировать аккуратно.

Быстрая проверка токена вручную:
curl -s -o /dev/null -w "%{http_code}" https://api.anthropic.com/v1/messages \
-H "authorization: Bearer $TOKEN" -H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: oauth-2025-04-20" -H "content-type: application/json" \
-d '{"model":"claude-haiku-4-5-20251001","max_tokens":1,"messages":[{"role":"user","content":"hi"}]}'

200 = живой, 401 = бракованный.

Ошибка скрыта в логах. По умолчанию экшен маскирует вывод SDK («full output hidden for security») — настоящей ошибки не видно. На время отладки добавить show_full_output: true (репо приватный — в логи видит только команда), потом убрать.

error_max_turns. Дефолт --max-turns 10 мал: на большом PR Claude сжигает ходы на чтении сгенерённого/iOS-кода и не успевает написать ревью. Подняли до 50 + в промпте велели пропускать сгенерённые/платформенные файлы (tvolkova_client, **/generated/**, *.g.dart, *.pbxproj, локфайлы и т.п.).

Ревью отрабатывало, но не попадало в PR — результат лежал только в логе прогона.

Чтобы публиковалось:
track_progress: true → сводный комментарий;
в --allowedTools добавить mcp__github_inline_comment__create_inline_comment → построчные комментарии;
в промпте: «постить только через GitHub-комментарии, не выводить ревью текстом».

--allowedTools — это allow-list, так что туда же Bash(gh pr comm
  • 🔥 4
  • ❤ 2
  • 👍 1
More from @dartway_dev_ru
  1. Sep 28, 2026Новости DartWay Я принял решение полностью отказаться от Serverpod, чтобы снять все ограни…
  2. Sep 27, 2026Dart MCP: что реально даёт ИИ-агенту MCP-сервер встроен в Dart SDK с июля 2025 года. Подкл…
  3. Sep 25, 2026Serverpod 4: обзор с комментариями Вышел Serverpod 4, а вместе с ним App Studio. Сам я с S…
  4. Sep 4, 2026Flutter 3.47: что сломается и что делать до ноября Записал разбор — первый выпуск новой се…
  5. Sep 3, 2026Post #161
  6. Sep 3, 2026Релиз DartWay, 3 сентября За 10 дней: 47 пул-реквестов, закрыто 39 issue, 7 500 строк кода…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →