What it does
Opens with a pre-flight summary: macOS version, free disk, the last Time Machine backup and its age, then a grouped, risk-annotated upgrade plan. The plan uses local checks only (no network) to flag !! major version jumps and macOS updates needing a restart, ~ pre-release channels like @beta or @canary, and pinned formulae that will not upgrade; everything else is summarized as routine. Then it checks Time Machine with tmutil latestbackup and tmutil destinationinfo. If backup is not available, it stops before any upgrades. If backup is available, it previews what it can, then asks once per tool with Yes, No, Skip, All, or Quit — choose All to approve that tool and every remaining one without further prompts. It covers Homebrew, npm globals, App Store apps through mas, uv, pipx, Volta, rustup, mise, and macOS software updates when those tools exist.
Preview first
Run update-mac --dry-run to print the summary and show what every tool would do without changing anything. It skips the Time Machine gate because nothing is mutated, making it the safe way to see what an update would touch.