Прежде чем отдать агенту первую задачу, стоит ответить на неудобный вопрос: относительно чего вы будете измерять его результат. Без явной точки отсчёта "агент что-то сделал" и "агент сделал то, что нужно" неотличимы. Git и есть эта точка отсчёта, и заводят её до задачи, а не после.
Наивный ход - сразу дать задачу поверх текущего состояния рабочего дерева, какое есть. В нём часто уже лежат ваши незакоммиченные правки, черновой эксперимент, недособранная ветка. Кажется, что это неважно: агент сделает своё, а разберёмся потом. Логика понятна: git всегда под рукой, откатить можно в любой момент, значит, порядок можно навести и после. Эта отсрочка и есть ловушка - она переносит наведение порядка на момент, когда навести его уже труднее всего.
Ломается это в момент, когда нужно понять, что именно изменил агент. Если старт был грязным, его правки перемешаны с вашими, и diff показывает сумму, а не вклад агента. Отделить одно от другого задним числом трудно и рискованно: легко откатить лишнее или оставить чужое. Грязный старт превращает измеримый результат в клубок. Особенно обидно это на первой сессии, когда вы ещё не знаете почерк агента и не можете на глаз сказать, какая строка в diff чья.
Профессиональный ход - завести baseline. Добейтесь чистого git status, зафиксируйте исходное состояние коммитом и убедитесь, что build и test запускаются без агента и дают известный результат. Для этого достаточно нескольких команд: посмотреть статус, отвести отдельную ветку под работу с агентом, прогнать тесты и сборку до задачи. Ни одна из этих команд не относится к агенту - в этом и смысл: baseline снимают в среде без него, чтобы точка отсчёта была честной.
Смысл этой подготовки один: после неё любой результат агента читается как diff относительно известного состояния. Вы видите ровно то, что добавил агент, и знаете, что тесты и сборка были зелёными до него, - значит, красный результат после задачи говорит о правке агента, а не о фоновой поломке. Известная исходная точка превращает проверку из догадки в сравнение. Это различение дороже, чем кажется: без него любая нестабильность теста после сессии выглядит как вина агента, даже если она была и до него, и вы тратите время, отлаживая не то.
В существующем проекте отдельная ветка или worktree - не перестраховка, а способ не смешивать. Свои незакоммиченные изменения не оставляют в одной куче с первой сессией агента: крупную работу ведут в отдельной ветке или в изолированном worktree, где diff агента живёт сам по себе. Так параллельная задача не заражает активную ветку, а слияние остаётся управляемым шагом. Worktree здесь особенно уместен, потому что он даёт агенту отдельное рабочее дерево того же репозитория: ветки, история и remote общие, а файлы на диске - свои, и активная работа в основном дереве не пересекается с сессией.
Цена пропущенного baseline проявляется при откате. Revert в интерфейсе удобен и быстр, но это функция приложения, а не журнал репозитория. Переносимый, надёжный откат даёт Git: коммит-baseline и ветку видно из любого клиента, они переживают перезапуск приложения и смену инструмента. Полагаться только на интерфейсный revert - значит держать страховку там, где её труднее всего восстановить. Практический вывод не в том, чтобы отказаться от удобного revert, а в том, чтобы не делать его единственной страховкой: интерфейсный откат хорош для быстрого шага назад в живой сессии, а git-baseline - для гарантии, что вернуться к известному состоянию можно всегда.
Отдельная нить - секреты. Страховочная сетка защищает от потери кода, но не от утечки: файлы с секретами закрывают gitignore, чтобы они не попали в коммит, и отдельными permission-правилами агента, чтобы он не прочитал и не отправил их. Это две разные границы - что попадает в историю и что видит агент, - и обе заводят до первой задачи, а не после инцидента. Разводить эти две границы важно потому, что gitignore и permission-правила решают разные задачи и не заменяют друг друга: первый бережёт историю от секрета, второй - агента от чтения того, что ему видеть незачем.
Проверять готовность стоит по короткому списку, а не по ощущению. Рабочее дерево чистое или изменения осознанно сохранены. Тест и build имеют известный результат до задачи. Секреты закрыты gitignore и отдельными permission-правилами. Если все три пункта выполнены, у результата агента есть точка отсчёта, откат и граница доступа - три вещи, которые задним числом восстанавливаются дорого.
Типичные провалы одинаковы у всех, кто торопится. Дают задачу поверх грязного дерева и потом не могут отделить вклад агента от своего. Полагаются на интерфейсный revert и теряют его при смене инструмента или перезапуске. Забывают про gitignore и permission на секреты и обнаруживают ключ в diff. Признак один: baseline не завели, потому что "это же быстрая задача". Заведите его - минута подготовки дешевле часа распутывания.
git status --short
git switch -c chore/devin-baseline
npm test
npm run build