Rodar o Hermes dentro do Codex: uma extensão MCP da comunidade


Seu dia provavelmente é assim: você está editando um módulo no Codex, no meio do raciocínio se pergunta se o cron job do Hermes rodou hoje e o que aquela sessão realmente leu na noite passada — aí você troca para um terminal e roda hermes --continue, ou simplesmente abre uma segunda janela. Dois agentes, duas interfaces, dois contextos, e o que se perde na troca geralmente é justamente a frase que você ia perguntar.

Um projeto da comunidade, hermes-chatgpt-extension, ataca exatamente esse custo de troca: ele embute o Hermes como um painel dentro do Codex (e do app de desktop do Codex para o ChatGPT), de modo que chats, profiles, escolha de modelo e tarefas agendadas ficam visíveis na barra lateral do Codex.

O que é — e o que não é

É um plugin MCP: um servidor MCP stdio local (o bridge) embrulha a API JSON-RPC/WebSocket de desktop do Hermes e as rotas REST de gerenciamento numa superfície de plugin para o Codex. Escrito em TypeScript, com licença MIT, criado em 30 de setembro e ainda sendo atualizado em 1º de outubro.

Três limites merecem ser ditos logo de cara, para você não esperar a coisa errada:

  • Ele não transforma o Hermes numa ferramenta do Codex. A interface segue as convenções de chat e de barra lateral do Codex, mas o Hermes continua rodando o próprio agente, as próprias ferramentas, a própria memória e o próprio agendador; a conversa do Codex ao redor permanece separada.
  • Ele não fornece um endpoint MCP hospedado. O servidor é stdio local, então isto é “usar o Hermes dentro do app de desktop do Codex”, não “alcançar o seu Hermes a partir do ChatGPT na nuvem”.
  • Ele não toma a custódia das suas credenciais. As credenciais do provedor upstream ficam no processo bridge local; a interface embutida recebe rótulos de conexão e dados de chat, não tokens nem chaves de API.

Instalação: dois caminhos, Node 22+ nos dois casos

Três pré-requisitos: Node.js 22 ou mais recente (disponível para o Codex como node), uma versão de desktop do Codex que suporte plugins locais e MCP Apps, e um backend Hermes instalado e configurado que exponha a API JSON-RPC/WebSocket de desktop mais as rotas REST de gerenciamento.

A partir do ZIP pré-compilado (sem npm install, sem build):

# baixe o hermes-chatgpt-extension-VERSION.zip na página de releases e extraia-o
cd <extracted-directory>
node scripts/verify-plugin.mjs

O ZIP traz o servidor já compilado e uma interface autocontida, e cada release também oferece um -source.zip e um SHA256SUMS para você conferir os dois. Repare que o download Source code gerado automaticamente pelo GitHub é o build a partir do código-fonte, não este pacote.

A partir do código-fonte:

git clone https://github.com/intellectronica/hermes-chatgpt-extension.git
cd hermes-chatgpt-extension
npm ci
npm run build
node scripts/verify-plugin.mjs

Depois, registre-o no marketplace local do Codex:

node scripts/install-plugin.mjs

O instalador copia o plugin para ~/.codex/plugins/hermes-chatgpt-extension e adiciona uma entrada em ~/.agents/plugins/marketplace.json, preservando um nome de marketplace existente e entradas não relacionadas. Abra o link de detalhe do plugin que ele imprime e escolha Enable no Codex — o script não ativa o plugin nem reinicia o app por você. Para atualizações, rode --replace --dry-run primeiro e depois --replace --apply.

Configuração: um único array connections, quatro formas de conectar

Mantenha a configuração fora do diretório do plugin para que as atualizações não a sobrescrevam; o caminho padrão é ~/.config/hermes-chatgpt-extension/hermes.config.json:

mkdir -p "$HOME/.config/hermes-chatgpt-extension"
cp examples/config.ssh.json "$HOME/.config/hermes-chatgpt-extension/hermes.config.json"

A configuração é carregada numa ordem fixa: o argumento --config, depois HERMES_EXTENSION_CONFIG, depois hermes.config.json no diretório de trabalho do bridge e, por fim, $XDG_CONFIG_HOME/hermes-chatgpt-extension/hermes.config.json (ou ~/.config/...). Uma decisão de design merece crédito: um arquivo explicitamente selecionado que está ausente ou é inválido é um erro, não algo ignorado — assim você nunca acaba achando que está num profile quando na verdade está em outro.

Um único array connections pode conter várias instâncias do Hermes, alternáveis por um seletor no rodapé. Quatro modos de conexão são suportados:

Modo Quando usar Campos principais
SSH gerenciado O Hermes vive num host remoto; deixe a extensão iniciar o próprio backend temporário ssh.mode: "managed", ssh.host
Attach via SSH Um backend compatível já está rodando remotamente; é só conectar ssh.mode: "attach", remotePort, tokenFile
HTTP Um backend de desktop hermes serve compatível baseUrl, tokenEnv
HTTPS Um gateway atrás de um proxy reverso O mesmo, e URLs remotas precisam ser HTTPS

O SSH gerenciado inicia um backend loopback protegido por token numa porta alocada dinamicamente e é dono desse processo e do seu túnel, encerrando o backend quando o bridge fecha. Ele usa a sua instalação existente do Hermes — não instala software, não edita profiles, não reinicia serviços. Como gera a própria credencial, esse modo proíbe tokenEnv, tokenFile, remoteHost e remotePort.

Attach e HTTP/HTTPS exigem cada um exatamente uma fonte de credencial: tokenEnv (o nome de uma variável de ambiente) ou tokenFile (um pequeno arquivo local). No POSIX, esse arquivo precisa pertencer ao usuário atual e ser exclusivo do dono:

chmod 600 /path/to/hermes.token

Aqui vai a pegadinha que merece um parágrafo próprio: um app de desktop pode não herdar variáveis que você exportou num shell interativo. Quando o Codex inicia o plugin, tokenEnv pode simplesmente não ter valor — um tokenFile com permissões rígidas é a escolha mais confiável. URLs remotas precisam usar HTTPS; HTTP puro só é aceito para hosts loopback como http://127.0.0.1:9119.

O que você pode fazer depois de ativada

Depois de ativar, abra Explore → Hermes no Codex:

  • Chat: respostas em streaming, renderização de Markdown e de código, atividade das ferramentas visível, além de Stop, aprovações e perguntas de esclarecimento;
  • Agrupamento por profile: conversas agrupadas em seções de profile expansíveis, com os rascunhos ficando com a instância e o profile a que pertencem;
  • Modelos e esforço: o catálogo real de modelos e os padrões de cada profile, com um seletor de modelo e um controle Power para o esforço de raciocínio;
  • Tarefas agendadas: veja jobs e execuções registradas de um profile ou de todos, com status de agendamento, execução e entrega mostrados separadamente — bem mais útil que um simples sucesso/falha;
  • Arquivamento: o arquivamento passa pelo Hermes, com um breve Undo, e retém as mensagens armazenadas.

Conversas automatizadas marcadas pelo Hermes ficam ocultas por padrão; adicione "sidebar": { "showAutomatedChats": true } ao lado de connections para vê-las. A própria configuração de visibilidade de subagentes do Hermes continua valendo.

Quando é a ferramenta certa

Se o seu fluxo é “Codex para o código, Hermes para a automação”, esta extensão elimina a troca de janelas e o contexto perdido — ao custo de aceitar um plugin MCP de terceiros instalado por meio de um marketplace local. Trate-o como qualquer plugin local: leia o script de instalação, mantenha seus arquivos de configuração e de token fora do controle de versão e fora do pacote distribuível, e use HTTPS ou SSH para tudo que for remoto.

Se o OAuth remoto tem sido o seu bloqueio, comece pelo guia de OAuth via SSH; para ler bem os seus próprios dados de sessão e de agendamento, o guia de rastreamento de custos e as notas sobre fuso horário e horário de verão no cron são boas companhias. Para o lado MCP da mecânica, a referência de comandos MCP é a leitura sistemática.

A versão curta

Colocar dois agentes numa única janela vale mais do que economizar uma troca: significa que você vê o lado da automação enquanto ainda está no código — o job rodou, o que aconteceu na sessão, qual modelo este profile usa. Esta extensão liga as peças em vez de reinventá-las; ela não muda como o Hermes se comporta, só expõe interfaces que já existem. Para quem usa várias instâncias e vários profiles, ela ainda torna explícito o “a qual eu estou conectado de fato?”: uma conexão por instância, um grupo por profile. Isolamento visível vence uma convenção que você precisa lembrar.