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

Claude Code: работа с coding-агентом1. Перед стартом

Как устроены упражнения: Cadence, чекпоинты и миграции

Засчитывается, когда отвечены все вопросы квиза

У любого курса по коду есть одна беда: расхождение. Вы сделали в уроке 3 правку, которой не было у автора, и к уроку 6 ваш репозиторий уже не похож на тот, что в тексте. С агентом расхождение копится быстрее: он правит много файлов за раз.

Зачем это нужно

Все Lab-ы курса идут в одном репозитории — ai-hero-dev/ai-coding-crash-course. Внутри него — Cadence, учебная платформа на TypeScript и Node: курсы, уроки, квизы, покупки. Это не игрушечный пример, а приложение среднего размера, на котором агенту есть где ошибиться. Чтобы каждый Lab начинался с известного состояния, в репозиторий встроены инструменты чекпоинтов. Разберитесь с ними до первого Lab-а — это сэкономит часы.

Как это устроено

Чекпоинты и три команды

У каждого упражнения есть чекпоинт — коммит в ветке курса live-run-through. Три npm-скрипта из package.json переносят его к вам:

Команда Что происходит с вашей работой
npm run reset Заменяет её: ветка откатывается к чекпоинту, коммиты уходят
npm run cherry-pick Дополняет её: коммит чекпоинта ложится поверх ваших
npm run pull Обновляет вокруг неё: подтягивает исправления курса

Без аргумента reset и cherry-pick показывают интерактивный список чекпоинтов с поиском. Имя чекпоинта можно передать сразу: npm run reset try-the-cli.

reset переписывает ту ветку, на которой вы стоите, — даже main: защищена от него только сама ветка чекпоинтов. Поэтому заведите отдельную ветку для учёбы — git checkout -b dev — и делайте всё в ней; main останется чистой копией курса.

Если вы не уверены в разрешении merge-конфликтов, пользуйтесь только reset. Но помните: reset переписывает всю ветку, а не только файлы упражнения. Незакоммиченная работа пропадёт.

Код и база — разные вещи

Cadence хранит данные в SQLite, в файле data.db в корне репозитория. Его форму описывает код в app/db/schema.ts, а история изменений лежит SQL-файлами в папке drizzle/. Код и база меняются раздельно:

  • npm run db:generate пишет новую миграцию в drizzle/ по изменённой схеме;
  • npm run db:migrate применяет к data.db миграции, которых там ещё нет;
  • npm run db:seed стирает таблицы и заново заполняет их тестовыми данными.

reset трогает только код. Если чекпоинт меняет schema.ts, база отстаёт, и страница падает с ошибкой вроде SqliteError: no such column. Лечится одной командой — npm run db:migrate. База учебная, её не жалко: если запутались, npm run db:seed вернёт исходные данные.

Чистый конфиг агента

Если вы уже пробовали агентов, у вас, скорее всего, накопились настройки: MCP-серверы, skills, плагины, глобальный ~/.claude/CLAUDE.md. Курс советует пройти его с чистого листа — так упражнения не будут смешиваться с вашими старыми правилами. У Claude Code настройки пользователя лежат в ~/.claude/settings.json, а свои данные — аккаунт, MCP-серверы, состояние проектов — он держит в ~/.claude.json.

Не удаляйте их руками. Попросите агента самого перенести конфиг в резервную папку и написать инструкцию по восстановлению: агент знает, где лежат его настройки, лучше вас. Вход в аккаунт и код проекта при этом трогать не нужно.

Практика

В клоне репозитория на ветке dev выполните:

npm run reset try-the-cli

Выберите Reset current branch. Откройте package.json: поле description сменилось с "An awesome horse platform" на "An awesome course platform". Верните ветку командой npm run reset main — строка вернётся обратно. Если строки меняются туда и обратно, инструменты работают.

Подводные камни

  • reset на main не остановит вас ошибкой: он перепишет main, предупредив только, сколько коммитов пропадёт. Перед командой проверьте ветку: git branch --show-current.
  • Страница курса падает после reset — схема ушла вперёд базы; выполните npm run db:migrate.
  • Скрипты запускаются через npm, а не pnpm: в репозитории лежит package-lock.json.

Вывод: перед каждым упражнением приводите репозиторий к чекпоинту через reset, а после смены схемы — запускайте db:migrate.

Проверь себя

Источники

Текст подготовлен с помощью LLM и может содержать неточности.