#Итоговый проект Продвинутого уровня: добавьте ревью в CI, которым может пользоваться команда
Продвинутый уровень · Итоговый проект · от 30 до 60 минут плюс время запусков · Нужно: семь уроков Продвинутого уровня или соответствующие навыки · Сверено с Claude Code v2.1.285 (stable) 09.10.2026
Это задание объединяет весь Продвинутый уровень в новой копии шаблона для практики, которую вы в конце разбираете. Разбора примера здесь нет: в описании сказано, что нужно команде, а как это построить, решаете вы. Итоги Продвинутого уровня — это список того, что вы умеете к концу уровня. Проверка читает то, что вы закоммитили, и два файла, которые вы сохраняете в .practice/, а остальное из итогов вы отмечаете сами в разделе Чего не видит проверка.
#Что понадобится
- Node.js LTS, git,
jqи GitHub CLI с входом черезgh auth login. - Новая приватная копия шаблона для практики, созданная для итогового проекта и разбираемая после него. Создайте её так:
gh repo create claude-capstone --template wesammustafa/claude-code-practice --private --clone
cd claude-capstone
--template создаёт новый репозиторий на основе шаблона, а --clone клонирует его (gh repo create). Проверка запускается в этой копии, без --dir.
- В копии один раз запустите claude, примите диалог доверия и выйдите. В папке, которой вы не доверились, claude --worktree завершается с ошибкой (Start Claude in a worktree).
- Учётные данные для CI: API-ключ Claude Console, созданный для итогового проекта (рекомендуется, потому что при разборке он удаляется), или — на плане Pro, Max, Team или Enterprise — токен из claude setup-token (Manual setup).
- На Pro — динамические workflow, включённые в строке Dynamic workflows в /config (Orchestrate subagents at scale with dynamic workflows).
- macOS, Linux или WSL 2: скрипт ревью написан на bash.
- Расход лимита: большой. Две сессии одновременно, динамический workflow, запуск из скрипта и запуск в CI. Каждый запуск в CI расходует минуты GitHub Actions и токены, которые при API-ключе оплачиваются с вашего аккаунта Console, а при токене подписки берутся из вашего плана (Manage costs). Экономный вариант: запускайте каждую сессию с --model sonnet (Model aliases), добавьте --model sonnet в скрипт и в claude_args (Pass CLI arguments), а динамический workflow в части 4 пусть проверяет только два файла из src/.
#Задание
Команда хочет, чтобы Claude проверял каждый пул-реквест в CI одинаково на всех машинах и чтобы ничто из того, что он запускает, не оставалось без ограничений. Описание задачи лежит в capstone/advanced-brief.md в вашей копии.
Постройте каждую часть так, как учил соответствующий урок:
- Две сессии одновременно (урок 1). Добавьте
.claude/worktrees/в закоммиченный.gitignoreи запушьтеmain: новые worktree ответвляются от ветки по умолчанию удалённого репозитория (Choose the base branch). Затем в двух терминалах одновременно дважды запуститеclaude --worktree <name>, каждый раз с другим именем (Reuse a worktree name): одна сессия строит часть 2, другая — часть 3, и каждая коммитит в свою ветку. Когда обе закоммитили и оба worktree ещё существуют, сохраните их состояние из основного checkout:
mkdir -p .practice && git worktree list --porcelain > .practice/a-capstone-worktrees.txt
Затем слейте обе ветки в main через git merge, а не git merge --squash, и удалите оба worktree.
2. Скрипт ревью (урок 4): scripts/review-staged.sh по критериям урока 4. Он подаёт подготовленный diff в один вызов claude -p с JSON-выводом и режимом dontAsk (dontAsk mode), заранее одобряет только Read, Grep и Glob и ограничивает число ходов 10 или меньше (CLI flags). После слияний подготовьте в основном checkout изменение в одну строку, запустите скрипт один раз, прочитайте ревью и закоммитьте изменение:
mkdir -p .practice && scripts/review-staged.sh .practice/a-capstone-run.json
Поле total_cost_usd в сохранённом JSON оценивает, сколько тратит одно ревью. Как и со срезом из урока 7, это оценка на стороне клиента, а не ваш счёт (Track cost and usage).
3. Плагин команды (урок 6): маркетплейс в team-marketplace/, который перечисляет один плагин по относительному пути; сам плагин лежит в собственной папке внутри team-marketplace/, как в примере из урока 6, и в нём есть хотя бы один скилл или агент. Закоммиченный .claude/settings.json регистрирует маркетплейс по относительному пути и включает плагин (Require plugins per repository). Обе валидации проходят: claude plugin validate на маркетплейсе и на папке плагина с --strict (plugin validate). Пример из урока — хорошее начало; его settings.snippet.json к тому же запрещает читать .env, а в этой копии такого правила пока нет. Проверяйте плагин только после слияний: относительный путь разрешается от основного checkout репозитория даже из worktree (Require plugins per repository), поэтому сессия части 3 загрузить его пока не может.
4. Сохранённый динамический workflow (уроки 2 и 3): после слияний из сессии в основном checkout попросите workflow, который проверяет каждый файл в src/ и поручает второму агенту перепроверять каждую находку. Пока он работает, /workflows показывает расход токенов каждым агентом (Cost). Сохраните его в проект: сохранение на уровне проекта записывает в ближайшую существующую папку .claude/workflows/ между рабочей папкой сессии и корнем репозитория или, если такой ещё нет, в .claude/workflows/ в корне (Save the workflow for reuse). Закоммитьте его.
5. Ревью в CI с лимитами (уроки 5 и 7): .github/workflows/claude-review.yml запускается на pull_request (Events that trigger workflows) и использует anthropics/claude-code-action (Anthropic) с prompt, который просит проверить изменения пул-реквеста (Action parameters). Держите его в лимитах урока 5:
- действие закреплено на теге релиза или полном SHA коммита (Workflow syntax);
- учётные данные берутся из секрета репозитория через соответствующий параметр, anthropic_api_key или claude_code_oauth_token (Manual setup);
- токен задания только для чтения: в permissions нет прав на запись, кроме id-token: write (Workflow syntax), а github_token равен собственному GITHUB_TOKEN задания, так что Claude действует с этим токеном, а не с токеном GitHub-приложения Claude (Action parameters);
- в claude_args — --max-turns не больше 10 и список --allowedTools без неограниченного Bash;
- timeout-minutes не больше 30 (Workflow syntax).
С промптом в виде простого текста у Claude нет оболочки, пока вы не разрешите нужные ему команды (Run on a schedule). Чтобы он увидел изменение, сделайте checkout полной истории, как это делает .github/workflows/progress.yml из шаблона, и разрешите git diff правилом Bash(git diff *), которое совпадает только с командами git diff (Wildcard patterns). Как промпт среза в уроке 7 делал для npm test, попросите в prompt запускать git diff отдельной командой: правило должно совпадать с каждой командой в цепочке (Compound commands).
Задайте display_report: true, как в уроке 5, чтобы ревью Claude появлялось на странице сводки запуска (action.yml at v1.0.237, Adding a job summary). Действие советует включать его, только когда входным данным можно доверять, как здесь: пул-реквесты ваши, в приватной копии.
Добавьте учётные данные как секрет репозитория, как во втором шаге Manual setup из документации: выполните gh secret set ANTHROPIC_API_KEY или gh secret set CLAUDE_CODE_OAUTH_TOKEN и вставьте значение, когда команда попросит (gh secret set). Никогда не коммитьте учётные данные; храните их в секрете репозитория (Protect your credentials). Остальные шаги Manual setup пропустите: действие аутентифицируется как GitHub-приложение Claude, только если github_token не задан (Action parameters), а ваш workflow ревью заменяет его claude.yml.
Закоммитьте workflow в main и запушьте. Затем запушьте изменение в одну строку в новой ветке и откройте пул-реквест. Прочитайте ревью Claude на странице сводки запуска, как в уроке 5, и слейте пул-реквест сами.
Закончите на main: слитый пул-реквест подтянут, всё закоммичено, npm test проходит.
Перечень сверен с критериями включения 09.10.2026.
#Проверка
Проект завершён, когда выполнено всё это:
- Закоммиченный
.gitignoreигнорирует.claude/worktrees/, но не остальное содержимое.claude/. -
.practice/a-capstone-worktrees.txtперечисляет два worktree в.claude/worktrees/, чьи коммиты разошлись друг с другом, и оба слиты в вашу ветку. - У закоммиченного скрипта в
.claude/workflows/первая инструкция — литералexport const metaсnameиdescription, и он запускает субагентов черезagent(). -
scripts/review-staged.shзакоммичен и исполняем. - Его вызов
claude -pзапрашивает JSON, работает в режимеdontAsk, заранее одобряет толькоRead,GrepиGlob, ограничивает число ходов 10 или меньше, а промпт стоит сразу после-p. - Он подаёт на вход подготовленный diff, сохраняет JSON туда, куда указывает аргумент, печатает результат, завершается с ненулевым кодом при неудачном запуске и не вызывает Claude, когда ничего не подготовлено.
-
.practice/a-capstone-run.jsonсодержит запуск, успешно завершившийся в пределах вашего ограничения. - Закоммиченный workflow запускает
anthropics/claude-code-actionнаpull_request, закреплённый на теге релиза или полном SHA коммита, в режиме автоматизации, с учётными данными из секрета и без них в файле, с токеном задания только для чтения (вpermissionsнет прав на запись, кромеid-token: write, аgithub_tokenравен собственному токену задания), с--max-turnsне больше 10, списком--allowedToolsбез неограниченного Bash иtimeout-minutesне больше 30. - Ни один API-ключ или токен Claude не закоммичен — ни в
HEAD, ни в коммите, из которого проверка читает ваш workflow. - Закоммиченный маркетплейс команды перечисляет плагин по относительному пути, и имя записи совпадает с
nameвplugin.jsonплагина. - Закоммиченный
.claude/settings.jsonрегистрирует этот маркетплейс по относительному пути и включает плагин. -
npm testпроходит, аgit status --porcelainничего не выводит.
Запустите npm run check -- a-capstone в этой копии. Для каждого непройденного пункта будет выведено, что исправить. Проверка запускает ваш скрипт с заглушкой вместо claude, так что ваш лимит не расходуется, и читает workflow из истории, так что проходит и до, и после разборки.
#Чего не видит проверка
Эти части итогов Продвинутого уровня проверка не смотрит. Отметьте их сами, честно:
- Я запускал обе сессии worktree одновременно, и ни одна не видела незакоммиченных правок другой.
- Я могу провести пофайловое ревью с перепроверкой каждой находки вторым агентом через вопросы урока 2 и объяснить, почему они приводят к динамическому workflow, а не к субагентам в одном разговоре.
- Я могу сказать, когда запуску без присмотра нужна песочница из урока 7 и нужна ли она моему скрипту ревью и workflow в CI.
- Я видел запуск CI на своём пул-реквесте и прочитал ревью Claude на странице сводки, прежде чем сливать.
- Новая сессия в основном checkout после слияний загрузила плагин моей команды без команды установки.
- Прежде чем включать CI, я по
total_cost_usdлокального запуска, как в уроке 7 по срезу, оценил, сколько тратит одно ревью в CI, и посмотрел в/workflows, сколько токенов израсходовало пофайловое ревью.
Когда отмечены все пункты на этой странице, вы показали итоги Продвинутого уровня и прошли последний из трёх уровней руководства. Остался один шаг — разборка ниже.
Если этот уровень вам помог, поставьте звезду оригинальному репозиторию — так руководство найдут другие разработчики.
#Разборка
Когда проверка пройдёт, разберите всё: это обязательно.
Внимание
Пока вы не разобрали копию, в её секретах лежат действующие учётные данные. Удаление секрета не делает недействительными учётные данные, которые в нём хранились (Uninstall). На 09.10.2026 токен из claude setup-token действует один год (Authentication), и удаление секрета его не отзывает.
- Удалите workflow командой
git rm .github/workflows/claude-review.yml, затем закоммитьте и запушьте. Без workflow Claude Code GitHub Action больше не запускается (Uninstall). - Удалите секрет:
gh secret delete ANTHROPIC_API_KEYилиgh secret delete CLAUDE_CODE_OAUTH_TOKEN(gh secret delete).gh secret listего больше не показывает (gh secret list). - Если использовался API-ключ, удалите его на странице API-ключей Claude Console.
Ещё раз запустите npm run check -- a-capstone: проверка по-прежнему проходит.
Источники: Run parallel sessions with worktrees · Orchestrate subagents at scale with dynamic workflows · Track cost and usage · Choose a permission mode · CLI reference · Model configuration · Configure permissions · Plugin commands reference · Manage Claude Code plugins for your organization · Claude Code GitHub Actions · Authentication · claude-code-action v1.0.237: action.yml · GitHub: Events that trigger workflows, Workflow syntax, Workflow commands · Руководство GitHub CLI: gh repo create, gh secret set, gh secret delete, gh secret list · уроки Продвинутого уровня, где для каждого шага указаны официальные страницы.
← Ограничьте автономные запуски · Оглавление Продвинутого уровня · За пределами руководства → · Застряли на итоговом проекте?