/pcl
Delete stale git branches (local + remote) that have no open PR, and prune worktrees.
$ npx -y skills add OpenRouterLabs/spawn --skill pcl --agent claude-codeHow 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.mdname: 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
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
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.
Repo: OpenRouterLabs/spawn
Other skills on spawn.
- /setup-spa
SPA (Spawn's Personal Agent) — Slack bot that pipes threads into Claude Code sessions
Open skill - /update-metadata
Refresh icons and metadata/stats for agents and cloud providers in `manifest.json`.
Open skill - /update-team
Update agent team services with latest configuration from setup-agent-team and restart them
Open skill - /claude
Create child cloud VMs with AI coding agents using the spawn CLI
Open skill - /codex
Create child cloud VMs with AI coding agents using the spawn CLI
Open skill - /openclaw
Create child cloud VMs with AI coding agents using the spawn CLI
Open skill

