hermes chat -c: Continue Sua Própria Sessão por Terminal, ou Crie-a na Hora


Você mantém dois painéis tmux abertos: o da esquerda depurando um incidente de Redis em produção, o da direita esboçando o design de uma nova API. Você se afasta no meio do fluxo, volta e digita hermes chat -c para continuar de onde parou — só que os dois painéis são arrastados para a mesma conversa: erros de Redis de um lado, assinaturas de interface do outro. Caos total.

Esse era o comportamento do -c antes da v0.20.2: ele sempre retomava a sessão globalmente mais recente, sem ideia de em qual terminal você estava. Isso acabou de mudar — o Hermes agora mantém um pequeno registro para cada terminal.

v0.20.2 introduz os breadcrumbs de terminal (PR #87346): o CLI registra “em qual sessão conversei por último, NESTE terminal” por terminal — tty real, painel tmux, janela kitty, painel wezterm, painel Zellij ou sessão do Windows Terminal.

Os breadcrumbs ficam em $HERMES_HOME/terminal-sessions/, um arquivo JSON por terminal com o ID da sessão, o diretório de trabalho e o timestamp. As gravações são atômicas (arquivo temporário + os.replace), best-effort, nunca lançam exceções; registros com mais de 30 dias são ignorados na leitura e podados oportunisticamente na gravação. A identidade do terminal é derivada em ordem de prioridade: caminho real do tty → ZELLIJ_PANE_IDTMUX_PANEKITTY_WINDOW_IDWEZTERM_PANETERM_SESSION_IDWT_SESSION — e se nenhum estiver disponível, os breadcrumbs são simplesmente ignorados.

Então, agora:

# no painel 1
hermes chat -c        # retoma a última sessão do painel 1 (a do Redis)

# no painel 2
hermes chat -c        # retoma a última sessão do painel 2 (a da API)

Cada painel volta para a sua própria conversa. Para retomar por nome, basta dar um nome:

hermes chat -c "redis debug"

A busca por nome agora falha de forma ruidosa

Com um nome, o -c busca por título ou ID de sessão. Antes da v0.20.2, um erro de correspondência era um no-op silencioso — em um script parecia uma retomada bem-sucedida, mas na verdade você estava em uma conversa nova, sem nenhum do seu contexto.

Agora (PR #87706) uma busca sem correspondência imprime um erro no stderr imediatamente e sai com código 1, além de uma dica:

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.

Para quem escreve scripts, isso é enorme: a falha silenciosa vira uma falha detectável. Jobs de CI e tarefas cron finalmente recebem feedback explícito quando a sessão alvo não existe.

–create-if-missing: crie se não existir

Com a nova flag --create-if-missing, “retomar por nome” evolui para “retomar por nome, criando se necessário”:

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

Quando nada corresponde, o CLI cria uma sessão nova em folha intitulada “redis debug” e já entra nela. O ID da sessão usa o formato padrão timestamp_UUID-short, e o título é registrado com procedência do usuário — o auto-titulador não vai sobrescrever o nome que você escolheu manualmente.

Essa combinação é especialmente valiosa para chamadas programáticas: um plugin ou script que quer “enviar para este thread nomeado, criando-o se necessário” finalmente tem uma primitiva determinística de uma linha. Note que --create-if-missing só faz sentido com um -c nomeado; um -c puro não tem nada para criar, e o CLI pede que você forneça um nome.

Também a partir do desktop

O menu de sessões do app de desktop v0.20.2 também pode “retomar na sua própria terminal” — escolha qualquer sessão e traga-a de volta para um terminal real (#86338, mesclado em 14/8). Combinado com hermes sessions list, o fluxo é suave:

hermes sessions list           # encontre a sessão alvo
hermes chat -c "target title"  # retome-a
hermes chat -c "new title" --create-if-missing   # ou apenas crie uma

Resumo

  • Breadcrumbs: cada terminal lembra sua própria última sessão; o -c não mistura mais painéis em uma única conversa;
  • Falha ruidosa: buscas por nome sem correspondência imprimem no stderr e saem com código 1 — detectável por scripts;
  • Criação automática: o --create-if-missing transforma “enviar para um thread nomeado, criando se necessário” em uma linha;
  • Combine os dois: o desktop pode devolver uma sessão ao seu terminal, e hermes sessions list é o ponto de entrada para encontrá-la.

Para tirar mais proveito das suas sessões, veja o guia de exportação de sessão /save e multi-profile multi-instance; a tabela completa das flags do -c está na referência do comando hermes chat. Tudo isso está disponível por padrão após hermes update para a v0.20.2.