A Mac cleaner that shows you everything before it deletes anything.
One of six free, open-source Mac apps by Ciro Cesar Maciel.
Every rule it cleans by is in one readable file, rules.json. Nothing is deleted on the spot: whatever you remove waits 7 days in a quarantine and goes back where it was with one click. A native Swift app for macOS 14+ on Apple Silicon, with no network code at all.
curl -fsSL https://blob.ciromaciel.click/tools/cleaner/install.sh | bashThe script downloads the latest .dmg, copies Cleaner to /Applications and opens it.
Prefer the disk image? Download Cleaner-macos.dmg. Open it and drag Cleaner to Applications. It is signed with Developer ID and notarized by Apple, so macOS opens it with no warning.
For a complete scan, turn on Cleaner in System Settings → Privacy & Security → Full Disk Access. Without it, macOS hides the Trash, Mail and app containers, and Cleaner tells you so instead of pretending.
Cleaner is published in two places only: this repository and ciromaciel.click/tools/cleaner, whose downloads are the ones above. Any other copy is not mine.
Every copy is signed by my team, 4X58N3TK8V, and notarized by Apple:
codesign -dv /Applications/Cleaner.app 2>&1 | grep TeamIdentifier # TeamIdentifier=4X58N3TK8V
spctl -a -vv /Applications/Cleaner.app # source=Notarized Developer IDAnd it has no network code. The app links no networking framework and calls no networking API, so both commands print nothing:
otool -L /Applications/Cleaner.app/Contents/MacOS/Cleaner | grep -i network
nm -u /Applications/Cleaner.app/Contents/MacOS/Cleaner | grep -iE "URLSession|NWConnection|CFSocket"The well-known cleaners ask you to trust a "junk" number. Cleaner shows you how it gets that number:
- The rules are public.
rules.jsonlists every folder Cleaner looks at, why it is safe to clear and what is excluded. If a rule is wrong, you can read it, and you can send a fix. - Nothing disappears. Removal moves items to a quarantine batch that remembers each original path. Restore is one click; after 7 days the batch empties itself.
- Removal takes a 3-second hold. No accidental clicks.
- It says what it can't do. When macOS refuses a file, Cleaner tells you why: the item belongs to the system and needs your password, or it is protected and no password would help.
| Screen | What it does |
|---|---|
| Overview | One scan for everything: space you can free, disk, apps, startup items, quarantine |
| Cleanup | Applies the rules in rules.json: app caches, logs, Trash, old installers, Xcode, developer caches, Mail downloads, downloaded AI models (off by default) |
| Uninstaller | Lists apps with size and last use, then removes the app and its leftovers in 38 places, .pkg receipts included |
| Disk map | Measures a whole folder in parallel and lets you walk into the biggest parts |
| Startup | Turns LaunchAgents and LaunchDaemons on and off without deleting the file |
| Quarantine | Batches with their original paths: restore with a click, emptied after 7 days |
| Menu bar | CPU, memory, network, disk and battery, live, plus how much you can free right now |
Nine rules today. Each one says what it is, why it is safe (in Brazilian Portuguese and in English), how risky it is and whether it is on by default:
{
"id": "app-caches",
"title": "Caches de aplicativos",
"why": "Arquivos temporários que cada app recria sozinho quando precisa.",
"titleEn": "App caches",
"whyEn": "Temporary files each app recreates by itself when it needs them.",
"risk": "low",
"mode": "children",
"paths": ["~/Library/Caches"],
"exclude": ["com.apple.*", "CloudKit", "FamilyCircle", "GeoServices", "click.ciromaciel.cleaner", ".*"],
"skipRunningApps": true,
"defaultOn": true
}The other eight are logs, trash, installers, xcode-derived-data, dev-caches, xcode-device-support, mail-downloads and ai-models (Hugging Face and LM Studio downloads, off by default). Every rule, one per section, with where it looks, what it leaves out and how risky it is: docs/RULES.md. A new rule or a better exclusion is the most useful contribution you can make.
You need the Xcode Command Line Tools. Xcode itself is optional.
git clone https://github.com/ciro-maciel/cleaner.git
cd cleaner
scripts/build.sh # dist/Cleaner.app
open dist/Cleaner.appThe illustrations on each screen come from a licensed gallery and ship only in the official build; a build from this repository draws the Tabler icon of each screen instead. To use your own, drop 560 × 560 PNGs into Resources/Illustrations.
scripts/build.sh signs with a Developer ID Application certificate when your keychain has one (the official build does). Otherwise scripts/signing-identity.sh creates a local signing certificate once: with it, Full Disk Access survives each rebuild; without it, the build is signed ad hoc and macOS asks again every time.
Tests run against your own Mac without changing it:
CLEANER_NO_ADMIN=1 dist/Cleaner.app/Contents/MacOS/Cleaner --selftest # reads only; quarantine runs in a temp folder
dist/Cleaner.app/Contents/MacOS/Cleaner --uninstall-test # fakes an app with every leftover, removes, checks, restores
dist/Cleaner.app/Contents/MacOS/Cleaner --screenshots /tmp/shots # captures every screen- Apple Silicon and macOS 14 or newer only.
- The interface is in English and Brazilian Portuguese, following the Mac's language.
- Items protected by System Integrity Protection stay where they are. That is macOS working as intended.
- No duplicate finder, no malware scan and no app updater.
Issues and pull requests are welcome, especially for rules.json. See CONTRIBUTING.md.
Ideas this project took from other open-source Mac cleaners, with thanks:
- Mac Sai: letting anyone verify the no-network claim with two commands ("Check it yourself").
- Peel: naming the only official sources and showing how to check the signing team.
- Vervain: treating downloaded AI models as their own category, never pre-selected (
ai-models). - Kudu: a readable page with every cleaning rule (docs/RULES.md).
- Sweep: on uninstall, a vendor folder with a version at the end still names the app (
JetBrains/DataSpell2024.2), while a longer name is another app and stays. - BHUninstaller: every leftover says why it belongs to the app (named after its identifier, its name, or inside its vendor folder).
MIT. Fonts and icons keep their own licenses: see NOTICE.
I build software on my own, with a team of AI agents, and open what I can. Six native Mac apps, all free, MIT, signed and notarized by Apple, in English and Brazilian Portuguese: Cleaner, the Mac cleaner that shows you everything before it deletes anything (this one) · Screenshots, capture, annotate and record the screen, with nothing leaving your Mac · Speech to Text, dictation by shortcut, with Whisper running on your Mac · Assistant, Claude Code by voice · Windows, snap windows into place with a shortcut or by dragging them to the edge · Text to Speech, select text in any app and hear it read aloud.
Beyond the apps: free tools for the browser, books, and Infrastructure, the infrastructure AI agents already know how to run.
Curated lists. Nineteen awesome lists in Brazilian Portuguese, translated into 14 languages: AI at work by profession, Pix, NF-e, payments, Open Finance, WhatsApp, Brazilian APIs, MCP servers, Claude Code and more. Every link was opened before it went in.
Support. Everything here is free and stays free. If it saved you time, buy me a coffee: you choose the amount, by Pix or card.
Follow along. Follow @ciro-maciel for the next open-source apps, click Watch → Custom → Releases above for every new version, and see how it is all made on YouTube and at ciromaciel.click.


