Sur macOS, Claude Code envoie déjà une notification de bureau dans Ghostty, Kitty et iTerm2 (il faut activer les réglages d'alerte d'iTerm2), mais Apple Terminal et la plupart des autres terminaux n'ont rien. Pour avoir une notification dans n'importe quel terminal, ajoute à ~/.claude/settings.json un hook Notification qui lance osascript -e 'display notification ...', et un hook Stop si tu veux aussi savoir dès que Claude a terminé. Autorise les notifications pour Éditeur de script dans Réglages Système, sinon la commande osascript échoue sans rien dire.
01Ce que Claude Code fait tout seul
Claude Code déclenche un événement de notification quand il termine une tâche ou attend une autorisation et que tu sembles loin du terminal. Ce que tu vois dépend du terminal, d'après le guide du terminal d'Anthropic :
Pour iTerm2, ouvre Settings > Profiles > Terminal, coche Notification Center Alerts, puis clique sur Filter Alerts et active Send escape sequence-generated alerts. Vérifie aussi qu'iTerm2 a le droit d'envoyer des notifications dans Réglages Système > Notifications.
Dans Apple Terminal, tu peux au moins avoir un son. Mets "preferredNotifChannel": "terminal_bell" dans ~/.claude/settings.json et active Cloche audible dans Réglages > Profils > Avancé. Le guide de la cloche du terminal détaille cette option.
L'alerte intégrée a ses limites. Elle ne se déclenche que quand Claude Code pense que tu es absent, elle dit seulement qu'il s'est passé quelque chose, et elle ne sort jamais de l'ordinateur.
02Un hook de notification avec osascript
Un hook fonctionne dans tous les terminaux, y compris ceux des IDE. Voici l'exemple macOS du guide des hooks d'Anthropic. Ajoute-le à ~/.claude/settings.json en gardant les autres clés déjà présentes :
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
}
]
}
]
}
}
Tape /hooks dans Claude Code pour vérifier qu'il apparaît sous Notification.
L'autorisation d'Éditeur de script
osascript publie les notifications au nom d'Éditeur de script. Si Éditeur de script n'a pas l'autorisation, la commande échoue en silence et macOS ne demande rien. Lance ceci une fois dans Terminal :
osascript -e 'display notification "test"'
Rien ne s'affiche la première fois. Ouvre Réglages Système > Notifications, trouve Éditeur de script et active Autoriser les notifications. Relance la commande : la notification de test devrait apparaître.
Quand il se déclenche
Le matcher vide se déclenche pour tous les types de notification. Les deux plus utiles sont permission_prompt (Claude attend une validation depuis environ six secondes sans que tu aies tapé) et idle_prompt (Claude a terminé il y a environ 60 secondes et tu n'as rien tapé depuis). Le guide du Notification hook liste tous les types et leurs délais.
03Savoir dès que Claude a terminé
idle_prompt attend une minute. Pour être prévenu tout de suite, ajoute un hook Stop, qui s'exécute quand Claude finit son tour. Stop ne prend pas de matcher :
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude has finished\" with title \"Claude Code\" sound name \"Glass\"'"
}
]
}
]
}
}
sound name accepte n'importe quel son de /System/Library/Sounds, comme Glass, Ping ou Hero. Si tu veux juste un son, afplay /System/Library/Sounds/Glass.aiff fait l'affaire comme commande. Plus de détails sur cet événement dans le guide du Stop hook.
04Afficher le vrai message
Les hooks reçoivent du JSON sur l'entrée standard. L'entrée de Notification contient un champ message, par exemple « Claude needs your permission ». Un petit script peut mettre ce texte dans la notification. Enregistre ceci dans ~/.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"
Comme le texte est passé en argument et non dans la chaîne AppleScript, les guillemets du message ne peuvent pas casser la commande. Rends-le exécutable avec chmod +x ~/.claude/hooks/notify-mac.sh et mets ~/.claude/hooks/notify-mac.sh comme commande du hook. Le script a besoin de jq (brew install jq si jq --version échoue).
05terminal-notifier : clique pour revenir à ton terminal
Une notification osascript ouvre Éditeur de script quand tu cliques dessus, ce qui n'est pas vraiment ce que tu veux. terminal-notifier te laisse choisir l'app qui passe au premier plan :
brew install terminal-notifier
terminal-notifier -title "Claude Code" -message "Claude has finished" -sound default -activate com.googlecode.iterm2
Utilise com.apple.Terminal pour Apple Terminal, ou le bundle ID de ton éditeur. La même commande va dans le champ command du hook. La première fois, autorise les notifications pour terminal-notifier dans Réglages Système.
06Concentration et Ne pas déranger
Ce sont toutes des notifications macOS classiques, donc un mode Concentration peut les masquer. Si elles disparaissent à certains moments, regarde Réglages Système > Concentration et autorise l'app qui les publie (Éditeur de script, terminal-notifier ou ton terminal). Pour des notifications qui respectent plutôt tes propres horaires, vois heures calmes et Ne pas déranger.
07Où se situe Claude Code Notifier
Les hooks ci-dessus suffisent si tu restes devant ton Mac et veux juste un petit rappel. Ils ne suffisent plus quand tu t'éloignes : une notification Mac ne peut pas te joindre dans la cuisine ni répondre à Claude.
Claude Code Notifier est un outil indépendant (créé par TouchTap, pas par Anthropic) qui repose sur les mêmes hooks. Son outil en ligne de commande gratuit, ccn, tourne sur Mac, Windows et Linux. Installe-le sur ton Mac avec :
curl -fsSL https://claudecodenotifier.com/install.sh | sh
ou avec Homebrew : brew trust --formula touch-tap/tap/ccn && brew install touch-tap/tap/ccn. Il ajoute ses entrées de hook à ~/.claude/settings.json, ne touche pas au reste du fichier et garde une sauvegarde. Dès lors, il affiche une notification macOS quand Claude termine, a besoin d'une autorisation ou pose une question, sans réseau ni téléphone.
Si tu associes un iPhone ou un téléphone Android, les mêmes événements arrivent en notifications push, et tu peux autoriser ou refuser une permission, choisir une réponse à la question de Claude ou envoyer l'instruction suivante depuis le téléphone. Si tu as tapé dans les 30 dernières secondes, le terminal demande comme d'habitude et rien n'attend sur le téléphone. Vois associer un téléphone et la page ccn. Les apps mobiles nécessitent un abonnement ou un achat à vie ; vois les tarifs.
Si tu ajoutes ccn, supprime tes propres hooks osascript, sinon tu auras deux notifications par événement. Il existe aussi une ancienne app de barre des menus Mac ; ne la lance pas en même temps que ccn sur le même Mac.
08FAQ
Pourquoi mon hook osascript n'affiche rien ?
Le plus souvent, Script Editor n'a pas l'autorisation d'envoyer des notifications, et macOS supprime la notification sans erreur. Lance osascript -e 'display notification "test"' une fois, puis autorise Script Editor dans Réglages Système > Notifications. Si ça ne marche toujours pas, vérifie qu'aucun mode Concentration n'est actif et que /hooks liste bien ton hook.
Est-ce que Claude Code envoie des notifications macOS sans aucune configuration ?
Oui, dans Ghostty et Kitty, et dans iTerm2 une fois ses alertes du Centre de notifications activées. Apple Terminal et les terminals des IDE n'ont pas de notification desktop par défaut : utilise un hook ou ccn dans ce cas.
Comment recevoir une notification dès que Claude a terminé, et pas une minute plus tard ?
Utilise un hook Stop. La notification idle_prompt ne se déclenche qu'environ 60 secondes après la fin de Claude, et seulement si tu n'as rien tapé, alors que Stop s'exécute à la fin de chaque tour.
Je peux avoir un son plutôt qu'une bannière ?
Oui. Utilise afplay /System/Library/Sounds/Glass.aiff comme commande du hook, ou ajoute sound name "Glass" à la commande osascript pour avoir les deux.
Je peux approuver une permission depuis la notification macOS ?
Pas avec osascript ni terminal-notifier : ils affichent seulement du texte. Pour répondre à une permission depuis un hook, il faut l'événement PermissionRequest ; consulte répondre aux demandes de permission depuis un hook ou approuve depuis ton téléphone avec Claude Code Notifier.