DocHub
Multi-layer notification system ensuring developers know when Claude needs attention

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/notify endpoint
  • 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:

  1. After 5 min waiting: resend Telegram notification
  2. After 15 min: notify Chas specifically
  3. After 30 min: log as idle time

Developer Mobile Setup

  • 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