У Cascade автозапуск команд выглядит как понятная панель настроек: четыре уровня - Disabled, Allowlist Only, Auto и Turbo - плюс два списка терминальных команд, allow и deny. Панель знакома по эпохе Windsurf, и первый порыв при переходе на Devin Local естественный: перенести эти настройки один в один, как переносят конфиг из старого редактора в новый. Слова ведь те же - разрешить, запретить, уровень автономии.
Наивный ход тем и коварен, что почти всё в нём звучит правдоподобно. Allowlist Only похож на allow-правило, deny list - на запрет, Turbo - на полную свободу. Кажется, что достаточно переписать те же паттерны в новом месте, и агент будет вести себя как раньше, только под новым именем. Ожидание опирается на сходство словаря, а не на сходство механики.
Ломается это сразу на факте из документации: уровни авто-исполнения Cascade к Devin Local не применяются вовсе. Devin Local не знает про Disabled, Auto и Turbo - у него другая модель: permission-правила deny, ask и allow по областям инструментов, отдельный permission mode и системный sandbox. Между Allowlist Only и Turbo у Cascade есть и промежуточный Auto, где безопасность оценивает сама модель, а рискованное всё равно уходит на подтверждение, - но и он остаётся частью чужой модели, а не переключателем Devin Local. Переносить нечего в смысле переключателей; переносить нужно намерение, стоящее за каждым legacy-паттерном.
Самое опасное расхождение прячется в слове deny. В Cascade deny list - это мягкая граница: команда из него никогда не исполнится автоматически, но агент всегда спросит подтверждение, и человек всё ещё может её запустить. В Devin Local deny - высший приоритет: правило проверяется раньше ask и allow, и при совпадении действие блокируется немедленно и не переопределяется ничем. Одно и то же слово в двух средах даёт противоположную гарантию: там - пауза перед запуском, здесь - стена.
Отсюда рабочий приём: переносить не синтаксис, а намерение, и пересматривать каждый паттерн по одному. Для каждого legacy-правила спросите, чего вы на самом деле хотели - чтобы действие шло само, чтобы оно всегда спрашивало или чтобы оно было невозможно. Ответ и определяет, в какую из трёх областей - allow, ask или deny - оно ложится в Devin Local.
Разложить типовые намерения помогает короткая карта ниже. Разрешать тесты автоматически - это allow на Exec(npm test). Всегда спрашивать перед git-мутацией - это ask на Exec(git) и одновременно узкие allow для безопасных status и diff, чтобы чтение не дёргало вас зря. Никогда не запускать sudo - это deny на Exec(sudo), и теперь это настоящий запрет, а не просьба подтвердить. Полная автономность - это не Bypass, а сочетание Sandbox и Autonomous: свобода действовать внутри границы, которую держит операционная система.
| Legacy intent | Devin Local |
|---|---|
| Разрешать tests автоматически | allow Exec(npm test) |
| Всегда спрашивать git mutation | ask Exec(git) плюс узкие allow для status/diff |
| Никогда не запускать sudo | deny Exec(sudo) |
| Полная автономность | Sandbox + Autonomous, не Bypass |
Почему именно так, а не одним тумблером Turbo. В Devin Local разведены две оси: сколько агент делает без спроса и что ему физически позволено. Turbo смешивал их в одно ощущение всевластия - авто-исполнять всё, кроме deny. Devin Local отделяет permission mode от sandbox, поэтому широкая автономия не обязана означать снятие защиты: агент может действовать без подтверждений и при этом оставаться внутри песочницы, которая не пускает его за пределы разрешённых путей и сети.
Цена невнимания к этому различию двусторонняя. Скопировать Cascade-deny буквально - и мягкая просьба подтвердить превращается в жёсткую стену: команда, которую вы иногда всё-таки запускали руками, теперь недоступна вовсе. Перепутать в другую сторону - воспроизвести ощущение Turbo через Bypass - и вы снимаете sandbox там, где хотели лишь убрать лишние подтверждения, отдавая агенту не свободу внутри границы, а границу целиком.
Проверять перенос нужно не глазами по конфигу, а поведением в Devin Local. Запустите команду из deny - она должна блокироваться сразу, а не спрашивать. Запустите allow - должна пройти без вопроса. Запустите ask - должна остановиться и спросить. Три коротких прогона на самой машине Devin Local, а не в Cascade, показывают, что намерение перенесено верно, а не просто переписано похожими словами.
Типичные провалы растут из одного корня - переноса синтаксиса вместо намерения. Правило "перестало пускать" - потому что Cascade-deny стал жёстким deny в Devin Local. Агент "вдруг стал всё делать сам" - потому что Turbo мысленно приравняли к Bypass и сняли sandbox. Правило "не сработало" - потому что уровень Cascade вписали туда, где его не существует. Признак один: legacy-переключатель перенесли как есть, ни разу не спросив, чего он добивался. Спросите про намерение первым - и большинство этих сюрпризов не случится.