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.
Проверь себя
Вы закоммитили в dev свой эксперимент и хотите получить следующий чекпоинт, не потеряв этот коммит. Что выбрать?
npm run reset
npm run cherry-pick
npm run pull
npm run db:seed
cherry-pick
кладёт коммит чекпоинта поверх вашей работы.
reset
переписывает ветку и уносит ваши коммиты,
pull
подтягивает исправления курса, а не чекпоинт,
db:seed
трогает только базу.
После npm run reset главная страница Cadence открывается, а страница курса падает с no such column: notes. Что сделать?
npm run reset
с тем же чекпоинтом
node_modules
и выполнить
npm install
npm run db:migrate
, чтобы база догнала схему
drizzle/
reset
меняет только код. Чекпоинт добавил колонку в
schema.ts
и миграцию в
drizzle/
, а
data.db
о ней не знает.
db:migrate
применяет недостающую миграцию; удаление
drizzle/
уничтожит историю миграций.
Зачем перед первым npm run reset создавать ветку dev?
npm run reset
откажется работать
reset
переписывает текущую ветку; на
dev
ваша работа отделена от
main
, и
main
остаётся чистой копией курса
dev
npm run db:migrate
работает только на
dev
main
от этого не защищена. Чекпоинты лежат в ветке курса
live-run-through
, а база мигрирует на любой ветке.
Источники
- Anthropic, Settings files and precedence
- AI Hero, ai-hero-dev/ai-coding-crash-course — учебный репозиторий, команды проверены на стенде
- По мотивам AI Coding Crash Course, AI Hero
Текст подготовлен с помощью LLM и может содержать неточности.