Skip to main content

Overview

A plugin for OpenCode that delivers Native OS notifications when tasks complete, errors occur, or the AI needs your input. It uses native OS notification delivery on macOS, Windows, and Linux, with an additional cmux-native path when available.

Why This Exists

You delegate a task and switch to another window. Now you’re checking back every 30 seconds. This plugin solves that:
  • Stay focused — Work in other apps. A notification arrives when the AI needs you.
  • Native OS notifications first — Uses macOS Notification Center, Windows Toast, or Linux notify-send via node-notifier.
  • Smart defaults — Only notifies for meaningful events, with parent-session filtering and quiet-hours support.
  • Additional cmux-native path — When running in cmux, can route through cmux notify and still falls back safely to desktop notifications.

Installation

ocx add kdco/notify --from https://registry.kdco.dev
Or install the full Workspace bundle:
ocx add kdco/workspace --from https://registry.kdco.dev

Notification Events

EventNotifies?SoundWhy
Session completeYesGlassMain task done — time to review
Session errorYesBassoSomething broke — needs attention
Permission neededYesSubmarineAI is blocked, waiting for you
Question askedYesSubmarine (default)Questions should always reach you promptly
Sub-task complete / errorNo (default)Set notifyChildSessions: true to include child-session session.idle and session.error events
The plugin automatically:
  1. Detects your terminal emulator (supports 37+ terminals)
  2. Suppresses session.idle, session.error, and permission.updated notifications when your terminal is focused on macOS
  3. Enables click-to-focus on macOS
Question notifications intentionally bypass macOS focus suppression so direct prompts are not missed.

Native OS Notification Paths

By default, notifications go through the native OS desktop notification path:
  • macOS: Notification Center (terminal-notifier backend)
  • Windows: Toast notifications (SnoreToast backend)
  • Linux: notify-send

Additional cmux-native path

When OpenCode runs inside cmux (with CMUX_WORKSPACE_ID set), the plugin can also send notifications via cmux:
cmux notify --title "..." --subtitle "..." --body "..."
If cmux is unavailable or notification delivery fails, the plugin automatically falls back to the existing node-notifier desktop path.

Platform Support

FeaturemacOSWindowsLinux
Native OS notificationsYesYesYes
Custom soundsYesNoNo
Focus detectionYesNoNo
Click-to-focusYesNoNo
Terminal detectionYesYesYes

Configuration (Optional)

Works out of the box. To customize, create ~/.config/opencode/kdco-notify.json:
{
  "notifyChildSessions": false,
  "terminal": "ghostty",
  "sounds": {
    "idle": "Glass",
    "error": "Basso",
    "permission": "Submarine",
    "question": "Submarine"
  },
  "quietHours": {
    "enabled": false,
    "start": "22:00",
    "end": "08:00"
  }
}
Configuration keys:
  • notifyChildSessions (default false) — when true, include child/sub-session session.idle and session.error notifications (question and permission notifications are unaffected).
  • terminal (optional) — override terminal auto-detection.
  • sounds — per-event sounds (idle, error, permission, optional question).
  • quietHours — scheduled suppression window.
Available macOS sounds: Basso, Blow, Bottle, Frog, Funk, Glass, Hero, Morse, Ping, Pop, Purr, Sosumi, Submarine, Tink

See Also