Workload
Many repos, many builds, many worktrees
The disk of someone who ships software fills with output nobody wrote. Build artefacts, package caches, container images, and increasingly the checkouts an assistant opened for a task and nobody closed. It is all machine-made, most of it is machine-remakeable, and the hard part is telling which part is which.
The caches, in bulk
Xcode DerivedData and simulator caches, the Cargo registry, Docker.raw, Homebrew, npm, pip and the Python caches. Each category shows what it holds and what you get back before anything is selected, and Quick Clean takes the ones marked safe.
Stale git worktrees, which nothing else on the Mac cleans
A branch-per-task workflow leaves checkouts behind faster than any previous way of working, and each one is a full copy of the repository. Dup lists them with their branch and their size, and offers only the ones that are clean and that nothing has used for 14 days. The branch and its commits stay in the repository, so a branch you never pushed is kept, not lost.
Worktrees left behind by AI coding agents
Conductor, Superset, Claude Code, Codex and Cursor can each give an agent its own git worktree per task, so tasks running side by side never edit the same files. That means node_modules or target in every worktree, and most of those checkouts stay on disk after the task is done. Dup reaches each one through the repository it was made from, so a worktree the tool put elsewhere in your home folder is still found, as long as its repository sits in a folder Dup scans, such as Projects, Developer or Documents. Each one is listed, either offered or refused with the reason.
It refuses anything it cannot prove safe to lose
A worktree is a real checkout, not a rebuildable cache, so this category inverts the posture of the others. Uncommitted changes, untracked files, an ignored file that exists nowhere else (a node_modules folder does not count, a .env that differs from the main checkout does), a stash, a detached commit no branch or tag reaches, or anything Dup cannot read: each one refuses that worktree by name and says why. A worktree used in the last 14 days is kept and shows when it was last used. A refused worktree cannot be selected, and worktrees never join a Quick Clean, so a checkout can never be swept up alongside an npm cache.
Your files never leave your Mac. Dup processes everything locally: no uploads, no cloud, no tracking.
Point it at your projects folder
Free to try, with 250 MB of cleanup included. Nothing leaves your Mac, on any plan.
macOS 13+