A full SSD does not just warn — it seizes the machine. Swap cannot grow, apps cannot save, browsers crash mid-typing, and in the worst cases the login screen loops. This is the emergency order we recommend, fastest-and-safest first.
Nothing in /System, /Library, /private is yours to clean. Everything below is user-space and safe.
rm -rf ~/Library/Caches/* # app caches - all rebuildable
rm -rf ~/.Trash/* # if Trash has GBs waiting
sudo rm -rf /private/var/log/asl/*.asl 2>/dev/null # old system logs
Caches regenerate; that is their job. This usually recovers 2-6 GB — enough to unstick the machine.
du -sh ~/* 2>/dev/null | sort -h | tail -6
du -sh ~/Library/* 2>/dev/null | sort -h | tail -6
The usual giants: Library/Group Containers (Telegram/WhatsApp caches — Telegram guide, WhatsApp guide), Library/Developer (Xcode), Docker's raw disk (shrink guide), and iOS backups (delete guide).
sudo tmutil thinlocalsnapshots / 999999999999 4
On a full disk this alone can release 10-40 GB of purgeable space instantly — see the snapshots guide for the details.
Once the machine breathes, do the real survey: System Data explained for the map, the waste estimator for your personal ranking, and DaisyDisk vs free treemaps if you want to see everything at once. A disk that hit 100% once will do it again in weeks unless the growth source is named and handled.