Перейти к тексту

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 → красный тест → зелёный → ревью по двум осям → коммит → чистый контекст».

Проверь себя

Источники

  • 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 и может содержать неточности.