Две возможности из наследия Cascade выглядят одинаково привлекательно: worktrees обещают параллельную работу без спутанных diff, а Arena - сравнить несколько моделей на одной задаче и взять лучшую. Обе полезны, и обе несут ограничения, которые легко проглядеть за удобной формулировкой. Стоит разобрать их вместе, потому что Arena стоит на worktrees и наследует их границы.
Наивная модель обеих проста. Worktree мысленно приравнивают к папке, между которыми переключаешься когда вздумается, а её содержимое считают полной копией проекта. Arena воспринимают как голосование: запустил несколько моделей, прочитал ответы, выбрал тот, что звучит убедительнее. И то и другое кажется бесплатным удобством поверх обычной работы.
Ломается это на нескольких документированных фактах про worktree. Переключиться на worktree можно только в начале сессии Cascade - не посреди работы. Живут они по фиксированному пути ~/.windsurf/worktrees/<repo>, и на один workspace их не больше двадцати, а лишние удаляются по принципу least-recently-used: самый старый уходит первым, без спроса. То есть worktree - не вечная папка, а ограниченный пул с автоматической уборкой.
Второе ограничение тоньше и важнее для результата: worktree содержит только версионируемые файлы. Файлы .env и любые невошедшие в git пакеты в него не копируются - их нужно подтягивать отдельно через setup-хук post_setup_worktree. Агент в свежем worktree честно работает с неполным состоянием проекта, если про это не позаботиться заранее, и "у меня же локально всё есть" здесь не помогает. Практически это значит, что перед запуском задачи в worktree стоит один раз убедиться, что зависимости установлены и переменные окружения на месте, - иначе первая же команда упрётся в отсутствующий файл или пакет, и время уйдёт не на задачу, а на воспроизведение окружения.
Важно, что это не чисто музейная тема. Devin Local использует ту же worktree-инфраструктуру, что и Cascade, поэтому границы - потолок в двадцать деревьев, LRU-уборка, копирование только tracked-файлов - касаются и актуального агента, а не только legacy-режима. Знание переносится вперёд, а не остаётся в эпохе Windsurf, и то, что казалось особенностью старого режима, на деле остаётся действующим правилом.
Arena надстраивается ровно над этим. Она берёт одну вашу задачу и исполняет её каждой из выбранных моделей независимо - каждая в своей сессии и своём worktree, изолированно друг от друга. Отсюда жёсткое требование: workspace должен быть с инициализированным git, иначе изоляция невозможна. По сути это не один эксперимент, а несколько параллельных прогонов одной постановки.
Цена у этого прямая и складывается из двух слагаемых. Каждая модель в Arena тарифицируется отдельно, ровно как если бы вы запускали её саму по себе: три модели - тройной расход usage за одну задачу. И то же ограничение worktree действует на каждый вариант - в деревья копируются только git-tracked файлы, так что недостающий untracked-контекст отсутствует сразу во всех прогонах, а не в одном.
Главная же ошибка Arena - концептуальная: это эксперимент, а не голосование. Соблазн выбрать вариант с самым красивым объяснением велик, но красноречие модели не есть корректность её кода. Сравнивать нужно по заранее заданным критериям - прохождению тестов, размеру diff, корректности и поддерживаемости, - и задавать их до того, как вы прочли ответы. Критерий, придуманный постфактум, всегда подгоняется под понравившийся вариант. Полезно записать эти критерии одной строкой до запуска и не менять их, пока идут прогоны: тогда выбор опирается на цифры и зелёный статус, а не на впечатление от текста.
Проверять и то и другое стоит по одному правилу: сначала условия, потом запуск. Перед Arena запишите критерии сравнения и убедитесь, что git инициализирован, а нужные untracked-файлы подтянуты хуком. После - судите варианты по этим критериям и по зелёному прогону тестов, а не по тексту вокруг кода. Для одиночного worktree проверка проще: убедитесь, что дерево создано в начале сессии и что в нём есть всё, что задаче нужно для работы.
Типичные провалы у обеих механик узнаваемы. Пытаются сменить worktree посреди сессии и считают, что функция сломана, - её просто нельзя вызвать не в начале. Старое дерево исчезает по LRU, а винят агента. Прогон падает, потому что в worktree нет .env, а его туда никто не копировал. Победителя Arena выбирают по убедительности объяснения и получают код, который лучше звучит, чем работает. И забывают, что каждая модель в Arena - отдельный счёт. Признак всех пяти один: удобство приняли за бесплатное, не прочитав его границы.