1. Субагент находит то, что пропустил автор
Теперь Тёма проделывает всё сам и начисто — от файла-роли до выложенной обратно игры. Соберём по шагам, чтобы повторить один в один.
Шаг 1. Кладём субагента-роль в проект. Один файл, как навык был файлом, — .claude/agents/reviewer.md:
---
name: reviewer
description: Ревьюит игру на баги и шероховатости. Применять, когда просят посмотреть готовую вещь свежим взглядом.
---
# Ревьюер
Открой игру и её код впервые, без допущений «как задумано».
Найди: баги, неудобное управление, шероховатости.
Выдай список находок по пунктам, у каждой — приоритет (high / medium / low)
и точное место (файл, что именно не так).
Не правь код сам — только отчёт.
Шаг 2. Проверяем, что работник встал — набираем в строке собачку:
@
reviewer Ревьюит игру на баги и шероховатости… ← на месте
Виден по собачке — значит эта сессия его знает, можно работать. Файл положили, и через пару секунд работник доступен: перезапускать разговор не нужно.
Если в списке пусто — почти всегда дело в том, что папки .claude/agents/ не было, когда мы начинали разговор. Тогда перезапускаем, сохранив его:
claude --continue
Шаг 3. Пишем бриф — короткое ТЗ проверяющему, REVIEW_BRIEF, чтобы он не растёкся по всей игре:
# REVIEW_BRIEF — Змейка v2
ПРОВЕРИТЬ:
- поведение хвоста на резком повороте (что-то дёргается)
- управление: нет ли задержки на поворотах
- шероховатости, заметные игроку после релиза
МОЖНО ПРЕДЛОЖИТЬ: улучшения геймплея
НЕ ТРОГАТЬ: основную механику, базовый визуальный стиль
Шаг 4. Делегируем — одной фразой, и убираем руки с клавиатуры:
Пусть reviewer разберёт мою Змейку по REVIEW_BRIEF и найдёт, что улучшить.
Тёма откидывается и смотрит, как работа идёт без него. Ревьюер сам открывает файлы, сам гоняет игру. Несколько секунд — и в чат падает не расплывчатое «местами не очень», а разбор по пунктам:
РЕВЬЮ ЗМЕЙКИ v2 — по REVIEW_BRIEF
[HIGH] Баг хвоста. game/index.html, функция checkCollision():
проверка столкновения выполняется в тот кадр, когда хвост ещё
не уехал, → заход на клетку уходящего хвоста даёт внезапную
«смерть», хотя клетка в этот же тик освобождается.
Проявляется на длинной змее + плотный разворот.
[MEDIUM] Управление. Поворот применяется на следующем тике, а не сразу —
отсюда ощущение задержки. Можно применять ввод в тот же кадр.
[MEDIUM] Старт слишком быстрый: на первых секундах игрок не успевает
сориентироваться.
[LOW] Еда сливается с фоном на тёмных клетках — можно подсветить.
[LOW] Нет счётчика рекорда — мелкая, но приятная деталь.
Механику и стиль не трогал (по брифу).
Тёма ведёт глазами сверху вниз — и на первой же строчке замирает.
— Да ладно.
Первым пунктом, [HIGH], точное место: game/index.html, checkCollision(), хвост на резком повороте. Тот самый баг. Не «что-то дёргается» — файл, функция, причина. Та самая дыра, над которой Саня утром сидел и кивал «всё корректно».
А придира, которая открыла его Змейку впервые в жизни, ткнула в неё сразу. Первым пунктом. За несколько секунд.
— И ведь висел в выложенной, — выдыхает Тёма, и его слегка коробит. — Я ж его неделю назад гордо в галерею кинул. «Готово». А там вон что.
Тёма откидывается и пару секунд молчит. Лёха недавно толковал ему про свежий глаз — складно, по полочкам, он кивал и думал «ну да, логично». А сейчас это уже не лекция. Сейчас это его баг, его игра, и кто-то посторонний ткнул в дыру, мимо которой он сам прошёл полдня.
— Другие могли его поймать, — говорит он тихо. — Открыли бы с телефона — и привет. А Саня сто раз мимо прошёл. Привык, что «хвост иногда чудит, ну и ладно».
Он перечитывает строчку ещё раз — и не злится, как утром, а что-то вроде уважения проскакивает.
— Не потому что она умнее Сани, — добавляет он сам себе. — Потому что свежая. Саня полдня в упор не видел — а она глянула впервые и ткнула пальцем.
2. Что берём в работу, что отклоняем
Кроме бага ревьюер принёс ещё горсть улучшений по геймплею. Поворот сделать отзывчивее. Скорость на старте чуть сбавить. Подсветить еду поярче. Добавить счётчик рекорда.
Первый порыв — старый, школярский: раз умный ревьюер насоветовал, надо брать всё, он же лучше знает. Тёма уже тянется ответить Сане «делай всё подряд» — и осаживает себя.
— Не-не, — говорит он вслух. — Список советов — это ещё не список приказов.
Решать, что ляжет в Змейку, — не ревьюеру, а ему. И он идёт по пунктам как тот, кто взвешивает каждый.
— Баг хвоста — чиню, без вопросов, стыдная дыра. Поворот отзывчивее — да, самого давно бесило, беру. Скорость на старте сбавить… — он мысленно прикидывает, — ага, тоже беру. А вот «еду поярче» — стоп.
Тёма смотрит на свою еду и понимает, что ему и так нравится.
— Не баг это. Вкусовщина. У ревьюера свой вкус, у меня свой. Заворачиваю. Счётчик рекорда — мысль хорошая, но не сегодня, отложим.
Что-то берёт, что-то откладывает, что-то заворачивает — и впервые делает это с ощущением права. Раньше он выполнял чужие хотелки: сказали — сделал. А сейчас он тот, кто решает, что вообще будет сделано.
Выбрал — отдаёт в работу. Главную дыру первой, прямо словами, как Лёха учил поручать:
Саня, почини баг хвоста в Змейке, который нашёл ревьюер.
---
[HIGH] Баг хвоста. game/index.html, функция checkCollision():
проверка столкновения выполняется в тот кадр, когда хвост ещё
не уехал, → заход на клетку уходящего хвоста даёт внезапную
«смерть», хотя клетка в этот же тик освобождается.
Проявляется на длинной змее + плотный разворот.
Агент уходит в код Змейки и правит игровую логику — ту самую, в которой Саня утром сидел и не разглядел.
— «Готово, поправил», — читает Тёма ответ и хмыкает. — Ну-ну. Поправил он. Сейчас проверим.
Верить на слово он не собирается. Открывает игру локально, разгоняет змею до приличной длины — той самой, на которой утром ловил дёрганье, — и нарочно делает тот резкий разворот.
Секунда. Хвост проходит поворот.
Чисто. Никакого подёргивания. Ещё раз, ещё резче — чисто. Бага нет.
— Во-о-от, — тянет Тёма с удовольствием. — Другое дело. Не «агент сказал, что починил» — я своими руками лично проверил.
3. Своя доработка поверх находок
Поворот и старт Тёма докидывает Сане тем же манером — словами, одной задачей. А потом добавляет то, чего в списке придиры не было вовсе:
— А это уже от себя, — говорит он. — Придира про звук молчала. А я хочу.
Добавь в Змейку озвучку: короткий звук на поедание еды и фоновую музыку (web audio).
Саня применяет выбранные правки и подключает Web Audio. Управление стало отзывчивее, старт мягче. А потом Тёма открывает игру, ведёт змею к первому яблоку — и динамики выдают короткий приятный хрум. Фоном заводится бодрая музычка.
— О! — Тёма невольно расплывается. — Заиграло.
Он гоняет змею по экрану просто чтобы послушать. Хрум, хрум на каждое яблоко. То самое, что он хотел утром, для души. Придира сделала Змейку чище, а это — его, со своим голосом.
4. Проверяем и сдаём результат
Тёма отправляет обновлённую Змейку обратно в галерею. Туда же, где она и лежала, — только теперь это другая Змейка. Без странного бага. С живым управлением. Со звуком.
Он смотрит на неё в галерее и вдруг ловит то смутное, что вертелось ещё утром.
— Так стоп, — говорит он сам себе. — Я ж неделю назад думал, что закрыл её. Выложил — всё, забыл, перешёл к следующей.
А она, оказывается, не закрылась. В неё можно было вернуться — найти дыру, починить, добавить звука, глянуть чужими глазами.
— Получается, выложить — это не конец, — медленно тянет он. — Это… середина какая-то. Сделал 90% работы, а впереди вторые 90% работы.
Он прокручивает свою витрину взглядом — Змейка, лендинг, игрушки — и впервые видит их не как стопку готовых-и-забытых поделок. Это вещи, которые живут. И их кто-то ведёт. Он.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ