Agent skill
dev-reset-workspace
Clean the workspace of finished-work vestiges so new work can start from a fresh main branch
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/dev-reset-workspace
SKILL.md
Reset the workspace to a clean state on main with no leftover branches,
uncommitted files, or background agents from previous work. Run this between
tasks to start fresh.
When to use this skill:
- After merging a PR and before starting new work
- When the workspace has accumulated stale branches or uncommitted files
- When background agents from a previous session may still be running
- Any time
git statusorgit diffis not clean and you want a fresh start
Arguments
--force(optional): Skip interactive prompts — auto-delete safe-to-remove files and stale branches without asking. Still preserves files that appear to contain meaningful uncommitted work.
Workflow
Work through each phase in order. Report findings at each phase before
acting. Unless --force is given, ask the user before destructive actions.
Phase 1 — Stop background agents
Check for running background tasks (agents, shells, builds) from previous work.
-
List running tasks: Use the TaskList tool (or
/tasksoutput) to find any in-progress background agents or shells. -
For each running task:
- Identify what it is doing (build, test, agent work, etc.)
- Determine if it is safe to stop — a task is safe to stop if:
- It belongs to a completed/merged PR
- It is idle or stuck
- It is a stale monitoring or polling loop
- A task is NOT safe to stop if:
- It is actively writing files that haven't been committed
- It is mid-push or mid-merge
-
Stop safe tasks using TaskStop. Report any tasks you chose not to stop and why.
-
If no tasks are running, report "No background tasks found" and proceed.
Phase 2 — Analyze uncommitted changes
Examine the working tree for any modifications or untracked files.
-
Run diagnostics in parallel:
bashgit status --short git diff --stat git diff --cached --stat git log --oneline -10 git branch -vv -
If the working tree is clean (no output from status/diff), skip to Phase 3.
-
For each uncommitted or untracked file, classify it:
Classification Action Examples Belongs to a merged PR Should have been committed — warn user Source files matching recent PR topics Build artifact / generated file Safe to delete or add to .gitignorebuild/,*.o,*.spv,shaders/compiled/Editor / OS junk Add to .git/info/exclude(local only).DS_Store,*.swp,.vscode/settings.jsonMeaningful new work Stash or warn — do NOT delete New lesson files, library changes Unknown Ask the user Anything ambiguous -
To classify files, check recent context:
bash# Recent merged PRs gh pr list --state merged --limit 5 # Recent branches (local and remote) git branch -a --sort=-committerdate | head -20 # What the current branch was working on git log --oneline HEAD...origin/main 2>/dev/null -
Report findings in a table:
textUncommitted files analysis: ────────────────────────────────────────────── M lessons/gpu/17-normal-maps/main.c → Belongs to merged PR #42 (stale edit) ?? build/CMakeCache.txt → Build artifact (safe to delete) ?? .DS_Store → OS junk (add to local exclude) A lessons/gpu/30-new-lesson/main.c → New work (stash? ask user) -
Take action per classification:
- Merged-PR leftovers: Warn the user. These may be edits that should
have been in the PR. Offer to discard them (
git checkout -- <file>) or stash them. - Build artifacts already in
.gitignore: Delete withgit clean -fdfor those paths only (not a blanket clean). - Build artifacts NOT in
.gitignore: Offer to add them to.gitignoreand then delete. - Editor/OS junk: Add patterns to
.git/info/exclude(not.gitignore, since these are personal and shouldn't be committed). - Meaningful new work:
git stash push -m "dev-reset: uncommitted work". Report the stash entry so the user can recover it. - Unknown: Ask the user with AskUserQuestion (options: delete, stash, gitignore, local exclude, skip).
- Merged-PR leftovers: Warn the user. These may be edits that should
have been in the PR. Offer to discard them (
Phase 3 — Switch to main and pull latest
-
If not on
main:bashgit checkout mainIf checkout fails due to uncommitted changes, go back to Phase 2 — something was missed.
-
Pull latest:
bashgit pull origin main -
Verify:
bashgit status --short git diff --statBoth should produce no output. If not, investigate and resolve.
Phase 4 — Remove stale local branches
Find and delete local branches whose work has been merged into origin/main.
-
Fetch latest remote state:
bashgit fetch --prune origin -
Find merged branches:
bashgit branch --merged origin/main \ | sed 's/^[* ]*//' \ | grep -v '^main$' -
Find branches whose remote tracking branch is gone (PR was merged and remote branch deleted):
bashgit branch -vv | grep ': gone]' | awk '{print $1}' -
Combine both lists (deduplicate). For each branch:
-
Confirm it is not the current branch
-
Confirm it has been merged or its remote is gone
-
Delete it:
bashgit branch -d <branch-name> -
If
-dfails (not fully merged), report it and skip — do NOT use-Dunless the user explicitly confirms or--forcewas given AND the remote tracking branch is gone (meaning the PR was merged and the remote branch was deleted by GitHub).
-
-
Report what was removed:
textRemoved stale branches: ✓ lesson-17-normal-maps (merged, remote deleted) ✓ lesson-18-scene-loading (merged, remote deleted) ⏭ experiment-wip (not merged, kept)
Phase 5 — Clean up worktrees
Check for leftover Claude Code worktrees from previous sessions.
git worktree list
If any worktrees exist under .claude/worktrees/:
- Check if they have uncommitted changes (
git -C <path> status --short) - If clean:
git worktree remove <path> - If dirty: warn the user and skip
Phase 6 — Final verification
Run a final check to confirm everything is clean.
git status
git diff
git branch
git log --oneline -3
Expected state:
- On branch
main - Working tree clean (nothing to commit)
git diffproduces no output- Only
main(and any intentionally kept branches) remain - HEAD matches
origin/main
Report final state:
Workspace Reset Complete
════════════════════════
Branch: main (up to date with origin/main)
Working tree: clean
Stale branches: 3 removed, 0 kept
Background tasks: 0 running
Stashed work: 1 entry (use `git stash list` to see)
Ready for new work.
Error handling
- Merge conflicts during pull: Report the conflict and exit — user must resolve manually.
- Protected branches: Never force-delete
mainormaster. - Network errors on fetch/pull: Report and continue with local cleanup.
ghCLI not authenticated: Skip PR-related analysis, proceed with git-only checks.
Safety guarantees
- Never runs
git clean -fdxon the entire repo. Only cleans specific identified paths. - Never runs
git reset --hardunless the user explicitly confirms. - Never deletes branches with
-Dwithout user confirmation (or--forcewith remote-gone confirmation). - Always stashes rather than deletes when in doubt about uncommitted work.
- Never modifies
.gitignorewithout showing the user what will be added. - Reports everything before acting — the user sees the plan first.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?