Fix: macOS tray manager showed a Dock icon

The tray manager creates the shared NSApplication so that pystray can
attach its status item to it, but it never sets an activation policy.
The default is NSApplicationActivationPolicyRegular, which makes the
process a regular app: a Python icon appears in the Dock and in the
app switcher even though the tray manager has no windows.

Set NSApplicationActivationPolicyAccessory instead, which is the
policy intended for menu-bar-only agents. Only the status item remains
visible.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
caostandClaude Opus 5 authored and Dominik Jain committed 2026-08-05 11:49:56 +02:00
1 parent dd12fa032f
commit 89c83efc4f
2 files changed
+7 -2

No files matched your search

+2
View File
@@ -55,6 +55,8 @@ Status of the `main` branch. Changes prior to the next official version change w
* Dashboard:
- Fix: Serena PyPI version check triggered by callback on main thread could delay agent startup #1774
- Fix: on macOS, the `tray_manager` interface put an icon in the Dock and in the app switcher
(should only use menu bar icon)
* Hooks:
- Add `serena-hooks --client=grok`, including Grok-native PreToolUse allow/deny output.
+5 -2
View File
@@ -1195,9 +1195,12 @@ class SerenaDashboardTrayManager:
# set up tray icon with a dynamic menu (callable returns items on each open)
kwargs: dict[str, Any] = {}
if sys.platform == "darwin":
from AppKit import NSApplication
from AppKit import NSApplication, NSApplicationActivationPolicyAccessory
kwargs["darwin_nsapplication"] = NSApplication.sharedApplication()
nsapp = NSApplication.sharedApplication()
# run as an accessory app so that only the menu bar icon is shown (no Dock icon)
nsapp.setActivationPolicy_(NSApplicationActivationPolicyAccessory)
kwargs["darwin_nsapplication"] = nsapp
self._tray_icon = pystray.Icon(
"serena_tray_manager",