Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Safely reclaim disk space on a Mac — the trustworthy, transparent, reversible alternative to CleanMyMac and similar tools. Use whenever the user says their Mac disk or storage is full or nearly full, gets a "startup disk almost full" / low-storage warning, asks to free up space, clean/clear caches, remove junk, delete leftover files from apps they uninstalled, or find what's eating their disk — in any language (e.g. English "my mac is out of space", "free up disk", "clear caches", "what's taking
.claude/skills/davila7-mac-storage-cleaner/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-13 | ✗→✓ | ▲ Improved | 136% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 79% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 60% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 103% | 0% |
Free disk space the way a careful engineer would, and earn the trust one-click cleaners lose: measure first, delete only what provably regenerates, make anything riskier reversible, ask before anything expensive, log every action, and report honestly. The differentiator over CleanMyMac-style tools is judgment and transparency — the user sees what will go and why, and can undo it.
Scripts live in scripts/; the full tiered inventory, exact reclaim commands, and gotchas are in references/cache-catalog.md. Read the catalog whenever you hit something a script didn't classify or you need the precise command.
caches; the only cost is a slower next build/install.
rm. Ask-tier items, app leftovers, bigfiles — move them to the Trash with trash-items.sh so the user can restore them. Reversibility is the whole point; never hard-delete a user's data.
license, an unpushable Xcode archive, or someone's only local backup is not.
~/Library/Logs/mac-storage-cleaner/operations.log.Locating the scripts. The commands below resolve $D to this skill's own directory so they work whether the skill was installed as a plugin ($CLAUDE_PLUGIN_ROOT is set) or as a standalone skill (~/.claude/skills/…). Shell state doesn't persist between commands, so each block re-resolves $D.
bashD="${CLAUDE_PLUGIN_ROOT:+$CLAUDE_PLUGIN_ROOT/skills/mac-storage-cleaner}"; D="${D:-$HOME/.claude/skills/mac-storage-cleaner}" bash "$D/scripts/survey.sh"
Prints free space and sizes every cache that exists on this machine, grouped safe / ask / never / app-data. Never skip it — locations and sizes differ on every Mac. Note current free space for the before/after report.
Tell the user briefly what the safe tier removes and roughly how much it frees, then:
bashD="${CLAUDE_PLUGIN_ROOT:+$CLAUDE_PLUGIN_ROOT/skills/mac-storage-cleaner}"; D="${D:-$HOME/.claude/skills/mac-storage-cleaner}" bash "$D/scripts/clean-safe.sh"
Removes only the vetted safe allowlist (nothing else — the survey's "other large caches" list is for the user to review, not for auto-deletion), handles read-only files, skips anything macOS protects (reporting rather than failing), runs brew cleanup -s --prune=all and removes unavailable simulators, logs each deletion, and prints what it reclaimed. If the user only wanted specific items, delete those directly instead.
Browser & Electron app caches (Chrome/Arc/Slack/VS Code/…) are safe but live inside app-data folders — clear only the Cache/Code Cache/GPUCache subfolders the survey lists, ideally with the app quit, and never the whole app folder. Exact paths: references/cache-catalog.md.
Big but not free caches (Docker images, ML models, simulator devices, Xcode Archives, module stores). List each with size + a specific recommendation; let the user choose. Use the tool-native command, and prefer Trash for file deletions. Key ones (full detail in the catalog):
docker system prune -a, never rm the VM disk.xcrun simctl delete unavailable is safe; deleting active devices wipes state.bashD="${CLAUDE_PLUGIN_ROOT:+$CLAUDE_PLUGIN_ROOT/skills/mac-storage-cleaner}"; D="${D:-$HOME/.claude/skills/mac-storage-cleaner}" bash "$D/scripts/find-extras.sh"
Surfaces the real hogs a cache sweep ignores: leftover data from uninstalled apps, big files (>500MB), stale installers (.dmg/.pkg), and old Downloads. Everything here is ask-tier — present candidates, let the user pick, then remove reversibly:
bashD="${CLAUDE_PLUGIN_ROOT:+$CLAUDE_PLUGIN_ROOT/skills/mac-storage-cleaner}"; D="${D:-$HOME/.claude/skills/mac-storage-cleaner}" bash "$D/scripts/trash-items.sh" "/path/one" "/path/two"
If trashing reports "could NOT trash (permissions/TCC?)" for every item, the controlling app hasn't been granted Automation control of Finder — a normal first-run state. Tell the user to allow it in System Settings › Privacy & Security › Automation (enable Finder for the terminal/app), then re-run; or move the item to the Trash manually in Finder. Don't report space as freed when items logged trash-failed — nothing was actually removed.
App leftovers need verification. The scan lists containers whose owning app a quick check couldn't confirm is installed — but Spotlight misses un-indexed apps, so some candidates are still installed. Before proposing to remove any leftover, confirm the app is really gone (check /Applications, mdfind, or just ask the user "do you still use X?"), and always Trash it, never rm. To also clear a confirmed-uninstalled app's other leftovers (Preferences, Application Support, Logs, Saved State, etc.), see the leftover-location list in the catalog.
In the user's language: before → after free space (df -h /System/Volumes/Data), a short list of what was cleared/trashed with sizes, a one-line note that the first build/install afterward will be slower, the still-large "ask" items each with a recommendation, and the log path.
If free space rose less than the reclaimed size suggests, explain APFS purgeable space: macOS may hold freed space as purgeable (often behind Time Machine local snapshots) and release it on demand — the space is genuinely recovered. Don't chase it with sudo.
Read references/cache-catalog.md for the full tiered inventory and gotchas. The essentials:
(~/Library/Application Support/MobileSync/Backup), Photos library, Mail/Messages data, whole app-support folders, ~/.ssh/~/.aws/keychains, Time Machine snapshots. Report their size so the user knows, but don't touch them.
downloaded photos/videos in their caches. Don't bulk-delete these; point the user to the app's own "Clear Cache" (e.g. Telegram › Settings › Data and Storage › Storage Usage) so they choose what to drop.
sudo into /System, /Library/Caches, /private/var/folders, orSIP-protected areas — that's macOS's job.
~/.cargo (has installed binaries — only clearregistry/), ~/.m2 (has settings.xml — only clear repository/), ~/.gradle (only caches/). ~/.npm is pure cache so it's fine whole.
du; rm -rf on multiple paths keepsgoing after a failure, so never assume total success or total failure.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 12,074 | 6,473 | -46% | 1 | 1 | 0% | 1,978 | 2,243 | +13% | 0 | 0 | — |
case-02 | fail→fail | 18,682 | 3,598 | -81% | 1 | 1 | 0% | 3,709 | 2,357 | -36% | 0 | 0 | — |
case-03 | fail→fail | 21,211 | 2,755 | -87% | 1 | 1 | 0% | 3,812 | 2,242 | -41% | 0 | 0 | — |
case-04 | pass→pass | 12,058 | 11,023 | -9% | 1 | 1 | 0% | 2,094 | 3,811 | +82% | 0 | 0 | — |
case-05 | pass→pass | 13,366 | 10,240 | -23% | 1 | 1 | 0% | 2,438 | 3,766 | +54% | 0 | 0 | — |
case-06 | pass→pass | 7,852 | 6,124 | -22% | 1 | 1 | 0% | 1,341 | 2,826 | +111% | 0 | 0 | — |
case-07 | pass→pass | 9,855 | 7,294 | -26% | 1 | 1 | 0% | 1,538 | 3,041 | +98% | 0 | 0 | — |
case-08 | fail→fail | 8,971 | 6,384 | -29% | 1 | 1 | 0% | 1,732 | 2,891 | +67% | 0 | 0 | — |
case-09 | pass→pass | 7,019 | 3,230 | -54% | 1 | 1 | 0% | 1,305 | 2,469 | +89% | 0 | 0 | — |
case-10 | pass→pass | 13,301 | 6,183 | -54% | 1 | 1 | 0% | 2,822 | 3,049 | +8% | 0 | 0 | — |
case-11 | pass→pass | 8,500 | 6,018 | -29% | 1 | 1 | 0% | 1,490 | 2,898 | +94% | 0 | 0 | — |
case-12 | pass→pass | 12,426 | 6,966 | -44% | 1 | 1 | 0% | 2,077 | 3,324 | +60% | 0 | 0 | — |
case-13 | fail→pass | 6,265 | 4,179 | -33% | 1 | 1 | 0% | 1,135 | 2,679 | +136% | 0 | 0 | — |
case-14 | pass→pass | 9,261 | 5,417 | -42% | 1 | 1 | 0% | 1,745 | 2,914 | +67% | 0 | 0 | — |
case-15 | pass→pass | 10,859 | 5,896 | -46% | 1 | 1 | 0% | 1,932 | 2,914 | +51% | 0 | 0 | — |
case-16 | fail→pass | 7,457 | 3,879 | -48% | 1 | 1 | 0% | 1,410 | 2,519 | +79% | 0 | 0 | — |
case-17 | pass→pass | 12,986 | 8,278 | -36% | 1 | 1 | 0% | 2,389 | 3,381 | +42% | 0 | 0 | — |
case-18 | pass→pass | 10,900 | 6,671 | -39% | 1 | 1 | 0% | 1,954 | 3,121 | +60% | 0 | 0 | — |
case-19 | fail→pass | 8,190 | 3,118 | -62% | 1 | 1 | 0% | 1,624 | 2,603 | +60% | 0 | 0 | — |
case-20 | fail→pass | 12,153 | 2,443 | -80% | 1 | 1 | 0% | 2,207 | 2,321 | +5% | 0 | 0 | — |
case-21 | pass→pass | 10,416 | 5,577 | -46% | 1 | 1 | 0% | 1,788 | 2,406 | +35% | 0 | 0 | — |
case-22 | fail→pass | 7,259 | 5,116 | -30% | 1 | 1 | 0% | 1,402 | 2,853 | +103% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +23 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.