Cascade workflow - это Markdown-файл в .windsurf/workflows, который человек запускает вручную slash-командой; документация ограничивает его 12 000 символами. Он хорошо описывал повторяемую траекторию: последовательность шагов и подсказок на уровне всей задачи. Но в Devin Local рекомендуемая форма повторяемого знания - не workflow, а skill, и перенос между ними - не переименование файла.
Наивный ход - скопировать текст workflow в skill или, хуже, в один always-on rule и считать перенос завершённым. Раз это Markdown с шагами там и Markdown с шагами тут, кажется, что достаточно сменить папку. Ожидание естественное: формат похож, значит и поведение перенесётся само.
Ломается это на том, что workflow и skill - разные контракты, а не разный синтаксис. Workflow запускается только вручную и только целиком; skill подгружается по описанию и триггерам, когда он уместен. Длинный workflow, вставленный как always-on rule, висит в контексте постоянно, раздувает его и срабатывает не тогда, когда нужен. Механический перенос сохраняет буквы и теряет управляемость. Лимит в 12 000 символов у workflow - косвенный признак того же: он задумывался как длинный сценарий целиком, а не как компактный навык под конкретный триггер.
Отсюда способ переноса: разделить то, что в workflow слито в один текст. Отдельно - инструкции (что делать), отдельно - инструменты (чем), отдельно - разрешения (что можно без спроса). Добавить frontmatter, точное описание результата и явные триггеры, по которым skill подгружается, и встроить проверку - как убедиться, что skill отработал. Skill становится исполнимым контрактом с ясными входами и выходами, а не свободным текстом. Триггеры - это то, чего у workflow не было вовсе: он ждал ручного вызова, а skill сам заявляет, при каких условиях уместен, и агент подгружает его без напоминания. Поэтому описание результата и триггеры важнее переносимого текста шагов: без них skill остаётся тем же ручным workflow, только в новой папке.
Руками это делать не обязательно. Для переноса есть команда Devin: Open Cascade Migration Wizard - она проводит workflow в skill по шагам. Мастер снимает механическую часть, но не думает за вас: решение, что из старого workflow остаётся, что делится на части, а что удаляется, всё равно принимает инженер.
Миграция - это ещё и повод вычистить ритуалы. Workflow команды часто накапливает шаги, которые давно не влияют на результат или дублируют то, что уже делает CI. Если шаг ничего не меняет или повторяет проверку из пайплайна - его исключают, а не переносят. Типичные кандидаты на вычистку - шаги вроде "напомни запустить линтер" или "не забудь прогнать тесты", которые в зрелом проекте уже делает пайплайн; дублировать их в skill значит тащить недоверие к CI в новую среду вместо того, чтобы положиться на автоматику. Skill должен быть исполнимым контрактом, а не архивом истории команды.
Почему Devin Local ведёт именно к skills, а не оставляет workflows. Skill подгружается по требованию, поэтому не занимает контекст, пока не нужен; у него есть описание результата и триггеры, поэтому агент сам понимает, когда его применить; он разделяет инструкции и права, поэтому вписывается в permission-модель нового агента. Workflow из эпохи Cascade всего этого не умел - он был текстом под ручной запуск.
Цена механического переноса конкретна. Скопированный целиком длинный workflow как always-on rule утяжеляет каждый turn и мешает, а не помогает. Сохранённые ритуальные шаги воспроизводят старую медлительность в новой среде. Потерянное при копировании разделение прав означает, что skill просит подтверждения не там, где надо, или, наоборот, действует свободнее, чем задумано. Плохой перенос дороже отсутствия переноса.
Проверять перенос стоит запуском, а не чтением. Сработал ли skill по своим триггерам сам, без ручного вызова. Даёт ли он заявленный результат - тот, что описан во frontmatter. Не висит ли он в контексте, когда не нужен. Уложились ли инструкции в разумный объём вместо прежних 12 000 символов одним куском. Skill, который нельзя проверить прогоном, перенесён не до конца.
Типичный провал - перенести форму и потерять смысл. "Skill не запускается сам" - потому что у него нет явных триггеров, остался ручной запуск из workflow. "Контекст раздут" - потому что длинный workflow лёг как always-on rule. "Skill делает лишнее" - потому что ритуальные шаги перенесли дословно вместе с рабочими. Признак один: workflow скопировали, а не переосмыслили. Сначала разделите инструкции, инструменты и права и спросите, какой шаг реально влияет на результат - остальное отсеется само.