Als Claude Code op een remote server draait, wordt een notify-send- of osascript-hook op de server uitgevoerd, waar geen desktop is om hem te tonen. Er zijn twee manieren die wel werken. De eerste is een terminal escape sequence: de ingebouwde melding van Claude Code, of een hook die een terminalSequence teruggeeft, gaat terug over de SSH-verbinding en je lokale terminal (Ghostty, Kitty of iTerm2) toont hem, maar alleen zolang je verbonden bent en de terminal open staat. De tweede is een push via het netwerk van de server naar je telefoon, via ntfy, een webhook of Claude Code Notifier, en die blijft werken als je laptop dicht is.
01Waarom lokale meldingscommando's via SSH niets doen
Een hook is een commando dat Claude Code uitvoert op de machine waar Claude Code draait. Bij een server die je via SSH gebruikt, is dat de server. notify-send heeft daar een desktop notification daemon nodig, en volgens de hooks-handleiding van Anthropic hebben headless servers en SSH-sessies die niet. osascript en PowerShell-toasts zijn er helemaal niet.
De vraag is dus niet "welk meldingscommando", maar "hoe komt een signaal van de server bij mij". Er zijn drie manieren:
02Route 1: meldingen via je SSH-terminal
De eigen melding van Claude Code is een escape sequence die naar de terminal wordt geschreven. Volgens de terminal-handleiding van Anthropic komt die via SSH op je lokale machine aan, dus een remote sessie kan je nog steeds waarschuwen. Ghostty en Kitty sturen hem zonder configuratie door naar het meldingencentrum van je desktop. iTerm2 doet dat zodra je het aanzet: Settings > Profiles > Terminal, vink Notification Center Alerts aan en zet onder Filter Alerts Send escape sequence-generated alerts aan.
Gebruik je een andere terminal, of wil je je eigen tekst, dan kan een hook een escape sequence teruggeven die Claude Code wegschrijft. Hooks hebben geen eigen terminal, dus je geeft hem terug in een terminalSequence-veld. Sla dit op de server op 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}'
Voeg het daarna toe aan ~/.claude/settings.json op de server:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{ "type": "command", "command": "~/.claude/hooks/notify-ssh.sh" }
]
}
]
}
}
Voer chmod +x ~/.claude/hooks/notify-ssh.sh uit en installeer jq op de server. De referentie van Anthropic noemt de sequences die worden geaccepteerd: OSC 9 (iTerm2, ConEmu, Windows Terminal, WezTerm), OSC 99 (Kitty), OSC 777 (urxvt, Ghostty, Warp) en een kale bell. Claude Code schrijft de sequence alleen in een interactieve sessie terwijl de interface in beeld is.
De beperkingen zitten erin ingebakken. Valt de SSH-verbinding weg, gaat je laptop in slaap of sluit je het tabblad, dan komt er niets aan. Draai je Claude Code in tmux, voeg dan set -g allow-passthrough on toe aan ~/.tmux.conf op de server; de tmux-handleiding behandelt dat en detached sessies.
03Route 2: een push vanaf de server
Een push is niet afhankelijk van je terminal, dus dat is de juiste keuze voor lange taken. De hook doet een HTTPS-request vanaf de server en een dienst bezorgt het op je telefoon of in je chat. De ntfy-handleiding en de handleiding voor Telegram, Slack en Discord bevatten werkende hooks. Ze laten weten dat er iets is gebeurd, maar kunnen geen commando goedkeuren of een vraag beantwoorden, dus Claude wacht nog steeds tot je weer verbinding maakt.
04Route 3: Claude Code Notifier op de server
Claude Code Notifier is een onafhankelijke tool (gemaakt door TouchTap, niet door Anthropic). De gratis command line tool, ccn, draait op Mac, Windows en Linux, dus je installeert hem op de server, waar Claude Code draait:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
Hij voegt zijn hook-entries toe aan ~/.claude/settings.json op de server, laat de rest staan en maakt een backup. De desktopmeldingen van ccn verschijnen op de machine waar ccn draait, en dat is op een headless server nergens bruikbaar. De telefoon is de nuttige route: telefoonmeldingen gaan via de versleutelde relayserver van TouchTap, niet via je SSH-verbinding, dus ze werken vanaf elke machine waar ccn draait, zolang die het internet kan bereiken.
Koppelen via SSH
Voor het koppelen heb je geen browser op de server nodig. Voer ccn pair uit in je SSH-sessie; dat toont een QR-code in de terminal die je met de camera van je telefoon scant, plus een link die 24 uur geldig is. Of open de app op je telefoon, ga naar Computers > Add a computer en voer de regel uit die daar staat; die installeert en koppelt in één stap:
curl -fsSL https://claudecodenotifier.com/install.sh | sh -s 482913
(De zescijferige code is een voorbeeld; gebruik de code die je app toont.) Eén telefoon kan meerdere computers hebben, dus zowel een laptop als een server kan eraan rapporteren. Zie de koppelhandleiding voor details.
Wat je vanaf je telefoon kunt doen
Na het koppelen krijg je een push wanneer Claude klaar is, een permissie nodig heeft of een vraag stelt. Je kunt een permissie eenmalig toestaan, voor de sessie toestaan of weigeren, een antwoord kiezen op de vraag van Claude, en de volgende instructie sturen zodra Claude klaar is. Ben je weg, dan wacht de terminal op het antwoord van je telefoon, tot een maximum dat je zelf kiest, en stopt met wachten zodra je op het toetsenbord typt. Draai ccn doctor op de server om de hooks, de credentials en de verbinding met de relay te controleren. Zie prijzen voor de telefoonapps; de command line tool is gratis.
05Houd Claude Code draaiend als SSH wegvalt
Alle drie de routes vereisen dat Claude Code zelf blijft draaien. Start je claude direct vanuit je SSH-shell en valt de verbinding weg, dan stopt de sessie ook. Draai het in tmux of GNU screen, zodat het een disconnect overleeft, en attach later opnieuw. Hooks blijven afgaan in een detached sessie, en juist daar bewijst een push naar je telefoon zijn nut. De tmux-gids en weglopen bij lange taken behandelen deze workflow.
06FAQ
Waarom doet notify-send niets als ik Claude Code via SSH gebruik?
De hook draait op de server, en die heeft geen daemon voor desktopnotificaties. Gebruik een escape sequence die je lokale terminal begrijpt, of een pushdienst.
Werkt de ingebouwde notificatie van Claude Code via SSH?
Ja, in terminals die het ondersteunen. Volgens de docs van Anthropic bereikt de desktopnotificatie je lokale machine via SSH; Ghostty en Kitty tonen hem zonder configuratie, en iTerm2 nadat je escape-sequence-alerts hebt ingeschakeld. De verbinding moet wel open zijn.
Installeer ik ccn op mijn laptop of op de server?
Op de server, want daar draaien Claude Code en zijn hooks. Installeer het ook op je laptop als je daar ook Claude Code gebruikt; één telefoon kan aan beide gekoppeld worden.
Krijg ik nog notificaties als mijn SSH-sessie wegvalt?
Alleen met een push vanaf de server, en alleen als Claude Code nog draait, bijvoorbeeld in tmux. Escape sequences stoppen zodra de verbinding sluit.
Moet de server poorten openzetten voor telefoonnotificaties?
ccn heeft geen inkomende verbinding nodig. Wel uitgaande internettoegang om de relayserver te bereiken.