777genius/claude-notifications-go

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

Open

#113 opened on Jul 13, 2026

View on GitHub
 (0 comments) (0 reactions) (0 assignees)Go (100 forks)auto 404
bughelp wanted

Repository metrics

Stars
 (759 stars)
PR merge metrics
 (PR metrics pending)

Description

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