Когда что-то не работает в агентной IDE, соблазн - искать один баг. Но продукт устроен слоями, и симптом почти никогда не живёт в том слое, где его заметили. Диагностика наугад дорога именно потому, что перебирает слои в случайном порядке и тратит часы там, где хватило бы минуты в правильном месте.
Наивный ход - чинить там, где увидел. Команда не сработала - переписать команду; агент не увидел файл - трогать файл; permission отказал - снимать правило. Каждый такой ход лечит симптом, не спросив, из какого слоя он на самом деле пришёл, и потому нередко создаёт вторую проблему поверх первой.
Ломается это на том, что причина и симптом лежат в разных слоях. Отказ permission может идти от организационной политики, а не от вашего конфига; агент не видит файл, потому что работает в remote-CWD; команда не находится, потому что живёт в другом канале или ушла в Next. Пока слой не назван, любая правка бьёт по площадям и с равной вероятностью промахивается мимо причины.
Профессиональный механизм - проходить слои по порядку: version, identity, workspace, agent, customization, permission, runtime. Версия: stable или Next, changelog, перезапуск после обновления. Идентичность: аккаунт, план, командная политика, повторный вход. Workspace: Restricted Mode, доверие к папке, состояние Git, remote-CWD. Агент: selector, тумблер enabled, статус подключения. Кастомизация: rules, hooks, plugin, авторизация MCP. Permission: какой слой дал deny или ask. Runtime: shell, PATH, контейнер, proxy, сертификат. Семь слоёв - не ритуал, а маршрут: пройденный по порядку, он почти всегда упирается в конкретную строку, а не в общее что-то сломалось.
Почему порядок именно такой. Слои идут от самого общего и дешёвого к проверке к самому частному и дорогому. Неверная версия или командная политика объясняют разом множество симптомов, и проверить их - секунды. Лезть сразу в runtime, не исключив version и identity, значит чинить следствие, оставив причину нетронутой, и почти наверняка вернуться к ней позже с бОльшими потерями.
Что помогает в 3.7.16. Отказ сообщает, какой слой его выдал - это сразу указывает, где искать, вместо того чтобы гадать между политикой и локальным правилом. Логи MCP разделены по output-каналам, так что источник виден без догадок. Упавший worktree показывает конкретную ошибку Git, а не общее не получилось. Продукт сам подсказывает слой, если на него смотреть, а не спорить с симптомом. Эти подсказки и делают послойный проход дешёвым: продукт называет слой сам, остаётся только начать сверху.
Отдельный случай - ACP. Проверьте binary в PATH, отдельный login и переменные окружения, затем перезагрузите подключения ACP командой из палитры (точное имя сверьте в своей версии). Сторонний агент падает по своим причинам, и его слой диагностируют его же средствами, а не настройками Devin: чужая цепочка исполнения требует чужих проверок, и искать её сбой в конфиге Devin - терять время не в том слое.
Чтобы диагностика была передаваемой, а не устной, заполните короткий отчёт из блока ниже. Он фиксирует версию и канал, слой ОС и remote, путь и статус Git, выбранного агента, Restricted Mode, точное действие и ошибку, показанный источник permission, релевантный канал вывода, минимальное воспроизведение и что изменилось с последнего успеха. Заполненный отчёт сам по себе половина решения: он вынуждает назвать слой. И тот же отчёт превращает вашу догадку в передаваемый факт: коллега продолжит с того места, где вы остановились.
Цена диагностики не по слоям - часы, потраченные в неправильном слое. Переписывать команду, когда дело в политике; крутить runtime, когда виновата версия; менять правило, когда deny пришёл сверху. Каждая такая попытка ещё и маскирует настоящую причину новыми изменениями, так что найти её потом становится только труднее, а откат - длиннее.
Когда послойный проход особенно оправдан. Всегда, но особенно когда симптом расплывчат и воспроизводится нестабильно. Чем непонятнее поломка, тем дороже угадывание и тем выгоднее пройти дешёвые верхние слои прежде, чем копать вглубь: порядок здесь экономит больше, чем скорость перебора. Дешёвый верхний слой, исключённый за секунды, стоит больше, чем час, потраченный в глубоком.
Проверка здесь - сам заполненный отчёт. Если каждое поле заполнено, вы либо уже нашли слой, где ломается, либо получили воспроизведение, которое можно передать дальше без потери контекста. Признак незавершённой диагностики прост: не названы слой отказа и что изменилось с последнего успеха. Назовите их - и в большинстве случаев причина оказывается ровно там, где вы перестали смотреть.
Диагностический отчёт
Desktop version/channel:
OS / remote layer:
Workspace path and Git status:
Selected agent:
Restricted Mode:
Exact action and error:
Permission source shown:
Relevant output channel:
Minimal reproduction:
What changed since last success: