Skip to content

Desktop notifications

desktop notification screenshot

Desktop notifications are enabled by default. Once the agent hooks are wired up during Getting Started, no extra agent-side configuration is needed — the sidebar reads the same hook events it already consumes for status tracking and triggers OS notifications itself.

The Default column shows which events fire when @sidebar_notifications_events is unset. task_completed is the only event off by default — it can be noisy for agents that emit many sub-tasks.

EventFired whenAgentDefault
stopAssistant finished responding (Stop hook)Claude, Codex, OpenCode
notificationPermission prompt or other attention requestClaude, OpenCode
stop_failureAssistant ended with an error (StopFailure hook)Claude, OpenCode
permission_deniedPermission explicitly denied (PermissionDenied hook)Claude only
task_completedSub-agent / Task tool completion (TaskCompleted hook)Claude only

Restrict which events fire notifications with @sidebar_notifications_events (comma-separated event names). all fires every event. Unset fires every event except task_completed.

Terminal window
set -g @sidebar_notifications_events "stop,notification" # drop error notifications
set -g @sidebar_notifications_events "stop,notification,task_completed" # enable sub-agent notifications
set -g @sidebar_notifications_events all # explicit "fire everything"

An empty value disables every event without touching the master @sidebar_notifications switch.

  • macOS uses osascript
  • Linux uses notify-send
  • Windows is not supported yet

If the required notification command is missing, the feature quietly disables itself.

┌─────────────────────────────────────────────┐
│ repo (branch) / agent ← title │
│ <event body> ← body │
└─────────────────────────────────────────────┘

The title falls back to repo / agent when the branch is unknown, and to agent alone when there is no repo.

EventBodyFallback
stopAssistant’s last message, truncated to 240 chars with Task completed
notificationWait reasonPermission required
task_completedTask completed: {task_subject}Task completed
stop_failureTask failed: {error}Task failed
permission_denied(no payload)Permission required