Op macOS stuurt Claude Code al een desktopmelding in Ghostty, Kitty en iTerm2 (in iTerm2 moet je de meldingsinstellingen aanzetten), maar Apple Terminal en de meeste andere terminals krijgen niets. Wil je in elke terminal een melding, voeg dan een Notification-hook die osascript -e 'display notification ...' uitvoert toe aan ~/.claude/settings.json, plus een Stop-hook als je ook direct wilt weten wanneer Claude klaar is. Sta meldingen voor Scripteditor toe in Systeeminstellingen, anders faalt het osascript-commando zonder foutmelding.
01Wat Claude Code zelf al doet
Claude Code vuurt een notification-event af wanneer het een taak afrondt of op toestemming wacht en je niet bij de terminal lijkt te zijn. Wat je ziet hangt af van je terminal, volgens de terminalgids van Anthropic:
Open in iTerm2 Settings > Profiles > Terminal, vink Notification Center Alerts aan, klik op Filter Alerts en zet Send escape sequence-generated alerts aan. Controleer ook of iTerm2 meldingen mag sturen in Systeeminstellingen > Berichtgeving.
In Apple Terminal kun je in elk geval een geluid krijgen. Zet "preferredNotifChannel": "terminal_bell" in ~/.claude/settings.json en zet Hoorbare bel aan onder Instellingen > Profielen > Geavanceerd. De gids over de terminalbel behandelt die aanpak in detail.
De ingebouwde melding heeft beperkingen. Hij gaat alleen af als Claude Code denkt dat je weg bent, zegt alleen dát er iets gebeurd is en komt nooit verder dan je computer.
02Een notification-hook met osascript
Een hook werkt in elke terminal, ook in IDE-terminals. Dit is het macOS-voorbeeld uit de hooks-gids van Anthropic. Voeg het toe aan ~/.claude/settings.json en laat je bestaande keys staan:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
}
]
}
]
}
}
Typ /hooks in Claude Code om te controleren dat hij onder Notification staat.
De toestemming voor Scripteditor
osascript plaatst meldingen namens Scripteditor. Heeft Scripteditor geen toestemming voor meldingen, dan faalt het commando stil en vraagt macOS er niet om. Voer dit één keer uit in Terminal:
osascript -e 'display notification "test"'
De eerste keer verschijnt er niets. Open Systeeminstellingen > Berichtgeving, zoek Scripteditor en zet Sta berichtgeving toe aan. Voer het commando opnieuw uit en de testmelding zou moeten verschijnen.
Wanneer hij afgaat
De lege matcher gaat af bij elk type melding. De twee belangrijkste zijn permission_prompt (Claude wacht al zo'n zes seconden op goedkeuring en je hebt niets getypt) en idle_prompt (Claude is zo'n 60 seconden geleden klaar en je hebt sindsdien niets getypt). De gids over de Notification hook noemt elk type en de timing.
03Direct weten wanneer Claude klaar is
idle_prompt wacht een minuut. Wil je het meteen weten, voeg dan een Stop-hook toe; die draait zodra Claude zijn beurt afrondt. Stop heeft geen matcher:
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude has finished\" with title \"Claude Code\" sound name \"Glass\"'"
}
]
}
]
}
}
sound name accepteert elk geluid in /System/Library/Sounds, zoals Glass, Ping of Hero. Wil je alleen geluid, dan werkt afplay /System/Library/Sounds/Glass.aiff als commando. Meer over dit event in de gids over de Stop hook.
04Toon het echte bericht
Hooks krijgen JSON binnen via standard input. De Notification-input heeft een message-veld, zoals "Claude needs your permission". Met een klein script zet je die tekst in de melding. Sla dit op als ~/.claude/hooks/notify-mac.sh:
#!/bin/bash
msg=$(jq -r '.message // "Claude Code needs your attention"')
osascript -e 'on run argv' \
-e 'display notification (item 1 of argv) with title "Claude Code"' \
-e 'end run' "$msg"
Doordat je de tekst als argument meegeeft en niet in de AppleScript-string zet, kunnen aanhalingstekens in het bericht het commando niet breken. Maak het uitvoerbaar met chmod +x ~/.claude/hooks/notify-mac.sh en stel het hook-commando in op ~/.claude/hooks/notify-mac.sh. Het script heeft jq nodig (brew install jq als jq --version faalt).
05terminal-notifier: klik om terug te gaan naar je terminal
Klik je op een melding van osascript, dan opent Scripteditor, en daar wil je niet heen. Met terminal-notifier kies je welke app naar voren komt:
brew install terminal-notifier
terminal-notifier -title "Claude Code" -message "Claude has finished" -sound default -activate com.googlecode.iterm2
Gebruik com.apple.Terminal voor Apple Terminal, of de bundle-ID van je editor. Hetzelfde commando zet je in het command-veld van de hook. Sta de eerste keer meldingen voor terminal-notifier toe in Systeeminstellingen.
06Focus en Niet storen
Dit zijn allemaal gewone macOS-meldingen, dus een Focus-modus kan ze verbergen. Verdwijnen ze op bepaalde momenten, kijk dan bij Systeeminstellingen > Focus en sta de app toe die ze plaatst (Scripteditor, terminal-notifier of je terminal). Wil je meldingen die juist je eigen tijden respecteren, zie dan stille uren en Niet storen.
07Waar Claude Code Notifier in past
De hooks hierboven zijn prima als je achter je Mac zit en alleen een seintje wilt. Ze schieten tekort zodra je wegloopt, want een Mac-melding bereikt je niet in de keuken en kan Claude geen antwoord geven.
Claude Code Notifier is een onafhankelijke tool (gemaakt door TouchTap, niet door Anthropic) die op dezelfde hooks is gebouwd. De gratis command line tool, ccn, draait op Mac, Windows en Linux. Installeer hem op je Mac met:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
of met Homebrew: brew trust --formula touch-tap/tap/ccn && brew install touch-tap/tap/ccn. Hij voegt zijn hook-entries toe aan ~/.claude/settings.json, laat de rest van het bestand met rust en maakt een backup. Vanaf dan toont hij een macOS-melding wanneer Claude klaar is, toestemming nodig heeft of een vraag stelt, zonder netwerk of telefoon.
Koppel je een iPhone of Android-telefoon, dan komen dezelfde events binnen als pushmeldingen en kun je vanaf je telefoon een toestemming toestaan of weigeren, een antwoord op de vraag van Claude kiezen of de volgende instructie sturen. Heb je in de laatste 30 seconden getypt, dan vraagt de terminal het gewoon en wacht er niets op je telefoon. Zie een telefoon koppelen en de ccn-pagina. Voor de telefoonapps heb je een abonnement of eenmalige lifetime-aankoop nodig; zie prijzen.
Voeg je ccn toe, verwijder dan je eigen osascript-hooks, anders krijg je twee meldingen per event. Er is ook nog een oudere menubalk-app voor de Mac; gebruik die niet naast ccn op dezelfde Mac.
08FAQ
Waarom laat mijn osascript-hook niets zien?
Meestal heeft Script Editor geen toestemming voor meldingen, waardoor macOS de melding zonder foutmelding weggooit. Voer één keer osascript -e 'display notification "test"' uit en sta Script Editor daarna toe in Systeeminstellingen > Berichtgeving. Werkt het nog steeds niet, controleer dan of er geen Focus-modus actief is en of /hooks je hook toont.
Stuurt Claude Code zonder configuratie macOS-meldingen?
Ja, in Ghostty en Kitty, en in iTerm2 zodra je de Berichtencentrum-meldingen aanzet. Apple Terminal en IDE-terminals krijgen standaard geen desktopmelding, dus gebruik daar een hook of ccn.
Hoe krijg ik een melding zodra Claude klaar is, en niet een minuut later?
Gebruik een Stop-hook. De idle_prompt-melding gaat pas zo'n 60 seconden nadat Claude klaar is af, en alleen als je niets hebt getypt, terwijl Stop aan het einde van elke beurt draait.
Kan ik een geluid horen in plaats van een banner te zien?
Ja. Gebruik afplay /System/Library/Sounds/Glass.aiff als hook-commando, of voeg sound name "Glass" toe aan het osascript-commando om allebei te krijgen.
Kan ik een permissie goedkeuren vanuit de macOS-melding?
Niet met osascript of terminal-notifier: die tonen alleen tekst. Om vanuit een hook op een permissie te antwoorden heb je het PermissionRequest-event nodig; zie permissieverzoeken beantwoorden vanuit een hook of keur goed vanaf je telefoon met Claude Code Notifier.