777genius / 777genius/agent-notifications
Linux daemon path ignores configured appIcon; installer hardcodes Icon=utilities-terminal in the notification desktop entry
- Dominant language
- Go
- Stars
- 813
- Forks
- 108
- Avg merge
- 17h 58m
- Merged PRs (30d)
- 36
Description
**Environment:** plugin v1.40.1 (commit 74b9fba), Fedora 44, GNOME Shell 50.4 on Wayland, click-to-focus daemon active and healthy.
**Symptom:** every notification shows the generic `utilities-terminal` stock glyph instead of the bundled Claude icon, even with `notifications.desktop.appIcon` set (default `${CLAUDE_PLUGIN_ROOT}/claude_icon.png`, file present).
**Cause (two halves):**
1. The configured `appIcon` never reaches the Linux daemon path. `SendDesktop()` resolves and validates it (`internal/notifier/notifier.go`), but `sendViaDaemon(title, body, cwd)` has no icon parameter (`internal/notifier/terminal_linux.go:52-71`), and the daemon's `handleNotification()` builds the `notify.Notification` with no icon field at all (`internal/daemon/server.go:262-274`). The icon is only used by the beeep fallback — dead code whenever the daemon is healthy, i.e. in normal operation.
2. With no icon in the D-Bus call, GNOME resolves identity via the `desktop-entry` hint, which on GNOME/Wayland always points at the hidden `claude-notifications.desktop` — and `install_linux_notification_desktop_entry()` hardcodes `Icon=utilities-terminal` into it (`bin/install.sh:1579`). The value is not sourced from config, so `appIcon` is silently a no-op on this platform.
**Suggested fix:** thread `appIcon` through the daemon IPC and set it on the notification, and/or generate the desktop entry with the bundled `claude_icon.png` (ideally configurable). Either alone would fix the visible symptom; both would make behavior match the config's promise.
**Workaround used locally:** hand-editing the generated desktop entry to `Icon=` works, but is reverted by every reinstall/update since the installer regenerates the file verbatim.
Contributor guide
Research direction
Trace appIcon from internal/notifier/notifier.go through sendViaDaemon in internal/notifier/terminal_linux.go and handleNotification in internal/daemon/server.go; then inspect install_linux_notification_desktop_entry() in bin/install.sh. Confirm the configured icon reaches the daemon notification path and that reinstalling no longer makes the configured appIcon ineffective through a hardcoded desktop-entry icon.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go, shell
- Domain
- desktop, devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 68/100