houseclean

$npx mdskill add SethGammon/Citadel/houseclean

Audit 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
---
```

More from SethGammon/Citadel