Agent skill

Stale Worktree Cleanup

by trycompai in trycompai/comp

A skill your agent uses when cleaning up old git worktrees, removing worktrees whose branches have merged or been abandoned, or dropping orphaned compdev Postgres databases.

AGPL-3.0Auto-check: notesDevelopment

Install Stale Worktree Cleanup

skills CLI
$ npx skills add trycompai/comp --skill stale-worktree-cleanup -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install trycompai/comp stale-worktree-cleanup --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/trycompai/comp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/stale-worktree-cleanup .claude/skills/stale-worktree-cleanup && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
stale-worktree-cleanup
GitHub stars
2k
Token cost
~1.8k tokens
SKILL.md length
600 words
Files
1
Skills in repo
31
Repo updated
First seen
Licence
AGPL-3.0

At a glance

A skill your agent uses when cleaning up old git worktrees, removing worktrees whose branches have merged or been abandoned, or dropping orphaned compdev Postgres databases.

  • Works in 5 steps: Inventory → Classify each worktree → Present to user → …
  • Cleaning up old git worktrees
  • SKILL.md covers Overview, When to Use, When NOT to Use and Process, plus 4 more sections
  • Calls git, gh and bun

What it does

Stale Worktree Cleanup is an agent skill from trycompai/comp. Use when cleaning up old git worktrees, removing worktrees whose branches have merged or been abandoned, or dropping orphaned compdev Postgres databases. Triggers on "clean up worktrees", "delete stale worktrees", "worktrees piling up", "orphaned databases", "remove unused worktree".

Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Git worktrees. It works with PostgreSQL and Git. The repository describes itself as: AI Native platform to get companies compliant - Vanta & Drata Alternative. The licence is AGPL-3.0.

When your agent uses it

  • Cleaning up old git worktrees
  • Removing worktrees whose branches have merged
  • Dropping orphaned compdev Postgres databases
  • Clean up worktrees

Example prompts

  • “clean up worktrees”
  • “delete stale worktrees”
  • “worktrees piling up”
  • “/stale-worktree-cleanup”

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Inventory
  2. Classify each worktree
  3. Present to user
  4. Remove confirmed items
  5. Verify and report

What it can do on your machine

Read from SKILL.md and the folder at commit 1bf4d52. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • gh
    • bun

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Stale Worktree Cleanup loads about 1.8k tokens when it runs. Until then it costs about 77 tokens; SKILL.md has 600 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~77
When it runs · the whole SKILL.md, loaded when a task matches
~1.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:42
    require("fs").readFileSync("packages/db/.env", "utf8");
  • NoteMentions a .env fileSKILL.md:100
    require("fs").readFileSync("packages/db/.env", "utf8");

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from trycompai/comp at commit 1bf4d52, republished under its AGPL-3.0 licence (© trycompai). 600 words, ~1,779 tokens.

Download SKILL.mdSave it as .claude/skills/stale-worktree-cleanup/SKILL.md (or your agent's skills folder).
name
stale-worktree-cleanup
description
Use when cleaning up old git worktrees, removing worktrees whose branches have merged or been abandoned, or dropping orphaned compdev_* Postgres databases. Triggers on "clean up worktrees", "delete stale worktrees", "worktrees piling up", "orphaned databases", "remove unused worktree".

Stale Worktree Cleanup

Overview

This repo's .githooks/post-checkout creates a per-worktree Postgres database (compdev_<slug>) on every git worktree add. Git has no pre-worktree-remove hook, so dead databases pile up over time. This skill defines a safe, reversible process to reap both the worktree directories and their dangling databases together.

Core principle: never delete work the user might still want. Classify first, ask second, remove last.

When to Use

  • User says "clean up worktrees", "delete stale worktrees", "remove old worktrees", "worktrees piling up"
  • User mentions orphaned compdev_* DBs or running out of disk space from dead node_modules
  • Starting a new feature and noticing many old worktree dirs

When NOT to Use

  • User wants to remove ONE specific worktree (just run git worktree remove <path> + drop its DB directly — don't load the whole process)
  • User is actively working in a worktree (never touch active work)

Process

Step 1 — Inventory

Run these four commands (parallel-safe) and capture the output:

sh
git worktree list --porcelain
gh pr list --author @me --state all --limit 50 --json headRefName,state,url,number
git branch --no-color | cat

Then query the DB for compdev_* databases. The management URL is the main worktree's DATABASE_URL with the database path swapped to postgres:

sh
bun -e '
  import { Client } from "pg";
  const raw = require("fs").readFileSync("packages/db/.env", "utf8");
  const url = raw.match(/^DATABASE_URL=(.*)$/m)[1].replace(/^["\x27]|["\x27]$/g, "");
  const mgmt = url.replace(/\/[^/?]+(\?|$)/, "/postgres$1");
  const c = new Client({ connectionString: mgmt });
  await c.connect();
  const r = await c.query("SELECT datname FROM pg_database WHERE datname LIKE \x27compdev\\\\_%\x27 ORDER BY 1");
  for (const row of r.rows) console.log(row.datname);
  await c.end();
'
Step 2 — Classify each worktree

For each worktree (skip the main one):

SignalClassification
Branch merged to main AND clean working tree AND no unpushed commitssafe
PR is CLOSED (not merged)needs-confirm
Uncommitted changes OR unpushed commitsneeds-confirm
No matching PR, no merge, has local commitskeep (user may still be working on it)
Is the main worktreeskip

Gather per worktree:

  • cd <path> && git status --porcelain | wc -l — uncommitted changes count
  • cd <path> && git log @{upstream}..HEAD --oneline 2>/dev/null | wc -l — unpushed commits (0 if no upstream)
  • Branch → PR lookup from step 1
Step 3 — Present to user

Show a table and explicit recommendations. Example:

Path                                    Branch                              PR state  Changes  Recommendation
.worktrees/sale-45-…                    mariano/sale-45-…                   MERGED    0 / 0    ✅ safe to remove
.worktrees/old-experiment               mariano/scratch                     —         3 / 0    ⚠ uncommitted — confirm first
.worktrees/worktree-env-auto-link       mariano/worktree-env-auto-link      OPEN      0 / 0    ⏳ keep (PR open)

Orphan databases (no worktree dir):
  compdev_abandoned_feature
  compdev_old_migration_test

Then ask: "Remove the items marked ✅? Confirm by listing anything you want me to also nuke from the ⚠ / ⏳ set."

Step 4 — Remove confirmed items

For each worktree the user approved:

sh
# 1. Remove the worktree dir (use --force only if user confirmed dirty-removal)
git worktree remove "<path>"           # clean case
git worktree remove --force "<path>"   # only after explicit user OK

# 2. Derive the slug and drop the database
slug=$(basename "<path>" | tr '[:upper:]' '[:lower:]' | tr '-' '_' | tr -cd 'a-z0-9_')
bun -e '
  import { Client } from "pg";
  const raw = require("fs").readFileSync("packages/db/.env", "utf8");
  const url = raw.match(/^DATABASE_URL=(.*)$/m)[1].replace(/^["\x27]|["\x27]$/g, "");
  const mgmt = url.replace(/\/[^/?]+(\?|$)/, "/postgres$1");
  const c = new Client({ connectionString: mgmt });
  await c.connect();
  await c.query(`DROP DATABASE IF EXISTS "compdev_'"$slug"'"`);
  await c.end();
  console.log("dropped compdev_'"$slug"'");
'

For orphan databases (no matching worktree dir), just drop them — no worktree to remove.

Do NOT delete the local branch unless the user explicitly asked. Branches can be recreated from origin cheaply; worktrees cannot.

Step 5 — Verify and report
sh
git worktree list
# then re-run the compdev_* query from step 1

Report back:

  • Worktrees removed (paths)
  • Databases dropped (names)
  • Anything skipped and why
  • What's left (still-active worktrees)
Show full SKILL.md (232 more words)Show less

Safety Rules

  • Never remove the main worktree. Its path is always the first line of git worktree list --porcelain.
  • Never --force without confirmation. Dirty worktrees can contain un-stashed work.
  • Never DROP DATABASE on anything not matching ^compdev_[a-z0-9_]+$. Never drop comp, postgres, or any production-looking name.
  • Never delete a local branch as part of cleanup unless the user explicitly asks. Orphaned branches are cheap; lost work isn't.
  • Never run this inside a worktree you're about to delete. cd to the main worktree first.

Common Mistakes

MistakeFix
Dropping the DB but leaving the worktree dirRun git worktree prune then git worktree remove
Removing the worktree but leaving the DB (accumulates orphans)Always do both in the same pass
Using hyphens in the DB nameThe hook slug rule is tr '-' '_' — always underscores
Running from inside a doomed worktreecd to the main worktree before starting the process
Using gh pr list on a branch with no PRMissing data is not "abandoned" — needs needs-confirm classification

Red Flags

If any of these show up mid-process, stop and ask the user:

  • A worktree has unpushed commits AND no PR → might be unreleased work
  • The classification returned >10 "safe to remove" items → unusual volume, double-check
  • git worktree remove errors with "working tree is not clean" → never retry with --force without explicit consent
  • A compdev_* name has weird characters or unexpected format → don't drop

Quick Reference

sh
# List everything
git worktree list --porcelain
gh pr list --author @me --state all --limit 50 --json headRefName,state

# Per-worktree inspection
git -C <path> status --porcelain
git -C <path> log @{upstream}..HEAD --oneline 2>/dev/null

# Clean removal
git worktree remove <path>

# Dirty removal (requires user confirmation first)
git worktree remove --force <path>

# Database drop (run from main worktree)
# See the bun -e snippets above for the exact invocation

© trycompai, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/stale-worktree-cleanup of trycompai/comp.

Open the folder on GitHubat commit 1bf4d52

Compare with similar skills

Stale Worktree Cleanup next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Stale Worktree Cleanup compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Stale Worktree Cleanup this skilltrycompai/comp2k—~1.8kAutomated safety check: NotesAGPL-3.0
Setup Devrelytcloud/pg_ducklake143—~2kAutomated safety check: NotesMIT
Finishing a Development Branchobra/superpowers296k5 repos~1.9kAutomated safety check: PassMIT
Finishing A Development Branchfarm-fe/farm5.6k33 repos~1.8kAutomated safety check: PassMIT
Git Worktree Cleanuplobehub/lobehub83k—~2.8kAutomated safety check: PassCustom licence
Pre-Release PR Triagejamiepine/voicebox57k—~3.1kAutomated safety check: PassMIT

Similar skills

  • Setup Dev

    relytcloud/pg_ducklake

    Dev environment setup for build tools, PostgreSQL, submodules, and worktrees.

    143 GitHub stars~2k tokensUpdated 1 mo ago
    DevelopmentAuto-check: notes
  • Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.

    296k GitHub starsUsed in 5 repos~1.9k tokens
    DevelopmentAuto-check passed
  • A skill your agent uses when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for…

    5.6k GitHub starsUsed in 33 repos~1.8k tokens
    DevelopmentAuto-check passed
  • Git Worktree Cleanup

    lobehub/lobehub

    Audits stale Git worktrees and branches with a bundled script, classifies each one, and deletes only after you approve the exact candidates.

    83k GitHub stars~2.8k tokensUpdated today
    DevelopmentAuto-check passed
  • Pre-Release PR Triage

    jamiepine/voicebox

    Sorts a backlog of open pull requests into must-merge, candidate, superseded and deferred, writes a triage doc and works the merge loop before a release.

    57k GitHub stars~3.1k tokensUpdated today
    DevelopmentAuto-check passed
  • Ccmanager Config

    kbwo/ccmanager

    Set up, review, or repair a CCManager config — .ccmanager.json at a git repository root, or the global ~/.config/ccmanager/config.json.

    1.3k GitHub stars~1.5k tokensUpdated 10 days ago
    DevelopmentAuto-check passed

More from trycompai/comp

All 31 skills in this repo
  • API Endpoint Contract

    trycompai/comp

    The contract every new or modified API endpoint must follow so it is correct for the public OpenAPI spec, the MCP server (npm @trycompai/mcp-server), the ValidationPipe, and the docs.

    2k GitHub stars~2.7k tokensUpdated 5 days ago
    Auto-check passed
  • Check Results Service

    trycompai/comp

    How to reuse ANY integration check's results in a feature via the universal CheckResultsService (apps/api integration-platform).

    2k GitHub stars~2.1k tokensUpdated 5 days ago
    Auto-check passed
  • Data

    trycompai/comp

    A skill your agent uses when implementing data fetching, API calls, server/client components, or SWR hooks

    2k GitHub stars~955 tokensUpdated 5 days ago
    Auto-check passed
  • A skill your agent uses when SDK generation failed or seeing errors.

    2k GitHub stars~938 tokensUpdated 5 days ago
    Auto-check passed
  • Forms

    trycompai/comp

    A skill your agent uses when building forms - covers React Hook Form, Zod validation, and form patterns

    2k GitHub stars~1k tokensUpdated 5 days ago
    Auto-check passed
  • Code

    trycompai/comp

    A skill your agent uses when writing TypeScript/React code - covers type safety, component patterns, and file organization

    2k GitHub stars~909 tokensUpdated 5 days ago
    Auto-check: warnings

Works with

Categories

Questions about Stale Worktree Cleanup

What does Stale Worktree Cleanup do?

A skill your agent uses when cleaning up old git worktrees, removing worktrees whose branches have merged or been abandoned, or dropping orphaned compdev Postgres databases. Stale Worktree Cleanup is an agent skill from trycompai/comp. Use when cleaning up old git worktrees, removing worktrees whose branches have merged or been abandoned, or dropping orphaned compdev Postgres databases.

When should I use Stale Worktree Cleanup?

Stale Worktree Cleanup fits situations like: cleaning up old git worktrees; removing worktrees whose branches have merged; dropping orphaned compdev Postgres databases; clean up worktrees.

How do I install Stale Worktree Cleanup in Claude Code?

Run `npx skills add trycompai/comp --skill stale-worktree-cleanup -a claude-code`. Or copy the skill folder (.agents/skills/stale-worktree-cleanup in trycompai/comp) into .claude/skills/stale-worktree-cleanup in your project. Claude Code loads it when a task matches its description.

How do I install Stale Worktree Cleanup in Codex?

Run `npx skills add trycompai/comp --skill stale-worktree-cleanup -a codex`. Or copy the skill folder (.agents/skills/stale-worktree-cleanup in trycompai/comp) into .agents/skills/stale-worktree-cleanup in your project. Codex loads it when a task matches its description.

Can I use Stale Worktree Cleanup in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add trycompai/comp --skill stale-worktree-cleanup -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/stale-worktree-cleanup, .gemini/skills/stale-worktree-cleanup, .github/skills/stale-worktree-cleanup and .opencode/skills/stale-worktree-cleanup in your project.

What does Stale Worktree Cleanup need to run?

Going by SKILL.md and its folder, Stale Worktree Cleanup needs the command-line tools its instructions call (git, gh and bun).

Does Stale Worktree Cleanup access the network?

SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Stale Worktree Cleanup safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Stale Worktree Cleanup use?

Stale Worktree Cleanup is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Stale Worktree Cleanup use?

About 1.8k tokens (SKILL.md is roughly 7.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Stale Worktree Cleanup?

Skills that share tags, products or a category with Stale Worktree Cleanup: Setup Dev (relytcloud/pg_ducklake, 143 stars), Finishing a Development Branch (obra/superpowers, 296k stars), Finishing A Development Branch (farm-fe/farm, 5.6k stars) and Git Worktree Cleanup (lobehub/lobehub, 83k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Stale Worktree Cleanup?

trycompai (a GitHub organization) maintains it in trycompai/comp, which has 2,016 GitHub stars. The repository holds 31 skills in this directory. The repository was last updated on October 2, 2026.

Source: trycompai/comp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.