Install
openclaw skills install claude-notificationsSet up native macOS notifications for Claude Code on local and devpod/remote environments. Use when the user asks to 'setup notifications', 'configure devpod notifications', 'get notified when Claude needs attention', 'setup claude alerts', or 'install notification hooks'. Handles local terminal-notifier, SSH reverse tunnel for devpods, launchd listener, tmux passthrough, and Claude Code hook configuration.
openclaw skills install claude-notificationsSet up native macOS notifications for Claude Code — works both locally and on remote devpods via SSH reverse tunnel. Get alerts with sound whenever Claude needs permission, is waiting for input, or requires MCP interaction.
terminal-notifier for native macOS notifications when Claude needs permission, goes idle, or requires MCP inputterminal-notifier, with OSC 9 fallbackNotification hooks for permission_prompt, idle_prompt, and elicitation_dialogmacOS only. The setup script will exit with a clear error if run on Linux/devpod. It uses brew, launchctl, and terminal-notifier — all macOS-only. The script SSHs into devpods to configure them remotely, so devpod setup is also done from your Mac.
Always confirm the user is running this on their local Mac, NOT on a devpod. The entire setup — including devpod configuration — is done from the local machine via SSH. The script SSHs into devpods to configure them remotely. If the user is on a devpod, ask them to switch to their local Mac terminal first.
Ask the user which devpod(s) to configure. Example hosts: username.devpod-ind, username-web.devpod-ind. If local-only setup, skip devpod args.
# Local only
python3 scripts/setup_notifications.py
# Local + devpods
python3 scripts/setup_notifications.py --devpod <host1> --devpod <host2>
Run from the skill's directory: ~/.claude/skills/claude-notifications/
The script handles:
terminal-notifier via brew if missingnotify.py to ~/.claude/scripts/notify-listener.py) via launchdRemoteForward 19876 to ~/.ssh/config for each devpodnotify.py to each devpod and configures Claude Code hooks thereset -g allow-passthrough on to each devpod's ~/.tmux.conf~/.claude/settings.jsonAfter the script completes, always tell the user these required manual steps:
┌─────────────────────────────────────────────────┐
│ Devpod (remote) │
│ │
│ Claude Code hook → notify.py │
│ → curl localhost:19876 (reverse tunnel) │
│ → fallback: OSC 9 escape sequence │
└──────────────────┬──────────────────────────────┘
│ SSH RemoteForward 19876
┌──────────────────▼──────────────────────────────┐
│ Local Mac │
│ │
│ notify-listener.py (launchd, port 19876) │
│ → terminal-notifier → macOS Notification Center│
└─────────────────────────────────────────────────┘
launchctl list | grep claude and lsof -i :19876launchctl unload ~/Library/LaunchAgents/com.claude.notify-listener.plist && launchctl load ~/Library/LaunchAgents/com.claude.notify-listener.plistcat ~/.claude/logs/notify-listener.logpython3 ~/.claude/scripts/notify.py "test" --title "Claude Code" --sound "Glass"python3 ~/.claude/scripts/notify.py "test" --title "Claude Code" --sound "Glass"DEBUG=1 python3 ~/.claude/scripts/notify.py "test"