P0-04: Reclaim Audit — measured, not guessed
Method: read-only du -sh/du -sk, find, tmutil listlocalsnapshots. No sudo used;
anything that required privilege is marked “not measured (requires privilege)”. No files
were deleted, moved, or modified. Measured on 2026-08-08, one machine, one user account.
Machine profile
- Boot volume (
/dev/disk3s1s1, APFS container “Macintosh HD”): 926 GiB total, 135 GiB free (~15%).dfreports 12 GiB “used” on the raw slice, which undercounts — the real footprint is spread across~/Library(159G) and~/code(113G) perdu; the discrepancy is normal APFS container/snapshot accounting, not a measurement error. - Two extra internal/external APFS volumes:
One1TBBKP(931G, 469G used — backup disk),One1TBData(931G, 6.4G used — nearly empty). - What kind of machine this is: professional, polyglot, AI-tooling-heavy developer
machine. Evidence: 10+ active source repos under
~/code/dfacto.ai/spanning finance/ trading, security, AI platform, networking, iOS; package manager caches for npm, pnpm, cargo, Go, Gradle, Maven, Homebrew all populated simultaneously; app-support directories for Claude, Cursor, Zed, JetBrains, VS Code, Antigravity, TabNine, kimi-desktop, Perplexity, AionUi (5+ AI coding tools installed at once); local LLM weights under~/.lmstudio; Parallels VMs (112G); Docker/colima both present. Not a creative-editing or family/consumer machine — no evidence of Final Cut/Logic/Photoshop caches, and the Photos library is a modest 354M.
Ranked table — measured bytes on this machine
| Rank | Category | Measured | Regrowth | Counts toward headline? | Notes |
|---|---|---|---|---|---|
| 1 | ~/Library/Application Support/videowallpaper/ |
72G | NONE (user-generated renders) | NO | Single app’s rendered output, not a generic OS/dev category. This user built a video-wallpaper product; its own render cache lives here. Biggest single folder on the whole disk — proof that a fixed category list will miss the real #1 offender on some machines. See caveats. |
| 2 | ~/code/dfacto.ai/finance/{backend-crypto-trading-signal-generator,NeuroQuant.ai} |
39G (22G+17G, mostly not node_modules — models/venvs/data, not measured further) | NONE | NO | Active source repos = user data, not cleanup targets. Out of scope for the spec’s categories; flagged only because it explains where ~/code’s 113G actually is. |
| 3 | CoreSimulator: runtimes (16G, single iOS 26.4 image) + devices (7.7G, 3 of 22 devices carry all the weight) | 23.7G | PARTIAL (runtime re-download on demand; 19/22 stale near-empty devices are free wins with NONE regrowth) | YES | Xcode.app IS installed but DerivedData=0B, Archives=not found, iOS DeviceSupport=0B, Xcode’s own cache=not found — this dev is not actively building. All the “Xcode weight” is sitting in the simulator, not Xcode itself. |
| 4 | Package manager caches (Gradle 4.1G, npm 2.9G, Maven 1.9G, cargo 1.0G, pnpm store 1.0G, Go mod 239M + go-build 235M, Homebrew 219M) | 11.6G | FULL — every entry regenerates on next install/build | YES (but low priority — regrowth is instant) | Biggest FULL-regrowth bucket on the machine. Confirms these must never be counted as durable reclaim. |
| 5 | Docker: ~/Library/Containers/com.docker.docker (4.2G) + colima VM (1.4G) |
5.6G | PARTIAL | YES, with caution | Docker daemon (colima) was not running at measurement time — docker system df -v failed to connect, so image/volume-level breakdown wasn’t obtainable; measured the container-support directory instead per the spec’s fallback. |
| 6 | node_modules (46 dirs found, ~/code + ~/Documents + ~/Desktop + ~/Projects, depth ≤6) |
10G | FULL — npm/pnpm install rebuilds from lockfile+cache |
YES, but only for stale projects | Deleting an actively-worked project’s node_modules blocks the next command until reinstall — needs a staleness/last-modified filter, not blanket deletion. |
| 7 | Downloads: *.dmg installers |
3.94G (18 files) | NONE | YES — high value, zero risk | Includes 3 literal duplicates of UTM.dmg (UTM.dmg, UTM (1).dmg, UTM (2).dmg, 238M each = 714M of pure waste) plus a 769M Dia installer, 750M oMLX installer, 432M Acronis installer, etc. Classic “already installed, forgot to delete” pile. |
| 8 | User caches ~/Library/Caches |
2.9G | FULL | YES, but small | Dominated by Google (Chrome/GCP tooling, 1.3G) and ms-playwright (554M, browser binaries for test automation — regrows on next playwright install). Refutes “generic cache cleaning is the big win” — it’s 25x smaller than the simulator bucket and 4x smaller than package-manager caches. |
| 9 | Large & old files >1GB, atime >180d (home dir, depth ≤6) | 12.8G (3 files) | NONE (not caches — judgment calls) | YES, but not auto-deletable | ~/Movies/dfacto_ai_demo_final_ProRes.mov (6.5G, personal creative asset) + two LM Studio GGUF model weights (5.0G, 1.3G — re-downloadable but multi-GB each). Good “surface for human review” feature, bad “auto-delete” feature. |
| 10 | Logs: user ~/Library/Logs (1.1G) + system /Library/Logs (350M) |
1.45G | PARTIAL | YES, small | User total is almost entirely one item: com.apple.diagnosticextensionsd (1.1G alone). Rest of the ~10 log sources are all <6M each. |
| 11 | Trash ~/.Trash |
1.1G | NONE — literally already marked for deletion by the user | YES — safest possible win | No .Trashes found on the two other mounted volumes (checked with nullglob; none present). |
| 12 | System caches /Library/Caches |
16M measured | FULL | NO — not fully measured | Most of /Library/Caches is root-owned and wasn’t readable without sudo; 16M is a floor, not the real total. Reported honestly as incomplete rather than guessed. |
| 13 | .lproj language bundles, sampled in /Applications (900 bundles found, depth ≤4) |
227M sampled | NONE if stripped, but regrows on app update | Marginal | Too small to matter here and risks breaking code-signing on modern macOS SIP-protected apps; low ROI. |
| 14 | Photos library ~/Pictures/Photos Library.photoslibrary |
354M (whole library) | N/A — can’t isolate “derivatives” from user photos without deeper introspection | NO | Whole-library size, not a caches-only figure. Modest here; would be very different on a photography-heavy machine (see caveats). |
| 15 | Mail container ~/Library/Containers/com.apple.mail |
9M | PARTIAL | NO — negligible | This user’s Mail.app footprint is essentially empty. |
| 16 | iOS backups ~/Library/Application Support/MobileSync/Backup |
0B / empty | N/A | NO | Directory exists but is empty — no legacy iTunes/Finder backups on this machine. |
| 17 | Time Machine local snapshots (tmutil listlocalsnapshots /) |
24 hourly snapshots found (2026-08-07 12:02 → 2026-08-08 11:14), sizes not measured (requires privilege) | FULL — macOS creates/thins these automatically based on free space | NO | Not a real reclaim opportunity on a machine with 135G free; APFS snapshots are copy-on-write and mostly self-manage. Only relevant messaging when free space is critically low. |
| — | Xcode DerivedData / Archives / iOS DeviceSupport / Caches/com.apple.dt.Xcode |
0B / not found / not found / not found | — | NO — nothing there | Xcode.app is installed (/Applications/Utilities/IDE/Xcode.app) but shows zero build/archive/cache history. Directly refutes the “20-50GB of Xcode alone” framing for this machine. |
Sum of rows flagged “YES” (excluding the two out-of-scope 72G/39G outliers, excluding the unmeasured TM snapshots and incomplete system-cache floor): ≈ 60G of realistically reclaimable-or-reviewable data on this specific machine, concentrated almost entirely in developer tooling (simulator + package caches + docker + node_modules ≈ 51G of that 60G).
Expected finding: verify or refute?
Partially confirmed, with the composition being different than expected.
- “20-50GB of Xcode alone” — refuted for this machine. Xcode’s own artifacts (DerivedData/Archives/DeviceSupport/its cache) measure 0 bytes. This developer has Xcode installed but isn’t actively building against it.
- “simulator runtimes over 30GB” — refuted but close: 16G runtime + 7.7G devices = 23.7G, under the 30G bar, not over it.
- “50-500GB total across dev tooling” — confirmed at the low end: summing every legitimate dev-tooling bucket (simulator 23.7G + package caches 11.6G + Docker 5.6G + node_modules 10G) lands at ≈51G, comfortably inside the claimed range, and it dwarfs the combined generic-cache categories (user+system caches, logs, trash ≈ 5.5G) by roughly 9x.
- The bigger surprise the hypothesis didn’t predict: the single largest reclaimable- looking blob on the machine (72G) is neither Xcode nor a generic cache — it’s one specific app’s Application Support folder. A fixed category list, however well researched, will miss this class of finding. See module-priority item below.
Net verdict: developer artifacts do dwarf generic OS caches on this machine (as hypothesized), but the specific Xcode/simulator numbers were wrong in direction — the weight moved from “Xcode build products” to “simulator + package manager + docker” — and the single biggest folder on disk was an idiosyncratic app-data blob the fixed hypothesis never named.
Module priority — driving P3 implementation order
- Trash empty — zero risk, zero regrowth, universal. Trivial to build, must exist.
- Downloads installer sweep (
*.dmg/*.pkg), with duplicate detection — zero regrowth, high confidence; the 3xUTM.dmgduplicate on this machine is the exact pattern a “you already have this” dedup check should catch. - Package manager cache sweep (npm/pnpm/yarn/cargo/go/gradle/maven/brew) — biggest FULL-regrowth bucket (11.6G here); safe because it always regenerates; universal across every dev machine regardless of what they’re building.
- Xcode/simulator module: DerivedData (always safe, FULL regrowth) + stale/unused simulator devices (PARTIAL regrowth, needs “not booted recently” heuristic — 19 of 22 devices here are already near-empty stale shells) + unused runtimes for iOS versions no longer targeted by any installed project. This is the largest generic dev bucket when Xcode is actually in use, even though it measured near-zero on this particular snapshot of this machine.
- node_modules sweep with staleness filter — only flag node_modules under projects
whose git working tree / package.json hasn’t changed in N days; blanket deletion
breaks the next
npm runin an active project. - Docker prune (dangling images/volumes only, default-safe) — requires the daemon to
be running to introspect via
docker system df -v; must degrade gracefully (as this audit did) when it isn’t, rather than reporting nothing. - Generic “largest folders” scanner across
~/Library/Application Supportand~/Library/Containers, not a fixed category list — this is the meta-finding from rank #1 in the table above. A real product needs a fallback that surfaces “biggest folder we don’t have a named rule for” (LLM model weight dirs, VM disks, one-off app renders) because those can outweigh every named category combined. - User/system cache cleaning — keep it (users expect it, it’s the “obvious” feature) but do not market it as the primary win; on this data it’s ~5x smaller than dev tooling and ~25x smaller than the single largest outlier folder.
- Log trimming with a retention window (e.g., keep 7-14 days) — moderate size,
mostly one runaway log source (
com.apple.diagnosticextensionsd, 1.1G alone here); don’t build per-source logic, just age-based trimming. - Large & old file finder (surface, don’t auto-delete) — good insight feature for files like this machine’s 6.5G personal video and 6.3G of LLM model weights; requires human judgment, not automation.
.lprojstripping — low priority; small yield (227M sampled here) and real risk of breaking code-signed app bundles on modern macOS. Consider skipping entirely for v1.- Time Machine local snapshot management — low priority; macOS self-manages this already based on free space, and sizes aren’t even readable without privilege. Only worth building if the product targets “disk nearly full” emergency scenarios.
- Photos/Mail/iOS-backup cleanup — low priority on this measured machine (354M / 9M / 0B respectively) but see caveats: this is the category most likely to be completely wrong in priority order on a different kind of machine.
Caveats — n=1
- Single machine, single user account, single point in time. No statistical confidence; this is one professional developer’s Mac on 2026-08-08, not a representative sample.
- This machine is dev/AI-tooling-skewed, not creative or family. On a video/photo editing machine, expect: Photos library caches, DaVinci/Final Cut/Logic render caches, and iOS backups to dominate instead of node_modules/Xcode/Docker — none of which showed meaningfully on this machine (Photos 354M, Mail 9M, iOS backups 0B). On a family/consumer machine, expect dev-tooling categories (ranks 3-6 above, ~51G here) to collapse to near-zero, while Trash, Downloads, Photos, and iOS backups would carry the entire reclaim story.
- System-level caches were under-measured, not zero.
/Library/Cachesshowed only 16M readable; the true figure is higher but requires sudo, which this audit was explicitly forbidden from using. Any product built on this data should re-verify with privileged access before finalizing marketing numbers for that category. - Docker was not running during measurement (colima daemon down), so image/layer-level
detail via
docker system df -vwasn’t available — only directory-level size was measured, per the spec’s documented fallback. - TM local snapshot sizes were not measured —
tmutil listlocalsnapshotsneeds no privilege and gave a count (24), but per-snapshot size requires additional privileged tooling not available read-only. - The single largest finding (72G
videowallpaperfolder) is this user’s own product build artifact, not a pattern any other Mac will share verbatim — but the category it represents (large, unnamed, app-specific Application Support blobs) generalizes and is the strongest argument in this whole audit for building a generic “biggest folders” scanner rather than trusting a fixed list, however well-researched.