Рабочий день с Devin легко представить как переписку: сформулировал задачу, отправил агенту, прочитал ответ, при необходимости попросил ещё. Пока задачи мелкие, эта модель держится, и именно поэтому она незаметно становится привычкой. Но день, собранный из таких переписок, оставляет после себя не проверенную работу, а стопку диалогов, в каждом из которых финальное слово сказал агент, а не тесты. Признак, что день пошёл по этой колее, простой: вы помните, что агент написал, но не можете назвать команду, которой это проверили.
Наивный ход понятен и по-своему логичен: агент отвечает связно и уверенно, его сообщение выглядит как результат, и хочется на этом остановиться. Из этого растёт привычка судить о готовности по тексту ответа - "агент говорит, что тесты проходят", "агент уверяет, что рефакторинг безопасен". Один большой промпт в начале, беглый взгляд на ответ в конце, и задача считается закрытой. Интерфейс не мешает так работать: он показывает уверенную прозу там, где нужен diff.
Ломается это на различении сообщения и артефакта. Сообщение агента - это утверждение о работе, а не сама работа; проверяемое состояние живёт в файлах, в diff, в прогоне тестов и в ветке, а не в тексте чата. Как только задача перестаёт быть однострочной, зазор между "агент сказал" и "в репозитории лежит" превращается в источник тихих регрессий: правки не в той ветке, задетые лишние файлы, тесты, которые "проходят" в пересказе, но не запускались.
Профессиональный механизм закрывает этот зазор, разворачивая день в повторяемую петлю из десяти шагов, и каждый шаг отвечает за одно. Frame: назвать цель, scope, критерий приёмки и допустимый риск. Baseline: зафиксировать исходное - git чист, build и тесты в известном состоянии, известные падения записаны. Choose: выбрать поверхность - Command, Devin Local, Cloud или ACP. Inspect: снять неизвестность через Ask или Plan и получить подтверждённую причину, а не догадку. Isolate: увести работу в отдельную ветку или worktree с минимальными permissions.
Вторая половина петли - про исполнение и его закрытие. Execute: вести работу маленькими reviewable turns, а не одним прыжком. Verify: проверять от точечного теста к более широкому и затем к ручному сценарию. Review: прочитать diff и прогнать независимый Quick Review, отметив остаточные риски. Integrate: commit или PR под человеческое одобрение и защищённые проверки. Learn: полезное знание вынести в AGENTS.md, rule или skill, а остальное из контекста убрать. Десять шагов - это не бюрократия, а та же арка, что проходит через всю книгу: назвать поверхность, взять минимальную мощность, доказать результат.
Почему петля именно такая, а не короче. Каждый её шаг снимает один класс ошибки, которую иначе ловят на merge или в проде. Frame и Baseline не дают спутать "стало лучше" с "стало иначе". Choose и Isolate ограничивают радиус: узкая поверхность и отдельный worktree держат цену ошибки маленькой. Verify и Review отделяют заявленный результат от фактического. Learn не даёт одному и тому же объяснять агенту дважды. Выньте любой шаг - и его работу придётся делать позже и дороже.
Цена петли - дисциплина и время в начале, и это честный обмен. Frame и Baseline занимают минуты до первого turn, Isolate требует завести ветку прежде, чем что-то менять. Кажется, что это тормозит; на деле это переносит стоимость из конца, где распутывают смешанный diff и гадают, что сломалось, в начало, где всё ещё дёшево. Для однострочной правки петлю сворачивают до сути: Frame в одну фразу, Command, чтение diff, commit. Полный разворот нужен там, где задача многошаговая и радиус ошибки реальный.
Definition of done фиксирует, чем заканчивается петля. Результат - не сообщение агента, а проверенный артефакт в управляемой ветке, с известными рисками и воспроизводимой командой проверки. Это определение сознательно жёсткое: оно не принимает "агент говорит, что готово" за готовность. Пока нет ветки, которую можно показать, команды, которую можно повторить, и списка рисков, которые вы приняли явно, - задача не закрыта, как бы уверенно ни звучал последний ответ.
Проверять, что день прожит правильно, стоит по следу, который он оставил. У каждой закрытой задачи есть ветка или PR, воспроизводимая команда проверки и явно принятые риски. Шаг Learn оставляет отдельный след: то, что пришлось объяснять агенту, либо превратилось в постоянную инструкцию в AGENTS.md или rule, либо в skill по требованию, либо было осознанно отброшено. Если в конце дня контекст распух от разовых объяснений, которые никуда не вынесены, - завтра их придётся давать заново.
Типичные провалы петли узнаваемы. Судить по сообщению агента, а не по diff и тестам - и принять пересказ за проверку. Пропустить Baseline - и не отличить свою регрессию от чужого падения, которое было и до вас. Пропустить Isolate - и вести многошаговую работу в активной ветке, распутывая потом смешанный diff. Пропустить Learn - и объяснять одно и то же в каждой новой сессии. Признак у всех один: в конце задачи нет артефакта, который можно показать и повторить. Начните с Frame и Baseline, закончите Verify и Review - и большинство этих провалов не случится.