Release notes

FEATURE

The app now checks for updates automatically without annoying you

You no longer have to manually check the GitHub repository for new releases. On launch, the app now automatically checks for new versions and pops up a dialog with the release notes and a one-click button to download it. To respect your focus, this auto-check runs at most once every 24 hours. If a particular update doesn't interest you, you can hit "Skip this version" and it won't bother you about that specific release again. You are in full control — you can toggle off "Automatically Check for Updates" in the Switch Panel menu, or manually trigger a "Check for Updates Now" whenever you want. It's like your car's GPS silently checking for new maps in the background and only asking if you want to upgrade when there's actually a major new route, instead of forcing you to click OK every time you start the engine.

Original changelog

Original changelogThe app now checks for updates automatically without annoying you
**In-app update check (Stage 1)**: On launch, usage pings GitHub Releases for a newer version (rate-limited to once per 24h so you're not nagged every time you open the app). When a newer version is found, an NSAlert shows the version + release notes with three buttons: **Download**, **Later**, **Skip this version**. "Download" opens the Release page in your default browser — manually replace the old `.app` with the new one. (Stage 2 will bring Sparkle-style auto download + replace.)
**Two new entries in the "Switch panel" menu**:
- **Automatically Check for Updates** (toggleable): unchecking it disables the launch-time auto check entirely; the manual entry below still works.
- **Check for Updates Now**: manually triggers a check, bypassing the 24h cooldown and skip-version preference. If you're already up to date, an alert says so; on network error you see "Update check failed".
Preferences are stored in the existing `~/.claude/usage-preferences.json`, with three new keys: `auto_update_check` (default true), `update_dismissed_at` (Unix timestamp), `update_skipped_version` (skipped version string).
`setup_app.py` now bundles `pyproject.toml` and `update_checker` into the py2app build — so the packaged `.app` can fall back to reading `pyproject.toml` when `importlib.metadata` can't resolve the version.