Sessions

One worktree per branch

Create a worktree to keep an agent’s work on its own branch, start sessions in it, merge it into the main branch and hand conflicts to an agent.

Why a worktree

Two agents in the same folder end up editing the same files, and Soreno doesn’t isolate them from each other. A worktree solves that: one more working copy, on its own branch, sharing the same repository. Soreno never creates one without you.

Create a worktree

In the project column, a project row’s +, Create worktree, opens the form. It shows the current branch and creates a new branch from its latest commit.

  • Branch: the new branch’s name;
  • Parent folder: by default, the one that holds the repository;
  • Worktree folder: by default, the repository’s name followed by the branch’s. The full path shows below.

The button is greyed out for a disconnected SSH project. In the Git panel, the Branches view also offers Create worktree: next to the new branch field, or on an existing branch.

Work in a worktree

The worktree shows up under its project, named after its branch. It’s a project in its own right: click it, start agents in it as anywhere else, and its Git panel shows its own changes. Sessions in the same worktree share its folder, so its branch.

A worktree created outside Soreno is listed under the project too, marked External worktree · Open: one click adds it to your projects and opens it.

Merge and delete

When the work is done, right-click the worktree: Merge into main and delete, with the name of the main worktree’s branch. Soreno merges the worktree’s branch into that branch, then deletes the worktree folder and its local branch.

Soreno’s project list: atelier-web on main and its review/tabs worktree, where Claude Code is working. The worktree’s menu offers Merge into main and delete, hovered, and Delete worktree.
The review/tabs worktree, ready to join main.
  • sessions are still running in the worktree: the confirmation says so and the button becomes Stop sessions and merge;
  • uncommitted changes, in the worktree or in the main worktree, block the merge: commit or stash them where Soreno tells you, then try again.

Delete worktree, in the same menu, deletes its folder and its local branch without merging: its unmerged commits are lost, and uncommitted changes block the deletion. The main worktree can’t be deleted from Soreno.

Hand a conflict to an agent

If the merge hits a conflict, the main branch is left untouched: the conflicts stay in progress in the worktree. If the worktree is open in Soreno, the notification offers Resolve with an agent; a worktree created outside Soreno and never opened doesn’t get this action.

Soreno after a stopped merge: the notification says the merge has conflicts, left in the source worktree, and offers Resolve with an agent.
The conflicts stay in the worktree, and an agent can take care of them.

Soreno then opens a “Conflicts · Claude Code” session in the worktree, for example, with the agent of the most recently created session in that worktree. The agent resolves each file keeping both branches’ intent, runs the relevant checks and commits the merge, without aborting it, rebasing, resetting or pushing. When it can’t decide, it asks you. Once the merge is committed, run Merge into main and delete again.

Rather sort them out yourself? Show the worktree, open Changes in the Git panel, resolve each file then Mark resolved…, commit the merge and try again.