Micare
Calidad de vida

Notificaciones nativas del sistema

Dos hooks (ganchos de automatizacion) que lanzan una notificacion nativa de tu sistema operativo cuando el asistente de codigo te pide un permiso o queda esperando tu respuesta. Asi no te pierdes ni un turno aunque estes en otra ventana.

HookPremiumCalidad de vidanotificaciones

🌱 Empieza aquí · Notificaciones nativas del sistema

Dile a tu asistente: "siembra esta semilla 🌱"

Y ya. Tu asistente hace todo lo técnico. Tú solo confirmas cuando te pregunte.

¿Otras formas de decírselo? "instala esta semilla", "pon esto a funcionar", "haz el setup de las notificaciones". Te entiende igual.

¿Qué te acabas de instalar?

A partir de ahora, cuando estés trabajando en otra ventana y tu asistente:

  • necesite tu permiso para algo, te va a avisar con una notificación del sistema (esas que salen en la esquina de tu pantalla), y
  • termine y quede esperando tu respuesta, también te avisa.

Nunca más vas a dejar a tu asistente "hablando solo" sin darte cuenta. 🙌


Para el asistente que siembra

Esta sección es para el asistente AI, no para el humano. Ejecútala tal cual.

Este componente son dos hooks (ganchos de automatización) que se enganchan al evento Notification del asistente y disparan una notificación nativa del sistema operativo. Un hook para cuando se pide permiso (permission_prompt) y otro para cuando queda inactivo esperando input (idle_prompt).

No hay rutas ni datos del dueño que rellenar. La semilla es autocontenida y se instala en la carpeta de configuración estándar del asistente (~/.claude/), que apunta al home del usuario actual. No apliques ningún placeholder <TU-RUTA>, <TU-REPO> ni <TU-ARCHIVO-DE-MEMORIA>: aquí no aplican.

Paso 1 · Copiar los dos scripts a la carpeta de hooks

La carpeta de hooks es la misma en Claude Code y en Cowork: ~/.claude/hooks/.

mkdir -p ~/.claude/hooks
cp kernel/notify-permission.sh ~/.claude/hooks/notify-permission.sh
cp kernel/notify-idle.sh       ~/.claude/hooks/notify-idle.sh

Paso 2 · Dar permisos de ejecución (chmod)

chmod +x ~/.claude/hooks/notify-permission.sh ~/.claude/hooks/notify-idle.sh

Paso 3 · Cablear los hooks en settings.json

El wiring vive en ~/.claude/settings.json, bajo la llave hooks.Notification. El snippet a integrar está en kernel/settings.snippet.json:

{
  "hooks": {
    "Notification": [
      {
        "matcher": "permission_prompt",
        "hooks": [
          { "type": "command", "command": "bash ~/.claude/hooks/notify-permission.sh" }
        ]
      },
      {
        "matcher": "idle_prompt",
        "hooks": [
          { "type": "command", "command": "bash ~/.claude/hooks/notify-idle.sh" }
        ]
      }
    ]
  }
}

IMPORTANTE: fusionar, no sobrescribir. Si settings.json ya existe y tiene otros hooks, hay que mezclar este bloque dentro de hooks.Notification sin borrar lo que ya haya. Si el usuario ya tiene entradas con los matchers permission_prompt o idle_prompt, respétalas o pregúntale antes de reemplazarlas.

Si ~/.claude/settings.json no existe, créalo con exactamente el contenido del snippet.

Comando de fusión sugerido (crea el archivo si falta y respeta lo existente):

python3 - <<'PY'
import json, os
p = os.path.expanduser("~/.claude/settings.json")
snippet = {
  "Notification": [
    {"matcher": "permission_prompt", "hooks": [{"type": "command", "command": "bash ~/.claude/hooks/notify-permission.sh"}]},
    {"matcher": "idle_prompt",       "hooks": [{"type": "command", "command": "bash ~/.claude/hooks/notify-idle.sh"}]}
  ]
}
data = {}
if os.path.exists(p):
    with open(p) as f:
        data = json.load(f)
hooks = data.setdefault("hooks", {})
existing = hooks.setdefault("Notification", [])
existing_matchers = {e.get("matcher") for e in existing}
for entry in snippet["Notification"]:
    if entry["matcher"] not in existing_matchers:
        existing.append(entry)
with open(p, "w") as f:
    json.dump(data, f, indent=2, ensure_ascii=False)
print("settings.json actualizado:", p)
PY

Paso 4 · Verificación post-siembra (obligatoria)

(a) Comprobar que el script corre y sale limpio:

bash ~/.claude/hooks/notify-permission.sh </dev/null; echo "salida: $?"

Salida esperada: aparece una notificación nativa del sistema (o suena la campana de terminal en entornos sin interfaz gráfica) y la última línea imprime exactamente:

salida: 0

(b) Comprobar que el wiring quedó en settings.json:

python3 -c "import json,os; d=json.load(open(os.path.expanduser('~/.claude/settings.json'))); n=d.get('hooks',{}).get('Notification',[]); m={e.get('matcher') for e in n}; print('OK' if {'permission_prompt','idle_prompt'} <= m else 'FALTA')"

Salida esperada:

OK

Si ambos dan verde, la semilla quedó sembrada. Recuerda al usuario que debe cerrar y reabrir la sesión del asistente para que los hooks se carguen (el asistente lee los hooks al iniciar).

Personalización opcional

Si el usuario quiere otro texto o sonido, edita las variables TITULO, MENSAJE y SONIDO_MAC al inicio de cada script en ~/.claude/hooks/. No hace falta más.


¿Cómo sé que funcionó? (para ti, el humano)

  1. Cierra y vuelve a abrir tu asistente (Claude Code o Cowork).
  2. Pídele algo que requiera tu permiso (por ejemplo, que edite un archivo o corra un comando).
  3. Cámbiate a otra ventana mientras tanto.
  4. En cuanto necesite tu permiso o quede esperándote, te va a saltar una notificación en la esquina de tu pantalla. 🔔

Si la ves, ya quedó. Si no, dile a tu asistente: "revisa que las notificaciones nativas hayan quedado bien instaladas" y él verifica los dos pasos de arriba por ti.