hermes chat -c : reprenez votre propre session par terminal, ou créez-la à la volée


Vous gardez deux panneaux tmux ouverts : celui de gauche débugge un incident Redis en production, celui de droite esquisse une nouvelle conception d’API. Vous vous éloignez en plein travail, vous revenez, et vous tapez hermes chat -c pour reprendre là où vous vous étiez arrêté — sauf que les deux panneaux se retrouvent entraînés dans la même conversation : les erreurs Redis d’un côté, les signatures d’interface de l’autre. Le chaos total.

C’était le comportement de -c avant v0.20.2 : il reprenait toujours la session la plus récente à l’échelle globale, sans savoir dans quel terminal vous vous trouviez réellement. Cela vient de changer — Hermes tient désormais un petit registre pour chaque terminal.

v0.20.2 introduit les breadcrumbs de terminal (PR #87346) : la CLI enregistre « dans quelle session ai-je discuté en dernier, dans CE terminal » pour chaque terminal — tty réel, panneau tmux, fenêtre kitty, panneau wezterm, panneau Zellij ou session Windows Terminal.

Les breadcrumbs vivent dans $HERMES_HOME/terminal-sessions/, un fichier JSON par terminal contenant l’ID de session, le répertoire de travail et l’horodatage. Les écritures sont atomiques (fichier temporaire + os.replace), au mieux-effort, ne lèvent jamais d’exception ; les enregistrements de plus de 30 jours sont ignorés à la lecture et purgés de manière opportuniste à l’écriture. L’identité du terminal est dérivée par ordre de priorité : chemin du tty réel → ZELLIJ_PANE_IDTMUX_PANEKITTY_WINDOW_IDWEZTERM_PANETERM_SESSION_IDWT_SESSION — et si rien n’est disponible, les breadcrumbs sont tout simplement ignorés.

Ainsi, désormais :

# in pane 1
hermes chat -c        # resumes pane 1's own last session (the Redis one)

# in pane 2
hermes chat -c        # resumes pane 2's own last session (the API one)

Chaque panneau retourne à sa propre conversation. Pour reprendre par nom, il suffit de le nommer :

hermes chat -c "redis debug"

La recherche par nom échoue désormais bruyamment

Avec un nom, -c effectue une correspondance par titre ou par ID de session. Avant v0.20.2, un échec était un no-op silencieux — dans un script, cela ressemblait à une reprise réussie, mais vous vous retrouviez en réalité dans une conversation vierge, sans aucun de votre contexte.

Désormais (PR #87706), un échec de correspondance affiche immédiatement une erreur sur stderr et se termine avec le code 1, plus une indication :

No session found matching 'redis debug'.
Use 'hermes sessions list' to see available sessions, or pass
--create-if-missing to start a new session with that title.

Pour les auteurs de scripts, c’est énorme : l’échec silencieux devient un échec détectable. Les jobs CI et les tâches cron obtiennent enfin un retour explicite lorsque la session cible n’existe pas.

–create-if-missing : créez-la si elle manque

Avec le nouveau flag --create-if-missing, « reprendre par nom » devient « reprendre par nom, en créant si nécessaire » :

hermes chat -c "redis debug" --create-if-missing

Quand rien ne correspond, la CLI crée une toute nouvelle session intitulée « redis debug » et vous y dépose. L’ID de session utilise le format standard timestamp_UUID-short, et le titre est enregistré avec la provenance utilisateur — l’auto-titreur n’écrasera pas le nom que vous avez choisi manuellement.

Cette combinaison est particulièrement précieuse pour les appelants programmatiques : un plugin ou un script qui veut « envoyer vers ce fil nommé, en le créant si besoin » dispose enfin d’une primitive déterministe en une seule ligne. À noter : --create-if-missing n’a de sens qu’avec un -c nommé ; un -c nu n’a rien à créer, et la CLI vous demande de fournir un nom.

Depuis le bureau aussi

Le menu des sessions de l’application de bureau v0.20.2 permet aussi de « reprendre dans votre propre terminal » — choisissez n’importe quelle session et ramenez-la dans un vrai terminal (#86338, fusionné le 14/08). Combiné à hermes sessions list, le flux de travail est fluide :

hermes sessions list           # find the target session
hermes chat -c "target title"  # resume it
hermes chat -c "new title" --create-if-missing   # or just create one

Résumé

  • Breadcrumbs : chaque terminal se souvient de sa propre dernière session ; -c ne mélange plus les panneaux dans une même conversation ;
  • Échec bruyant : les recherches par nom sans résultat affichent sur stderr et se terminent avec le code 1 — détectable par les scripts ;
  • Création automatique : --create-if-missing fait de « envoyer vers un fil nommé, en le créant si besoin » une simple ligne ;
  • Faites équipe : le bureau peut rendre une session à votre terminal, et hermes sessions list est le point d’entrée pour en trouver une.

Pour tirer le meilleur de vos sessions, consultez le guide d’export de session /save et multi-profile multi-instance ; le tableau complet des flags de -c se trouve dans la référence de la commande hermes chat. Tout cela est disponible par défaut après hermes update vers v0.20.2.