Skip to content

Tipos de Eventos: Cuándo se Disparan las Notificaciones de OpenCode ​

Esta página enumera los tipos de eventos de OpenCode que escucha el complemento opencode-notify junto con sus condiciones de activación. El complemento escucha cuatro eventos: session.idle, session.error, permission.updated y tool.execute.before. Comprender los momentos de activación y las reglas de filtrado de estos eventos ayuda a configurar mejor el comportamiento de notificación.

Resumen de Tipos de Eventos ​

Tipo de EventoMomento de ActivaciónTítulo de NotificaciónSonido PredeterminadoVerifica Sesión PadreVerifica Foco del Terminal
session.idleLa sesión de AI entra en estado inactivo"Ready for review"Glass✅✅
session.errorLa sesión de AI ejecuta con error"Something went wrong"Basso✅✅
permission.updatedAI necesita autorización del usuario"Waiting for you"Submarine❌✅
tool.execute.beforeAI pregunta (herramienta question)"Question for you"Submarine*❌❌

*Nota: el evento question usa el sonido de permission por defecto, se puede personalizar mediante configuración

Explicación Detallada de Eventos ​

session.idle ​

Condición de activación: La sesión de AI entra en estado inactivo después de completar la tarea

Contenido de notificación:

  • Título: Ready for review
  • Mensaje: Título de la sesión (máximo 50 caracteres)

Lógica de procesamiento:

  1. Verifica si es sesión padre (cuando notifyChildSessions=false)
  2. Verifica si está en horario silencioso
  3. Verifica si el terminal tiene el foco (suprime notificación cuando está enfocado)
  4. Envía notificación nativa

Ubicación del código fuente: src/notify.ts:249-284


session.error ​

Condición de activación: Ocurre un error durante la ejecución de la sesión de AI

Contenido de notificación:

  • Título: Something went wrong
  • Mensaje: Resumen del error (máximo 100 caracteres)

Lógica de procesamiento:

  1. Verifica si es sesión padre (cuando notifyChildSessions=false)
  2. Verifica si está en horario silencioso
  3. Verifica si el terminal tiene el foco (suprime notificación cuando está enfocado)
  4. Envía notificación nativa

Ubicación del código fuente: src/notify.ts:286-313


permission.updated ​

Condición de activación: AI necesita autorización del usuario para ejecutar una operación

Contenido de notificación:

  • Título: Waiting for you
  • Mensaje: OpenCode needs your input

Lógica de procesamiento:

  1. No verifica sesión padre (las solicitudes de permiso siempre requieren manejo manual)
  2. Verifica si está en horario silencioso
  3. Verifica si el terminal tiene el foco (suprime notificación cuando está enfocado)
  4. Envía notificación nativa

Ubicación del código fuente: src/notify.ts:315-334


tool.execute.before ​

Condición de activación: Antes de que AI ejecute una herramienta, cuando el nombre de la herramienta es question

Contenido de notificación:

  • Título: Question for you
  • Mensaje: OpenCode needs your input

Lógica de procesamiento:

  1. No verifica sesión padre
  2. No verifica foco del terminal (soporta flujo de trabajo tmux)
  3. Verifica si está en horario silencioso
  4. Envía notificación nativa

Nota especial: Este evento no realiza detección de foco para permitir recibir notificaciones normalmente en el flujo de trabajo de múltiples ventanas de tmux.

Ubicación del código fuente: src/notify.ts:336-351

Condiciones de Activación y Reglas de Filtrado ​

Verificación de Sesión Padre ​

Por defecto, el complemento solo notifica sesiones padre (sesiones raíz), evitando que las subtareas generen muchas notificaciones.

Lógica de verificación:

  • Obtiene información de la sesión a través de client.session.get()
  • Si la sesión tiene parentID, se omite la notificación

Opciones de configuración:

  • notifyChildSessions: false (predeterminado) - solo notifica sesiones padre
  • notifyChildSessions: true - notifica todas las sesiones

Eventos aplicables:

  • session.idle ✅
  • session.error ✅
  • permission.updated ❌ (no verifica)
  • tool.execute.before ❌ (no verifica)

Verificación de Horario Silencioso ​

Durante el horario silencioso configurado, no se envía ninguna notificación.

Lógica de verificación:

  • Lee quietHours.enabled, quietHours.start, quietHours.end
  • Soporta horarios que cruzan la medianoche (ej. 22:00-08:00)

Eventos aplicables:

  • Todos los eventos ✅

Verificación de Foco del Terminal ​

Cuando el usuario está viendo el terminal, se suprimen las notificaciones para evitar recordatorios repetidos.

Lógica de verificación:

  • macOS: Obtiene el nombre de la aplicación en primer plano a través de osascript
  • Compara frontmostApp con processName del terminal

Eventos aplicables:

  • session.idle ✅
  • session.error ✅
  • permission.updated ✅
  • tool.execute.before ❌ (no verifica, soporta tmux)

Diferencias de Plataforma ​

FuncionalidadmacOSWindowsLinux
Notificación nativa✅✅✅
Detección de foco del terminal✅❌❌
Clic en notificación enfoca terminal✅❌❌
Sonidos personalizados✅❌❌

Impacto de la Configuración ​

El comportamiento de notificación se puede personalizar mediante el archivo de configuración:

json
{
  "notifyChildSessions": false,
  "sounds": {
    "idle": "Glass",
    "error": "Basso",
    "permission": "Submarine",
    "question": "Submarine"
  },
  "quietHours": {
    "enabled": false,
    "start": "22:00",
    "end": "08:00"
  }
}

Tutoriales relacionados:


Vista Previa de la Próxima Lección ​

En la próxima lección aprenderemos Ejemplo de archivo de configuración.

Aprenderás:

  • Plantilla completa de archivo de configuración
  • Comentarios detallados de todos los campos de configuración
  • Explicación de valores predeterminados del archivo de configuración

Apéndice: Referencia del Código Fuente ​

Haz clic para expandir y ver ubicaciones del código fuente

Fecha de actualización: 2026-01-27

Tipo de EventoRuta del ArchivoNúmeros de LíneaFunción de Manejo
session.idlesrc/notify.ts249-284handleSessionIdle
session.errorsrc/notify.ts286-313handleSessionError
permission.updatedsrc/notify.ts315-334handlePermissionUpdated
tool.execute.beforesrc/notify.ts336-351handleQuestionAsked
Configuración de escucha de eventossrc/notify.ts367-402NotifyPlugin

Constantes clave:

  • DEFAULT_CONFIG (L56-68): configuración predeterminada, incluye configuración de sonidos y horario silencioso
  • TERMINAL_PROCESS_NAMES (L71-84): mapeo de nombres de terminal a nombres de procesos de macOS

Funciones clave:

  • sendNotification() (L227-243): envía notificación nativa, maneja funcionalidad de enfoque de macOS
  • isParentSession() (L205-214): verifica si es sesión padre
  • isQuietHours() (L181-199): verifica si está en horario silencioso
  • isTerminalFocused() (L166-175): verifica si el terminal tiene el foco (solo macOS)