777genius/claude-notifications-go

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

オープン

#113 opened on 2026/07/13

 (0 件のコメント) (0 件のリアクション) (0 人の担当者)Go (100 件のフォーク)auto 404
bughelp wanted

Repository metrics

Stars
 (759 個のスター)
PR merge metrics
 (PR metrics pending)

説明

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.

コントリビューターガイド