Session Cleanup
End-of-session housekeeping for git repositories. Use when the user asks to 'end of session', 'clean up session', 'session housekeeping', 'clean up branches', 'clean up worktrees', or 'clean up remote branches'.
git clone https://github.com/wrsmith108/session-cleanup-skill
git clone --depth=1 https://github.com/wrsmith108/session-cleanup-skill ~/.claude/skills/wrsmith108-session-cleanup-skill-session-cleanup
SKILL.mdSession Cleanup
Structured end-of-session housekeeping: doc review, branch audit, worktree removal, and remote sync.
Behavioral Classification
Type: Guided Decision
Directive: ASK, THEN EXECUTE
Audits each category and presents findings before taking any destructive action. Deletions always follow an explicit audit phase.
Execution Context Requirements
This skill spawns a general-purpose subagent that performs git operations and file edits.
Foreground execution required: Yes
Required tools: Read, Write, Edit, Bash, Grep, Glob
Fallback: If tools are denied, the subagent returns a checklist of recommended actions for the coordinator to apply manually.
Usage
Invoke at the end of a working session:
/session-cleanup
Or trigger via phrases: "end of session", "clean up branches", "clean up worktrees", "session cleanup"
Out of scope: PR creation/merge (
/ship), production deploys, Linear issue updates (/linear), resolving merge conflicts.
Five Phases
- Doc Review — CLAUDE.md staleness, MEMORY.md updates, submodule dirty state
- Branch Audit — PR status check, unpushed commit detection, squash-merge artifact filtering
- Branch Cleanup — Push unreleased content, cherry-pick docs to main, delete merged branches
- Worktree Cleanup — Remove stale worktrees via project script or
git worktree remove - Final State — Sync main, confirm clean working tree, report summary
Pre-Dispatch Check (REQUIRED — run before spawning agent)
Before launching the cleanup agent, run these two commands via Bash:
git status --porcelain git branch --list | grep -v "^\* main$"
If both return empty (working tree clean AND only
main branch exists locally), cleanup has almost certainly already run this session. Do NOT spawn the agent. Instead, tell the user:
"The repo looks clean already — only
, nothing uncommitted. Cleanup appears to have already run this session. Run it again anyway?"main
Only proceed to Dispatch if the user confirms, or if either check returns output (there is real work to do).
Dispatch
Use the Task tool with subagent_type="general-purpose" and pass the full contents of ~/.claude/skills/session-cleanup/agent-prompt.md as the prompt.
Changelog
v1.2.1 (2026-03-28)
- Fixed: Phase 3b remote branch deletion now batches all deletes into a single
invocation instead of a per-branch loop. Eliminates O(N) pre-push hook runs and avoids partial-deletion state from mid-loop hook failures. (SMI-3710)git push origin --delete b1 b2 ... bN
v1.2.0
- Initial structured release with five-phase workflow and pre-dispatch idempotency check