Finish a Branch
Never push, merge, or open a pull request unless the human asked in this session; read
safety before Step 5 and Step 6.
Step 1 — Green first
Run the full suite. If it fails, report it and stop. The menu below does not appear until the
suite is green — offering integration options over a red suite invites choosing one.
Step 2 — Capture the environment
Record WORKTREE_PATH and the current branch now, before any step changes directories.
Step 5 moves you, and a path captured after the move points at the wrong place.
Step 3 — Confirm the base
Ask which branch this integrates into. Do not assume main; do not read it from a config and
proceed silently.
Step 4 — The menu
Present exactly these, and wait:
- Merge locally into the base branch.
- Push and open a pull request.
- Leave it as is — keep the branch and the worktree.
In detached HEAD, only options 2 and 3 apply; say why.
Discarding is not on the menu. If the human asks to discard, require them to type the word
discard, and confirm what will be lost first.
Step 5 — Execute
Merge locally: merge before removing anything, then run the suite again on the merged
result. Two branches that each pass can fail together, and that failure belongs to whoever
merged them.
Pull request: push, open it, and keep the worktree. Review feedback gets fixed there,
and a removed worktree means recreating it in an hour.
Leave it: record where it is and what state it is in, so the next session does not rediscover
it.
Step 6 — Cleanup
Only remove worktrees under .worktrees/ or worktrees/, and only ones this work created.
git worktree remove <path>
git worktree prune
If removal is refused because of uncommitted files, do not add --force on your own
initiative. Show git status --porcelain -uall and offer: commit them, stash them, or leave
the worktree in place. The refusal is git protecting work that someone may want.