Condition
Steam customization needed more than an installer.
Millennium hooks into the Steam client, which means a healthy setup depends on paths, permissions, injection state, client channels, themes, plugins, and background updates. Once installed, users still need a reliable way to understand and repair that state.
The workflow also has to feel consistent on Linux, macOS, and Windows despite different schedulers, privilege models, paths, and package ecosystems.
Cause
Platform scripts drift when they own the product contract.
Separate shell and PowerShell entry points can begin with the same intent and quietly diverge in flags, checks, or recovery behavior. That leaves documentation describing an average of several implementations rather than one dependable interface.
Repairs are particularly risky when diagnosis, mutation, backup, and rollback are split across unrelated scripts.
Correction
Put the contract in one binary and keep platform work at the edges.
The Go CLI owns diagnostics, doctor repairs, upgrades, rollback, scheduling, configuration, themes, injection, and the built-in MCP server. Platform adapters handle systemd, launchd, cron, Task Scheduler, sudo, and UAC without changing the user-facing command shape.
Dry-run and JSON output make changes inspectable. Atomic config writes preserve unknown settings, upgrades verify downloads, and backups bound the cost of a bad update.
Confirm
Installation and recovery now share the same vocabulary.
Users can check health, repair common faults, switch client channels, manage plugins and themes, or pause injection without reconstructing the original install path. Sanitized diagnostic sharing keeps troubleshooting useful without casually leaking local details.
Packaging spans Arch, Homebrew, Scoop, Nix, deb, rpm, Chocolatey, and Winget, while feature CI exercises the Go-owned contract on Linux, Windows, and macOS.