Antes de borrar una session de hace tres meses, Hermes ahora pregunta primero

Un día vas a buscar una session de depuración de hace tres meses y /resume simplemente no la tiene. Entonces lo recuerdas: sessions.auto_prune estaba activado y todo lo que pasaba de 90 días se borraba en algún arranque, sin aviso y sin confirmación. Eso acaba de cambiar. La limpieza automática vuelve a ser opcional, y solo te interrumpe cuando el disco de verdad se está quedando sin espacio.
Qué cambió: nada se borra por defecto
El cambio es tajante: sessions.auto_prune vuelve a valer false por defecto. Los tres estados de instalación se comportan así:
| Tu configuración | Antes | Ahora |
|---|---|---|
Nunca configuraste sessions.auto_prune |
se limpiaba a los 90 días, en silencio | no se limpia; se pregunta una vez cuando el disco está bajo |
Configuraste auto_prune: true |
se limpiaba | se limpia, sin cambios |
Configuraste auto_prune: false |
se conservaba | se conserva, nunca se pregunta |
Fíjate en la segunda fila: si lo activaste a propósito, nada de tu configuración ha cambiado. Lo que cambió es el grupo grande de gente que nunca opinó — su historial ya no se trata como espacio libre por defecto.
Cuándo te avisa
La lógica vive en un módulo nuevo, hermes_cli/prune_advisor.py, y la ruta crítica es deliberadamente barata: un os.stat, un shutil.disk_usage y una lectura pequeña de YAML. Solo se dispara cuando se cumplen todas estas condiciones:
- el disco realmente está bajo: menos de 2 GiB libres, o menos del 10% libre y también menos de 20 GiB de margen (un disco de 4 TB al 10% libre está bien, y esa cláusula existe precisamente para ese caso);
- tu
config.yamlno tiene la clavesessions.auto_prune; - no hay un snooze activo.
Solo entonces abre la base de datos en modo solo lectura para estimar cuánto liberaría de verdad una limpieza: las sessions terminadas que pasan de retention_days, escaladas por su proporción de mensajes. Esa estimación aparece en la propia pregunta, incluido el caso incómodo: “limpiar no va a arreglar este disco”, ya sea porque nada es lo bastante antiguo o porque se puede recuperar muy poco como para sacar al disco de la banda baja.
Una pregunta, cuatro superficies
- CLI clásico: una pregunta y / n / Enter (más tarde) al arrancar, solo en TTY, junto a la oferta de la imagen de sandbox.
- TUI y Desktop: una notificación fija con clave
sessions.auto_prune, por profile y por proceso. La estimación de la base de datos se calcula fuera del hilo principal, así que la interfaz nunca espera por ella. - Gateway de mensajería: la pregunta se publica en el canal principal del profile servido. Un detalle que importa: el snooze de “más tarde” solo se registra después de una publicación entregada, así que un gateway sin canal principal no puede tragarse en silencio la pregunta que el CLI está a punto de hacer.
- Comando slash:
/autoprune on | off | later | status, con el mismo texto en todas las superficies porque pasa por un único ejecutor del registro. El límite de 50 comandos slash de Slack está lleno, así que allí es/hermes autoprune.
Qué hace realmente cada respuesta
onescribesessions.auto_prune: truey limpia las sessions terminadas e inactivas que pasan deretention_days(90 por defecto). Las sessions abiertas, fijadas o a mitad de turno nunca se tocan.offescribefalse, lo conserva todo y retira la pregunta para siempre.laterpospone 7 días y vuelve a preguntar.
Para ver en qué situación estás:
hermes config get sessions.auto_prune
/autoprune status
¿Sigues justo de disco? Limpia por capas
La limpieza automática es una capa. Cuando de verdad necesites espacio, ve de lo menos a lo más destructivo:
hermes sessions optimize # fusiona segmentos FTS5 + VACUUM, sin cambiar datos
hermes sessions optimize-storage # migra el índice de búsqueda al formato compacto
hermes sessions archive # ocultación masiva y reversible, sin borrar
hermes sessions prune # borrado real, filtrable por ventana / origen / título
optimize y optimize-storage reconstruyen índices y recuperan fragmentación sin tocar el historial, así que ejecútalos primero. archive oculta sessions de la lista sin borrarlas. prune es lo de verdad — comprueba si session_search todavía necesita ese historial antes de lanzarlo.
Una forma práctica de elegir
La pregunta de fondo es sencilla: ¿cuánto vale tu historial frente a tu disco?
- Disco crónicamente justo (un VPS pequeño, un contenedor con unas pocas decenas de GB) y casi nunca miras atrás:
/autoprune onte da menos trabajo. - Dependes de
session_searcho mantienes rastros de auditoría: deja el valor por defecto (conservar, sin preguntar) y ejecutaoptimizede vez en cuando. - Si dudas: no escribas nada. El valor por defecto es el estado conservador.
Si state.db ya está dando problemas — por ejemplo, Hermes informa que otro proceso retiene un WAL antiguo — limpiar no es la solución; empieza por el recorrido de recuperación del almacén de sessions. Para entender cómo funcionan los límites de session, lee la guía de límites de session, y para los flags exactos, la referencia de hermes sessions.
Una nota de estado que conviene decir sin rodeos: esto se fusionó en main el 2026-10-16, después de que v0.22.2 saliera el 10-15, así que todavía no está en ninguna versión publicada — llega en la build que descargue tu próximo hermes update.