Une seule commande ouvre toute une session : hermes chat -q reste désormais interactif sur un TTY


Vous êtes du genre à vouloir Hermes dans tous vos lanceurs : une touche de raccourci, un terminal surgit avec un prompt pré-rempli, Entrée, et le travail démarre. Ce chemin était bloqué — hermes chat -q "range ce répertoire" répondait consciencieusement à une question puis sortait, et la partie « continuer à poser des questions après la réponse » n’existait tout simplement pas. Vouloir une session interactive obligeait à exécuter -q une fois pour sauvegarder la session, puis hermes chat -r pour la reprendre — deux étapes fragiles, qui perdaient souvent du contexte. Le changement fusionné le 28 août (PR #97121) supprime ce vieux chemin : sur un vrai TTY, -q amorce désormais une session interactive vivante, le premier message part littéralement, la réponse ne clôt pas la session, et vous continuez à discuter.

Pourquoi c’était si laborieux avant

-q/--query a été conçu comme une « requête one-shot » : on passe un prompt, Hermes répond, il sort. C’était parfait pour les scripts et l’automatisation — hermes chat -q "résume les commits d'aujourd'hui" imprime sa sortie et se termine, sans occuper de terminal.

Le revers : pour obtenir « entrer en mode interactif avec une question pré-remplie » (une expérience que d’autres agents de codage ont depuis des lustres), il fallait assembler deux étapes à la main :

# Étape 1 : exécuter une fois, récupérer le fichier de session
hermes chat -q "tidy up this directory" > /tmp/usage.txt
# Étape 2 : reprendre cette session pour continuer à discuter
hermes chat -r /tmp/usage.txt

Laborieux et fragile : le fichier usage intermédiaire se perd facilement, et la session reprise ne transportait pas toujours le contexte voulu. Des projets de terminal agentique piloté par prompt comme Omarchy étaient sur le point de bricoler un contournement pour cela (basecamp/omarchy#8705) — puis le CLI officiel a intégré le motif directement.

Nouveau comportement : -q amorce une session vivante sur un TTY

Après le changement, sur un vrai TTY :

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

Le premier message est soumis littéralement comme tour d’ouverture de la session (un sentinel _SeededQueryMessage), puis vous tombez dans la boucle interactive normale — continuez à taper, enchaînez les questions, utilisez les commandes slash, exactement comme si vous aviez lancé hermes chat.

« Littéralement » est le mot clé : le message amorcé n’est jamais parsé. Il n’est pas traité comme une commande slash, ne déclenche pas les échappées shell !, ne fait pas de substitution de commande $(...), n’est pas traité comme un dépôt de fichier. Cela rejoint la sémantique existante de --oneshot : ce que vous donnez au modèle est ce qu’il reçoit, simple et propre.

Le CLI classique et le chemin TUI supportent tous deux ce comportement — côté TUI, on passe par le flux de soumission STARTUP_QUERYsubmitLite, avec un comportement identique.

L’ancien comportement ? --oneshot le dit explicitement

Si vous voulez vraiment la sémantique one-shot « répondre puis sortir », le nouveau flag hermes chat --oneshot (nom interne oneshot_exit) est le nom officiel de l’ancien comportement :

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

Sans --oneshot :

  • vrai TTY + -q → amorce une session interactive (nouveau comportement) ;
  • non-TTY (pipes, scripts) → bascule automatiquement vers répondre-puis-sortir, l’automatisation ne bloque jamais ;
  • avec -Q/--quiet → répondre-puis-sortir aussi, le mode silencieux n’est pas affecté.

En d’autres termes : les scripts et l’automatisation ne sont pas du tout affectés ; seul le cas où un humain est assis devant un terminal voit le comportement changer — c’est exactement le but de ce changement.

Cas d’usage typiques

Lanceurs / raccourcis clavier : associez hermes chat -q "ouvre la session d'hier et continue ce qu'on n'a pas fini" à une touche — le terminal qui surgit est déjà une session interactive prête à travailler.

Workflows pré-remplis : écrivez un script wrapper qui prend un répertoire en argument, construit un prompt, puis exec dans hermes chat -q "$PROMPT" — l’utilisateur obtient une session qui sait déjà quoi faire, pas un prompt vierge et froid.

L’automatisation n’est pas touchée : les scripts cron et la CI peuvent continuer à utiliser hermes chat -q ... | grep ... ou -Q exactement comme avant.

Mise à jour et vérification

Ce changement a été fusionné le 28 août et vit actuellement sur main en amont — il n’est pas encore dans un tag de release. Pour l’utiliser maintenant, il faut compiler depuis la source ou depuis main. Dès qu’il sera dans la prochaine release, hermes update vous y mènera.

Vérification facile : lancez hermes chat -q "What is 1+1?" dans un terminal. Si le prompt reste et que vous pouvez continuer à taper après la réponse, le nouveau comportement est actif ; s’il revient à votre shell, vous êtes sur une version plus ancienne.

Pour aller plus loin