Skip to main content

dev-reset-workspace

Clean the workspace of finished-work vestiges so new work can start from a fresh main branch

Aller à l'installation

Informations de source

Dépôt
Nebulavenus/forge-gpu
Dernière activité de la source
1 mars 2026 à 20:58
Langue détectée de SKILL.md
anglais
Étoiles
38
Forks
7

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
dev-reset-workspace
description
Clean the workspace of finished-work vestiges so new work can start from a fresh main branch
argument-hint
[--force]
disable-model-invocation
false
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 status` or `git diff` is 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. 1. **List running tasks:** Use the TaskList tool (or `/tasks` output) to find any in-progress background agents or shells. 2. **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 3. **Stop safe tasks** using TaskStop. Report any tasks you chose not to stop and why. 4. **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. 1. **Run diagnostics in parallel:** ```bash git status --short git diff --stat git diff --cached --stat git log --oneline -10 git branch -vv ``` 2. **If the working tree is clean** (no output from status/diff), skip to Phase 3. 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 `.gitignore` | `build/`, `*.o`, `*.spv`, `shaders/compiled/` | | **Editor / OS junk** | Add to `.git/info/exclude` (local only) | `.DS_Store`, `*.swp`, `.vscode/settings.json` | | **Meaningful new work** | Stash or warn — do NOT delete | New lesson files, library changes | | **Unknown** | Ask the user | Anything ambiguous | 4. **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 ``` 5. **Report findings** in a table: ```text Uncommitted 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) ``` 6. **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 with `git clean -fd` for those paths only (not a blanket clean). - **Build artifacts NOT in `.gitignore`:** Offer to add them to `.gitignore` and 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). --- ### Phase 3 — Switch to main and pull latest 1. **If not on `main`:** ```bash git checkout main ``` If checkout fails due to uncommitted changes, go back to Phase 2 — something was missed. 2. **Pull latest:** ```bash git pull origin main ``` 3. **Verify:** ```bash git status --short git diff --stat ``` Both 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`. 1. **Fetch latest remote state:** ```bash git fetch --prune origin ``` 2. **Find merged branches:** ```bash git branch --merged origin/main \ | sed 's/^[* ]*//' \ | grep -v '^main$' ``` 3. **Find branches whose remote tracking branch is gone** (PR was merged and remote branch deleted): ```bash git branch -vv | grep ': gone]' | awk '{print $1}' ``` 4. **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: ```bash git branch -d <branch-name> ``` - If `-d` fails (not fully merged), report it and skip — do NOT use `-D` unless the user explicitly confirms or `--force` was given AND the remote tracking branch is gone (meaning the PR was merged and the remote branch was deleted by GitHub). 5. **Report what was removed:** ```text Removed 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. ```bash 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. ```bash git status git diff git branch git log --oneline -3 ``` **Expected state:** - On branch `main` - Working tree clean (nothing to commit) - `git diff` produces no output - Only `main` (and any intentionally kept branches) remain - HEAD matches `origin/main` **Report final state:** ```text 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 `main` or `master`. - **Network errors on fetch/pull:** Report and continue with local cleanup. - **`gh` CLI not authenticated:** Skip PR-related analysis, proceed with git-only checks. ## Safety guarantees - **Never runs `git clean -fdx` on the entire repo.** Only cleans specific identified paths. - **Never runs `git reset --hard`** unless the user explicitly confirms. - **Never deletes branches with `-D`** without user confirmation (or `--force` with remote-gone confirmation). - **Always stashes rather than deletes** when in doubt about uncommitted work. - **Never modifies `.gitignore`** without showing the user what will be added. - **Reports everything** before acting — the user sees the plan first.
Voir sur GitHub