cleanup-tools · macOS · free & open source

Small, sharp tools.
Free and open.

Open-source utilities I build, use, and wire into Pantheon — an agent layer that can pull any of them in. If they're useful and folks want more, I'll keep shipping them. This one cleans the junk off a cluttered Mac, organizes what's left into sane buckets, gives you a real queue to sort through and decide on, then — only if you want it — brings in AI to propose a bucket for what's left over and stages that back into the same queue to review. Dry-run first, always. As a side effect of the same file-finder, it also locates a lost crypto wallet.

Apple Silicon, unsigned — the download page explains the one-time xattr step. Prefer the CLI? pip install -e . below.

$ pip install -e . && cleanup survey

How it works

Four steps, each one a real command, each one previewed before it acts. Stop after any of them — the AI step is entirely optional and off unless you ask for it.

01

Clean

Reclaim the junk that costs disk, not memories — node_modules, build caches, Docker layers, OS cruft. Instant GB back, dry-run first.

cleanup reclaim --go
02

Organize

Bucket what's left by type — screenshots, installers, pdfs, photos, videos, archives, docs — so a wall of loose files becomes a handful of folders.

cleanup sort --go
03

Sort & review

Everything staged above lands in a queue, not straight in the trash. Triage it — approve, reject, or undo, one at a time or in bulk — before anything runs.

cleanup approve
04

AI-assisted resort

Whatever's still ambiguous after step 2 can go through an optional AI pass — filename only, never file contents — which proposes a bucket and stages it back into the same review queue from step 3. You still approve every move.

cleanup propose-ai

Browse the tools

One CLI, several sharp commands — each does one job, previews before it acts, and stages anything destructive into a review queue rather than touching your files blind.

read-only

survey

The read-only snapshot: disk usage, top-level dir sizes, node_modules total, Downloads type histogram, screenshot count. Always the first step.

cleanup survey
dry-run default

sort

Buckets Downloads by type — screenshots, installers, pdfs, photos, videos, archives, docs — into _sorted/. Non-destructive: moves within the same folder.

cleanup sort --go
dry-run default

reclaim

Deletes regenerable junk — node_modules, build caches, Docker layers, OS cruft. Refuses to touch any configured master path until it's marked backed up.

cleanup reclaim --go
read-only

find-wallets

Scans for crypto-wallet artifacts by filename and content signature. Prints paths and match type only — matched secret content never appears in output, by construction.

cleanup find-wallets
read-only

dedupe

Finds duplicate files via a two-stage size-then-hash filter, full uncapped SHA-256. Lists candidates for you to remove — never deletes on its own.

cleanup dedupe ~/Downloads
move-only

corral-screenshots

Sweeps every screenshot into ~/Pictures/Screenshots and, optionally, stops new ones from landing on the Desktop at all.

cleanup corral-screenshots --go
review UI

approve

A small localhost-only review UI — a dashboard, a triage queue with keyboard shortcuts, and approve/reject/undo — for everything staged above before it runs.

cleanup approve

A real desktop app, not just a CLI

The same review UI, packaged as a native macOS app (Tauri) — for when you'd rather click through a queue than pipe a terminal.

  • Kickoff bar — pick which plans to run, launch them all as background jobs at once, watch live progress.
  • Bulk triage — pagination, bulk approve/reject by group, keyboard shortcuts (y/n/space/arrows).
  • Optional AI proposals — narrow, filename-only, opt-in per run. Never reads file contents. Off by default.
  • Three runtime themes — pick a look and it sticks, no account, no server state.
Ledger Sonar Tide

How it stays safe

This tool touches real, irreplaceable files. The rules aren't a style choice.

Sort is reversible; delete is not

Every destructive command defaults to dry-run. You pass --go to actually act.

Masters are protected in code

Configured master paths are refused from deletion until explicitly marked backed up — enforced, not just remembered.

Regenerable ≠ precious

node_modules, build caches, and Docker layers delete freely — they cost time, not memories.

Uncertain files never get trashed blind

Anything unclear lands in a review queue for a human decision, not a bucket, not the trash.

Local-first, no telemetry

No network calls except the one you explicitly opt into (AI bucket proposals) — filenames only, never file contents.

Wallet scanning never leaks secrets

Paths and match type only. The matched content is never bound to anything that outlives its own check — structurally, not by convention.

Support / work with me

Free and open, always. A few ways to help — or just say hi.