O Hermes Agent é o "agente de IA auto-aperfeiçoável" da Nous Research — uma base de código Python de mais de um milhão de linhas. Você não pode fundir o que não entende, então a fusão começou com um mapa. Esta lição é o núcleo desse mapa: o que o Hermes é, a única ideia estrutural que o torna extensível, e o ciclo fechado de aprendizado que se tornou a razão inteira da fusão.
Realidade de escala: o mapa não é uma leitura linha-a-linha de todas as 1,18M LOC — ele aprofunda as prioridades e cataloga a cauda longa, com a fronteira de cobertura declarada explicitamente. Fonte: docs/hermes-complete-map.md §1, §6.
O Hermes é um agente de IA pessoal que roda o mesmo núcleo de agente em várias superfícies — uma CLI, um gateway de mensagens (Telegram, Discord, Slack e ~20 outras plataformas), uma TUI Ink/React e um app desktop Electron. Construído pela Nous Research, licença MIT. Seus diferenciais de destaque, nas próprias palavras dele:
hermes model, sem mudanças de código.1 · O cache de prompt por conversa é sagrado. Uma conversa longa reusa um prefixo em cache a cada turno; qualquer coisa que mute o contexto passado ou reconstrua o system prompt no meio da conversa invalida o cache e multiplica o custo. A única exceção sancionada é compressão de contexto. 2 · O núcleo é uma cintura estreita; capacidade vive nas bordas. Toda tool de modelo é enviada em toda chamada de API, então a barra para uma nova tool de núcleo é alta — nova capacidade chega como um comando de CLI + skill ou um plugin, não como superfície de núcleo.
Note a rima com a Lição 1: Hermes e Alembic chegaram independentemente a "uma cintura estreita + prompt estável de cache". Esse instinto compartilhado é exatamente por que a fusão compõe em vez de brigar — e é o fio que puxamos na Lição 3.
Esta é a ideia estrutural mais importante e mais portátil do Hermes. As tools se auto-registram no momento do import; nada mantém uma lista central de imports. Cada arquivo de tool chama registry.register(...) no nível de módulo; um passo de descoberta faz glob no diretório e importa cada arquivo, e o side-effect do import popula o registro.
Há uma nuance crucial em que o mapa insiste — e é a fonte de um número que é mal-citado. A auto-descoberta registra o schema de uma tool, mas a tool só é exposta a um agente se seu nome aparecer num toolset em toolsets.py. Então três contagens diferentes descrevem três coisas diferentes:
| Contagem | O que realmente mede |
|---|---|
| 87 | arquivos de tool em tools/*.py (verificado ls | wc -l). Inclui arquivos de infra como registry.py, scanners de segurança e helpers compartilhados — nem todos são tools voltadas ao agente. |
| 30 | chaves de toolset em toolsets.py (browser, memory, skills, web, …) — os bundles nomeados que uma plataforma herda. |
| "64 tools" | O número que o material de aprendizado orange-book cita para tools voltadas ao agente. Mantemos a distinção arquivo/tool explícita em vez de colapsar os três num número só. |
A propriedade de destaque é concreta no código, não marketing. Após um turno, o agente pode forkar a si mesmo para revisar o que acabou de acontecer e decidir se algo vale a pena lembrar — e as escritas caem em stores duráveis que a próxima sessão lê.
As peças, cada uma concreta na fonte:
agent/background_review.py): após um turno, spawn_background_review dispara uma thread daemon que reproduz o snapshot da conversa num AIAgent forkado e pergunta "alguma skill/memória deve ser salva ou atualizada?". Roda com uma whitelist de tools limitada a tools de memória + gerenciamento de skill apenas, e herda o system prompt em cache do pai literalmente — então acerta o mesmo prefix cache e nunca toca a conversa viva._iters_since_skill e cutuca o modelo a persistir uma skill após iterações suficientes de chamada de tool.agent/curator.py): auto-gerencia o ciclo de vida de skills criadas pelo agente — active → stale → archived, nunca deleta, skills pinadas isentas, só skills created_by: "agent" tocadas.volatile do system prompt segura o snapshot de MEMORY.md + USER.md, que é exatamente por que são congelados no início da sessão — mutá-los no meio da sessão quebraria o cache.Para o Alembic, este ciclo inteiro — fork-após-turno → auto-revisão sob uma whitelist só de memória/skill → escrever em stores duráveis → ciclo de vida do curador → próxima sessão lê o snapshot atualizado — é o CLONE conceitual de maior valor, e compõe limpo com o pipeline de validador/portão existente do Alembic.
O repo hermes-mini-loop é uma implementação de referência mínima da mesma ideia, e declara a disciplina como três regras — as regras que impedem um ciclo de auto-aperfeiçoamento de se afogar no próprio ruído:
| Regra | O que previne |
|---|---|
| Aprender só de vitórias (score ≥ 0.7) | Sedimentar lições de turnos falhos ou de baixa confiança. Só sucessos validados viram memória durável. |
| Reforçar, não duplicar | Rever o mesmo fato deve fortalecer a entrada existente, não anexar uma quase-cópia que incha o store limitado. |
| Recombinar átomos provados | Novas skills são compostas de peças já validadas em vez de inventadas do zero — melhoria por recombinação. |
Segure o limite 0.7 e o "reforçar-não-duplicar" — ambos reaparecem, portados literalmente, como o portão padrão e o comportamento de dedup do ciclo do Alembic na Lição 4.
providers/ + plugins/model-providers/ + um proxy local compatível com OpenAI — um subsistema inteiramente diferente.tools/. A exposição é controlada pelas 30 chaves de toolset; o orange-book conta ~64 tools voltadas ao agente. Três números, três significados.