Um único comando abre uma sessão inteira: hermes chat -q agora permanece interativo em um TTY


Você é do tipo que gosta do Hermes embutido em todo launcher: aperta um atalho, um terminal abre com um prompt pré-preenchido, dá enter e o trabalho começa. Esse caminho costumava estar bloqueado — hermes chat -q "organize este diretório" respondia obedientemente uma pergunta e saía, e a parte de “continuar perguntando depois da resposta” simplesmente não existia. Querer uma sessão interativa significava rodar -q uma vez para salvar a sessão e depois hermes chat -r para retomá-la — dois passos, frágeis e frequentemente perdendo contexto. A mudança mesclada em 28 de agosto (PR #97121) arranca esse caminho antigo: em um TTY real, o -q agora semeia uma sessão interativa ao vivo, a primeira mensagem entra literalmente, a resposta não encerra a sessão e você continua conversando.

Por que era tão chato antes

-q/--query foi projetado como uma “consulta de uso único”: você passa um prompt, o Hermes responde e sai. Isso o tornava perfeito para scripts e automação — hermes chat -q "resuma os commits de hoje" imprime a saída e termina, sem ocupar terminal.

O custo: para ter “entrar em modo interativo com uma pergunta pré-semeada” (uma experiência que outros agentes de codificação têm há tempos), você precisava montar dois passos na mão:

# Passo um: rode uma vez, capture o arquivo de sessão
hermes chat -q "tidy up this directory" > /tmp/usage.txt
# Passo dois: retome essa sessão para continuar conversando
hermes chat -r /tmp/usage.txt

Chato e frágil: o arquivo intermediário é fácil de perder, e a sessão retomada nem sempre carregava o contexto que você queria. Projetos de terminal agente dirigido por prompt como o Omarchy estavam literalmente prestes a construir um workaround para isso (basecamp/omarchy#8705) — e então a CLI oficial ganhou o padrão embutido.

Novo comportamento: -q semeia uma sessão ao vivo em um TTY

Depois da mudança, em um TTY real:

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

A primeira mensagem é enviada literalmente como o turno de abertura da sessão (um sentinela _SeededQueryMessage), e então você cai no loop interativo normal — continue digitando, faça follow-ups, use comandos slash, exatamente como se tivesse aberto hermes chat.

“Literalmente” é a palavra-chave: a mensagem semeada nunca é interpretada. Ela não será tratada como comando slash, não disparará escapes de shell !, não fará substituição de comando $(...), não será tratada como um drop de arquivo. Ela segue a mesma semântica existente do --oneshot: o que você der ao modelo é o que ele recebe, limpo e simples.

Tanto a CLI clássica quanto o caminho TUI suportam isso — o lado TUI passa pelo fluxo de envio STARTUP_QUERYsubmitLite, com comportamento idêntico.

Quer o comportamento antigo? --oneshot diz isso explicitamente

Se você realmente quer a semântica de uso único de responder-e-sair, a nova flag hermes chat --oneshot (nome interno oneshot_exit) é o nome oficial do comportamento antigo:

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

Sem --oneshot:

  • TTY real + -q → semeia uma sessão interativa (novo comportamento);
  • não-TTY (pipes, scripts) → degrada automaticamente para responder-e-sair, então a automação nunca trava;
  • com -Q/--quiet → também responde-e-sai, o modo quiet não é afetado.

Em outras palavras: scripts e automação não são afetados de forma alguma; só quando um humano está sentado num terminal o comportamento muda — que é exatamente o objetivo dessa mudança.

Usos típicos

Launchers / atalhos: associe hermes chat -q "abra a sessão de ontem e continue o que não terminamos" a um atalho — o terminal que abre já é uma sessão interativa pronta para trabalhar.

Fluxos pré-semeados: escreva um script wrapper que recebe um diretório como argumento, monta um prompt e faz exec em hermes chat -q "$PROMPT" — o usuário ganha uma sessão que já sabe o que fazer, em vez de um prompt frio e vazio.

Automação intocada: scripts cron e CI podem continuar usando hermes chat -q ... | grep ... ou -Q exatamente como antes.

Atualizando e verificando

Essa mudança foi mesclada em 28 de agosto e atualmente vive no main upstream — ainda não chegou a uma tag de release. Para usá-la agora, você precisa buildar a partir do código-fonte ou do main. Quando ela sair na próxima release, hermes update resolve.

Verificação fácil: rode hermes chat -q "Quanto é 1+1?" num terminal. Se o prompt permanecer e você puder continuar digitando depois da resposta, o novo comportamento está ativo; se ele sair de volta para o shell, você está numa versão antiga.

Leitura adicional