Saltar al contenido
claudemods

Notificación cuando Claude Code termina: toast y sonido

Un toast «Done in 2m 14s» y un sonido al terminar un turno largo de Claude, más un aviso de escritorio opcional.

Permisos

  • Ejecuta comandosPuede ejecutar programas de shell en tu equipo ($.process.run / spawn). Revisa el código fuente para ver exactamente cuáles.
  • Modifica la interfazDibuja en la interfaz de Claude Code: bandas, paneles, texto de estado, avisos (ui.render / $.ui.*).
  • Reproduce sonidoPuede reproducir audio o leer texto en voz alta ($.audio.*).
probado con
v2.1.291
última prueba
requiere
Claude Code ≥ 2.1.287
superficies
aviso
código fuente
ClaudeMods (MIT)

Instalar dentro de Claude Code:

/plugin install cm-done-toast --marketplace rotbit/claudemods-marketplace
Todas las opciones de instalación ↓

¿Qué hace este mod?

Aviso de finalización te da una notificación cuando Claude Code termina: cuando acaba un turno que ha llevado un buen rato, un toast muestra Done in 2m 14s y suena un breve aviso de dos notas. Si el turno termina con un error, el mensaje es Stopped on an error after 2m 14s. Los turnos cortos, los interrumpidos y los de subagentes no hacen ruido, así que el sonido significa «vuelve, tu respuesta está lista».

Si trabajas en otra ventana durante las tareas largas, activa la opción de notificación del sistema y el mismo mensaje aparecerá en el Centro de notificaciones de macOS o como una ventana emergente de notify-send en Linux. Requiere Claude Code 2.1.287 o posterior.

Demo

La grabación envía a Claude una tarea que tarda más que el umbral. Cuando el turno termina, el toast con la duración del turno aparece en la parte inferior de la pantalla.

Instalación

Elige uno de los métodos del bloque de instalación. El sonido funciona en macOS sin configurar nada; las notificaciones del sistema hay que activarlas.

$ install cm-done-toast

Requiere Claude Code ≥ 2.1.287

  1. 1.Una línea, dentro de Claude Code

    /plugin install cm-done-toast --marketplace rotbit/claudemods-marketplace

    Pégala en una sesión abierta (v2.1.275+). Claude Code te pedirá primero añadir el marketplace.

  2. 2.Desde tu shell

    claude plugin marketplace add rotbit/claudemods-marketplace
    claude plugin install cm-done-toast@claudemods

    Después ejecuta /reload-plugins en cualquier sesión que ya esté abierta.

  3. 3.Pruébalo sin instalarlo

    git clone https://github.com/rotbit/claudemods-marketplace
    claude --plugin-dir ./claudemods-marketplace/cm-done-toast

    Carga el mod solo para una sesión. No se añade nada a tu configuración.

Cómo funciona

El mod tiene un único hook. Extraído de hooks/register.ts:

on('turn.complete', async ($, e, next) => {
  const result = await next(e)
  if (!shouldNotify(e, minSeconds)) return result

  const text = toastText(e, includeAnswerPreview)
  $.ui.toast(text)

  if (sound) {
    $.audio.play({ asset: 'sounds/done.wav' }).catch(() => undefined)
  }

  if (systemNotification) {
    platform ??= $.process
      .run(['uname', '-s'], { timeoutMs: 5000 })
      .then(ran => (ran.exitCode === 0 ? parseUname(ran.stdout) : undefined))
      .catch(() => undefined)
    platform
      .then(found =>
        found === undefined ? undefined : $.process.run(notificationArgv(found, 'Claude Code', text), { timeoutMs: 10000 }),
      )
      .catch(() => undefined)
  }

  return result
})

turn.complete se dispara cuando Claude termina un turno. El hook espera primero a next(e), así que nunca retrasa el resultado del turno. shouldNotify, en hooks/format.ts, devuelve false para los turnos de subagentes (los que tienen agentId), los turnos abortados y cualquier turno más corto que minSeconds. toastText formatea la duración como 45s, 2m 14s o 1h 3m.

El sonido es sounds/done.wav, incluido con el mod y reproducido con $.audio.play. La API de mods no tiene un campo de plataforma ni una llamada de notificación, así que, cuando las notificaciones del sistema están activadas, el mod pregunta una vez a uname -s y guarda la respuesta. Después ejecuta osascript -e 'display notification …' en macOS o notify-send en Linux. Los argumentos se pasan como un array argv sin shell, de modo que las comillas en la respuesta de Claude no pueden escaparse. El sonido y la notificación se lanzan sin esperar resultado; los errores se ignoran.

Personalízalo

Cambia estas opciones en /config. Para usar tu propio sonido, sustituye sounds/done.wav en la carpeta del mod o cambia la ruta asset en el hook. El texto del toast lo genera toastText en hooks/format.ts, y el título de la notificación, 'Claude Code', es el segundo argumento de notificationArgv.

AjusteTipoValor por defectoQué hace
minSecondsnumber30Minimum turn length (seconds). Only turns at least this long raise the toast, sound and notification.
soundbooleantruePlay a sound. Play a short chime when the turn finishes (macOS only: Claude Code plays clips with afplay).
systemNotificationbooleanfalseSystem notification. Also raise a desktop notification via osascript (macOS) or notify-send (Linux).
includeAnswerPreviewbooleanfalseInclude answer preview. Add the first 80 characters of Claude's answer to the toast and notification.

Cámbialos en Claude Code con /config: el mod se recarga en caliente.

Permisos y seguridad

Modifica la interfaz cubre el toast. Reproduce sonido cubre el aviso sonoro. Ejecuta comandos aparece porque $.process.run está en el código, pero solo se usa si activas systemNotification: entonces ejecuta uname -s una vez y, después, osascript o notify-send con argumentos fijos. Con la configuración por defecto no se inicia ningún proceso.

El mod no intercepta llamadas a herramientas, no lee tus prompts, no toca archivos ni usa la red. Desactívalo con /plugin disable cm-done-toast, o inicia una sesión con todos los mods desactivados usando claude --safe-mode.

Ejecuta comandos
Puede ejecutar programas de shell en tu equipo ($.process.run / spawn). Revisa el código fuente para ver exactamente cuáles.
Modifica la interfaz
Dibuja en la interfaz de Claude Code: bandas, paneles, texto de estado, avisos (ui.render / $.ui.*).
Reproduce sonido
Puede reproducir audio o leer texto en voz alta ($.audio.*).

Compatibilidad y solución de problemas

Probado con Claude Code 2.1.291 en la terminal de macOS. Si no pasa nada al terminar un turno:

  • Comprueba que claude --version sea 2.1.287 o posterior y que el mod esté habilitado en /plugin.
  • Ejecuta /reload-plugins después de instalar desde la shell.
  • Puede que el turno haya sido más corto que minSeconds.
  • Que no haya sonido fuera de macOS es lo esperado.
  • En macOS, permite las notificaciones de tu aplicación de terminal en Ajustes del Sistema si la notificación del sistema nunca aparece.
  • En Linux, instala libnotify (notify-send) para las notificaciones del sistema.

Preguntas frecuentes

¿Por qué no recibí ninguna notificación tras una respuesta corta?
Los turnos más cortos que minSeconds (30 por defecto) no avisan. Pon minSeconds a 0 para que te avise de todos los turnos.
¿Por qué no hay sonido en Linux o Windows?
Claude Code reproduce los clips de audio con afplay, que solo existe en macOS. El toast sigue apareciendo en todas las plataformas.
¿Cómo consigo una alerta del Centro de notificaciones de macOS?
Activa systemNotification en /config. El mod ejecutará entonces osascript en macOS o notify-send en Linux. macOS puede preguntarte una vez si tu terminal puede enviar notificaciones.
¿Lo activan los subagentes?
No. Los turnos con un agentId se omiten, igual que los turnos interrumpidos, así que recibes una notificación por respuesta.
¿Puede la notificación incluir la respuesta de Claude?
Activa includeAnswerPreview para añadir los primeros 80 caracteres. Está desactivado por defecto porque el texto aparecería entonces en el historial de notificaciones del sistema.
Medidor de contexto funcionando en Claude Code

Medidor de contexto

Contexto ocupado, uso del plan en 5 h y 7 días y coste de la sesión en la barra de estado, con aviso cerca del límite.

  • estado
  • aviso
  • Modifica la interfaz

probado con v2.1.291

Contador de llamadas a herramientas funcionando en Claude Code

Contador de llamadas a herramientas

Cuenta las llamadas a herramientas por turno y sesión, muestra el total junto al spinner y añade /tally con un desglose.

  • spinner
  • transcripción
  • estado
  • Intercepta llamadas a herramientas
  • Modifica la interfaz
  • Añade comandos/herramientas

probado con v2.1.291

Rama git sobre el prompt funcionando en Claude Code

Rama git sobre el prompt

Tu rama git, los archivos cambiados y el estado ahead/behind en una franja de una línea sobre el prompt de Claude Code.

  • sobre el prompt
  • Ejecuta comandos
  • Intercepta llamadas a herramientas
  • Modifica la interfaz

probado con v2.1.291

Más en Toasts y notificaciones, Temporizadores, tareas y standups.