Unter Linux schickt Claude Code nur in wenigen Terminals wie Ghostty und Kitty von selbst eine Desktop-Benachrichtigung. Überall sonst fügst du in ~/.claude/settings.json einen Notification-Hook hinzu, der notify-send 'Claude Code' 'Claude Code needs your attention' ausführt, plus einen Stop-Hook, wenn du sofort wissen willst, dass Claude fertig ist. notify-send stammt aus libnotify (libnotify-bin unter Debian und Ubuntu) und braucht einen laufenden Notification-Daemon. GNOME und KDE Plasma bringen einen mit, Headless-Server und SSH-Sessions haben keinen.
01Was Claude Code von sich aus macht
Wenn Claude eine Aufgabe abschließt oder auf eine Berechtigung wartet und du anscheinend weg bist, löst Claude Code ein Notification-Event aus. Laut Terminal-Guide von Anthropic machen Ghostty und Kitty daraus eine Desktop-Benachrichtigung; andere Terminals wie GNOME Terminal, Konsole oder das VS Code-Terminal zeigen nichts an.
Stattdessen kannst du in jedem Terminal eine Bell anfordern:
{
"preferredNotifChannel": "terminal_bell"
}
Was eine Bell bewirkt, hängt von Terminal und Desktop ab. Sie kann piepen, blinken oder das Fenster als dringend markieren. Mehr dazu im Guide zur Terminal-Bell. Für eine echte Benachrichtigung nimm einen Hook.
02notify-send installieren
Prüf, ob du es hast:
notify-send 'Claude Code' 'test'
Wird der Befehl nicht gefunden, installier ihn:
sudo apt install libnotify-bin # Debian, Ubuntu, Mint
sudo dnf install libnotify # Fedora, RHEL
sudo pacman -S libnotify # Arch
Läuft der Befehl, aber es erscheint nichts, fehlt dir ein Notification-Daemon. GNOME, KDE Plasma, Cinnamon und Xfce haben einen dabei. Unter einem Tiling-Window-Manager wie Sway, i3 oder Hyprland musst du selbst einen installieren und starten, z. B. mako oder dunst. Wayland und X11 funktionieren beide, weil notify-send über D-Bus mit dem Daemon spricht, nicht mit dem Display.
03Ein Notification hook
Das ist das Linux-Beispiel aus dem Hooks-Guide von Anthropic. Füg es in ~/.claude/settings.json neben deinen vorhandenen Keys ein:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "notify-send 'Claude Code' 'Claude Code needs your attention'"
}
]
}
]
}
}
Gib in Claude Code /hooks ein, dann siehst du ihn unter Notification. Der leere Matcher greift bei jedem Notification-Typ. Die wichtigsten sind permission_prompt, wenn eine Freigabe etwa sechs Sekunden ohne Eingabe von dir gewartet hat, und idle_prompt, etwa 60 Sekunden nachdem Claude fertig ist. Die vollständige Liste steht im Guide zum Notification hook.
04Sofort erfahren, wenn Claude fertig ist
idle_prompt kommt eine Minute zu spät. Ein Stop-Hook läuft, sobald Claude seinen Turn beendet. Er braucht keinen Matcher:
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "notify-send -a 'Claude Code' 'Claude Code' 'Claude has finished'"
}
]
}
]
}
}
-a setzt den App-Namen, den der Daemon anzeigt. Weitere nützliche Optionen: -u critical lässt die Benachrichtigung bei den meisten Daemons stehen, bis du sie wegklickst, und -i dialog-information fügt ein Icon hinzu. Mehr zu diesem Event im Guide zum Stop hook.
05Die echte Nachricht anzeigen, mit Sound
Hooks bekommen JSON über stdin, und der Input von Notification enthält ein Feld message. Ein Skript kann diesen Text anzeigen und einen Sound abspielen. Speicher das als ~/.claude/hooks/notify-linux.sh:
#!/bin/bash
msg=$(jq -r '.message // "Claude Code needs your attention"')
notify-send -a 'Claude Code' 'Claude Code' "$msg"
paplay /usr/share/sounds/freedesktop/stereo/complete.oga 2>/dev/null || true
Mach es mit chmod +x ~/.claude/hooks/notify-linux.sh ausführbar und nutz ~/.claude/hooks/notify-linux.sh als Hook-Befehl. jq gibt es in den Paketen jeder Distribution. paplay funktioniert mit PulseAudio und mit der PulseAudio-Schicht von PipeWire, die Sounddatei stammt aus dem freedesktop-Soundtheme (sound-theme-freedesktop unter Debian und Ubuntu). Du kannst jede beliebige .oga- oder .wav-Datei nehmen.
06Kein notify-send? Nimm eine Escape-Sequenz
Versteht dein Terminal Notification-Escape-Sequenzen, kann ein Hook Claude Code bitten, eine zu senden. Hooks haben kein eigenes Terminal, also gibst du die Sequenz in einem Feld terminalSequence zurück und Claude Code schreibt sie. Die Referenz von Anthropic nennt OSC 777 für Ghostty, urxvt und Warp sowie OSC 99 für Kitty. Zum Beispiel:
#!/bin/bash
body=$(jq -r '.message // "Needs your attention"')
seq=$(printf '\033]777;notify;%s;%s\007' "Claude Code" "$body")
jq -nc --arg seq "$seq" '{terminalSequence: $seq}'
Dafür braucht es keinen Daemon auf dem Rechner, auf dem Claude Code läuft – deshalb ist das auch der Trick für Remote-Server über SSH.
07Wenn notify-send in der Shell funktioniert, aber nicht aus Claude Code
notify-send braucht die D-Bus-Session-Adresse deines Desktop-Logins. Hooks erben die Umgebung von Claude Code, ein aus einem Desktop-Terminal gestartetes Claude Code ist also kein Problem. Startest du Claude Code über SSH, aus einem systemd-Service, in einem Container oder in einem tmux-Server, der ursprünglich über SSH gestartet wurde, fehlt sie womöglich, und die Benachrichtigung verpufft. Führ echo $DBUS_SESSION_BUS_ADDRESS in derselben Shell aus, aus der du claude startest; ist die Ausgabe leer, erscheinen aus dieser Session keine Desktop-Benachrichtigungen. Der tmux-Guide und der SSH-Guide behandeln diese Setups.
08Wo Claude Code Notifier ins Spiel kommt
Die Hooks oben sind eine gute Wahl, solange du am Rechner sitzt. Sobald du vom Schreibtisch weg bist, erreichen sie dich nicht mehr, und auf eine Desktop-Benachrichtigung kannst du Claude nicht antworten.
Claude Code Notifier ist ein unabhängiges Tool (von TouchTap, nicht von Anthropic), das auf den Hooks von Claude Code aufbaut. Sein kostenloses Kommandozeilentool ccn läuft auf Mac, Windows und Linux. Unter Linux:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
oder npx @touchtap/ccn, wenn du Node.js hast. Es trägt seine Hooks in ~/.claude/settings.json ein, lässt alles andere unverändert und legt ein Backup an. Ab dann zeigt es eine Linux-Desktop-Benachrichtigung, wenn Claude fertig ist, eine Berechtigung braucht oder eine Frage stellt. Dafür brauchst du weder Netzwerk noch Smartphone. Es läuft pro Event ein paar Millisekunden; im Hintergrund bleibt nichts aktiv.
Koppel ein iPhone oder Android-Smartphone, dann kommen dieselben Events als Push-Benachrichtigungen an – sogar auf einem Rechner ganz ohne Desktop. Vom Smartphone aus kannst du Berechtigungen erlauben oder ablehnen, eine Antwort auf die Frage von Claude auswählen und die nächste Anweisung schicken, wenn Claude fertig ist. Siehe Smartphone koppeln, die ccn-Seite und Preise für die Smartphone-Apps. Unter Linux speichert ccn sein Token in einer Datei, die nur du lesen kannst.
Wenn du ccn installierst, entferne deine eigenen notify-send-Hooks, um doppelte Benachrichtigungen zu vermeiden.
09FAQ
Warum funktioniert notify-send in meinem Terminal, aber nicht im Hook?
Meistens fehlt dem Hook die D-Bus-Session-Adresse, weil Claude Code über SSH, in einem Container oder in einem tmux-Server ohne diese Adresse gestartet wurde. Starte Claude Code aus einem Desktop-Terminal oder nutze stattdessen einen Push aufs Handy.
Welches Paket liefert notify-send?
libnotify-bin unter Debian und Ubuntu, libnotify unter Fedora und Arch. Außerdem brauchst du einen Notification-Daemon, den vollständige Desktops mitbringen.
Funktioniert das unter Wayland?
Ja. notify-send nutzt D-Bus und funktioniert daher unter Wayland genauso wie unter X11, solange ein Notification-Daemon läuft.
Wie bleibt die Benachrichtigung stehen, bis ich sie sehe?
Hänge -u critical an den notify-send-Befehl an. Die meisten Daemons lassen kritische Benachrichtigungen auf dem Bildschirm, bis du sie wegklickst.
Kann ich Claude Code-Benachrichtigungen auf einem headless Linux-Server bekommen?
Nicht als Desktop-Benachrichtigungen, denn es gibt keinen Desktop. Nutze eine Escape-Sequenz über dein SSH-Terminal oder einen Push-Dienst wie die Handy-App von ccn. Der SSH-Guide vergleicht die Optionen.