Para recibir una notificación cuando Claude Code termina, añade un hook Stop a ~/.claude/settings.json que ejecute el comando de notificaciones de tu sistema. Stop se dispara en cuanto Claude termina de responder. Para "Claude necesita que haga algo", añade también un hook Notification: se dispara cuando un prompt de permisos lleva unos seis segundos esperando o cuando Claude lleva un minuto inactivo. Ambos funcionan en Mac, Windows y Linux, y una herramienta como Claude Code Notifier puede enviar esos mismos avisos a tu móvil.
01Qué hace Claude Code por sí solo
Claude Code ya intenta avisarte cuando parece que no estás en la terminal. Por defecto envía una notificación de escritorio en iTerm2, Ghostty y Kitty, puede enviar un carácter de campana en Apple Terminal y no hace nada en otras terminales. Además, en iTerm2 tienes que activar los ajustes de alertas para que aparezca algo.
Así que si usas la terminal de VS Code, Warp, Windows Terminal o la mayoría de terminales de Linux, normalmente no recibirás nada. Puedes forzar la campana de la terminal con el ajuste preferredNotifChannel, que explicamos en la guía de la campana de la terminal. Para tener una notificación de escritorio de verdad en cualquier terminal, necesitas un hook.
02Los dos hooks que necesitas
Los hooks son comandos que Claude Code ejecuta en momentos concretos de una sesión. Aquí importan dos:
StopCuando Claude termina de responder (no cuando lo interrumpes)"Claude ha terminado"Notification con matcher permission_promptUn prompt de permisos lleva unos seis segundos esperando sin que hayas escrito nada"Claude necesita aprobación"Notification con matcher idle_promptUnos 60 segundos después de que Claude termine, si no has escrito nada desde entoncesUn recordatorio de que te toca a tiStop es el rápido: se ejecuta al final de cada turno, al instante. Los tipos de Notification dependen de que no estés mirando: cada pulsación de tecla los retrasa, así que no te avisan mientras estás delante. Si quieres una señal en el momento en que Claude pide permiso, usa el hook PermissionRequest, explicado en la guía de PermissionRequest.
Para ver cómo funcionan los hooks en general (eventos, matchers, archivos de configuración, códigos de salida), consulta Los hooks de Claude Code explicados.
03Una configuración que funciona en macOS
Abre ~/.claude/settings.json (créalo si no existe) y añade esto. Si el archivo ya tiene un objeto hooks, añade Stop y Notification como claves dentro de él en lugar de reemplazarlo.
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude has finished\" with title \"Claude Code\"'"
}
]
}
],
"Notification": [
{
"matcher": "permission_prompt|idle_prompt",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
}
]
}
]
}
}
Stop no tiene matcher, así que se dispara en cada turno. El matcher de Notification lo limita a los dos tipos que significan "vuelve".
Si no aparece nada, puede que macOS esté bloqueando Script Editor, que es lo que usa osascript para mostrar notificaciones. Ejecuta osascript -e 'display notification "test"' una vez en Terminal, luego abre Ajustes del Sistema > Notificaciones, busca Script Editor y activa Permitir notificaciones.
04La misma configuración en Linux y Windows
Mantén la estructura JSON de arriba y cambia las cadenas de command.
Linux (necesita un daemon de notificaciones de escritorio, así que no funciona en un servidor headless):
"command": "notify-send 'Claude Code' 'Claude has finished'"
Si no tienes notify-send, instala libnotify-bin en Debian y Ubuntu, o el equivalente de tu distribución. Para SSH y servidores, consulta notificaciones por SSH.
Windows (PowerShell). El ejemplo de Anthropic abre un cuadro de mensaje en lugar de un toast en la esquina:
"command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Claude has finished', 'Claude Code')\""
El cuadro puede abrirse detrás de la ventana del terminal, así que prueba antes el comando en PowerShell. En WSL, powershell.exe tiene que ser accesible mediante la interoperabilidad con Windows. La guía de Windows explica otras opciones.
05Comprueba que funciona
- Escribe
/hooksen Claude Code. Tus hooks deberían aparecer enStopyNotification. - Pregúntale algo breve a Claude. Cuando responda, debería aparecer la notificación de
Stop. - Pídele algo que necesite permiso, cambia a otra ventana y espera. La notificación de
permission_promptllega a los seis segundos más o menos.
Los cambios en settings.json normalmente se aplican al instante. Si un hook no aparece en /hooks, comprueba que el archivo sea JSON válido (sin comas finales ni comentarios). Arranca Claude Code con claude --debug para ver qué hizo cada hook. Tienes más soluciones en la lista de comprobación de problemas.
06Recibir el aviso en el móvil
Una notificación de escritorio solo sirve si estás delante del ordenador. En cuanto te alejas, necesitas el aviso en otro sitio. Hay tres opciones habituales:
- Un servicio de push propio, como ntfy, al que llamas con
curldesde los mismos hooks. Barato y flexible. Consulta la guía de ntfy. - Un webhook de chat para Telegram, Slack o Discord. Ideal si ya vives en el chat. Consulta la guía de webhooks de chat.
- Claude Code Notifier, que configura los hooks por ti y te deja responder desde el móvil.
Las opciones caseras están bien si solo quieres un aviso. Su límite es que son unidireccionales: te enteras de que Claude está esperando, pero igualmente tienes que volver al teclado para aprobar cualquier cosa.
Claude Code Notifier es una herramienta independiente (no la hace Anthropic) con dos partes: ccn, una herramienta de línea de comandos gratuita para Mac, Windows y Linux, y apps para iPhone y Android. Se instala con una sola línea:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
En Windows, usa irm https://claudecodenotifier.com/install.ps1 | iex en PowerShell (el soporte para Windows está en beta). Tienes otras opciones, como Homebrew, npx @touchtap/ccn y el plugin de Claude Code, en la página de ccn.
La instalación añade siete entradas de hook que ejecutan ccn hook, deja el resto de tu settings.json tal cual y guarda una copia de seguridad única a su lado. Incluso sin móvil, ccn muestra una notificación de escritorio en tu ordenador cuando Claude termina, necesita un permiso o hace una pregunta. Esa parte es gratis y funciona sin conexión.
Vincula un móvil con ccn pair y además tendrás:
- un push de "Claude ha terminado" en cuanto acaba un turno;
- solicitudes de permiso que puedes permitir una vez, permitir para la sesión o denegar;
- las preguntas de opción múltiple de Claude, respondidas desde el móvil;
- un cuadro de seguimiento para enviarle a Claude su siguiente instrucción justo cuando termina.
Si has escrito algo en los últimos 30 segundos, no se espera al móvil y el terminal pregunta como siempre. Las apps requieren una suscripción o una compra de por vida; consulta los precios. En Vincular un móvil se explica la configuración paso a paso.
07Preguntas frecuentes
¿Por qué mi Notification hook tarda tanto en dispararse?
El tipo permission_prompt espera a que el prompt lleve unos seis segundos en pantalla sin que escribas, y idle_prompt espera unos 60 segundos después de que Claude termine. Ese retraso es intencionado, para no avisarte mientras estás mirando. Usa un hook Stop para un aviso instantáneo de "terminado" y un hook PermissionRequest para un aviso instantáneo de "necesita aprobación".
¿Se dispara el Stop hook si pulso Esc para interrumpir a Claude?
No. Stop no se ejecuta cuando el turno acaba porque lo interrumpiste. Tampoco cuando termina con un error de la API, como un límite de uso. Para eso Claude Code lanza un evento aparte, StopFailure, al que puedes añadir un hook de la misma forma.
¿Un Stop hook se dispara tras cada mensaje o solo cuando termina toda la tarea?
Tras cada turno. Claude Code no sabe cuándo has terminado tu tarea en general, solo cuándo ha dejado de responder. Si tienes una conversación larga, recibirás un aviso por respuesta. Si te parecen demasiados, usa la notificación idle_prompt, que solo salta cuando llevas un minuto fuera más o menos.
¿Funciona en el terminal de VS Code o JetBrains?
Sí. Los hooks los ejecuta Claude Code, no el terminal, así que funcionan en cualquier terminal, incluidos los de los IDE. Lo que sí depende del terminal son las notificaciones integradas. Consulta la guía de terminales de IDE.
¿Puedo recibir avisos en el móvil sin instalarle nada?
En parte. Un hook que publique en ntfy o en un webhook de chat puede llegar a una app que ya tengas, pero solo te avisa de que ha pasado algo. Para aprobar o responder desde el móvil necesitas algo que devuelva tu respuesta al hook, que es lo que hacen las apps de Claude Code Notifier.