777genius/claude-notifications-go

macOS Tahoe: ClaudeNotifier.app lacks NSAppleEventsUsageDescription — Ghostty exact-tab focus silently denied (follow-up to #47/#72)

Offen

#113 geöffnet am 13.07.2026

 (0 Kommentare) (0 Reaktionen) (0 zugewiesene Personen)Go (100 Forks)auto 404
bughelp wanted

Repository-Metriken

Stars
 (759 Sterne)
PR-Merge-Metriken
 (PR-Metriken ausstehend)

Beschreibung

Summary

On macOS Tahoe (Darwin 25.x), Ghostty exact-tab click-to-focus never works and always falls back to AXDocument window-level focus, because ClaudeNotifier.app ships without NSAppleEventsUsageDescription in its Info.plist. macOS silently denies Apple Events from app bundles that lack the usage-description key — no Automation prompt is ever shown, and (until the key is added) no entry is even recorded in System Settings → Privacy & Security → Automation, so the user cannot grant the permission at all.

This is the same class of problem as #47, but one layer deeper: #47 moved regular terminals off -execute osascript, while the Ghostty exact-tab path (added in v1.37.0 for #72) still runs osascript from the ClaudeNotifier context at click time — where TCC needs the plist key to attribute (and record) the request.

Environment

  • Plugin v1.40.0
  • macOS Tahoe (Darwin 25.4.0, arm64)
  • Ghostty 1.3.1 (AppleScript dictionary available)
  • Terminal ID present in session state (verified) — so the by-ID path was taken and failed

Current Info.plist (v1.40.0 ClaudeNotifier.app)

CFBundleExecutable, CFBundleIconFile, CFBundleIconName, CFBundleIdentifier,
CFBundleName, CFBundlePackageType, CFBundleShortVersionString, CFBundleVersion,
LSMinimumSystemVersion, NSUserNotificationAlertStyle

No NSAppleEventsUsageDescription.

Repro

  1. Install plugin on macOS Tahoe, Ghostty ≥ 1.3, get a session's ghostty_terminal_id captured.
  2. Click a notification from a different Ghostty tab.
  3. Observed: window-level focus only (last-active tab shown); no Automation prompt; no ClaudeNotifier entry under Privacy & Security → Automation.

Fix (verified locally)

Add to ClaudeNotifier.app's Info.plist at build time:

<key>NSAppleEventsUsageDescription</key>
<string>Claude Notifier focuses the exact terminal tab of the Claude Code session when you click a notification.</string>

After patching the plist (and re-signing), the denial is finally recorded, the ClaudeNotifier → Ghostty toggle appears in the Automation pane, and once enabled, exact-tab focus works reliably. Note Tahoe still doesn't show the interactive prompt from a notification-click context — but with the key present the recorded entry gives users a way to grant it. Consider also pre-requesting Automation on first launch from a normal context (as suggested in #72) so the prompt appears somewhere the user can say yes.

Contributor Guide