Two capabilities inherited from Cascade look equally attractive: worktrees promise parallel work without tangled diffs, and Arena promises to compare several models on one task and take the best. Both are useful, and both carry constraints easy to overlook behind a convenient phrasing. It is worth examining them together, because Arena is built on worktrees and inherits their boundaries.
The naive model of both is simple. A worktree is mentally equated with a folder you switch between whenever you like, and its contents are taken for a full copy of the project. Arena is seen as a vote: launch several models, read the answers, pick the one that sounds more convincing. Both feel like free convenience layered on top of ordinary work.
It breaks on several documented facts about worktrees. You can switch to a worktree only at the beginning of a Cascade session - not in the middle of the work. They live at a fixed path, ~/.windsurf/worktrees/<repo>, and there are no more than twenty per workspace, with the extras removed on a least-recently-used basis: the oldest goes first, without asking. So a worktree is not an eternal folder but a limited pool with automatic cleanup.
The second constraint is subtler and matters more for the result: a worktree contains only version-controlled files. The .env files and any packages not in git are not copied into it - they must be pulled in separately through the post_setup_worktree setup hook. An agent in a fresh worktree honestly works with an incomplete project state unless this is handled in advance, and "but I have everything locally" does not help here. In practice this means that before running a task in a worktree it is worth making sure once that dependencies are installed and environment variables are in place - otherwise the very first command hits a missing file or package, and the time goes not into the task but into reproducing the environment.
Importantly, this is not a purely museum topic. Devin Local uses the same worktree infrastructure as Cascade, so the boundaries - the ceiling of twenty trees, the LRU cleanup, copying only tracked files - concern the current agent too, not just the legacy mode. The knowledge carries forward rather than staying in the Windsurf era, and what looked like a quirk of the old mode is in fact a rule still in force.
Arena is built exactly on top of this. It takes one task of yours and executes it with each selected model independently - each in its own session and its own worktree, isolated from the others. Hence a hard requirement: the workspace must have git initialized, otherwise the isolation is impossible. In essence this is not one experiment but several parallel runs of the same formulation.
The cost of this is direct and made of two parts. Each model in Arena is billed separately, exactly as if you ran it on its own: three models - triple the usage for one task. And the same worktree constraint applies to every variant - only git-tracked files are copied into the trees, so the missing untracked context is absent in all runs at once, not in one.
The main mistake with Arena, though, is conceptual: it is an experiment, not a vote. The temptation to pick the variant with the prettiest explanation is strong, but a model's eloquence is not the correctness of its code. You must compare by predefined criteria - passing tests, diff size, correctness and maintainability - and set them before you have read the answers. A criterion invented after the fact is always bent toward the variant you liked. It helps to write these criteria in one line before the launch and not change them while the runs proceed: then the choice rests on numbers and a green status, not on the impression left by the text.
You should verify both by one rule: conditions first, then launch. Before Arena, write down the comparison criteria and make sure git is initialized and the needed untracked files are pulled in by a hook. After, judge the variants by those criteria and by a green test run, not by the prose around the code. For a single worktree the check is simpler: make sure the tree was created at the start of the session and that it holds everything the task needs to work.
The typical failures of both mechanisms are recognizable. People try to switch a worktree mid-session and decide the feature is broken - it simply cannot be invoked anywhere but at the start. An old tree disappears by LRU, and the agent gets the blame. A run fails because the worktree has no .env that no one copied into it. An Arena winner is chosen by the persuasiveness of its explanation, and you get code that sounds better than it works. And people forget that each model in Arena is a separate bill. The sign of all five is the same: convenience was taken for free without reading its boundaries.