Skip to content

Commit c95f1a8

Browse files
committed
docs: correct install — Homebrew 6 can't skip quarantine, use xattr/Open Anyway
1 parent 16d20b3 commit c95f1a8

2 files changed

Lines changed: 6 additions & 6 deletions

File tree

.claude/skills/release/SKILL.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ argument-hint: "[patch|minor|major]"
77

88
Cut ONE release of **mad-eye** (the macOS menubar app) to **GitHub Releases + a Homebrew cask**. Every step ends on a gate — a checkable condition; stop and report at the first gate that fails.
99

10-
Distribution is **unsigned/ad-hoc on purpose**: mad-eye uses `macOSPrivateApi` (the transparent + vibrancy Popover), which bars the Mac App Store, and its audience is Claude Code users (small, technical). So we ship an unsigned **Homebrew cask**: users install with `--no-quarantine` (or approve once via System Settings → Privacy & Security) because macOS Gatekeeper flags unsigned apps — cheaper than an Apple Developer ID + notarization, at the cost of that one-time friction. Graduate to signing only if it gets real traction. The app version lives in `src-tauri/tauri.conf.json` (`CFBundleVersion` derives from it); `package.json` + `src-tauri/Cargo.toml` mirror it in lockstep.
10+
Distribution is **unsigned/ad-hoc on purpose**: mad-eye uses `macOSPrivateApi` (the transparent + vibrancy Popover), which bars the Mac App Store, and its audience is Claude Code users (small, technical). So we ship an unsigned **Homebrew cask**: users clear the Gatekeeper quarantine themselves (`xattr -dr com.apple.quarantine`, or System Settings → Privacy & Security → Open Anyway) since Homebrew 6 quarantines casks with no opt-out — cheaper than an Apple Developer ID + notarization, at the cost of that one-time friction. Graduate to signing only if it gets real traction. The app version lives in `src-tauri/tauri.conf.json` (`CFBundleVersion` derives from it); `package.json` + `src-tauri/Cargo.toml` mirror it in lockstep.
1111

1212
**One-time setup** (before the FIRST release, else Step 1/3/5 gates fail): a GitHub remote exists (`git remote add origin …` + an initial push); both universal Rust targets installed (`rustup target add aarch64-apple-darwin x86_64-apple-darwin`); `gh` authenticated. The Homebrew tap (`kvnwolf/homebrew-tap`) and its cask are scaffolded by Step 5 on the first release if missing.
1313

@@ -110,7 +110,7 @@ end
110110

111111
## Step 6: Smoke + report
112112

113-
- Optional local smoke (skip if the user doesn't want it live-installed on this machine): `brew install --cask --no-quarantine kvnwolf/tap/mad-eye` (add `--force` to reinstall over an existing copy) `--no-quarantine` skips Gatekeeper so the unsigned app opens directly; without it macOS blocks the first launch.
113+
- Optional local smoke (skip if the user doesn't want it live-installed on this machine): `brew install --cask --force kvnwolf/tap/mad-eye`, then `xattr -dr com.apple.quarantine /Applications/mad-eye.app` (Homebrew 6 quarantines casks with no opt-out `--no-quarantine` is gone; the `xattr` clears it so the unsigned app opens). Launch and confirm the Eye appears in the menubar.
114114
- Report to the user: version published, inferred bump + reasoning, DMG path + `sha256`, tag + GitHub release URL, cask commit URL, and the `brew install --cask kvnwolf/tap/mad-eye` command.
115115

116116
## Acceptance checklist

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@ popover to make it the one that drives the Eye (it remembers your choice).
6262
### Homebrew (recommended)
6363

6464
```sh
65-
brew install --cask --no-quarantine kvnwolf/tap/mad-eye
65+
brew install --cask kvnwolf/tap/mad-eye && xattr -dr com.apple.quarantine /Applications/mad-eye.app
6666
```
6767

68-
`--no-quarantine` skips Gatekeeper's quarantine so the app opens straight away — reasonable for an
69-
open-source tool whose [source you can read](src-tauri/src). Prefer to keep the check? Install
70-
without the flag, then approve it once under **System Settings → Privacy & Security → Open Anyway**.
68+
The `xattr` half clears the Gatekeeper quarantine so the unsigned app opens — Homebrew can't skip it,
69+
and the [source is right here to audit](src-tauri/src). Prefer clicking? Install with just the `brew`
70+
half, then approve mad-eye under **System Settings → Privacy & Security → Open Anyway**.
7171

7272
### Manual
7373

0 commit comments

Comments
 (0)