Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
terrylica avatar

Disk Hygiene

  • 246 installs
  • 62 repo stars
  • Updated August 3, 2026
  • terrylica/cc-skills

disk-hygiene is a Claude Code maintenance skill that audits and cleans development-machine disk usage—caches, build artifacts, and stale project folders—so developers recover free space without breaking active workspaces

About

disk-hygiene is a cc-skills utility for developers whose local disks fill up from node_modules, Docker layers, Xcode derived data, package caches, and abandoned clones. The skill guides safe inspection of large directories, identifies reclaimable artifacts, and applies conservative cleanup steps that preserve active repositories and running environments. Use disk-hygiene when installs fail for lack of space, IDEs lag from bloated caches, or a machine needs routine maintenance between sprints. It fits terminal-first workflows on macOS and Linux dev boxes where manual du/find cleanup is error-prone.

  • disk-hygiene

Disk Hygiene by the numbers

  • 246 all-time installs (skills.sh)
  • +2 installs in the week ending Aug 5, 2026 (Skillselion tracking)
  • Ranked #1,567 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/terrylica/cc-skills --skill disk-hygiene

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs246
repo stars62
Last updatedAugust 3, 2026
Repositoryterrylica/cc-skills

How do you free disk space on a dev machine?

Use disk-hygiene for development tasks

Who is it for?

Developers hitting disk-full errors from package managers, containers, or multi-repo workspaces who want guided, low-risk cleanup.

Skip if: Production server capacity planning or cloud storage lifecycle policies that require infrastructure-as-code changes.

When should I use this skill?

A developer reports low disk space, bloated caches, or wants routine local workstation hygiene before major installs.

What you get

Disk usage report, reclaimed gigabytes, and a list of removed caches or archived folders.

Files

SKILL.mdMarkdownGitHub ↗

Disk Hygiene

Audit disk usage, clean developer caches, find forgotten large files, and triage Downloads on macOS.
Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.

When to Use This Skill

Use this skill when:

  • User asks about disk space, storage, or cleanup
  • System is running low on free space
  • User wants to find old/forgotten large files
  • User wants to clean developer caches (brew, uv, pip, npm, cargo)
  • User wants to triage their Downloads folder
  • User asks about disk analysis tools (dust, dua, gdu, ncdu)

TodoWrite Task Templates

Template A - Full Disk Audit

1. Run disk overview (df -h / and major directories)
2. Audit developer caches (uv, brew, pip, npm, cargo, rustup, Docker)
3. Scan for forgotten large files (>50MB, not accessed in 180+ days)
4. Present findings with AskUserQuestion for cleanup choices
5. Execute selected cleanups
6. Report space reclaimed

Template B - Cache Cleanup Only

1. Measure current cache sizes
2. Run safe cache cleanups (brew, uv, pip, npm)
3. Report space reclaimed

Template C - Downloads Triage

1. List Downloads contents with dates and sizes
2. Categorize into groups (media, dev artifacts, personal docs, misc)
3. Present AskUserQuestion multi-select for deletion/move
4. Execute selected actions

Template D - Forgotten File Hunt

1. Scan home directory for large files not accessed in 180+ days
2. Group by location and type (media, ISOs, dev artifacts, documents)
3. Present findings sorted by size
4. Offer cleanup options via AskUserQuestion

---

Phase 1 - Disk Overview

Get the lay of the land before diving into specifics.

/usr/bin/env bash << 'OVERVIEW_EOF'
echo "=== Disk Overview ==="
df -h /

echo ""
echo "=== Major Directories ==="
du -sh ~/Library/Caches ~/Library/Logs ~/Library/Application\ Support \
  ~/.Trash ~/Downloads ~/Documents ~/Desktop ~/Movies ~/Music ~/Pictures \
  2>/dev/null | sort -rh

echo ""
echo "=== Developer Tool Caches ==="
du -sh ~/.docker ~/.npm ~/.cargo ~/.rustup ~/.local ~/.cache \
  ~/.conda ~/.pyenv ~/.local/share/mise 2>/dev/null | sort -rh
OVERVIEW_EOF

Phase 2 - Cache Audit & Cleanup

Cache Size Reference

CacheLocationTypical SizeClean Command
uv~/Library/Caches/uv/5-15 GBuv cache clean
Homebrew~/Library/Caches/Homebrew/3-10 GBbrew cleanup --prune=all
pip~/Library/Caches/pip/0.5-2 GBpip cache purge
npm~/.npm/_cacache/0.5-2 GBnpm cache clean --force
cargo~/.cargo/registry/cache/1-5 GBcargo cache -a (needs cargo-cache)
rustup~/.rustup/toolchains/2-10 GBrustup toolchain uninstall <name> (list with rustup toolchain list)
mise~/.local/share/mise/installs/<tool>/<version>/0.2-2 GB eachmise uninstall <tool>@<version> (list with mise ls)
DockerDocker.app5-30 GBdocker system prune -a
Playwright~/Library/Caches/ms-playwright/0.5-2 GBnpx playwright uninstall
sccache~/Library/Caches/Mozilla.sccache/1-3 GBrm -rf ~/Library/Caches/Mozilla.sccache
go-build~/Library/Caches/go-build/5-25 GBgo clean -cache (or rm -rf if go not on PATH)
huggingface~/.cache/huggingface/1-10 GBrm -rf ~/.cache/huggingface/hub/<model>

Safe Cleanup Commands (Always Re-downloadable)

/usr/bin/env bash << 'CACHE_CLEAN_EOF'
set -euo pipefail

echo "=== Measuring current cache sizes ==="
echo "uv:       $(du -sh ~/Library/Caches/uv/ 2>/dev/null | cut -f1 || echo 'N/A')"
echo "Homebrew: $(du -sh ~/Library/Caches/Homebrew/ 2>/dev/null | cut -f1 || echo 'N/A')"
echo "pip:      $(du -sh ~/Library/Caches/pip/ 2>/dev/null | cut -f1 || echo 'N/A')"
echo "npm:      $(du -sh ~/.npm/_cacache/ 2>/dev/null | cut -f1 || echo 'N/A')"

echo ""
echo "=== Cleaning ==="
brew cleanup --prune=all 2>&1 | tail -3
uv cache clean --force 2>&1
pip cache purge 2>&1
npm cache clean --force 2>&1
CACHE_CLEAN_EOF

Troubleshooting Cache Cleanup

IssueCauseSolution
uv cache lock heldAnother uv process runningUse uv cache clean --force
brew cleanup skips formulaeLinked but not latestSafe to ignore, or brew reinstall <pkg>
pip cache purge permission deniedSystem pip vs user pipUse python -m pip cache purge
Docker not runningDocker Desktop not startedStart Docker.app first, or skip

Phase 3 - Forgotten File Detection

Find large files that have not been accessed in 180+ days.

/usr/bin/env bash << 'STALE_EOF'
echo "=== Large forgotten files (>50MB, untouched 180+ days) ==="
echo ""

# Scan home directory (excluding Library, node_modules, .git, hidden dirs)
find "$HOME" -maxdepth 4 \
  -not -path '*/\.*' \
  -not -path '*/Library/*' \
  -not -path '*/node_modules/*' \
  -not -path '*/.git/*' \
  -type f -atime +180 -size +50M 2>/dev/null | \
while read -r f; do
  mod_date=$(stat -f '%Sm' -t '%Y-%m-%d' "$f" 2>/dev/null)
  size=$(du -sh "$f" 2>/dev/null | cut -f1)
  echo "${mod_date} ${size} ${f}"
done | sort

echo ""
echo "=== Documents & Desktop (>10MB, untouched 180+ days) ==="
find "$HOME/Documents" "$HOME/Desktop" \
  -type f -atime +180 -size +10M 2>/dev/null | \
while read -r f; do
  mod_date=$(stat -f '%Sm' -t '%Y-%m-%d' "$f" 2>/dev/null)
  size=$(du -sh "$f" 2>/dev/null | cut -f1)
  echo "${mod_date} ${size} ${f}"
done | sort
STALE_EOF

Common Forgotten File Types

TypeTypical LocationExample
Windows/Linux ISOsDocuments, Downloads.iso files from VM setup
CapCut/iMovie exportsMovies/Large .mp4 renders
Phone video transfersPictures/, DCIM/.MOV files from iPhone
Old Zoom recordingsDocuments/.aac, .mp4 from meetings
Orphaned downloadsDocuments/CFNetworkDownload_*.mp4
Screen recordingsDocuments/, Desktop/Capto/QuickTime .mov
TTS debug WAV~/.local/share/tts-debug-wav/, ~/.local/share/kokoro-debug*/Debug-mode TTS audio captures — can grow 1-2 GB/day if debug mode left on. Look for a tts-prune mise task in your repos or set tighter retention in the pruner script

Phase 4 - Downloads Triage

Use AskUserQuestion with multi-select to let the user choose what to clean.

Workflow

1. List all files in ~/Downloads with dates and sizes 2. Categorize into logical groups 3. Present AskUserQuestion with categories as multi-select options 4. Offer personal/sensitive PDFs separately (keep, move to Documents, or delete) 5. Execute selected actions

Categorization Pattern

/usr/bin/env bash << 'DL_LIST_EOF'
echo "=== Downloads by date and size ==="
find "$HOME/Downloads" -maxdepth 1 \( -type f -o -type d \) ! -path "$HOME/Downloads" | \
while read -r f; do
  mod_date=$(stat -f '%Sm' -t '%Y-%m-%d' "$f" 2>/dev/null)
  size=$(du -sh "$f" 2>/dev/null | cut -f1)
  echo "${mod_date} ${size} $(basename "$f")"
done | sort
DL_LIST_EOF

AskUserQuestion Template

When presenting Downloads cleanup options, use this pattern:

  • Question 1 (multiSelect: true) - "Which items in ~/Downloads do you want to delete?"
  • Group by type: movie files (with total size), old PDFs/docs, dev artifacts, app exports
  • Question 2 (multiSelect: false) - "What about personal/sensitive PDFs?"
  • Options: Keep all, Move to Documents, Delete (already have copies)
  • Question 3 (multiSelect: false) - "Ongoing cleanup tool preference?"
  • Options: dust + dua-cli, Hazel automation, custom launchd script

Disk Analysis Tools Reference

Comparison (Benchmarked on ~632GB home directory, Apple Silicon)

ToolWall TimeCPU UsageInteractive DeleteInstall
dust20.4s637% (parallel)No (view only)brew install dust
gdu-go28.8s845% (very parallel)Yes (TUI)brew install gdu
dua-cli37.1s237% (moderate)Yes (staged safe delete)brew install dua-cli
ncdu96.6s43% (single-thread)Yes (TUI)brew install ncdu

Recommended Combo

  • `dust` for quick "where is my space going?" - fastest scanner, tree output
  • `dua i` or `gdu-go` for interactive exploration with deletion

Quick Usage

# dust - instant tree overview
dust -d 2 ~              # depth 2
dust -r ~/Library         # reverse sort (smallest first)

# dua - interactive TUI with safe deletion
dua i ~                   # navigate, mark, delete with confirmation

# gdu-go - ncdu-like TUI, fast on SSDs
gdu-go ~                  # full TUI with delete support
gdu-go -n ~              # non-interactive (for scripting/benchmarks)

Install All Tools

brew install dust dua-cli gdu

Note: gdu installs as gdu-go to avoid conflict with coreutils.

Quick Wins Summary

Ordered by typical space reclaimed (highest first):

ActionTypical SavingsRiskCommand
go clean -cache5-25 GBNone (re-downloads)go clean -cache
uv cache clean5-15 GBNone (re-downloads)uv cache clean --force
brew cleanup --prune=all3-10 GBNone (re-downloads)brew cleanup --prune=all
Delete movie files in Downloads2-10 GBCheck firstManual after AskUserQuestion
Prune old rustup toolchains2-5 GBKeep currentrustup toolchain list then rustup toolchain uninstall <name>
Prune stale mise toolchains0.5-3 GBCross-check .mise.toml pins firstmise ls, then mise uninstall <tool>@<version>
npm cache clean --force0.5-2 GBNone (re-downloads)npm cache clean --force
pip cache purge0.5-2 GBNone (re-downloads)pip cache purge
Docker system prune5-30 GBRemoves stopped containersdocker system prune -a
Empty TrashVariableIrreversiblerm -rf ~/.Trash/*

Post-Change Checklist

After modifying this skill:

1. [ ] Cache commands tested on macOS (Apple Silicon) 2. [ ] Benchmark data still current (re-run if tools updated) 3. [ ] AskUserQuestion patterns match current tool API 4. [ ] All bash blocks use /usr/bin/env bash << 'EOF' wrapper 5. [ ] No hardcoded user paths (use $HOME) 6. [ ] Append changes to evolution-log.md

Troubleshooting

IssueCauseSolution
uv cache clean hangsLock held by running uvUse --force flag
brew cleanup frees 0 bytesAlready clean or formulae linkedRun brew cleanup --prune=all
find reports permission deniedSystem Integrity ProtectionAdd 2>/dev/null to suppress
gdu command not foundInstalled as gdu-goUse gdu-go (coreutils conflict)
dust shows different size than dfCounting method differsNormal - df includes filesystem overhead
Stale file scan is slowDeep directory treeLimit -maxdepth or exclude more paths
Docker not accessibleDesktop app not runningStart Docker.app or skip Docker cleanup
parse error near TASK_ID=$(pueue add ...) from heredoc with spaced pathsA user shell hook (e.g. pueue submission) re-parses the command string and breaks on ${var}/Path With Spaces/* globs inside heredocsWrite multi-line scripts to /tmp/<name>.sh first via Write tool, then invoke as bash /tmp/<name>.sh — bypasses the inline heredoc → hook re-quote path entirely
Removing a mise toolchain triggers immediate auto-reinstallA project's .mise.toml pins the version you just removed; mise restores it on next invocation from that projectBefore mise uninstall <tool>@<version>, grep all reachable .mise.toml and mise.toml files for the version. If pinned, leave it alone or update the pin first. Same applies to rustup toolchains vs. rust-toolchain.toml files in projects.

Hook-safe multi-line scripts

If the user's shell environment has bash hooks that intercept tool calls (pueue, asciinema, etc.) and the heredoc pattern fails with cryptic parse errors, write the script to a temp file and invoke it:

# Instead of: bash << 'EOF'  ... EOF
# Use: Write tool → /tmp/<task>.sh, then:
bash /tmp/<task>.sh

Single-line bash invocations like du -sh "$HOME/Library/Application Support"/Google/* 2>/dev/null | sort -rh | head work fine even with hooks installed — only multi-line heredocs containing spaced-path globs are problematic.

Post-Execution Reflection

After this skill completes, reflect before closing the task:

0. Locate yourself. — Find this SKILL.md's canonical path before editing. 1. What failed? — Fix the instruction that caused it. 2. What worked better than expected? — Promote to recommended practice. 3. What drifted? — Fix any script, reference, or dependency that no longer matches reality. 4. Log it. — Evolution-log entry with trigger, fix, and evidence.

Do NOT defer. The next invocation inherits whatever you leave behind.

Related skills

FAQ

What does disk-hygiene clean on a dev machine?

disk-hygiene focuses on development caches, build artifacts, and stale project folders that consume local disk. The skill prioritizes safe, inspect-first cleanup so active repositories and running environments stay intact.

When should developers run disk-hygiene?

disk-hygiene helps when installs fail from low disk space, IDEs slow down from bloated caches, or routine maintenance is overdue. Developers invoke it before large Xcode, Docker, or package-manager updates.

Backend & APIsbackendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.