From flow
Squash-merge the current branch's PR, clean up the worktree, return to main, and report remaining worktree status
npx claudepluginhub salimhamed/claude-code-flow --plugin flowThis skill is limited to using the following tools:
**Announce at start:** "I'm using the wt-merge skill to squash-merge and
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Announce at start: "I'm using the wt-merge skill to squash-merge and clean up."
pwdgit branch --show-currentgit worktree list --porcelaingit status --porcelaingit rev-list @{u}..HEAD 2>/dev/null || echo NO_UPSTREAMgh pr view --json number,url,state,title 2>&1 || echo NO_PRflowchart TD
A[Preconditions] -- fail --> STOP
A -- pass --> B[Merge PR]
B --> C[Cleanup + update main]
C --> D[Report]
Only two checks before proceeding — everything else fails naturally with clear
errors from gh pr merge.
| Check | How to detect | Action |
|---|---|---|
| Uncommitted changes | Working tree status is non-empty | STOP — tell user to commit or stash |
| Unpushed commits | Output shows commit SHAs or NO_UPSTREAM | Run git push -u origin HEAD, then continue |
Extract from context above:
| Variable | Source |
|---|---|
{NUMBER} | PR number from PR info |
{MAIN_WORKTREE} | Path of the first entry in the worktree list (the main worktree) |
{WORKTREE_PATH} | Current directory (the feature worktree being removed) |
{BRANCH} | Current branch name |
gh pr merge {NUMBER} --squash
Use the PR number from context. Do NOT use --delete-branch (it tries to switch
branches locally, which fails when the default branch is already checked out in
the main worktree). Branch cleanup is handled in Step 2.
If this fails, STOP and show the error to the user.
CRITICAL: This MUST be a single Bash invocation. After worktree remove
deletes {WORKTREE_PATH}, the shell's CWD no longer exists and ALL subsequent
Bash tool calls will fail. Every command uses git -C to operate from
{MAIN_WORKTREE} regardless of the shell's CWD state.
Do NOT split these into separate Bash calls. Do NOT remove or reorder commands.
git -C {MAIN_WORKTREE} worktree remove --force {WORKTREE_PATH}; git -C {MAIN_WORKTREE} worktree prune; git -C {MAIN_WORKTREE} branch -D {BRANCH} 2>/dev/null; git -C {MAIN_WORKTREE} fetch --prune && git -C {MAIN_WORKTREE} pull --ff-only; echo "===REMAINING WORKTREES==="; git -C {MAIN_WORKTREE} worktree list
Commands are joined with ; (continue regardless of errors) except fetch && pull
which are dependent. Individual failures are tolerated — the branch or worktree
directory may already be gone.
Parse the output from Step 2. Everything after ===REMAINING WORKTREES=== is
the current worktree list.
Summarize:
Then tell the user: "The current directory has been deleted. Please close this session and open a new one from a valid directory."
Do NOT run any further Bash commands or offer follow-up actions — the shell is broken because the CWD was deleted with the worktree.
Never:
Always:
git -C {MAIN_WORKTREE} for all git commands (never cd)