Claude Code: работа с coding-агентом6. Большие задачи: спека и тикеты
Выполнение тикета: implement, TDD и review
Засчитывается, когда отвечены все вопросы квиза
Спека написана, тикеты заведены. Самое соблазнительное сейчас — открыть сессию и написать «сделай первый тикет». Агент сделает. Вопрос в том, чем вы докажете себе, что сделано то, что нужно, и так, как принято в проекте.
Зачем это нужно
Агент работает тем лучше, чем больше у него обратной связи. Голый промпт «реализуй» даёт ему одну проверку — ваше мнение в конце. Если же каждый шаг упирается в тест, typecheck и ревью, агент сам видит свои ошибки и исправляет их до того, как вы откроете diff.
Поэтому выполнение тикета — это не один промпт, а маленький процесс. В учебном проекте Cadence его собирают три skill-а: /implement, /tdd и /code-review. Это не встроенные команды Claude Code, а обычные project skills, которые лежат в репозитории курса. Их можно прочитать, поправить и унести в свой проект.
Как это устроено
/implement — дирижёр. Он почти ничего не делает сам:
- берёт тикет (ссылку на issue) аргументом;
- пишет код через
/tddтам, где это возможно; - регулярно гоняет typecheck и отдельные тестовые файлы, полный набор тестов — один раз в конце;
- отдаёт результат на
/code-review; - коммитит в текущую ветку.
/tdd — источник качества. Сначала тест, потом реализация, и тест сразу говорит агенту, попал он или нет. Главная идея skill-а — seam: публичная граница, на которой тестируют поведение. Прежде чем писать тесты, агент перечисляет seams и подтверждает их с вами. Без подтверждённого seam тест не пишется. Так усилия уходят на критичные пути, а не на каждый крайний случай.
Ещё один антипаттерн, который skill запрещает явно, — тавтологический тест: expect(add(a, b)).toBe(a + b). Он пересчитывает ожидаемое значение тем же способом, что и код, и поэтому не может с кодом разойтись. Ожидаемое значение берут из независимого источника: литерала, разобранного примера, спеки.
/code-review — второй проход. Skill смотрит diff между HEAD и точкой, которую вы указали, и запускает две проверки в параллельных subagent-ах:
- Standards — соответствует ли код задокументированным стандартам репозитория;
- Spec — делает ли код то, что просил тикет или спека: чего не хватает, что добавлено сверх задачи, что реализовано, но похоже на ошибку.
Оси разделены не случайно. Код может соблюдать все соглашения и делать не то — или делать ровно то, что просили, ломая соглашения. В одном отчёте одна проблема заслонила бы другую.
Между тикетами — чистый контекст. Спека и тикеты лежат в трекере, а не в разговоре, поэтому история сессии после планирования — просто многословная копия документов. /compact сохранит часть исследованного кода, но /clear дешевле и начинает следующую сессию с полным запасом smart zone. Пока свободного контекста хватает на следующий тикет, можно и продолжить в той же сессии.
Практика
В Cadence откройте .agents/skills/implement/SKILL.md и найдите строку, которая отправляет работу на ревью. Затем запустите первый незаблокированный тикет:
/implement https://github.com/<you>/ai-coding-crash-course/issues/5
Обратите внимание на первый вопрос агента: он предложит seams для тестов и подождёт вашего ответа. Это ваш момент сказать «тестируем на уровне функции агрегации, а не UI».
Чтобы не подтверждать каждую команду вручную, переключитесь в auto mode (Shift+Tab, пока в статусной строке не появится auto mode on): отдельная модель-классификатор проверяет действия вместо вас и блокирует рискованные.
Подводные камни
- Имя
/code-reviewзанято. В Claude Code есть встроенный bundled skill/code-review. Project skill с тем же именем его заменяет, но алиас/reviewпо-прежнему запускает встроенный. Если вызвали/reviewи получили «не тот» отчёт — дело в этом. - Ревью — не замена вам. Закрывайте тикет только после того, как прочитали оба отчёта: стандарты не нарушены, требования тикета выполнены, лишнего не добавлено.
/clearне трогает трекер. Он очищает разговор, а спека и тикеты остаются в issues — ради этого их туда и выносили.
Вывод: тикет выполняет не промпт, а цикл «seams → красный тест → зелёный → ревью по двум осям → коммит → чистый контекст».
Проверь себя
Агент закончил первый тикет, ревью прошло, тикет закрыт. В сессии около 90 тысяч токенов, следующий тикет касается другой части кода. Что разумнее всего сделать?
/clear
и начать следующий тикет в чистом контексте
/compact
, чтобы сохранить историю планирования
/clear
дешевле
/compact
и даёт следующей сессии полный запас контекста, а агент прочитает тикет по ссылке сам.
Какой тест skill /tdd считает тавтологическим?
expect(add(a, b)).toBe(a + b)
проходит по построению и не может разойтись с кодом. Ожидаемое значение должно приходить из независимого источника: литерала, разобранного примера или спеки.
Код соблюдает все соглашения репозитория, но не реализует одно из требований тикета. Какая ось ревью это поймает?
В проекте есть свой skill code-review. Вы набираете /review. Что запустится?
code-review
/code-review
/code-review
запустит ваш skill, а
/review
— встроенный.
Источники
- Anthropic, Extend Claude with skills — «Resolve skills that share a name»
- Anthropic, Commands —
/clear,/compact,/code-review,/review - Anthropic, Choose a permission mode — auto mode и
Shift+Tab - По мотивам AI Coding Crash Course, AI Hero: «Executing Your Tickets»
Текст подготовлен с помощью LLM и может содержать неточности.