✻ Claude Code по-русски
🎧 Аудиокурс
🎧 Озвучка этой страницы готовится.

#Итоговый проект Продвинутого уровня: добавьте ревью в CI, которым может пользоваться команда

Продвинутый уровень · Итоговый проект · от 30 до 60 минут плюс время запусков · Нужно: семь уроков Продвинутого уровня или соответствующие навыки · Сверено с Claude Code v2.1.285 (stable) 09.10.2026

Это задание объединяет весь Продвинутый уровень в новой копии шаблона для практики, которую вы в конце разбираете. Разбора примера здесь нет: в описании сказано, что нужно команде, а как это построить, решаете вы. Итоги Продвинутого уровня — это список того, что вы умеете к концу уровня. Проверка читает то, что вы закоммитили, и два файла, которые вы сохраняете в .practice/, а остальное из итогов вы отмечаете сами в разделе Чего не видит проверка.

#Что понадобится

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. Две сессии одновременно (урок 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.

#Проверка

Проект завершён, когда выполнено всё это:

Запустите npm run check -- a-capstone в этой копии. Для каждого непройденного пункта будет выведено, что исправить. Проверка запускает ваш скрипт с заглушкой вместо claude, так что ваш лимит не расходуется, и читает workflow из истории, так что проходит и до, и после разборки.

#Чего не видит проверка

Эти части итогов Продвинутого уровня проверка не смотрит. Отметьте их сами, честно:

Когда отмечены все пункты на этой странице, вы показали итоги Продвинутого уровня и прошли последний из трёх уровней руководства. Остался один шаг — разборка ниже.

Если этот уровень вам помог, поставьте звезду оригинальному репозиторию — так руководство найдут другие разработчики.

#Разборка

Когда проверка пройдёт, разберите всё: это обязательно.

Внимание

Пока вы не разобрали копию, в её секретах лежат действующие учётные данные. Удаление секрета не делает недействительными учётные данные, которые в нём хранились (Uninstall). На 09.10.2026 токен из claude setup-token действует один год (Authentication), и удаление секрета его не отзывает.

  1. Удалите workflow командой git rm .github/workflows/claude-review.yml, затем закоммитьте и запушьте. Без workflow Claude Code GitHub Action больше не запускается (Uninstall).
  2. Удалите секрет: gh secret delete ANTHROPIC_API_KEY или gh secret delete CLAUDE_CODE_OAUTH_TOKEN (gh secret delete). gh secret list его больше не показывает (gh secret list).
  3. Если использовался 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 · уроки Продвинутого уровня, где для каждого шага указаны официальные страницы.

← Ограничьте автономные запуски · Оглавление Продвинутого уровня · За пределами руководства → · Застряли на итоговом проекте?