MAC MAID

A read-only audit for macOS

mac
maid

It finds stale repos, retired agents, and the clutter piling up in Downloads and on the Desktop. Then it stops and waits for you.

The detector never deletes anything. Every action goes through a review you approve item by item.

View on GitHub

The audit

Domain A — repo and agent hygiene

Agents that were retired but left installed, repos that have gone quiet, scheduled jobs loaded on the wrong machine, and config that drifted between Macs.

Domain B — filesystem clutter

A tiered staleness pass over Downloads, the Desktop, and screenshots. Files only, never directories, with an allowlist for the ones that are meant to sit there.

Secrets are flagged and never acted on. If the audit finds something that looks like a credential, it tells you and stops — it will not move, archive, or delete it.

The tiers

  • CriticalOlder than 30 days
  • Warning15 to 30 days
  • Notice7 to 15 days
  • IgnoredNewer than 7 days — you are probably still using it

The review

The audit writes a proposal manifest. Nothing in it happens on its own.

Running the review walks you through the manifest one item at a time. Non-destructive backups are applied automatically because they cannot lose anything. Everything else — archiving, deleting, uninstalling a retired agent — waits for an explicit yes.

The detector and the actor are separate on purpose. A tool that both decides and acts is a tool you have to trust completely. This one only ever hands you a list.

How it runs

A launchd job runs the audit monthly, on the first at 10:00, wrapped in caffeinate so a sleeping laptop does not skip it. It runs on one machine only — the scheduler host — so two Macs never double-run the same audit.

When the audit finds something actionable it sends a nudge: an email, a macOS banner, and a push topic. When it finds nothing, it stays quiet. A hygiene tool that pings you every month whether or not there is anything to do is a hygiene tool you learn to ignore.

Everything it touches lives on local disk. Nothing runs from or writes through iCloud — background jobs are denied there, and the failure is silent.