Know when your AI needs you back. Native OS notifications for OpenCode.
A plugin for OpenCode that delivers native desktop notifications when tasks complete, errors occur, or the AI needs your input. Stop tab-switching to check if it's done.
You delegate a task and switch to another window. Now you're checking back every 30 seconds. Did it finish? Did it error? Is it waiting for permission?
This plugin solves that:
- Stay focused - Work in other apps. A notification arrives when the AI needs you.
- Native feel - Uses macOS Notification Center, Windows Toast, or Linux notify-send.
- Smart defaults - Won't spam you. Only notifies for meaningful events, and only when you're not already looking at the terminal.
Install via OCX, the package manager for OpenCode extensions:
# Install OCX
curl -fsSL https://ocx.kdco.dev/install.sh | sh
# Initialize and add the plugin
ocx init
ocx registry add --name kdco https://registry.kdco.dev
ocx add kdco/notifyOr get everything at once with kdco-workspace:
ocx add kdco/workspace"Notify the human when the AI needs them back, not for every micro-event."
| Event | Notifies? | Sound | Why |
|---|---|---|---|
| Session complete | Yes | Glass | Main task done - time to review |
| Session error | Yes | Basso | Something broke - needs attention |
| Permission needed | Yes | Submarine | AI is blocked, waiting for you |
| Sub-task complete | No | - | Parent session handles orchestration |
The plugin automatically:
- Detects your terminal emulator (supports 37+ terminals)
- Suppresses notifications when your terminal is focused
- Enables click-to-focus on macOS (click notification → terminal foregrounds)
| Feature | macOS | Windows | Linux |
|---|---|---|---|
| Native notifications | Yes | Yes | Yes |
| Custom sounds | Yes | No | No |
| Focus detection | Yes | No | No |
| Click-to-focus | Yes | No | No |
| Terminal detection | Yes | Yes | Yes |
Works out of the box. To customize, create ~/.config/opencode/kdco-notify.json:
{
"enabled": true,
"notifyChildSessions": false,
"suppressWhenFocused": true,
"sounds": {
"idle": "Glass",
"error": "Basso",
"permission": "Submarine"
}
}Available macOS sounds: Basso, Blow, Bottle, Frog, Funk, Glass, Hero, Morse, Ping, Pop, Purr, Sosumi, Submarine, Tink
Minimal footprint. The plugin is event-driven - it listens for session events and fires notifications. No tools are added to your conversation, no prompts are injected beyond initial setup.
No. Smart defaults prevent noise:
- Only notifies for parent sessions (not every sub-task)
- Suppresses when your terminal is the active window
- Batches notifications when multiple delegations complete together
Set "enabled": false in the config file, or delete the config to return to defaults.
Uses detect-terminal to automatically identify your terminal. Supports 37+ terminals including:
Ghostty, Kitty, iTerm2, WezTerm, Alacritty, Hyper, Terminal.app, Windows Terminal, VS Code integrated terminal, and many more.
If you prefer not to use OCX, copy the source from src/ to .opencode/plugin/.
Caveats:
- Manually install dependencies (
node-notifier,detect-terminal) - Updates require manual re-copying
This plugin is part of the KDCO Registry. For the full experience, check out kdco-workspace which bundles notifications with background agents, specialist agents, and planning tools.
This project is not built by the OpenCode team and is not affiliated with OpenCode in any way.
MIT