salimhamed/claude-code-flow

wt-destroy

Destroy a worktree — close any PR, delete local and remote branches, and remove the worktree, discarding all uncommitted changes.

소스 보기

사용 방법

  1. 설치 명령을 복사하고 자신의 에이전트 환경에 설치하기 전에 소스 패키지를 확인하세요.
  2. 필요한 도구, 인증 정보, 지원 환경은 원본 문서에서 확인하세요.
  3. 입력과 원하는 산출물을 설명하고 출처와 결과를 대조하세요.
npx skills add https://github.com/salimhamed/claude-code-flow --skill wt-destroy

시작 전 확인

  • 설치에는 모델 구독, API 한도, 파일 접근 권한이 포함되지 않습니다.
  • 별점 수와 설치 수는 활동 지표이며 독립적인 품질·보안 검증이 아닙니다.
원본 Skill 문서

원본 저장소의 제목, 예시, 코드, 표, 링크, 이미지를 유지해 표시합니다.

Destroy Worktree

Announce at start: "I'm using the wt-destroy skill to tear down a worktree."

Context

  • Current directory: !pwd
  • Current branch: !git branch --show-current
  • Worktrees: !git worktree list --porcelain
  • Working tree status: !git status --porcelain
  • PR info: !gh pr view --json number,url,state,title 2>&1 || echo NO_PR

Decision Flowchart

mermaid
flowchart TD
    A[Resolve target] --> B[Fetch PR info]
    B --> C[Confirm with user]
    C -- denied --> STOP
    C -- confirmed --> D{PR exists?}
    D -- yes --> E[Close PR]
    D -- no --> F[Destroy worktree + branches]
    E --> F
    F --> G{Destroyed current dir?}
    G -- yes --> H[Tell user to close session]
    G -- no --> I[Report + offer more cleanup]

Preconditions

CheckHow to detectAction
Target is the main worktreeTarget path matches the first entry in the worktree listSTOP — tell user this is the main worktree
Branch argument doesn't match any worktreeNo worktree entry has the given branchSTOP — tell user the branch was not found in the worktree list

Uncommitted changes do NOT block execution — they are discarded.

Variables

VariableSource
{BRANCH}The skill argument if provided, otherwise the current branch
{MAIN_WORKTREE}Path of the first entry in the worktree list (the main worktree)
{WORKTREE_PATH}Worktree path matching {BRANCH} from the worktree list
{NUMBER}PR number — from Step 2 if argument provided, from ! context otherwise
{DESTROYING_SELF}true if current directory == {WORKTREE_PATH}, false otherwise

If a branch name argument was provided, look up {WORKTREE_PATH} from the worktree list by matching the branch field. If no argument, use the current directory for {WORKTREE_PATH} and the current branch for {BRANCH}.

Steps

Step 1: Resolve target

Determine {BRANCH}, {WORKTREE_PATH}, and {DESTROYING_SELF} from the argument or current directory (see Variables above). Check preconditions and STOP if they fail.

Step 2: Fetch PR info (if argument provided)

Skip this step if no argument was provided — the ! context already has PR info for the current branch.

bash
gh pr view {BRANCH} --json number,url,state,title 2>/dev/null || echo NO_PR

This fetches PR info for the target branch (which differs from the current branch). Save the result for use in Steps 3 and 4.

Step 3: Confirm

Use AskUserQuestion to confirm destruction. Include in the question:

  • Branch name: {BRANCH}
  • Worktree path: {WORKTREE_PATH}
  • PR: title and number if exists, or "no associated PR"

Example: "Destroy worktree for branch fix-foo at /path/to/fix-foo? This will close PR #42 'Fix foo' and delete the local and remote branches."

If the user denies, STOP.

Step 4: Close PR (if applicable)

Skip this step if PR info shows NO_PR or the PR state is not OPEN.

bash
gh pr close {NUMBER}

Tolerate errors — the PR may have already been closed or merged.

Step 5: Destroy + cleanup

CRITICAL: This MUST be a single Bash invocation. If {DESTROYING_SELF} is true, the shell's CWD will no longer exist after worktree remove 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.

bash
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} push origin --delete {BRANCH} 2>/dev/null; echo "===REMAINING WORKTREES==="; git -C {MAIN_WORKTREE} worktree list

Commands are joined with ; (continue regardless of errors). Individual failures are tolerated — the branch or remote may already be gone.

Step 6: Report

Parse the output from Step 5. Everything after ===REMAINING WORKTREES=== is the current worktree list.

If `{DESTROYING_SELF}` is true:

Summarize what was destroyed:

  • Worktree removed, PR closed (if applicable), branches deleted

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.

If `{DESTROYING_SELF}` is false:

Summarize what was destroyed:

  • Worktree removed, PR closed (if applicable), branches deleted

List remaining worktrees. If any look stale (e.g. branch no longer exists on remote), offer to destroy them.

Red Flags

Never:

  • Run this on the main worktree
  • Skip the confirmation step
  • Split Step 5 into multiple Bash calls
  • Run Bash commands after destroying the current worktree ({DESTROYING_SELF} = true)

Always:

  • Use git -C {MAIN_WORKTREE} for all git commands (never cd)
  • Keep all post-close operations in a single Bash invocation
  • Tolerate errors during cleanup (worktree remove, branch delete, remote delete)
  • Close the PR before destroying the worktree

관련 작업

같은 저장소의 Skills

더 많은 Skills

모든 Skills