--- title: Notifications description: Desktop notifications in cmux for AI agents --- # Notifications cmux supports desktop notifications, allowing AI agents and scripts to alert you when they need attention. ## How It Works 1. A process in the terminal sends an OSC escape sequence 2. cmux parses the notification title and body 3. If the terminal isn't focused, a desktop notification appears 4. The tab shows an unread badge ## Sending Notifications ### Using the CLI The simplest way to send a notification: ```bash cmux notify --title "Task Complete" --body "Your build finished" ``` With a subtitle: ```bash cmux notify --title "Claude Code" --subtitle "Waiting" --body "Agent needs input" ``` ### Using OSC Sequences You can send notifications directly using escape sequences: #### OSC 99 (Kitty Protocol) ```bash # Basic notification printf '\e]99;i=1;e=1;d=0:Hello World\e\\' # With title and body printf '\e]99;i=1;e=1;d=0;p=title:My Title\e\\' printf '\e]99;i=1;e=1;d=0;p=body:Message body here\e\\' ``` #### OSC 777 (RXVT Protocol) ```bash printf '\e]777;notify;My Title;Message body here\a' ``` See [OSC Sequences](/docs/osc-sequences) for full format documentation. ## Notification Behavior ### Suppression Notifications are suppressed (no desktop alert) when: - The cmux window is focused - The specific tab sending the notification is active - The notification panel is open This prevents duplicate alerts when you're already looking at the terminal. ### Notification Panel Press **⌘⇧I** to open the notification panel, showing all notifications: - Click a notification to jump to that tab - Notifications are marked as read when viewed - Clear all with the clear button ### Quick Jump Press **⌘⇧U** to jump directly to the tab with the most recent unread notification. ## Notification Lifecycle 1. **Received** - Notification appears in panel, desktop alert fires (if not suppressed) 2. **Unread** - Badge shown on tab 3. **Read** - Cleared when you view that tab 4. **Cleared** - Removed from panel ## Integration Examples ### Notify After Long Command ```bash # Add to your shell config notify-after() { "$@" local exit_code=$? if [ $exit_code -eq 0 ]; then cmux notify --title "✓ Command Complete" --body "$1" else cmux notify --title "✗ Command Failed" --body "$1 (exit $exit_code)" fi return $exit_code } # Usage notify-after npm run build ``` ### Notify When Build Finishes ```bash npm run build && cmux notify --title "Build Success" --body "Ready to deploy" ``` ### Watch Script Completion ```bash #!/bin/bash # long-running-task.sh do_work() { # ... your task sleep 10 } do_work cmux notify --title "Task Complete" --body "long-running-task.sh finished" ```