refactor: merge into single persistent binary using UNUserNotificationCenter#9
Merged
Conversation
…nCenter - Replace two-binary setup (stack-nudge.app + stack-nudge-panel.app) with a single persistent stack-nudge.app built from panel/ sources - Switch from deprecated NSUserNotification to UNUserNotificationCenter for banner delivery — proper permission dialog, alert-style banners, Allow action button for permission events - Remove fire_banner() and find_app_bundle() from notify.sh; all events now route through the socket to the persistent app - App hides itself before calling AppActivator on banner click so focus reverts to the previous app before window targeting runs - Remove stale delivered notifications on each new event to prevent pile-up - Single launchd agent (com.stackonehq.stack-nudge) replaces the panel launcher script + panel agent - Update Info.plist bundle ID to com.stackonehq.stack-nudge - Add bannerEnabled to PanelConfig; add onAppend callback to EventStore Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
- Esc now hides the panel regardless of which tab is active (previously it redirected sessions/settings to events first) - Remove nav.mode reset from hidePanel() so the active tab is preserved when the panel is reopened Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…EL migration - Read STACKNUDGE_ACTIVATE_IMMEDIATELY in PanelConfig; when set, focus the source editor immediately on event receipt without showing a banner - Update notify.conf.example to note that STACKNUDGE_PANEL is no longer required (panel is always available via hotkey) Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Logic moved to Swift app; no longer needed in notify.sh. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
- ci.yml: verify only stack-nudge.app (not the removed panel bundle); lint only panel/Info.plist (notifier/ no longer in build) - Makefile: remove stack-nudge-panel references, update reload target Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
StuBehan
approved these changes
Apr 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
stack-nudge.app+stack-nudge-panel.app) with a single persistentstack-nudge.appbuilt from the panel sourcesNSUserNotificationAPI toUNUserNotificationCenterfor proper permission dialogs, alert-style banners, and an Allow action button on permission eventscom.stackonehq.stack-nudge) replaces the panel launcher script + panel agentnotify.shsimplified:fire_banner()andfind_app_bundle()removed — all events route through the socket to the persistent appAppActivatoron banner click so focus reverts cleanly before window targetingpanel/Info.plistbundle ID updated tocom.stackonehq.stack-nudgeTest plan
./install.sh— builds one app, registers one launchd agent, notification permission dialog appearscmd+opt+n→ floating panel opens; Esc closes it; reopening returns to same tab./uninstall.sh— removes single agent, single app bundle, cleans up completelystack-nudge-panel.appanywhere after install🤖 Generated with Claude Code