Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Clean up a single Replit-hosted Git repository — squash-merge and delete old, merged, or abandoned branches and pull requests (including Replit-generated subrepl-*, replit-agent, and agent/* branches), and normalize file/folder names against a kebab-case default with documented exceptions. Use when a user asks to purge dead/stale branches, clean up merged PRs, decrapify or tidy the repo, fix inconsistent file naming, or wants a repeatable Replit-repo hygiene routine across multiple Repls.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 76% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 69% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 92% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 64% | 0% |
OverKill Hill P³ · overkillhill.com · github.com/OKHP3
A portable, transferable Agent Skill for one specific and common situation: a single Replit workspace's Git checkout has accumulated stale branches, merged/abandoned pull requests, and inconsistently named files, and the user wants it cleaned up safely. Copy this skill's folder into .agents/skills/ in any Repl to reuse it there.
This is a condensed, Replit-shaped descendant of two broader OverKill Hill P³ skills:
okhp3-repository-janitor (multi-repo branch/PR lifecycle across local mirrors)okhp3-repository-organizer (deep content-first repository classification and scaffolding)Use this skill instead of those two when the scope is "one Repl, tidy the branches and the names," not a fleet of local clones or a full repository re-architecture.
git/gh inspection before proposing any change. Never delete a branch, PR, file, or folder during discovery.git fetch --all to refresh remote-tracking refs. Never pass --prune until every stale remote branch has been classified.git-remote skill or gh pr view) before recommending deletion — an old branch can still have an open, wanted PR.subrepl-*, replit-agent, agent/*) is a hint that the branch may be an ephemeral task-agent artifact, not proof it is safe to delete. Confirm it is merged or explicitly abandoned before including it in the delete list. The current/active branch (checked out, or the one the live agent session is using) is never a deletion candidate.references/naming-conventions.md) but respect the documented exceptions: PascalCase React components, camelCase hooks, ALL-CAPS root governance files (README.md, LICENSE, CHANGELOG.md, AGENTS.md, etc.), and files whose name is dictated by a tool or a web standard (package.json, .replit, robots.txt, CNAME, ...).main, force-push, or delete stashes/archive refs without a separately stated and confirmed recovery plan.bashgit fetch --all python3 .agents/skills/okhp3-repl-repo-janitor/scripts/audit-repo.py --root . --base origin/main
This prints a JSON report: every local branch with its last-commit metadata, whether it's merged into the base branch, and whether its name matches a known Replit-generated pattern. It never mutates anything.
For each unmerged branch, resolve its pull-request state before deciding: use the git-remote skill (or gh pr list --head <branch> / gh pr view if the gh CLI and a token are available) to check open/closed/merged status and CI checks. Do not assume a branch is dead just because it's old — check for an open PR first.
Bucket every non-current, non-main branch into one of:
origin/main, or confirmed abandoned with no open PR and no unique unmerged valueThe same script also reports naming violations (mixed/camel/Pascal case outside the documented exceptions, spaces in filenames) and known detritus folder names present in the tree (attached_assets/, _unused/, tmp/, temp/, etc., and their hyphen variants). Treat this as a starting point, not the full picture — also scan manually for:
sed/mktemp scratch file committed under a random name instead of the real target file — check content, not just the name, before judging)Present findings in this exact shape (mirrors the OverKill Hill P³ "Decrapify" format so the user gets a consistent report across every Repl):
## Branches & PRs
- MERGE: <branch> — PR #<n>, checks green, approved → squash-merge then delete
- DELETE: <branch> — merged into origin/main on <date>, safe to remove
- KEEP: <branch> — <reason>
- REVIEW: <branch> — <what's unclear, what you need from the user>
## A. DELETE
- <file/folder> — <why it's dead>
## B. GITIGNORE-AND-UNTRACK
- <path> — currently tracked but matches a build/working-artifact pattern
## C. TRIAGE-THEN-DELETE
- <path> — read first to confirm nothing is stranded, then remove
## D. RENAME
- <old-name> → <new-name> — <which naming rule it violates>, <what else must change in the same commit>Stop here. Do not execute until the user approves specific items — approving "the plan" in general is not the same as approving each destructive line.
For each approved branch merge: refresh, verify the expected head, merge via the pull request (squash), refetch, then delete only that exact verified-merged branch — remote first, then the local tracking branch. For each approved file/folder action: use git rm/git mv (not raw rm) so history and diffs stay clean, unless the target was never tracked (e.g. a gitignored working file), in which case a plain rm is fine.
After executing: re-run the audit script, run git status --short, and confirm the workflow/app still starts cleanly if any tracked source file moved or was renamed.
scripts/audit-repo.py — read-only branch + naming + detritus audit for a single local checkout. Safe to run anytime; makes no changes.references/naming-conventions.md — the kebab-case default and its structural exceptions, condensed for reuse across any Repl (not tied to a specific brand's folder taxonomy).Adapted from okhp3-repository-janitor and okhp3-repository-organizer, narrowed for the one-Repl-one-checkout case. Built by Jamie Hill · OverKill Hill P³ MIT License — free to use, fork, and adapt.
Other measured skills in the registry, with their headline benchmark lift.