Plugin global de opencode (solo Linux) que te avisa con sonido + notificación de escritorio cuando el agente termina, necesita tu respuesta o falla. No más mirar la terminal esperando.
| Evento | Sonido | Mensaje | Subagentes (hijos) |
|---|---|---|---|
Sesión inactiva (session.idle / session.status → idle) |
done.mp3 |
«OpenCode listo» — revisa el resultado | Ignorado si es hijo; solo suena el hilo principal |
Permiso o pregunta pendiente (permission.asked, question.asked, tool.execute.before → question) |
request.mp3 |
«OpenCode te necesita» — hay algo que responder | Suena siempre, indicando si es subagente («— subagente de {proyecto}» en el cartel) |
Error de sesión (session.error) |
request.mp3 |
«OpenCode falló» (urgencia crítica) | Suena SIEMPRE (principal, hijo y desconocido) |
Decisión: las preguntas/permisos siempre suenan porque un subagente bloqueado esperando tu respuesta es lo que más urge atender; el cartel marca el origen subagente para distinguirlo del hilo principal. Solo el fin de un subagente (
session.idlede hijo) sigue ignorado para evitar spam sonoro; el error sí avisa siempre.Nota técnica:
tool.execute.beforees un hook bloqueante(input { tool, sessionID, callID }, output), NO un evento del bus. Por eso el plugin lo escucha como hook al mismo nivel queevent:(las preguntas siempre suenan, marcando origen subagente). Se mantiene además la rama deevent:paratool.execute.beforecomo fallback defensivo.El filtro es solo en memoria (
childToParent, tope 500, sin persistencia; sesión desconocida/sin ID → suena por fail-open).
Los avisos repetidos se agrupan (2 s) para no spamear. El sonido nunca rompe la sesión: si algo falla, se ignora en silencio.
- Solo Linux (probado en Ubuntu/GNOME).
opencode≥ 1.18.29,node,notify-send+gdbus, y un reproductor (ffplayde ffmpeg opw-play).zenityes opcional.
git clone <URL-del-repo> opencode-done-notify
cd opencode-done-notify
./install.shEl instalador es idempotente: si los archivos ya están instalados e idénticos, los salta sin crear backups duplicados. Antes de sobrescribir algo distinto, hace backup con timestamp (.bak-AAAA-MM-DD-HHMMSS). También neutraliza el viejo @mohak34/opencode-notifier de tu opencode.jsonc (con backup) si lo encuentra.
Flags:
./install.sh --yes # no preguntar si falta algo crítico
./install.sh --check # solo diagnostica, no copia ni cambia nada
./install.sh --uninstall # equivale a ./uninstall.sh
./install.sh --help # ayuda- Deja una sesión opencode inactiva → suena
done.mp3y aparece «OpenCode listo». - Provoca un permiso o pregunta → suena
request.mp3y aparece «OpenCode te necesita». - Re-diagnostica cuando quieras:
./install.sh --check.
./uninstall.shBorra solo plugins/opencode-done-notify.js y sounds/{done,request}.mp3, restaura el backup más reciente si existe, y jamás toca herdr-agent-state.js ni borra carpetas.
- Sin sonido: instala un reproductor (
sudo apt install ffmpeg) y comprueba la salida de audio; en SSH sin audio es normal que falle. - Sin aviso visual: necesitas sesión gráfica con daemon de notificaciones (GNOME). En SSH sin
DISPLAY/Waylandsolo funcionará el sonido. - SSH sin DISPLAY:
notify-send/gdbusno llegan al escritorio remoto; es esperado. - opencode viejo (< 1.18.29): actualiza opencode; el instalador te avisa con ⚠.
Sonidos done.mp3/request.mp3 extraídos de herdr — Apache-2.0, © sus autores.
Apache-2.0. Ver LICENSE.