Hermes: modelos por ação, OpenAI API e x_search
Uma leitura operacional da configuração real desta instância: o que está claro, o que está ambíguo e o que vale separar melhor.
O ponto mais importante aqui é simples: no Hermes, nome de modelo, provider, rota auxiliar e toolset são coisas diferentes. Quando aparecem rótulos parecidos — openai-codex, openai-api, auto, gpt-5.4, gpt-5.4-mini, openai/gpt-5-mini — a sensação é de redundância. Mas não é redundância; é roteamento. E, se esse roteamento não ficar explícito, ele vira confusão operacional.
openai-codex com gpt-5.4, auxiliares misturados entre openai-api e auto, e x_search configurado no YAML, mas desligado no runtime e sem credencial xAI ativa. O ponto mais incisivo é este: a sua OPENAI_API_KEY não é só “backup passivo”; com a configuração atual, ela já é a rota natural de várias ações auxiliares via openai-api.
De onde esta análise saiu
Esta página foi escrita a partir da inspeção da instalação real. Os fatos principais vieram de:
~/.hermes/config.yaml;hermes config,hermes statusehermes tools list;- código do Hermes em
agent/auxiliary_client.py,hermes_cli/providers.pyetools/x_search_tool.py; - docs locais do projeto em
website/docs/.
model:
default: gpt-5.4
provider: openai-codex
base_url: https://chatgpt.com/backend-api/codex
auxiliary:
vision:
provider: auto
model: openai/gpt-5-mini
web_extract:
provider: auto
model: openai/gpt-5-mini
compression:
provider: openai-api
model: gpt-5.4-mini
approval:
provider: openai-api
model: gpt-5.4-mini
title_generation:
provider: openai-api
model: gpt-5.4-mini
$ hermes tools list
✗ disabled x_search 🐦 X (Twitter) Search
$ hermes status
xAI OAuth ✗ not logged in
x_search.model: grok-4.20-reasoning
Mapa atual: quem faz o quê
| Bloco | Configuração atual | Leitura operacional |
|---|---|---|
| Chat principal | openai-codex + gpt-5.4 |
é a rota cognitiva principal do agente |
| Compressão | openai-api + gpt-5.4-mini |
usa a API direta da OpenAI para resumir contexto |
| Approval | openai-api + gpt-5.4-mini |
rota auxiliar de decisão/avaliação |
| Títulos | openai-api + gpt-5.4-mini |
nomeação automática de sessão |
| Vision | provider: auto + openai/gpt-5-mini |
não é uma rota fixa; depende do resolvedor auxiliar |
| Web extract | provider: auto + openai/gpt-5-mini |
também depende do resolvedor auxiliar |
| Delegation | sem override | herda o principal por padrão |
| x_search | grok-4.20-reasoning |
é uma ferramenta separada, não o modelo principal |
O ponto mais traiçoeiro: nomes parecidos que não significam a mesma coisa
Aqui está a confusão central.
openai-codexé um provider do Hermes. Na sua instância, ele aponta parahttps://chatgpt.com/backend-api/codexe usa o login Codex/OAuth.openai-apié outro provider. Ele aponta parahttps://api.openai.com/v1e usa API key.autonão é um provider real. É um resolvedor que tenta encontrar a melhor rota auxiliar disponível.gpt-5.4egpt-5.4-minisão nomes de modelo.openai/gpt-5-minié um identificador de modelo escrito num formato que parece provider/model, mas ele está guardado sob um bloco comprovider: auto. Portanto, a rota efetiva depende do resolvedor, não só do texto do nome.
A sua OPENAI_API_KEY é backup ou uso real?
A resposta curta é: hoje ela já participa do desenho operacional. Não faz sentido tratá-la apenas como um backup morto.
O motivo é direto. Você configurou estes auxiliares com provider: openai-api:
auxiliary.compression;auxiliary.approval;auxiliary.title_generation.
O provider openai-api no código do Hermes é a rota para https://api.openai.com/v1. E a documentação local deixa claro que, para endpoints diretos por tarefa, o Hermes usa a chave configurada na tarefa ou a OPENAI_API_KEY.
"openai-api": HermesOverlay(
transport="codex_responses",
base_url_override="https://api.openai.com/v1",
base_url_env_var="OPENAI_BASE_URL",
)
Em outras palavras: mesmo que o seu modelo principal esteja em openai-codex, a sua API key da OpenAI já é a rota natural dos auxiliares fixos configurados como openai-api.
O que significa provider: auto de verdade
No Hermes, auto não quer dizer “qualquer coisa da OpenAI”. Quer dizer “siga a cadeia de resolução auxiliar”. O próprio código local documenta a ordem.
Resolution order for text tasks (auto mode):
1. User's main provider + main model
2. OpenRouter
3. Nous Portal
4. Custom endpoint
5. Native Anthropic
6. Direct API-key providers
7. None
Para tarefas multimodais/vision, a cadeia também tenta o provider principal primeiro, depois outras rotas compatíveis.
Portanto, quando você vê isto:
auxiliary:
vision:
provider: auto
model: openai/gpt-5-mini
não dá para ler como “vision está cravado na OpenAI API”. A leitura correta é: “vision quer esse modelo nominal, mas a rota exata depende do roteador auxiliar e do backend disponível”.
Como eu avaliaria o desenho atual
O estado atual não está ruim. Pelo contrário: ele faz sentido e já separa trabalho principal de side tasks. O problema não é qualidade; é legibilidade arquitetural.
| Aspecto | Como está | Minha leitura |
|---|---|---|
| Principal | claro | openai-codex + gpt-5.4 está inequívoco |
| Auxiliares fixos | claros | há intenção nítida de usar uma rota menor para compressão/título/approval |
| Auxiliares em auto | ambíguos | o nome do modelo é explícito, mas a rota final não é |
| Delegation | implícita | sem override, fica fácil gastar “modelo principal” em subtarefa que poderia ser menor |
| OPENAI_API_KEY | subestimada | na prática ela já é rota auxiliar, não mero cofre de backup |
| x_search | desconectado do uso atual | está configurado no YAML, mas desligado e sem auth válida |
Um probe útil: o que o Codex da sua conta aceita de fato
Como o provider openai-codex com conta ChatGPT tem allow-list variável, eu fiz uma checagem barata antes de recomendar rotas. O resultado mais importante foi este:
$ hermes chat -q 'Respond only OK.' --provider openai-codex -m gpt-5.4-mini -Q
OK
$ hermes chat -q 'Respond only OK.' --provider openai-codex -m gpt-5.4-nano -Q
400 - model not supported when using Codex with a ChatGPT account
$ hermes chat -q 'Respond only OK.' --provider openai-codex -m gpt-5-mini -Q
400 - model not supported when using Codex with a ChatGPT account
Isso importa bastante. Significa que, nesta conta e neste momento, gpt-5.4-mini está funcional em openai-codex, enquanto gpt-5.4-nano e gpt-5-mini não estão.
Minhas recomendações
Vou separar em três estratégias. A terceira é a que eu mais recomendaria para você hoje.
Estratégia 1 — manter quase como está, mas com leitura correta
É a opção de menor mudança. Você mantém:
- principal em
openai-codex+gpt-5.4; - compressão, approval e title em
openai-api+gpt-5.4-mini; - vision/web extract em
auto.
Funciona. Só exige aceitar uma verdade arquitetural: o seu Hermes já opera em duas superfícies OpenAI diferentes — Codex OAuth e API key direta.
Estratégia 2 — clareza máxima: consolidar os auxiliares menores no Codex
Como gpt-5.4-mini respondeu com sucesso em openai-codex, você já tem base para uma consolidação mais elegante. A ideia seria usar:
- principal:
openai-codex+gpt-5.4; - compressão:
openai-codex+gpt-5.4-mini; - approval:
openai-codex+gpt-5.4-mini; - title_generation:
openai-codex+gpt-5.4-mini.
Vantagem: você reduz a sensação de “OpenAI em duplicidade”.
Risco: o allow-list do Codex pode mudar com o tempo, então esse arranjo precisa ser tratado como compatível hoje, não eternamente garantido.
hermes config set auxiliary.compression.provider openai-codex
hermes config set auxiliary.compression.model gpt-5.4-mini
hermes config set auxiliary.approval.provider openai-codex
hermes config set auxiliary.approval.model gpt-5.4-mini
hermes config set auxiliary.title_generation.provider openai-codex
hermes config set auxiliary.title_generation.model gpt-5.4-mini
Estratégia 3 — a que eu recomendo: separar intenção por função
Esta é a arquitetura que me parece mais madura para o seu caso.
- principal: manter
openai-codex+gpt-5.4; - delegation: definir explicitamente
openai-codex+gpt-5.4-mini; - compression / approval / title: escolher conscientemente entre
a) consolidar tudo emopenai-codex+gpt-5.4-mini, se você quiser clareza de superfície;
b) manteropenai-api+gpt-5.4-mini, se você quiser isolar side tasks numa API direta. - vision / web_extract: sair do ambíguo e tornar explícito o que você quer.
gpt-5.4-mini.
hermes config set delegation.provider openai-codex
hermes config set delegation.model gpt-5.4-mini
hermes config set delegation.reasoning_effort medium
Se você quiser máxima previsibilidade também em vision e web extract, eu prefiro duas opções mais limpas do que o meio-termo atual:
- ou deixar
autode propósito e aceitar a flexibilidade como feature; - ou explicitar provider e modelo de forma inequívoca, para saber exatamente que backend está fazendo o trabalho.
O que eu não acho tão bom é um estado híbrido em que o nome do modelo parece específico, mas o provider continua auto. Funciona, porém comunica pouco.
O que é o x_search, afinal
O x_search não é “trocar o modelo principal do Hermes para Grok”. Também não é “usar X como provider do chat”. Ele é uma ferramenta especializada de pesquisa no X/Twitter.
No código local, o tool é descrito assim: ele usa o tool built-in x_search da Responses API da xAI. Ou seja, é uma integração de pesquisa, não a sua rota principal de conversa.
DEFAULT_X_SEARCH_MODEL = "grok-4.20-reasoning"
tool_def = {"type": "x_search"}
payload = {
"model": _get_x_search_model(),
"input": [{"role": "user", "content": query.strip()}],
"tools": [tool_def],
"store": False,
}
A rota de credencial aceita duas formas:
- xAI OAuth via SuperGrok/Premium+;
XAI_API_KEYdireta.
Hoje, na sua instância, ele está em três estados ao mesmo tempo:
- configurado no YAML com
grok-4.20-reasoning; - desabilitado como toolset no runtime;
- sem auth xAI ativa, segundo
hermes status.
x_search é mais uma intenção de capacidade do que uma capacidade operacional ativa.
Quando o x_search faz sentido
- acompanhar reação pública a um produto ou anúncio;
- achar posts, perfis e threads sobre um tema muito recente;
- ver alegações circulando no X antes de abrir a web geral;
- filtrar por handles específicos ou intervalos de data.
O que ele não é
- não é substituto do
web_search; - não é o modelo principal do Hermes;
- não é uma melhoria geral de qualidade do chat;
- não “entra em ação sozinho” só porque existe um bloco
x_search:no YAML.
Um detalhe bom do x_search no Hermes
O código local marca respostas degradadas quando filtros estão ativos e a xAI responde sem citações. Isso é excelente, porque evita confundir resposta “plausível” com resposta realmente apoiada pelo índice do X.
degraded = bool(active_filters) and not citations and not inline_citations
degraded_reason = (
"no citations returned despite filters ..."
)
Em português claro: se você filtra por datas ou handles e a resposta vem sem citação, o Hermes consegue te avisar que aquilo pode ter vindo mais da memória do modelo do que da busca no X em si.
O que eu faria no seu lugar
- Explicitaria delegation com
gpt-5.4-mini. - Escolheria uma filosofia para os auxiliares fixos: ou Codex consolidado, ou OpenAI API direta claramente assumida.
- Decidiria se vision/web_extract devem ser previsíveis ou flexíveis. Se previsíveis, sairia do
auto. Se flexíveis, manteriaautomas aceitando a ambiguidade como escolha consciente. - Não mexeria em x_search ainda, a menos que você queira realmente usar X como fonte recorrente.
Se a sua pergunta for “qual é a melhor arquitetura para mim hoje?”, minha resposta é esta:
openai-codex + gpt-5.4, delegation em openai-codex + gpt-5.4-mini, e decisão consciente entre consolidar auxiliares menores no Codex ou assumir a OpenAI API direta como camada auxiliar oficial. O que eu evitaria é deixar a API key tratada mentalmente como “backup” se, arquiteturalmente, ela já está servindo side tasks reais.
Próximos passos práticos
Se eu fosse evoluir a instância em etapas curtas, faria assim:
- ajustar
delegation.*; - escolher se
auxiliary.compression,approvaletitle_generationficam em Codex ou OpenAI API; - deixar documentado para você mesmo: “esta chave OpenAI é backup puro” ou “esta chave OpenAI é a camada oficial dos auxiliares”;
- só depois decidir se vale habilitar
x_searche autenticar xAI.
A ordem importa. Primeiro vem clareza da arquitetura principal. Depois vêm as integrações especializadas.