Un comando abre toda una sesión: hermes chat -q ahora permanece interactivo en una TTY


Eres de esas personas a las que les gusta tener Hermes integrado en cada lanzador: pulsas una hotkey, aparece una terminal con un prompt precargado, das a enter y el trabajo empieza. Ese camino solía estar bloqueado — hermes chat -q "ordena este directorio" respondía obedientemente a una pregunta y salía, y la parte de «seguir preguntando después de la respuesta» simplemente no existía. Querer una sesión interactiva significaba ejecutar -q una vez para guardar la sesión y luego hermes chat -r para reanudarla — dos pasos, frágiles y a menudo con contexto perdido. El cambio fusionado el 28 de agosto (PR #97121) elimina ese viejo camino: en una TTY real, -q ahora inicia una sesión interactiva viva, el primer mensaje entra literalmente, la respuesta no termina la sesión y puedes seguir conversando.

Por qué antes era tan incómodo

-q/--query fue diseñado como una «consulta de un solo disparo»: pasas un prompt, Hermes responde y sale. Eso lo hacía perfecto para scripts y automatización — hermes chat -q "resume los commits de hoy" imprime su salida y termina, sin dejar ninguna terminal ocupada.

El coste: para conseguir «entrar en modo interactivo con una pregunta precargada» (una experiencia que otros agentes de código tienen desde hace años) tenías que montar dos pasos a mano:

# Paso uno: ejecuta una vez y captura el archivo de sesión
hermes chat -q "tidy up this directory" > /tmp/usage.txt
# Paso dos: reanuda esa sesión para seguir conversando
hermes chat -r /tmp/usage.txt

Torpe y frágil: el archivo de uso intermedio es fácil de perder, y la sesión reanudada no siempre llevaba el contexto que querías. Proyectos de terminal de agentes guiados por prompts, como Omarchy, estaban literalmente a punto de construir un workaround para esto (basecamp/omarchy#8705) — hasta que la CLI oficial integró el patrón.

Nuevo comportamiento: -q inicia una sesión viva en una TTY

Tras el cambio, en una TTY real:

hermes chat -q "fix this bug in the parser"

El primer mensaje se envía literalmente como turno de apertura de la sesión (un centinela _SeededQueryMessage), y luego entras en el bucle interactivo normal — sigue escribiendo, haz follow-ups, usa slash commands, exactamente igual que si hubieras abierto hermes chat.

«Literalmente» es la palabra clave: el mensaje inicial nunca se interpreta. No se tratará como un slash command, no disparará escapes de shell !, no hará sustitución de comandos $(...) ni se gestionará como un file drop. Coincide con la semántica existente de --oneshot: lo que le des al modelo es lo que recibe, limpio y simple.

Tanto la CLI clásica como la TUI soportan esto — el lado TUI pasa por el flujo de envío STARTUP_QUERYsubmitLite, con un comportamiento idéntico.

¿Quieres el comportamiento antiguo? --oneshot lo dice explícitamente

Si de verdad quieres la semántica de responder-y-salir de un solo disparo, la nueva flag hermes chat --oneshot (nombre interno oneshot_exit) es el nombre oficial del comportamiento antiguo:

hermes chat --oneshot -q "answer only this one question"

Sin --oneshot:

  • TTY real + -q → inicia una sesión interactiva (nuevo comportamiento);
  • no-TTY (pipes, scripts) → degrada automáticamente a responder-y-salir, así la automatización nunca se cuelga;
  • con -Q/--quiet → también responder-y-salir, el modo silencioso no cambia.

En otras palabras: los scripts y la automatización no se ven afectados en absoluto; el comportamiento solo cambia cuando hay un humano sentado ante una terminal — que es exactamente el propósito de este cambio.

Usos típicos

Launchers / hotkeys: ata hermes chat -q "abre la sesión de ayer y continúa lo que no terminamos" a una hotkey — la terminal que aparece ya es una sesión interactiva lista para trabajar.

Flujos precargados: escribe un wrapper script que reciba un directorio como argumento, construya un prompt y haga exec a hermes chat -q "$PROMPT" — el usuario obtiene una sesión que ya sabe qué hacer, no un prompt en blanco y frío.

La automatización no se toca: los cron scripts y el CI pueden seguir usando hermes chat -q ... | grep ... o -Q exactamente igual que antes.

Actualizar y verificar

Este cambio se fusionó el 28 de agosto y vive actualmente en main de upstream — todavía no ha llegado a ningún release tag. Para usarlo ahora tendrías que compilar desde el source o desde main. Cuando salga en la próxima release, hermes update te llevará hasta allí.

Verificación fácil: ejecuta hermes chat -q "¿Cuánto es 1+1?" en una terminal. Si el prompt se queda y puedes seguir escribiendo después de la respuesta, el nuevo comportamiento está activo; si vuelve al shell, estás en una versión antigua.

Lecturas recomendadas