🌱 Empieza aquí · Cancelador de avisos huérfanos al cerrar sesión
¿Te ha pasado que cierras una conversación con tu asistente y, minutos después, te salta una notificación tipo "¿sigues ahí?" de una sesión que ya cerraste? Esa semilla resuelve justo eso: limpia el rastro de cada sesión al terminar, para que ningún aviso automático te llegue fuera de tiempo.
Para ti (el humano)
Solo tienes que decir una frase. Abre esta carpeta con tu asistente (Claude Code) y escríbele:
Dile a tu asistente: siembra esta semilla 🌱
¿Otras formas de pedirlo? "instala esta semilla", "haz el setup de esto", "ponme esto a funcionar". Te entiende igual. De aquí en adelante, tu asistente hace toda la parte técnica. Tú no tocas nada.
Para el asistente que siembra 🤖
Eres el asistente que va a instalar esta semilla. Sigue estos pasos tal cual. Es un hook (gancho de automatización) de tipo SessionEnd: se dispara cuando una sesión termina, borra el archivo de estado ("nonce") de esa sesión y con eso cualquier vigía en segundo plano que dependa de ese archivo se autocancela.
Los placeholders entre <...> los resuelves tú según la plataforma de la persona:
<TU-RUTA-DE-HOOKS>→ carpeta donde viven los scripts de hooks del asistente.- Claude Code:
~/.claude/hooks/(recomendado, aplica a todas las sesiones del usuario).
- Claude Code:
<TU-ARCHIVO-DE-SETTINGS>→ elsettings.jsondel asistente.- Claude Code (usuario):
~/.claude/settings.json. - Por proyecto:
.claude/settings.jsondentro del proyecto.
- Claude Code (usuario):
Paso 1 · Copiar el script del kernel
Copia kernel/idle-nudge-cleanup.sh a <TU-RUTA-DE-HOOKS>. Crea la carpeta si no existe.
mkdir -p <TU-RUTA-DE-HOOKS>
cp kernel/idle-nudge-cleanup.sh <TU-RUTA-DE-HOOKS>/
Paso 2 · Dar permisos de ejecución
chmod +x <TU-RUTA-DE-HOOKS>/idle-nudge-cleanup.sh
Paso 3 · Apuntar a la carpeta de estado correcta (importante)
Este hook borra archivos <id-de-sesion>.nonce dentro de una carpeta de estado. Esa carpeta debe ser la misma que use tu mecanismo de avisos por inactividad (el vigía en segundo plano). El valor por defecto es ~/.assistant-state/idle-nudge.
- Si estás sembrando esto junto con un vigía de avisos que ya tiene su propia carpeta, ajústala: abre
<TU-RUTA-DE-HOOKS>/idle-nudge-cleanup.shy cambia el valor por defecto deSTATE_DIR, o expórtala como variable de entorno antes de que corra el hook:
export IDLE_NUDGE_STATE_DIR="$HOME/la-carpeta/de/tu/vigia"
- Si aún no tienes un vigía de avisos, deja el valor por defecto. El hook no estorba: simplemente no encontrará nada que borrar y saldrá en silencio. Y si la persona quiere el vigía compañero, en El Arsenal vive como la semilla «Aviso de sesión inactiva», que ya respeta el trato del "nonce" y trae este mismo hook de limpieza integrado.
Paso 4 · Registrar el hook SessionEnd
Abre <TU-ARCHIVO-DE-SETTINGS>. Si ya tiene una sección hooks, fusiona este bloque dentro sin borrar lo que ya exista (agrega tu entrada al arreglo SessionEnd, no lo reemplaces). Si el archivo no existe, créalo con este contenido:
{
"hooks": {
"SessionEnd": [
{
"hooks": [
{ "type": "command", "command": "<TU-RUTA-DE-HOOKS>/idle-nudge-cleanup.sh" }
]
}
]
}
}
Paso 5 · VERIFICACIÓN post-siembra (obligatoria)
Como es un hook que reacciona a un evento, la verificación se hace simulando ese evento: le pasas por la entrada estándar un JSON con un session_id de prueba y confirmas que el archivo .nonce correspondiente desaparece.
# Prepara una carpeta y un nonce de prueba (usa la MISMA carpeta que fijaste en el Paso 3)
DIR="$HOME/.assistant-state/idle-nudge"; mkdir -p "$DIR"; touch "$DIR/pruebaXYZ.nonce"
# Dispara el hook con un id de sesión de prueba
echo '{"session_id":"pruebaXYZ"}' | bash <TU-RUTA-DE-HOOKS>/idle-nudge-cleanup.sh; echo "exit=$?"
# Comprueba que el nonce fue borrado
ls "$DIR/pruebaXYZ.nonce" 2>&1
Salida esperada: exit=0, y el último ls responde No such file or directory (el archivo de prueba se borró). Si el .nonce sigue ahí, revisa que la carpeta del comando y la STATE_DIR del script sean la misma.
Nota: si en tu prueba usaste una carpeta distinta a la que fijaste en el Paso 3, ajusta la variable
DIRde arriba para que coincida.
Cuando la prueba dé esa salida, la siembra está completa. Reporta a la persona en una línea, sin tecnicismos.
✅ ¿Cómo sé que funcionó? (para el humano)
De aquí en adelante, cuando cierres una sesión, tu asistente limpia el rastro solo. Ya no deberías recibir esas notificaciones fuera de lugar de conversaciones que ya cerraste. No tienes que hacer nada especial en el día a día: solo vas a dejar de ver avisos fantasma. Eso es todo. 🌱
