houseclean
$
npx mdskill add SethGammon/Citadel/housecleanAudit drives and reclaim space from orphaned caches and artifacts.
- Identifies bloated tool caches and untracked worktrees consuming disk.
- Scans all drives for large directories and buildable artifacts.
- Generates prioritized migration commands based on file size and age.
- Outputs a clear action plan with specific shell commands to execute.
SKILL.md
.github/skills/housecleanView on GitHub ↗
---
name: houseclean
description: >-
Cross-drive storage audit and cleanup. Surveys all drives, finds orphaned git
worktrees, large AI tool caches (.ollama, .gemini, .cursor, npm, pip), and
buildable artifacts (node_modules, .venv). Produces a prioritized action plan
with specific migration commands. Use when disk space is low or worktrees need
cleanup; do NOT use for project structure issues (use /organize instead).
user-invocable: true
auto-trigger: false
trigger_keywords:
- houseclean
- house clean
- disk space
- free space
- c drive full
- drive full
- running out of space
- clean up disk
- orphaned worktrees
- clean worktrees
- disk audit
- storage audit
- move to another drive
- free up space
last-updated: 2026-04-03
---
# /houseclean — Storage Audit and Cleanup
Use when disk space is low, AI tool caches are bloated, or worktrees need cleanup.
Do NOT use for project structure issues (use `/organize`) or pre-merge worktree review (use `/merge-review`).
## Orientation
**Use when:** cross-drive storage audit -- finds orphaned repos, stale branches, and large directories across all drives.
**Don't use when:** auditing project infrastructure only (use /infra-audit); cleaning a specific directory (use Bash directly).
## Invocation Forms
```
/houseclean # Full audit — all phases
/houseclean --quick # Drive survey + quick wins only (no deep scan)
/houseclean --worktrees # Orphaned worktree audit only
/houseclean --ai-tools # AI tool cache audit only
/houseclean --projects # Project artifact scan only (node_modules, .venv, etc.)
/houseclean --migrate X # Migration instructions for a specific tool (ollama, gemini, npm, cursor)
```
## Protocol
### Phase 1: Drive Survey
**Windows (PowerShell):**
```powershell
Get-PSDrive -PSProvider FileSystem | Select-Object Name, Used, Free, Root | Format-Table -AutoSize
```
Present as a table with Drive, Total, Used, Free, Label columns.
Thresholds: C: free < 5 GB → CRITICAL. C: free < 20 GB → WARNING.
Store which drives have free space — these are migration targets.
### Phase 2: C Drive Hot Spots
**Windows (PowerShell):**
```powershell
Get-ChildItem "C:\Users\$env:USERNAME" -Directory -ErrorAction SilentlyContinue |
ForEach-Object {
$s = (Get-ChildItem $_.FullName -Recurse -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
[PSCustomObject]@{ GB = [math]::Round($s/1GB,2); Path = $_.Name }
} | Sort-Object GB -Descending | Select-Object -First 15 | Format-Table -AutoSize
```
Tag each entry:
- **AI-tool-data** — `.ollama`, `.gemini`, `.cursor`, `.windsurf`, `.codex`, `.continue`
- **IDE-cache** — `.vscode`, `.idea`, `AppData\Local\JetBrains`
- **Package-cache** — `AppData\Local\npm-cache`, `AppData\Local\pip\cache`, `.gradle`, `.m2`
- **Conversation-history** — `.claude\projects`
- **Projects** — `Desktop`, `Documents`, user project directories
- **System** — `AppData\Local\Microsoft`, `AppData\Roaming`
### Phase 3: Orphaned Worktree Audit
```bash
git rev-parse --show-toplevel
git worktree list
```
For each worktree (excluding main):
1. Check if branch is merged: `git branch --merged HEAD | grep "{branch-name}"`
2. Verify worktree directory exists
3. Check uncommitted changes: `git -C "{worktree-path}" status --short`
Classify:
- **SAFE TO REMOVE** — merged into HEAD, no uncommitted changes
- **REVIEW FIRST** — not merged, has changes
- **STALE** — path missing (registered but deleted)
- **ACTIVE** — not merged, no changes (possibly in-flight)
Auto-remove SAFE TO REMOVE and STALE:
```bash
git worktree remove "{path}" --force
git branch -d "{branch-name}"
```
Report what was removed. Ask before touching REVIEW FIRST or ACTIVE.
### Phase 4: AI Tool Cache Audit
Check these paths (Windows). Report any > 500 MB:
```
~/.ollama/models → Ollama LLM models
~/.gemini/antigravity → Gemini CLI data/cache
~/.cursor → Cursor editor
~/.windsurf → Windsurf editor
~/.codex → Codex CLI
~/.continue → Continue.dev extension
~/.cache/huggingface → HuggingFace model cache
AppData/Local/npm-cache → npm package cache
AppData/Local/pip/cache → pip package cache
AppData/Local/Temp → Windows temp files
```
Tag recommended action:
- **SAFE TO CLEAR** — rebuilds automatically (npm, pip, temp)
- **MOVE** — redirectable via env var (ollama models, gemini)
- **REVIEW** — needs user decision (cursor settings, IDE data)
### Phase 5: Project Artifact Scan
Scan C: for rebuildable artifacts: `node_modules`, `.venv`, `__pycache__`, `.pytest_cache`, `dist/`, `build/`. Report path, size, last modified. Flag items not modified in > 30 days. Ask user before deleting any.
### Phase 6: Quick Wins Report
```
=== QUICK WINS (safe to act on now) ===
1. npm-cache 5.7 GB CLEAR npm cache clean --force
2. Merged worktrees (17) 50 MB REMOVED (already done)
=== MOVE TO ANOTHER DRIVE ===
3. ~/.ollama/models 15.8 GB MOVE→F: See migration guide
4. ~/.gemini 10.2 GB MOVE→F: See migration guide
=== REVIEW WITH USER ===
5. ~/.claude/projects 3.1 GB REVIEW Old conversation history
Total recoverable on C: ~47 GB
```
### Phase 7: Migration Reference
#### Ollama (models → another drive)
```powershell
Get-Process ollama -ErrorAction SilentlyContinue | Stop-Process
robocopy "C:\Users\$env:USERNAME\.ollama" "F:\.ollama" /E /MOVE /LOG:ollama-move.log
[Environment]::SetEnvironmentVariable("OLLAMA_MODELS", "F:\.ollama\models", "User")
```
#### Gemini CLI
Check if `GEMINI_HOME` is supported: `gemini --help | grep -i "home\|data\|dir"`
If supported:
```powershell
robocopy "C:\Users\$env:USERNAME\.gemini" "F:\.gemini" /E /MOVE
[Environment]::SetEnvironmentVariable("GEMINI_HOME", "F:\.gemini", "User")
```
If not supported, create a junction:
```powershell
robocopy "C:\Users\$env:USERNAME\.gemini" "F:\.gemini" /E /MOVE
cmd /c mklink /J "C:\Users\$env:USERNAME\.gemini" "F:\.gemini"
```
#### npm cache
```bash
npm cache clean --force
npm config set cache "F:/npm-cache"
```
#### Cursor/Windsurf/Codex (junction method)
```powershell
robocopy "C:\Users\$env:USERNAME\.cursor" "F:\.cursor" /E /MOVE
cmd /c mklink /J "C:\Users\$env:USERNAME\.cursor" "F:\.cursor"
```
#### git worktrees
Move the main repo to another drive:
```powershell
robocopy "C:\Users\$env:USERNAME\Desktop\ProjectName" "F:\Projects\ProjectName" /E /MOVE
```
After moving, record in `.claude/harness.json`:
```json
{ "storage": { "projects_root": "F:/Projects" } }
```
#### Claude conversation history (`.claude/projects`)
Cannot be relocated. Archive inactive subdirectories to a backup drive, or test symlinking.
---
## Fringe Cases
**macOS/Linux:** Use `du -sh`, `df -h`. Paths shift to `~/`.
**Worktree removed but branch exists:** `git branch -d {branch}` after `git worktree remove`.
**Ollama in use:** Stop before moving model files.
**Junction already exists:** `cmd /c rmdir "C:\...\tool-dir"` (no contents deleted), then recreate.
**No other drives:** Clear caches first (npm, pip, temp), then rebuildable artifacts, then unused Ollama models.
---
## Citadel Infrastructure Integration
After running /houseclean, update `.claude/harness.json` `storage` section with `projects_root`, `ai_tools` paths, and `last_audit` date. Future runs verify migrations are still in place.
---
## Contextual Gates
**Disclosure:** "Auditing all drives. Will present deletion suggestions — nothing deleted without your confirmation."
**Reversibility:** amber — deletes files and directories if user confirms; undo requires git or manual recovery for non-git files
**Trust gates:**
- Any: view audit findings and suggestions
- Familiar (5+ sessions): confirms deletions before executing; novices should review suggestions carefully before confirming
## Quality Gates
- Never delete data without confirming branch is merged into HEAD
- Always verify uncommitted changes before removing a worktree
- Always stop Ollama before moving model files
- Show exact commands — no vague instructions
- Re-run drive survey to confirm C: free space increased
- Update harness.json `storage` section for any migrations completed
- If total freed is 0 GB, surface why and what the user must do manually
---
## Exit Protocol
1. Show total space freed this session
2. Show space still recoverable with user action
3. Show current C: free space
4. Suggest: "/houseclean runs well as a monthly check — use /schedule to add it"
```
---HANDOFF---
- Freed: {X} GB (caches cleared, worktrees removed)
- Pending user action: {Y} GB (AI tools to move, projects to migrate)
- C: free space now: {Z} GB
- harness.json storage section: updated / not updated
- Reversibility: amber — deleted files require git or manual recovery; moved files can be moved back manually
---
```