Agents may commit as much as they like. Nothing reaches your main branch without you: Finish… is the one way a task ends, and it always asks.

Finish…

Finish… is on the task’s card, in its menu and in the review window. The sheet Finish … says where the task stands, how many commits it has, whether sessions still run in it, and offers four options. The one your project usually takes comes first, marked Usual for this project; set it under Project Info → Settings → Finishing Tasks → Usually by.

OptionWhat happens
Merge into mainBrings the task into the base branch in the repository’s main folder, up to date with the server. Push main to origin and Clean up worktree and branch are switches below it.
Open Merge RequestPushes the branch and opens a merge request with gh or glab on the server. The task stays for review fixes; later the option reads Update Merge Request.
ParkPushes the branch and removes the worktree. The task waits under Parked until you Resume or finish it.
Delete TaskRemoves the worktree and the branch, uncommitted changes included; with work in it, after asking. Cavvy keeps the work for 30 days; see below.

Uncommitted changes are committed along with the task, unless you choose to throw them away. Sessions still running in the task are closed when it ends.

Checks before merging

If Done Means didn’t pass on the current state, or a second opinion has an open Must finding, the merge button reads Merge into main Anyway and is red. That also applies when the repository has no Done Means at all, or when the checks are still running. You can still merge; you just can’t do it without seeing that.

Conflicts

Before you merge, Cavvy works out with git merge-tree whether the task would conflict with the base, without touching any folder. If it would, the sheet says Merging into main would conflict in …, and merge and merge request wait. Let the Agent Resolve Them hands the conflicts to the task’s agent; a parked task has to be resumed first.

Merged on the server

When a merge request is merged on GitHub or GitLab, Cavvy notices, fetches the result and shows Merged into main on the server. Finish… then cleans up the task without losing anything.

Why merging has no shortcut

Finishing has no key, on purpose: the options in the sheet don’t take keyboard focus, and a click right after the options move is ignored. Merging and deleting have consequences, so they happen only through a deliberate click in a dialog that says what will happen.

Agents get the same rule from the other side: in a task, Claude Code and Codex are told to commit but not to merge, push or open merge requests, and to point you to Finish… if you ask them to merge. See What Cavvy changes in agents.

Merged Today

Merged tasks gather under Merged Today until midnight, folded away. Parked tasks stay under Parked; Resume gives them a fresh worktree on their branch, with the setup run again.

Restore a deleted task

Deleting isn’t final. Before Cavvy deletes a task with commits or uncommitted changes, it keeps them in the repository, on the machine the repository is on, not on origin. For 30 days, the repository’s page (click it in Project Info, ⌘I) lists the task under Deleted Tasks with the date until which it can be restored. Restore brings it back as a parked task; Resume gives it a worktree again.

Tasks across repositories

A task with several parts finishes all of them together with Finish Task…: merge all or none, open merge requests that name each other, or park all parts. Push and clean-up start out as the project’s settings say. A single part can still be finished with its own Finish….