Wenn Claude Code auf einem Remote-Server läuft, wird ein notify-send- oder osascript-Hook auf dem Server ausgeführt, wo es keinen Desktop gibt, der ihn anzeigt. Zwei Wege funktionieren. Der erste ist eine Terminal-Escape-Sequenz: Die eingebaute Benachrichtigung von Claude Code oder ein Hook, der eine terminalSequence zurückgibt, läuft über die SSH-Verbindung zurück und dein lokales Terminal (Ghostty, Kitty oder iTerm2) zeigt sie an – aber nur, solange du verbunden bist und das Terminal offen ist. Der zweite ist ein Push übers Netz vom Server auf dein Handy, über ntfy, einen Webhook oder Claude Code Notifier – das funktioniert auch bei zugeklapptem Laptop.
01Warum lokale Benachrichtigungsbefehle über SSH nichts tun
Ein Hook ist ein Befehl, den Claude Code auf dem Rechner ausführt, auf dem Claude Code läuft. Bei einem Server, den du per SSH erreichst, ist das der Server. notify-send braucht dort einen Desktop-Notification-Daemon, den headless Server und SSH-Sessions laut Hooks-Guide von Anthropic nicht haben. osascript und PowerShell-Toasts gibt es dort überhaupt nicht.
Die Frage ist also nicht „welcher Benachrichtigungsbefehl“, sondern „wie kommt ein Signal vom Server zu mir“. Es gibt drei Wege:
02Weg 1: Benachrichtigungen über dein SSH-Terminal
Die eigene Benachrichtigung von Claude Code ist eine Escape-Sequenz, die ins Terminal geschrieben wird. Laut Terminal-Guide von Anthropic erreicht sie deinen lokalen Rechner über SSH, sodass dich auch eine Remote-Session benachrichtigen kann. Ghostty und Kitty geben sie ohne Einrichtung an die Mitteilungszentrale deines Desktops weiter. iTerm2 tut das, sobald du es aktivierst: Settings > Profiles > Terminal, Notification Center Alerts anhaken und dann unter Filter Alerts Send escape sequence-generated alerts einschalten.
Wenn dein Terminal nicht dazugehört oder du eigenen Text willst, kann ein Hook eine Escape-Sequenz zurückgeben, die Claude Code dann schreibt. Hooks haben kein eigenes Terminal, deshalb gibst du sie in einem terminalSequence-Feld zurück. Speichere das auf dem Server als ~/.claude/hooks/notify-ssh.sh:
#!/bin/bash
body=$(jq -r '.message // "Claude Code needs your attention"')
# OSC 9 for iTerm2, WezTerm and ConEmu; use '\033]777;notify;%s;%s\007' for Ghostty
seq=$(printf '\033]9;%s\007' "$body")
jq -nc --arg seq "$seq" '{terminalSequence: $seq}'
Trag ihn dann auf dem Server in ~/.claude/settings.json ein:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{ "type": "command", "command": "~/.claude/hooks/notify-ssh.sh" }
]
}
]
}
}
Führe chmod +x ~/.claude/hooks/notify-ssh.sh aus und installiere jq auf dem Server. Die Referenz von Anthropic listet die akzeptierten Sequenzen: OSC 9 (iTerm2, ConEmu, Windows Terminal, WezTerm), OSC 99 (Kitty), OSC 777 (urxvt, Ghostty, Warp) und ein einfaches Bell-Zeichen. Claude Code schreibt die Sequenz nur in einer interaktiven Session, während die Oberfläche auf dem Bildschirm ist.
Die Grenzen sind eingebaut: Bricht die SSH-Verbindung ab, geht dein Laptop in den Ruhezustand oder schließt du den Tab, kommt nichts an. Wenn du Claude Code in tmux laufen lässt, füge set -g allow-passthrough on auf dem Server in ~/.tmux.conf hinzu; der tmux-Guide behandelt das und detached Sessions.
03Weg 2: ein Push vom Server
Ein Push hängt nicht von deinem Terminal ab und ist daher die richtige Wahl für lange Jobs. Der Hook schickt einen HTTPS-Request vom Server, und ein Dienst stellt ihn auf deinem Handy oder im Chat zu. Der ntfy-Guide und der Guide zu Telegram, Slack und Discord enthalten funktionierende Hooks. Sie sagen dir, dass etwas passiert ist. Einen Befehl freigeben oder eine Frage beantworten können sie nicht, also wartet Claude weiter, bis du dich wieder verbindest.
04Weg 3: Claude Code Notifier auf dem Server
Claude Code Notifier ist ein unabhängiges Tool (von TouchTap, nicht von Anthropic). Das kostenlose Kommandozeilen-Tool ccn läuft auf Mac, Windows und Linux, du installierst es also auf dem Server, wo Claude Code läuft:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
Es fügt seine Hook-Einträge in die ~/.claude/settings.json des Servers ein, lässt den Rest unangetastet und legt ein Backup an. Die Desktop-Benachrichtigungen von ccn erscheinen auf dem Rechner, auf dem ccn läuft – auf einem headless Server also nirgends, wo es dir hilft. Der sinnvolle Weg ist das Handy: Handy-Benachrichtigungen laufen über den verschlüsselten Relay-Server von TouchTap, nicht über deine SSH-Verbindung, und funktionieren daher von jedem Rechner, auf dem ccn läuft, solange er ins Internet kommt.
Pairing über SSH
Fürs Pairing brauchst du keinen Browser auf dem Server. Entweder führst du ccn pair in deiner SSH-Session aus; es zeigt im Terminal einen QR-Code, den du mit der Handykamera scannst, und einen 24 Stunden gültigen Link. Oder du öffnest die App auf dem Handy, gehst zu Computers > Add a computer und führst die angezeigte Zeile aus, die in einem Schritt installiert und pairt:
curl -fsSL https://claudecodenotifier.com/install.sh | sh -s 482913
(Der sechsstellige Code ist ein Beispiel; nimm den, den deine App anzeigt.) Ein Handy kann mehrere Computer haben, sodass Laptop und Server beide daran melden können. Details findest du im Pairing-Guide.
Was du vom Handy aus tun kannst
Nach dem Pairing bekommst du einen Push, wenn Claude fertig ist, eine Berechtigung braucht oder eine Frage stellt. Du kannst eine Berechtigung einmalig erlauben, für die Session erlauben oder ablehnen, eine Antwort auf die Frage von Claude auswählen und die nächste Anweisung schicken, sobald Claude fertig ist. Bist du weg, wartet das Terminal auf die Antwort vom Handy, bis zu einem Limit, das du festlegst, und hört sofort auf zu warten, sobald du auf der Tastatur tippst. Führ ccn doctor auf dem Server aus, um die Hooks, die Zugangsdaten und die Verbindung zum Relay zu prüfen. Infos zu den Handy-Apps findest du unter Preise; das Kommandozeilentool ist kostenlos.
05Claude Code am Laufen halten, wenn SSH abbricht
Alle drei Wege setzen voraus, dass Claude Code selbst weiterläuft. Startest du claude direkt in deiner SSH-Shell und die Verbindung bricht ab, endet die Session gleich mit. Starte es in tmux oder GNU screen, damit es einen Verbindungsabbruch übersteht, und häng dich später wieder dran. Hooks feuern auch in einer detachten Session weiter – genau da lohnt sich ein Push aufs Handy. Der tmux-Guide und Lange Tasks laufen lassen beschreiben diesen Workflow.
06FAQ
Warum passiert bei notify-send nichts, wenn ich Claude Code über SSH nutze?
Der Hook läuft auf dem Server, und dort gibt es keinen Daemon für Desktop-Benachrichtigungen. Nutz eine Escape-Sequenz, die dein lokales Terminal versteht, oder einen Push-Dienst.
Funktioniert die eingebaute Benachrichtigung von Claude Code über SSH?
Ja, in Terminals, die das unterstützen. Laut der Doku von Anthropic kommt die Desktop-Benachrichtigung über SSH auf deinem lokalen Rechner an; Ghostty und Kitty zeigen sie ohne Einrichtung an, iTerm2, nachdem du Escape-Sequenz-Alerts aktiviert hast. Die Verbindung muss dafür offen sein.
Installiere ich ccn auf meinem Laptop oder auf dem Server?
Auf dem Server, denn dort laufen Claude Code und seine Hooks. Installier es zusätzlich auf deinem Laptop, wenn du Claude Code auch dort nutzt; ein Handy lässt sich mit beiden koppeln.
Werde ich trotzdem benachrichtigt, wenn meine SSH-Session abbricht?
Nur mit einem Push vom Server, und nur, wenn Claude Code noch läuft, zum Beispiel in tmux. Escape-Sequenzen sind weg, sobald die Verbindung zu ist.
Braucht der Server offene Ports für Benachrichtigungen aufs Handy?
ccn braucht keine eingehende Verbindung. Es braucht nur ausgehenden Internetzugang, um den Relay-Server zu erreichen.