Notification System
The Problem
Claude CLI stops and waits — for a question, approval, or to report completion. If the developer doesn’t notice, minutes or hours are wasted. On a remote server, the bell rings inside the container where nobody hears it.
Implemented: Two Notification Layers
Layer 1: Terminal Bell (when connected)
The terminal bell character (`\a`) travels through SSH. When a developer is SSHed into their container, Claude Code’s existing bell behaviour works automatically.
| Connection | Bell works? |
|---|---|
| Laptop SSH (iTerm, Terminal, Windows Terminal) | Yes |
| Phone SSH (Blink Shell iOS, Termux Android) | Yes |
| Web terminal (ttyd) | Depends on browser |
Layer 2: Claude Code Hooks (implemented)
Each container has notification hooks configured in ~/.claude/settings.json:
{
"hooks": {
"Notification": [{
"hooks": [{"type": "command", "command": "/home/dev/.claude/notify-sound.sh"}]
}],
"Stop": [{
"hooks": [{"type": "command", "command": "/home/dev/.claude/notify-sound.sh"}]
}]
}
}
The notify-sound.sh script outputs a terminal bell character, which propagates through the SSH connection to the developer’s local terminal/phone app.
Planned: Telegram Integration
Telegram notifications (Layer 3) are designed but not yet implemented. The plan:
- Claude Net hub gets a
/api/notifyendpoint - Hook script sends notifications to hub instead of just bell
- Hub formats and sends to Telegram group “omelasai” (chat ID -5212813086)
- Bot: @chasombot
Planned notification types:
| Event | Message Format |
|---|---|
| Waiting for input | [chasclaude] Waiting: "Which auth method?" |
| Task complete | [chasclaude] Done: "API endpoints implemented" |
| Error/blocked | [chasclaude] Blocked: "npm install failed" |
Planned: Manager Monitoring
The manager instance will periodically check for stalled sessions:
- After 5 min waiting: resend Telegram notification
- After 15 min: notify Chas specifically
- After 30 min: log as idle time
Developer Mobile Setup
Sean (iOS — Blink Shell)
- SSH key generated in app, public key added to container
- Configure connection to seanclaude port 2213
- Mosh support for mobile data
Jaz (Android — Termux)
- Install from F-Droid (not Play Store)
pkg install openssh mosh- SSH key generated, public key added to container
- Configure connection to jazclaude port 2214
Chas (Android — Termux)
- Same as Jaz + ser-8 locally for always-on access