Skip to content
Deployment
Skill

/pcl

Delete stale git branches (local + remote) that have no open PR, and prune worktrees.

From plugin
spawn
2217 skills
Install
$ npx -y skills add OpenRouterLabs/spawn --skill pcl --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/pcl

Context preview

The summary Claude sees to decide when to auto-load this skill.

Delete stale git branches (local + remote) that have no open PR, and prune worktrees.

SKILL.md

pcl.SKILL.md
name: pcl
description: Delete stale git branches (local + remote) that have no open PR, and prune worktrees.
argument-hint: "[--dry-run]"
allowed-tools: Bash

Cleanup Stale Branches

Delete local and remote git branches that no longer have an open PR, and prune stale worktrees.

Arguments

  • `--dry-run` — List what would be deleted without actually deleting anything.

**$ARGUMENTS**

Procedure

Step 1: Checkout main branch

Switch to main and update to latest:

git checkout main
git pull --rebase origin main

**Critical:** This ensures we're not on a branch that's about to be deleted, and that we're working from the latest main.

Step 2: Fetch and prune remote refs

git fetch --prune origin

Step 3: Identify stale remote branches

List all remote branches except `main` and `HEAD`:

git branch -r --format='%(refname:short) %(committerdate:relative)' | grep -v 'origin/main\|origin/HEAD\|^origin '

Step 4: Get branches with open PRs (protected)

gh pr list --repo OpenRouterLabs/spawn --state open --json headRefName --jq '.[].headRefName'

Any branch with an open PR MUST be skipped. Never delete a branch that has an open PR.

Step 5: Delete stale remote branches

For each remote branch that is NOT in the open PR list:

git push origin --delete BRANCH_NAME

If `--dry-run` was passed, print `[dry-run] would delete origin/BRANCH_NAME` instead.

Step 6: Delete stale local branches

List local branches (excluding the current branch and `main`):

git branch --list | grep -v '^\*' | grep -v '^ *main$' | tr -d ' '

For each, check if it's already merged into main or has no remote:

git branch -d BRANCH_NAME 2>/dev/null || git branch -D BRANCH_NAME

If `--dry-run`, print `[dry-run] would delete local BRANCH_NAME` instead.

Step 7: Prune worktrees

git worktree prune

Remove any leftover worktree directories:

rm -rf /tmp/spawn-worktrees 2>/dev/null || true

Step 8: Verify final state

Ensure we're on main branch:

git branch --show-current

Should output: `main`

Step 9: Summary

Print a summary:

  • Number of remote branches deleted
  • Number of local branches deleted
  • Number of branches skipped (had open PRs)
  • Worktree prune status
Read more
Ships withspawn

Launch any AI agent on any cloud with a single command. Coding agents, research agents, self-hosted AI tools — Spawn deploys them all. All models powered by OpenRouter. (ALPHA software, use at your own risk!) 10 agents. 8 clouds. 79 working combinations.

Get the whole plugin
Stats
222
Stars
34
Forks
Active
Maintenance
TypeScript
Language
Apache-2.0
License
9d ago
Last commit
6mo ago
Created

Repo: OpenRouterLabs/spawn