Tutorial · Linux / Ubuntu

Hermes Agent no Linux

Do curl ao bot respondendo no Telegram: instalação completa do agente open-source da Nous Research, documentada tela a tela durante uma instalação real — com cada decisão explicada.

⏱ ~15 minutos 💸 Custo: R$ 0 (plano free) 🐧 Ubuntu / Debian 🤖 Bot 24/7 no Telegram

00Pré-requisitos

O instalador só precisa de git, curl e xz-utils já presentes. No Ubuntu/Debian:

root@ubuntu26: ~
$ sudo apt update
$ sudo apt install -y git curl xz-utils

Todo o resto — Python 3.11 (via uv), Node.js, ripgrep, ffmpeg — o próprio instalador baixa sozinho.

01Rodar o instalador

Um comando só:

root@ubuntu26: ~
$ curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash

O script instala as dependências que faltarem, clona o repositório, cria o ambiente virtual, registra o comando global hermes e, ao final, já emenda no assistente de configuração.

ItemUsuário normalComo root
Código~/.hermes/hermes-agent//usr/local/lib/hermes-agent/
Comando~/.local/bin/hermes/usr/local/bin/hermes
Dados e config~/.hermes//root/.hermes/

💡 Prefira instalar com seu usuário normal (sem root). Funciona como root — esta instalação de exemplo foi assim —, mas tudo fica preso na conta do root.

02Tela: modo de setup

Logo após instalar, a primeira escolha. Navegue com e confirme com ENTER:

hermes setup
How would you like to set up Hermes?
 ↑↓ navigate  ENTER/SPACE select  ESC cancel

→ (•) Quick Setup (Nous Portal) — free OAuth login, no API keys (recommended)
  (o) Full setup — configure every provider, tool & option yourself
  (o) Blank Slate — everything off except the bare minimum

Nada aqui é definitivo: depois dá pra trocar tudo com hermes model, hermes tools ou rodando hermes setup de novo.

03Login no Nous Portal

O Quick Setup abre um link do Nous Portal pra autenticar via OAuth no navegador. Lá você escolhe o plano — o Free já serve: dá acesso aos modelos gratuitos e ao Tool Gateway. Depois de logar, o terminal continua sozinho.

⚠️ Se for copiar o link manualmente pro navegador, cuidado pra não colar texto de volta no terminal sem querer — o campo de busca da próxima tela captura tudo que for digitado (e aí a lista mostra "No matches"; Ctrl+U limpa).

04Tela: escolher o modelo padrão

Aparece uma lista grande de modelos com preços por milhão de tokens:

hermes setup — select default model
Select default model:
                                In      Out     Cache   ★ = on sale
 anthropic/claude-fable-5     $8.00   $40.00  $0.80   -20%
 anthropic/claude-sonnet-5    $1.60   $8.00   $0.16   -20%
 openai/gpt-5.6-terra         $2.00   $12.00  $0.20   -20%
 deepseek/deepseek-v4-flash   $0.06   $0.12   $0.01   -20%
...
— Upgrade at https://portal.nousresearch.com for paid models —
Search:   BACKSPACE edit  Ctrl+U clear  ESC stop

No plano free, digite free na busca pra filtrar os modelos 100% gratuitos (sufixo :free, desconto -100%):

hermes setup — modelos :free
(•) ★ upstage/solar-pro4:free              free   free   free  -100%
(o) ★ meituan/longcat-2.0:free             free   free          -100%
(o) ★ inclusionai/ling-3.0-flash-fin:free  free   free          -100%
(o) ★ poolside/laguna-s-2.1:free           free   free   free   -100%
ModeloPerfil
solar-pro4:free (Upstage)Generalista — boa escolha como padrão ✅
longcat-2.0:free (Meituan)Generalista, contexto longo
ling-3.0-flash-fin:freeVersão rápida especializada em finanças — evite como padrão geral
laguna-s-2.1:free (Poolside)Focado em código

Escolha sugerida: upstage/solar-pro4:free. Troca-se a qualquer momento com hermes model ou /model dentro do chat.

05Tela: ferramentas gratuitas

O pool de ferramentas do Tool Gateway — serviços externos que o agente usa sem você precisar de conta ou API key em nenhum deles (o portal intermedeia). SPACE marca/desmarca, ENTER confirma:

hermes setup — tool pool
Your free Nous tool pool — pick the tools to enable:

→ [✓] Web search & extract (Firecrawl)
  [✓] Image generation (FAL)
  [✓] Speech-to-text (OpenAI Whisper)
  [✓] Browser automation (Browser Use)

Recomendação: deixar tudo marcado. Ferramenta ligada só é usada quando a tarefa pede. Pra mudar depois: hermes tools.

06Tela: terminal backend

Define onde o agente executa os comandos de shell que ele decidir rodar:

hermes setup — terminal backend
Select terminal backend:

  (o) Local — run directly on this machine (default)
  (o) Docker — isolated container with configurable resources
  (o) Modal — serverless cloud sandbox
  (o) SSH — run on a remote machine
  (o) Daytona — persistent cloud development environment
  (o) Vercel Sandbox — cloud microVM with snapshot persistence
  (o) Singularity/Apptainer — HPC-friendly container
→ (•) Keep current (local)

Recomendação: Keep current (local). Pra começar numa VM dedicada, é o ideal.

⚠️ Rodando como root + backend local, o agente tem poder total na máquina. Pra adicionar isolamento depois: hermes config set terminal.backend docker.

07Tela: plataforma de mensagens?

hermes setup — messaging
Connect a messaging platform? (Telegram, Discord, etc.)

→ (•) Set up messaging now (recommended)
  (o) Skip — set up later with 'hermes setup gateway'

É o modo bot: falar com o agente pelo celular — mandar tarefas, receber respostas e áudios. Escolha Set up messaging now; se preferir terminar antes, Skip não perde nada (configura depois com hermes setup gateway).

08Tela: selecionar o Telegram

O Hermes fala com praticamente tudo — Telegram, WhatsApp, Discord, Slack, Signal, e-mail, SMS, Teams, Google Chat, Matrix, IRC, LINE, iMessage, WeChat, e até Home Assistant e ntfy. É seleção múltipla:

hermes setup — platforms
Select platforms to configure:
 ↑↓ navigate  SPACE toggle  ENTER confirm

  [ ] Discord      (not configured)
  [ ] Slack        (not configured)
→ [✓] Telegram     (not configured)
  [ ] WhatsApp     (not configured)
  ... (+23 plataformas)
  1. Desça com até Telegram
  2. SPACE pra marcar [✓]só posicionar a seta não seleciona!
  3. ENTER pra confirmar

09Criar o bot do Telegram

hermes setup — telegram
◆ Telegram
  How would you like to create your Telegram bot?

  [1] Automatic (recommended)
      Scan a QR code → confirm in Telegram → done.
      No token copy-paste needed.

  [2] Manual
      Create a bot via @BotFather yourself and paste the token.

Choice [1/2] [1]: 

9.1 — O QR / link de pareamento

hermes setup — pairing
Contacting Hermes Telegram onboarding service...
✓ Pairing created
Rendering QR code...

Scan this QR code with your phone, or open the link below:
(Install 'qrcode' for a scannable QR code: pip install qrcode)

Link: https://t.me/newbot/NousHostedHermesBot/hermes_xxxx_bot?name=...

Sem o pacote Python qrcode instalado, ele mostra só o link — abrir no navegador ou celular dá no mesmo resultado.

💡 Quer o QR desenhado no terminal? pip install qrcode antes do setup.

9.2 — Confirmando no Telegram

O Telegram abre o dialog Create Bot: o serviço da Nous pede permissão pra criar um bot em seu nome.

N

Create Bot

NousHostedHermesBot would like to create and manage a chatbot on your behalf.

Hermes Agent tutorial
@hermes_jq5aklx6rw5gvepn_bot
CancelCreate

Clique em Create e o terminal continua sozinho.

10✓ Installation Complete!

hermes setup — done
┌──────────────────────────────────┐
│    ✓ Installation Complete!      │
└──────────────────────────────────┘

📁 Your files:
  Config:    /root/.hermes/config.yaml
  API Keys:  /root/.hermes/.env
  Data:      /root/.hermes/cron/, sessions/, logs/
  Code:      /usr/local/lib/hermes-agent

🚀 Commands:
  hermes                  Start chatting
  hermes setup            Configure API keys & settings
  hermes config           View/edit configuration
  hermes gateway install  Install gateway service (messaging + cron)
  hermes update           Update to latest version

⚡ 'hermes' was linked into /usr/local/bin — no shell reload needed.
ArquivoO que é
config.yamlConfiguração geral: modelo padrão, backend, ferramentas
.envSegredos: tokens do portal e do bot. Trate como senha!
cron/ sessions/ logs/Tarefas agendadas, histórico de conversas, logs

Os comandos, traduzidos

ComandoTraduçãoPra que serve
hermesComeçar a conversarAbre o chat com o agente no terminal. É o comando do dia a dia.
hermes setupConfigurar chaves e ajustesReabre o assistente completo (o mesmo desta instalação). Use pra trocar provedor, plano ou refazer algo.
hermes configVer/editar a configuraçãoMostra a configuração atual; com hermes config set CHAVE VALOR altera um valor pontual sem abrir assistente.
hermes gateway installInstalar o serviço do gatewayO pulo do gato pro bot: instala o Hermes como serviço do sistema, rodando 24/7 — o Telegram responde mesmo com o terminal fechado, e as tarefas agendadas (cron) executam sozinhas.
hermes updateAtualizarBaixa e aplica a versão mais recente do Hermes.

E o aviso final significa: o comando hermes já funciona agora, sem source ~/.bashrc.

11Primeiros testes

root@ubuntu26: ~
$ hermes            # chat no terminal
$ hermes doctor     # diagnóstico, se algo estranhar

Prompts bons pra estrear o agente:

12Conhecendo a tela do chat

Rodando hermes, o chat abre com um banner cheio de informação:

hermes — chat
solar-pro4:free · Nous Research
Session: 20260901_165010_e084a2

Available Skills
autonomous-ai-agents: claude-code, codex, computer-use, ...
research: arxiv, competitor-news-monitor, llm-wiki
software-development: codebase-inspection, github, +9 more

23 tools · 54 skills · /help for commands
⚠ 13 commits behind — run hermes update to update
⚠ tirith security scanner enabled but not available

Você: Está funcionando bem?
Hermes: Estou aqui e respondendo. Se quiser testar com alguma
tarefa específica — busca na web, um arquivo, código — é só mandar.

solar-pro4:free │ 14.9K/524.3K │ 3% │ 20 t/s
AvisoSignificado
13 commits behindExiste versão mais nova; atualize quando quiser com hermes update
tirith ... not availableO scanner que analisa comandos perigosos não está instalado; o Hermes usa o modo mais simples (padrões). Nada quebra.

💡 hermes config set display.show_reasoning true mostra o raciocínio do modelo enquanto ele pensa.

13Bot no ar 24/7: o gateway

Até aqui o bot só responde com o Hermes aberto no terminal. Pra ficar sempre online, instala-se o gateway como serviço do systemd:

root@ubuntu26: ~
$ hermes gateway install
hermes gateway install — saída
Start the gateway now after installing the service? [Y/n]: y
Start the gateway automatically on login/boot with systemd? [Y/n]: y
Installing user systemd service to:
  /root/.config/systemd/user/hermes-gateway.service
✓ User service installed and enabled!

Next steps:
  hermes gateway start               # Start the service
  hermes gateway status              # Check status
  journalctl --user -u hermes-gateway -f  # View logs

Enabling linger so the gateway survives SSH logout...
✓ Linger enabled — gateway will persist after logout
✓ User service started

Traduzindo o que aconteceu:

  1. Duas perguntas — iniciar agora? iniciar no boot? — responda y nas duas
  2. Serviço instalado no systemd de usuário e habilitado
  3. Linger ativado sozinho — sem isso, serviço de usuário morre no logout do SSH; com linger, sobrevive a logout e reboot
  4. Serviço iniciado — bot no ar ✅

O serviço mantém o bot conectado, executa as tarefas agendadas (cron) e gerencia as outras plataformas de mensagem.

14Pareamento: quem pode usar o bot

Mande um "Oi" pro bot. Na primeira mensagem, ele não obedece — responde com um código:

Oi13:53 ✓✓
Hi~ I don't recognize you yet!

Here's your pairing code: DNZKR2T9

Ask the bot owner to run:
hermes pairing approve telegram DNZKR2T9 13:53

Isso é um mecanismo de segurança: o bot é público no Telegram, mas só obedece usuários aprovados pelo dono. Ninguém usa seu agente — que tem acesso ao terminal da máquina! — sem sua autorização. No terminal, aprove:

root@ubuntu26: ~
$ hermes pairing approve telegram DNZKR2T9
saída
Approved! User Apolo (657431607) on telegram can now use the bot~
They'll be recognized automatically on their next message.

Pra autorizar outras pessoas (família, equipe do NOC), o ritual é o mesmo: a pessoa manda mensagem, recebe um código, e você aprova.

15Bot respondendo + home channel

Aprovado o pareamento, o bot conversa normalmente — e em português, se você falar em português. Junto vem o último aviso:

📬 No home channel is set for Telegram. A home channel is where Hermes delivers cron job results and cross-platform messages.

Type /sethome to make this chat your home channel, or ignore to skip. 13:54
Respondendo a: Tudo certo agora? Oi! Sim, tá tudo funcionando por aqui. 😊

Precisa de alguma coisa específica? Posso ajudar com código, busca, escrita, organização, imagens... o que você precisar. 13:54
/sethome13:55 ✓✓
✅ Home channel set to Apolo (ID: 657431607).
Cron jobs and cross-platform messages will be delivered here. 13:55

O home channel é onde chegam as coisas que o agente faz por iniciativa própria — ex.: um relatório agendado ("todo dia às 8h me manda o resumo do Zabbix") cai ali. Digite /sethome no chat; pra mudar depois (ex.: pra um grupo da equipe), basta dar /sethome no outro chat.

16Vendo o agente trabalhar: modo verbose no Telegram

Por padrão, no Telegram você só recebe a resposta final — os comandos, leituras e buscas que o agente fez no meio ficam invisíveis. Mas dá pra ligar o progresso das ferramentas em tempo real: uma mensagem que vai se atualizando com cada comando shell, arquivo lido e busca feita, assim:

✍️ Writing /tmp/compare_infra_skill_trees.py
💻 terminal
shell  python3 /tmp/compare_infra_skill_tree... 21:47
📖 Reading infra-skill-diffs.txt
💻 terminal
shell  hermes skills list --enabled-only --s... 21:47
🔍 Searching files for (active-directory-ops|agenda-ops|aten...
📖 Reading hermes-enabled-all-skills.txt 21:47

Pra ativar, rode na VM (vale pro perfil ativo):

root@ubuntu26: ~
$ hermes config set display.platforms.telegram.tool_progress all
$ hermes config set display.platforms.telegram.busy_ack_detail true
$ hermes config set display.tool_progress_command true
$ hermes gateway restart

O que cada uma faz:

Depois disso, o /verbose no próprio chat alterna os níveis a qualquer momento:

NívelO que aparece
offSó a resposta final (o padrão)
newUma linha resumida por ferramenta nova
allFerramentas, comandos e progresso — o da imagem acima ✅
verboseTudo + argumentos e resultados detalhados

💡 Ótimo pra aprender (ver como o agente resolve) e pra auditar o que ele executa nos equipamentos. Pro uso normal, new é um bom meio-termo — o all enche o chat rapidinho.


🏁O que você montou

Em 15 passos, de uma VM Ubuntu limpa pra um agente de IA completo, rodando 24/7 e acessível pelo Telegram:

Cola de comandos

referência rápida
hermes                                   # chat no terminal
hermes -c                                # retomar última conversa
hermes model                             # trocar modelo
hermes tools                             # ligar/desligar ferramentas
hermes config edit                       # editar config no editor
hermes gateway status                    # estado do serviço do bot
journalctl --user -u hermes-gateway -f   # logs do bot ao vivo
hermes pairing approve telegram CODIGO   # autorizar novo usuário
hermes update                            # atualizar o Hermes
hermes doctor                            # diagnóstico

Próximos passos

  1. Atualizar: hermes update (a instalação avisou que estava 13 commits atrás)
  2. Testar pelo Telegram: peça algo que use a máquina — "qual o uso de disco? mostra os 5 maiores diretórios"
  3. Criar uma tarefa agendada: "todo dia às 8h, verifica o disco e me manda um resumo" — o resultado chega no home channel
  4. Explorar as skills: /help lista tudo; são 54 de fábrica e o agente aprende novas com o uso
  5. Personalizar: /personality muda o jeito do bot; o SOUL.md define a personalidade permanente
  6. Segurança: o ~/.hermes/.env guarda todos os tokens — trate como senha. Backend local + root = poder total; pra isolar: hermes config set terminal.backend docker

00Pré-requisitos

O instalador só precisa de git, curl e xz-utils já presentes. No Ubuntu/Debian:

root@ubuntu26: ~
$ sudo apt update
$ sudo apt install -y git curl xz-utils

Todo o resto — Python 3.11 (via uv), Node.js, ripgrep, ffmpeg — o próprio instalador baixa sozinho.

01Rodar o instalador

Um comando só:

root@ubuntu26: ~
$ curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash

O script instala as dependências que faltarem, clona o repositório, cria o ambiente virtual, registra o comando global hermes e, ao final, já emenda no assistente de configuração.

💡 Já instalou seguindo o guia da LLM gratuita? Não precisa reinstalar — rode hermes setup e siga daqui.

02Tela: modo de setup — escolha o Full setup

Aqui é onde este guia se separa do outro: em vez do Quick Setup, desça com até Full setup e confirme com ENTER — você vai configurar o provedor de LLM com a sua própria chave de API (OpenRouter, OpenAI, Anthropic ou qualquer endpoint compatível).

hermes setup
How would you like to set up Hermes?
 ↑↓ navigate  ENTER/SPACE select  ESC cancel

  (o) Quick Setup (Nous Portal) — free OAuth login, no API keys
→ (•) Full setup — configure every provider, tool & option yourself
  (o) Blank Slate — everything off except the bare minimum

03Tela: escolher o provedor de LLM

O Full setup abre uma lista com quase 40 provedores. Antes de escolher, entenda a diferença entre as duas formas de pagar:

FormaComo funciona
API (chave)Você cria uma chave no site do provedor e paga por token consumido (pré-pago ou pós-pago). Sem limite de plano — gastou, pagou. É o modelo clássico pra agentes.
Assinatura (subscription)Usa o plano mensal fixo que você já paga no chat (ChatGPT Plus, Claude Pro...) via login OAuth. Custo previsível, mas com limites de uso do plano — e nem todo plano aguenta o consumo de um agente.
hermes setup — select provider
Select provider:
 ↑↓ navigate  ENTER/SPACE select  ESC cancel

  (•) Nous Portal (300+ models with bundled tool use)
→ (o) OpenRouter (Pay-per-use API aggregator)
  (o) LM Studio (Local desktop app with built-in model server)
  (o) Anthropic (Claude models via API key or Claude Code)
  (o) OpenAI (ChatGPT/Codex subscription or direct OpenAI API)
  (o) Google AI Studio (Native Gemini API)
  (o) DeepSeek (V3, R1, coder, direct API)
  (o) NVIDIA NIM (Nemotron models via build.nvidia.com)
  (o) Ollama Cloud (Cloud-hosted open models)
  (o) OpenCode (Zen pay-as-you-go, Go subscription, or free tier)
  (o) Custom endpoint (enter URL manually)
  ... (+27 provedores)

Os principais, explicados

ProvedorO que é
OpenAIChatGPT/Codex por assinatura ou API direta. O Codex funciona muito bem com a assinatura mensal — é o provedor usado neste tutorial e em todo o curso. Login OAuth com a conta do ChatGPT, sem criar chave.
AnthropicModelos Claude via chave de API ou Claude Code. Atenção: com a assinatura mensal (Claude Pro/Max) dificilmente vai funcionar bem pra uso em agente — os limites do plano estouram rápido. O caminho certo na Anthropic é a API ou a opção de gastos extras na assinatura.
Nous PortalO provedor do guia gratuito: 300+ modelos e ferramentas embutidas num login só.
OpenRouterAgregador pay-per-use: uma chave só dá acesso a centenas de modelos de todos os laboratórios. Ótimo pra testar vários modelos sem criar conta em cada um.
Google AI StudioAPI nativa do Gemini — tem faixa gratuita generosa pra começar.
DeepSeekAPI direta dos modelos DeepSeek — preço por token muito baixo.
LM Studio / OllamaModelos rodando na sua própria máquina (custo zero, privacidade total) — exige hardware bom.
Custom endpointQualquer servidor compatível com a API da OpenAI — vale até pra um vLLM seu.

💡 Opções gratuitas ou quase: além do Nous Portal (guia da outra aba), o Google AI Studio tem free tier, o OpenCode tem plano free, o NVIDIA NIM dá créditos em build.nvidia.com, e LM Studio/Ollama rodam local de graça.

⚠️ Resumindo a escolha: tem assinatura do ChatGPT? Vá de OpenAI (Codex) — é a deste tutorial. Quer Claude? Use a API da Anthropic (ou gastos extras), não a assinatura pura. Quer flexibilidade de modelos? OpenRouter.

04OpenAI: assinatura ou API?

Escolhendo OpenAI, ele pergunta qual das duas formas usar:

hermes setup — OpenAI
Select OpenAI provider:
 ↑↓ navigate  ENTER/SPACE select  ESC cancel

→ (•) ChatGPT or Codex Subscription
  (o) OpenAI API

4.1 — Antes de logar: ativar o código de aparelho no ChatGPT

Como a VM não tem interface gráfica, o login da assinatura acontece por código de aparelho (device code) — e esse recurso vem desligado por padrão na sua conta. Ative antes, senão o login falha:

  1. Abra o ChatGPT no navegador (chatgpt.com) → foto de perfil → Configurações
  2. Menu Segurança e login
  3. Desça até "Entrada segura com o ChatGPT"
  4. Ligue a chave "Habilitar autorização por código de aparelho para o Codex"

Segurança e login

Entrada segura com o ChatGPT

Habilitar autorização por código de aparelho para o Codex
Usar o início de sessão com código de aparelho para ambientes remotos ou sem interface gráfica.

⚠️ O próprio ChatGPT avisa: códigos de aparelho podem ser alvo de phishing. Só digite códigos que você mesmo gerou no seu terminal, e nunca compartilhe um código de aparelho com ninguém.

05Login por código de aparelho

Confirmada a assinatura, o terminal inicia o login do Codex e mostra o passo a passo:

hermes setup — OpenAI login
Not logged into OpenAI Codex. Starting login...

Signing in to OpenAI Codex...
(Hermes creates its own session — won't affect Codex CLI or VS Code)

To continue, follow these steps:

  1. Open this URL in your browser:
     https://auth.openai.com/codex/device

  2. Enter this code:
     PITT-856OO

Waiting for sign-in... (press Ctrl+C to cancel) 

Repare no aviso entre parênteses: o Hermes cria a própria sessão — não interfere no Codex CLI nem no VS Code, se você já usa.

  1. Copie o link https://auth.openai.com/codex/device e abra no navegador (pode ser no seu PC ou celular — não precisa ser na VM)
  2. Faça login na conta do ChatGPT que tem a assinatura
  3. Digite o código de 9 caracteres mostrado no terminal e clique em Continuar
>_

Use o seu código do aparelho para conceder acesso à CLI do Codex

Informe o código de 9 caracteres exibido no seu terminal

P I T T - 8 5 6 O O
CancelarContinuar

A própria página repete o aviso de segurança: continue apenas se você iniciou esta sessão pelo terminal; se recebeu o link de outra pessoa, feche a aba. Autorizou? O terminal detecta sozinho e segue.

06Tela: escolher o modelo da assinatura

Logado, aparecem os modelos disponíveis no seu plano do ChatGPT:

hermes setup — select default model
Select default model:
 ↑↓ navigate  ENTER/SPACE select  / search  ESC cancel

→ (•) gpt-5.6-sol
  (o) gpt-5.6-sol-900k
  (o) gpt-5.6-terra
  (o) gpt-5.6-terra-900k
  (o) gpt-5.6-luna
  (o) gpt-5.6-luna-900k
  (o) gpt-5.5
  (o) gpt-5.4
  (o) gpt-5.4-900k
  (o) gpt-5.4-mini
  (o) gpt-5.3-codex-spark
  (o) Enter custom model name
  (o) Skip (keep current)

Entendendo a família GPT-5.6: Sol, Terra e Luna

A geração 5.6 da OpenAI vem em três camadas, como tamanhos de camiseta:

ModeloPerfilPreço API (in/out por Mtok)
gpt-5.6-solO topo de linha. Feito exatamente pro que um agente precisa: tarefas longas, planejamento, uso de ferramentas e persistência até terminar. É o modelo usado neste tutorial e em todo o curso.$5 / $30
gpt-5.6-terraO do dia a dia: equilíbrio entre qualidade e custo, nível do antigo GPT-5.5 pagando menos.$2.50 / $15
gpt-5.6-lunaO rápido e barato, pra tarefas simples e em volume. É o que a própria OpenAI usa no auto-review do Codex.$1 / $6

Escolha do curso: gpt-5.6-sol (o primeiro da lista, já selecionado) → ENTER. Pra trocar depois: /model no chat.

07Daqui em diante, tudo igual ao guia gratuito

Com o modelo escolhido, o restante do setup é idêntico ao guia da LLM gratuita — as mesmas telas, as mesmas escolhas. Abaixo o resumo de cada uma; a explicação completa está na outra aba.

7.1 — Terminal backend: local

hermes setup — terminal backend
Select terminal backend:

  (o) Local — run directly on this machine (default)
  (o) Docker — isolated container with configurable resources
  ... (Modal, SSH, Daytona, Vercel, Singularity)
→ (•) Keep current (local)

ENTER no Keep current (local) — o agente executa comandos direto na máquina. (Detalhes das outras opções no Passo 06 do guia gratuito.)

7.2 — Plataforma de mensagens: Telegram

hermes setup — platforms
Select platforms to configure:
 ↑↓ navigate  SPACE toggle  ENTER confirm

→ [✓] Telegram     (not configured)
  ... (+26 plataformas: WhatsApp, Discord, Slack, Signal...)

Desça até Telegram, marque com SPACE (tem que aparecer o [✓]) e confirme com ENTER.

7.3 — Criar o bot: modo automático

Escolha [1] Automatic, abra o link/QR que aparecer, confirme o Create Bot no Telegram — o token vai direto pro Hermes. (Passo 09 do guia gratuito, com prints.)

7.4 — Instalação completa + bot 24/7

Aparece o ✓ Installation Complete! com os caminhos dos arquivos e os comandos principais (tabela traduzida no Passo 10 do guia gratuito). Depois, coloque o bot no ar como serviço:

root@ubuntu26: ~
$ hermes gateway install

Responda y nas duas perguntas — serviço systemd instalado, linger ativado, bot online mesmo após logout e reboot.

7.5 — Pareamento e home channel

Mande um "Oi" pro bot no Telegram → ele responde com um código de pareamento → aprove no terminal:

root@ubuntu26: ~
$ hermes pairing approve telegram SEU_CODIGO

E finalize mandando /sethome no chat do bot, pra ele virar o destino das entregas automáticas (cron e mensagens entre plataformas).


🏁O que você montou (versão LLM paga)

💡 Diferença prática pro guia gratuito: aqui o "cérebro" é o gpt-5.6-sol da sua assinatura — muito mais capaz que os modelos :free — mas as ferramentas (busca web, imagem, transcrição, navegador) do Tool Gateway da Nous não vêm junto; ative-as com hermes tools se quiser combinar as duas coisas (dá pra usar o Nous Portal só pras ferramentas e a OpenAI só pro modelo).

Além do terminal e do Telegram, o Hermes tem um dashboard web completo que roda na própria VM e você acessa de qualquer navegador da rede: chat com o agente, sessões, arquivos, modelos, logs, tarefas cron, skills, MCP, canais, pareamentos e configuração — tudo em interface gráfica.

01Criar as credenciais de acesso

A interface usa login e senha (basic auth) definidos no .env. Desde junho/2026, expor pra rede (0.0.0.0) exige autenticação configurada — sem isso o dashboard nem sobe público:

root@ubuntu26: ~
$ cat >> /root/.hermes/.env <<'EOF'
HERMES_DASHBOARD_BASIC_AUTH_USERNAME=admin
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=TroqueEstaSenhaForte123
EOF
$ echo "HERMES_DASHBOARD_BASIC_AUTH_SECRET=$(openssl rand -base64 32)" >> /root/.hermes/.env
$ chmod 600 /root/.hermes/.env

Troque o TroqueEstaSenhaForte123 por uma senha sua — vai ser o login da página. (Instalação sem root: use ~/.hermes/.env.)

02A pegadinha: servedashboard

O instinto manda rodar hermes serve — mas ele é o backend headless (pra o app Desktop e API, sem página web). Se você acessar a porta no navegador, leva isto na cara:

navegador — http://10.0.0.12:9119
{"error":"Headless backend (hermes serve): web UI disabled —
use `hermes dashboard` for the browser UI."}

O próprio erro entrega a solução: a interface de navegador é outro comando, o hermes dashboard.

03Subir o dashboard liberado pra rede

root@ubuntu26: ~
$ hermes dashboard --host 0.0.0.0 --port 9119 --no-open

💡 Deu erro de dependência? A UI web precisa de um extra do Python. Rode cd /usr/local/lib/hermes-agent && uv pip install -e ".[web,pty]" e tente de novo (o pty habilita a aba de Chat no navegador). E se o firewall ufw estiver ativo: ufw allow 9119/tcp.

04Acessar do navegador

De qualquer máquina da rede: http://IP-DA-VM:9119 → entre com o usuário e senha do Passo 01. A interface abre com o menu completo na lateral:

HERMES AGENT — dashboard
HERMES AGENT            Chat
                       ┌─────────────────────────────┐
 >_ CHAT               │  MODEL  gpt-5.6-sol [live]🗨 SESSIONS            │  REASONING  Medium          │
 🗀 FILES               │                             │
 ⚙ MODELS              │  [ + New chat ]             │
 🗎 LOGS                │                             │
 🕐 CRON                └─────────────────────────────┘
 🕮 SKILLS · PLUGINS · MCP · CHANNELS
 🖇 WEBHOOKS · PAIRING · PROFILES · CONFIG

 System · Gateway Status · Restart Gateway · Update Hermes
 admin (via basic)

Dali dá pra conversar com o agente (mesmo modelo do terminal, com seletor de reasoning), gerenciar sessões e arquivos, ver logs, editar cron e skills, aprovar pareamentos e até atualizar o Hermes com um clique.

05Deixar rodando sempre (serviço systemd)

Diferente do gateway (que tem hermes gateway install), o dashboard ainda não tem instalador de serviço nativo — só --status e --stop pra gerenciar o processo vivo. Pra ele iniciar no boot e ressuscitar se cair, criamos o serviço na mão (a mesma receita que o gateway usa por baixo dos panos):

root@ubuntu26: ~
$ cat > /etc/systemd/system/hermes-dashboard.service <<'EOF'
[Unit]
Description=Hermes Agent Dashboard (interface web)
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=root
Environment=HOME=/root
ExecStart=/usr/local/bin/hermes dashboard --host 0.0.0.0 --port 9119 --no-open --skip-build
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
$ systemctl daemon-reload
$ systemctl enable --now hermes-dashboard
$ systemctl status hermes-dashboard   # tem que mostrar: active (running)

Manutenção depois:

referência
systemctl restart hermes-dashboard        # reiniciar
journalctl -u hermes-dashboard -f         # logs ao vivo
systemctl disable --now hermes-dashboard  # desligar de vez

⚠️ Segurança: com 0.0.0.0, se a VM tiver IP público a interface do agente — que executa comandos como root! — fica exposta pra internet inteira, protegida só pela senha do basic auth. Em rede local/lab, tranquilo; com IP público, capriche na senha e considere restringir por firewall ou VPN (Tailscale).

O Hermes que sai da instalação é genérico. Esta aba mostra como moldar o agente: os arquivos de configuração, o SOUL.md (a alma dele), as personalidades — e um prompt pronto que faz o Hermes se auto-configurar como técnico de TI de infraestrutura, já com as skills do Fórum Telecom instaladas.

01O mapa dos arquivos de configuração

Tudo mora em ~/.hermes/ (na instalação root, /root/.hermes/):

ArquivoO que controla
SOUL.mdQuem o agente É — identidade, tom, estilo. É a primeira coisa injetada no system prompt, em toda conversa, em qualquer plataforma.
config.yamlConfiguração geral: modelo padrão, backend de terminal, ferramentas, personalidades customizadas, aliases de modelo.
.envSegredos: tokens, chaves de API, credenciais do dashboard. Trate como senha.
skills/As skills instaladas — cada uma é uma pasta com um SKILL.md (e opcionalmente references/, templates/).
AGENTS.md (no projeto)Contexto de projeto — fica no diretório do repositório/projeto, não no ~/.hermes. Arquitetura, convenções, o que não fazer. O Hermes também lê CLAUDE.md e .cursorrules se existirem.

💡 Regra de bolso da doc oficial: se a instrução vale em qualquer lugar, vai no SOUL.md; se pertence a um projeto, vai no AGENTS.md daquele projeto.

02SOUL.md — a alma do agente

O SOUL.md ocupa a posição nº 1 do system prompt: antes das ferramentas, da memória e das skills, o modelo lê quem ele é. O Hermes cria um padrão na instalação e nunca sobrescreve o seu — editar é seguro.

O que a documentação recomenda colocar (e não colocar):

✅ Pertence ao SOUL.md❌ Não pertence
Tom e estilo de comunicaçãoInstruções de um projeto específico
Quão direto/cauteloso serCaminhos de arquivos e convenções de repo
Como lidar com incertezaDetalhes de workflow temporário
O que evitar (bajulação, enrolação...)Coisas que mudam toda semana

Pra editar na mão:

root@ubuntu26: ~
$ nano /root/.hermes/SOUL.md   # edita — vale a partir da PRÓXIMA sessão (/new)

03Personalidades: o overlay temporário

Enquanto o SOUL.md é a voz permanente, o /personality aplica uma camada temporária por cima, só na sessão:

hermes — chat
Você: /personality technical    → especialista técnico detalhado
Você: /personality concise      → respostas curtas e diretas
Você: /personality none         → volta ao normal (SOUL.md puro)

Predefinidas: helpful, concise, technical, creative, teacher, philosopher, hype — e as zoeiras pirate, kawaii, catgirl, shakespeare, surfer, noir, uwu. 😄

Na prática: a mesma pergunta, 4 personalidades

Pergunta: "O ping pro gateway tá em 300ms, o que eu faço?"

/personality concise
Hermes: 1) `/ping 8.8.8.8` pra isolar se é o gateway ou a saída.
2) Checa CPU do roteador e tráfego na interface. 3) Se CPU alta,
procura loop ou flood. Provável: saturação de banda ou CPU.
/personality technical
Hermes: Latência de 300ms num gateway local indica fila (bufferbloat),
saturação do link ou CPU alta no equipamento. Diagnóstico em camadas:
(1) `/tool torch` na interface WAN pra ver quem consome banda;
(2) `/system resource monitor` — CPU acima de 80% sugere fastpath
desativado ou regra de firewall pesada; (3) teste com pacote de
1400 bytes e DF pra descartar fragmentação; (4) se MikroTik v7,
verifique se o queue type da interface é cake/fq_codel...
/personality teacher
Hermes: Ótima pergunta pra aprender diagnóstico! Pensa assim: ping
alto é como fila no mercado — ou tem gente demais (banda saturada),
ou o caixa tá lento (CPU do roteador). Vamos descobrir qual é o seu
caso? Primeiro, me diz: esse ping é da sua máquina pro gateway ou
do gateway pra internet? Isso muda tudo, e te explico por quê...
/personality pirate
Hermes: Arrr, marujo! 300ms é tempestade no convés! ⚓ Iça o
`/tool torch` e descobre que grumete tá devorando tua banda.
Se a CPU do leme passar de 80%, tem clandestino no porão —
provavelmente um loop amaldiçoado. Ao ataque! 🏴‍☠️

Criando as suas (config.yaml)

Personalidades customizadas entram no ~/.hermes/config.yaml — três exemplos prontos pro dia a dia de provedor:

~/.hermes/config.yaml
agent:
  personalities:
    plantao: >
      Você está em modo plantão NOC. Respostas em 3 linhas no máximo,
      só o essencial: causa provável, comando de verificação, ação.
      Sem introdução, sem despedida. Português do Brasil.
    cliente: >
      Você está ajudando a explicar um problema técnico pra um CLIENTE
      leigo. Zero jargão: nada de PPPoE, OLT, CCQ. Use analogias do
      cotidiano, tom empático e paciente, e termine sempre com o
      próximo passo concreto ("nosso técnico vai...").
    professor-redes: >
      Você está treinando um técnico júnior N1. Antes de dar a solução,
      faça UMA pergunta que o leve a raciocinar. Depois explique o
      conceito por trás (camada OSI envolvida, por que acontece).
      Termine com um mini-desafio relacionado.

O uso: /personality plantao quando o bicho pega na madrugada, /personality cliente antes de redigir aquela mensagem pro assinante nervoso, /personality professor-redes pra treinar a equipe — e /personality none pra voltar ao normal.

04As skills de infra do Fórum Telecom

O Fórum Telecom mantém um repositório público com mais de 40 skills de operação de infraestrutura e telecom, prontas pro Hermes: github.com/clfigueiredo/hermes-infra-skills

CategoriaSkills
Redesmikrotik-ops, cisco-ops, cisco-catalyst-switch-ops, huawei-ne-ops, huawei-s67xx-switch-ops, datacom-dmos-ops, trendnet-switch-ops
OLTs / FTTHolt-huawei-ops, olt-fiberhome-ops, olt-zte-c300-ops, olt-vsol-ops, olt-intelbras-epon-ops, tr069-acs-ops
Firewallspfsense-ops, opnsense-ops, fortigate-fortios, sophos-firewall-ops, blockbit-firewall-ops
Virtualizaçãoproxmox-ops, vmware-ops, hyper-v-ops, docker-ops, eve-ng-ops
Monitoramentozabbix-ops (com templates SNMP MikroTik, onboarding de rede, Grafana em LXC), dashboard-noc-diagnostico-cliente
Wirelessubiquiti-airmax-ops, mimosa-wireless-ops
Operação ISPatendimento-isp-n1-n2, sgp-api-integration-ops, beesweb-isp-ops
Administraçãoactive-directory-ops, agenda-ops, financeiro-ops, web-development-design-ops

Várias vêm com references/ (cheat-sheets de VRP/RouterOS, templates seguros de configuração, troubleshooting de ONU/ONT) — o agente consulta esses materiais na hora de agir. A instalação baixa só a pasta de skills de infra (forumtelecom/), sem o resto do repositório:

root@ubuntu26: ~
$ mkdir -p ~/.hermes/skills
$ curl -L https://github.com/clfigueiredo/hermes-infra-skills/archive/main.tar.gz | tar -xz -C ~/.hermes/skills --strip-components=3 hermes-infra-skills-main/.hermes/skills/forumtelecom

E dentro do chat: /reload-skills. Cada skill vira comando também — /mikrotik-ops, /zabbix-ops...

05O prompt de auto-configuração 🪄

Agora a mágica: em vez de fazer tudo na mão, peça pro próprio Hermes se configurar. Cole o prompt abaixo no chat (terminal, web ou Telegram) — ele reescreve o próprio SOUL.md como técnico de infra, clona o repositório, instala as skills e confirma:

prompt — cole no chat do Hermes
Configure você mesmo como meu assistente técnico de TI especializado em
infraestrutura. Execute nesta ordem:

1. Reescreva o arquivo ~/.hermes/SOUL.md com esta identidade:
   - Você é o assistente técnico de um profissional de TI com foco em
     infraestrutura de redes e provedores de internet (ISP).
   - Especialidades: MikroTik, Cisco, Huawei, OLTs GPON/EPON, Zabbix,
     Grafana, Proxmox, Docker, VMware, firewalls (pfSense, OPNsense,
     FortiGate), Active Directory e Linux.
   - Estilo: direto e objetivo, sempre em português do Brasil, comandos
     prontos pra copiar, explica em uma linha o que cada comando faz.
   - Segurança: NUNCA execute comando destrutivo (reboot, reset, delete,
     format, remoção de config) sem me pedir confirmação explícita antes.
     Em equipamento de produção, prefira comandos de leitura
     (show/print/display) e proponha backup antes de qualquer mudança.
   - Incerteza: quando não tiver certeza, diga claramente e proponha
     como verificar, em vez de chutar.

2. Instale as skills de infraestrutura do Fórum Telecom (baixe SÓ a
   pasta forumtelecom, sem o resto do repositório):
   - mkdir -p ~/.hermes/skills
   - curl -L https://github.com/clfigueiredo/hermes-infra-skills/archive/main.tar.gz | tar -xz -C ~/.hermes/skills --strip-components=3 hermes-infra-skills-main/.hermes/skills/forumtelecom

3. Liste o conteúdo de ~/.hermes/skills/forumtelecom pra confirmar
   que as skills foram instaladas.

4. Ao final, me mostre o novo SOUL.md, me lembre de rodar
   /reload-skills e inicie uma sessão nova, e resuma em 5 linhas
   o que você agora sabe operar.

Depois que ele terminar, feche o ciclo você mesmo:

hermes — chat
Você: /reload-skills   → carrega as 40+ skills novas
Você: /new             → sessão nova, já com o SOUL.md de técnico de infra
Você: /skills          → confere a lista instalada

💡 Teste de fogo: na sessão nova, pergunte "como você me ajudaria num rompimento de fibra com 200 clientes off?" — a resposta deve vir seca, em pt-BR, citando OLT, Zabbix e plano de ação. Se vier genérica demais, revise o SOUL.md.

5.1 — Variação: SOUL.md em modo livre 🔓

O prompt acima cria um agente cauteloso — bom pra produção. Mas em lab, homelab ou VM de estudo, ficar confirmando cada ação cansa. Se quiser um agente com autonomia total, troque o item "Segurança" do prompt por este:

trecho alternativo — modo livre
   - Autonomia: você tem liberdade TOTAL pra operar este ambiente.
     Pode alterar configurações, criar e excluir arquivos, VMs,
     containers, regras de firewall e usuários, reiniciar serviços
     e equipamentos (reboot) sem pedir confirmação. Aja primeiro
     e me reporte depois, num resumo do que foi feito.
   - Ainda assim, faça backup/export da configuração antes de
     mudanças grandes — não pra me perguntar, mas pra poder
     desfazer se algo der errado.
   - Só me consulte antes de uma ação IRREVERSÍVEL sem backup
     possível (formatar disco, apagar o único backup, resetar
     equipamento de fábrica).

E tem um segundo cadeado: mesmo com o SOUL.md liberado, o portão de aprovação do próprio Hermes continua segurando comandos perigosos. Pra soltar de verdade:

hermes — chat
Você: /approvals off   → desliga a confirmação de comandos perigosos
— ou —
Você: /approvals smart → meio-termo: só pede nos realmente críticos
Você: /yolo            → alterna o modo YOLO (mesmo efeito do off)

⚠️ Modo livre + backend local + root = o agente pode fazer QUALQUER coisa na máquina, incluindo se destruir junto. Use essa combinação só em ambiente que você pode perder (lab, VM com snapshot). Em produção com clientes pendurados, fique no modo cauteloso — ou no máximo /approvals smart.

⚠️ O SOUL.md só vale a partir da próxima sessão (por isso o /new), e o Hermes tem um portão de aprovação pra escritas de skills/memória — se ele pedir aprovação durante a instalação, use /skills pending e /skills approve (ou confirme no chat).

Se o agente vai operar seus equipamentos via SSH, ele precisa das senhas — e colar senha no chat é péssima ideia (fica no histórico, no log, na sessão). O Cofre de Senhas Hermes resolve isso: um inventário local de equipamentos onde a senha fica criptografada e o Hermes usa a credencial sem nunca vê-la.

Repositório: github.com/clfigueiredo/cofre-senha-hermes

01O que é

RecursoComo funciona
Inventário webInterface pra cadastrar nome, IP, porta, usuário SSH, marca e senha de cada equipamento (SQLite local)
CriptografiaSenhas em AES-256-GCM, com a chave guardada separada do banco
Login protegidoHash scrypt, CSRF, rate limit e cabeçalhos de segurança
Conector SSHO Hermes executa comandos no equipamento e a senha é descriptografada só dentro do processo do conector — nunca aparece no chat nem na linha de comando
Validação de hostExige validar o fingerprint SSH do equipamento antes de conectar (anti man-in-the-middle)
Integração HermesInstala a skill equipment-registry-ops e adiciona uma política obrigatória no SOUL.md (com backup do seu)

02O AGENTS.md como contrato de instalação

Este repositório é um exemplo real do conceito da aba Personalidade & Skills: o AGENTS.md dele não descreve um projeto de código — é um contrato que o Hermes deve seguir ao instalar. Entre as regras:

Ou seja: quando você mandar o Hermes instalar, ele mesmo lê essas regras e se comporta.

03Mandando o Hermes instalar

Cole no chat (terminal, web ou Telegram):

prompt — cole no chat do Hermes
Clone o repositório https://github.com/clfigueiredo/cofre-senha-hermes
e instale este projeto seguindo o AGENTS.md, sem expor credenciais.
Mantenha a interface em localhost, salvo se eu autorizar
explicitamente acesso pela rede privada.

O agente vai revisar os arquivos e rodar python3 scripts/install.py, que é idempotente e faz tudo:

  1. Valida a presença do uv e instala as dependências travadas (uv.lock)
  2. Roda os testes automatizados antes de instalar
  3. Instala o comando equipment-registry
  4. Inicializa o armazenamento privado (~/.local/share/equipment-registry/, permissões 0700/0600)
  5. Instala a skill equipment-registry-ops no perfil Hermes ativo
  6. Adiciona a política obrigatória ao SOUL.md, preservando backup do seu

💡 Depois de instalar, abra uma sessão nova (/new) pra skill e a política carregarem. Pra deixar o cofre como serviço permanente, peça o install com --service (usa systemd --user).

04Primeiro acesso — criando a senha admin

root@ubuntu26: ~
$ equipment-registry serve --host 127.0.0.1 --port 8787

Abra http://127.0.0.1:8787/setup e crie a senha administrativa (ou equipment-registry init no terminal, interativo). Nunca envie essa senha pelo chat — nem pro Hermes. Rodar init de novo é recusado; só --force redefine de propósito.

Acessando de outra máquina? Como o cofre fica em localhost por segurança, use um túnel SSH: ssh -L 8787:127.0.0.1:8787 root@IP-DA-VM e abra http://127.0.0.1:8787 no seu navegador.

05O uso no dia a dia

Cadastrados os equipamentos, o fluxo seguro que o Hermes usa:

referência
equipment-registry list                    # inventário, SEM senhas
equipment-registry fingerprint 'SW-CORE-01'   # chave SSH que o equipamento apresenta
equipment-registry trust-host-key 'SW-CORE-01' --fingerprint 'SHA256:...'  # confia após validar
equipment-registry run 'SW-CORE-01' --command 'show version'  # executa via conector
equipment-registry backup --output ~/backups/cofre-$(date +%Y%m%d)  # backup consistente (WAL-safe)

Na prática, com a skill carregada, você só conversa: "Hermes, roda um show version no SW-CORE-01" — ele consulta o cofre, conecta via conector e te traz a saída. A senha nunca passou pelo chat.

⚠️ Limites que o próprio projeto documenta: a criptografia não protege contra quem obtiver banco + chave juntos — faça backup criptografado dos dois em conjunto e nunca os publique. O padrão é 127.0.0.1; expor pra LAN privada exige flags explícitas de aceite de risco, e internet jamais. Pra ambientes de alta criticidade, o README recomenda um gerenciador de segredos dedicado.

Um Hermes só dá conta de muita coisa — mas às vezes você quer vários agentes diferentes na mesma máquina: um bot de NOC no Telegram, um de atendimento no WhatsApp, um pessoal. É pra isso que existem os perfis: cada um é um Hermes completo e isolado.

01O que um perfil isola

Cada perfil tem seu próprio diretório de dados e nada vaza entre eles:

Isolado por perfilNa prática
Modelo e provedorUm perfil no gpt-5.6-sol pago, outro no solar-pro4:free
SOUL.md e memóriaPersonalidades e histórias completamente diferentes
SkillsO bot de NOC com as skills de infra; o de atendimento só com atendimento-isp-n1-n2
CredenciaisTokens de bot, OAuth e chaves separados (.env próprio)
Plataformas de mensagemCada perfil conecta nas suas — um no Telegram, outro no WhatsApp
Sessões, cron e kanbanHistóricos e agendamentos independentes

02Comandos de perfil

referência
hermes profile create NOME       # cria um perfil novo
hermes profile list              # lista todos (marca o ativo)
hermes profile use NOME          # define o perfil padrão
hermes profile rename VELHO NOVO # renomeia preservando os dados
hermes profile export NOME       # empacota num arquivo portátil (backup/migração)
hermes profile import ARQUIVO    # restaura um perfil exportado
hermes profile delete NOME       # apaga perfil e diretório

E o truque do dia a dia — a flag -p roda qualquer comando num perfil específico sem trocar o padrão:

root@ubuntu26: ~
$ hermes -p noc chat            # abre o chat do perfil "noc"
$ hermes -p atendimento model   # troca o modelo só do "atendimento"
$ hermes -p noc gateway status  # status do gateway do "noc"

(Também existe a variável HERMES_PROFILE=nome pra scripts. Prioridade: -p > variável > padrão do profile use.)

03O caso clássico: um bot por plataforma

Cada perfil roda o próprio gateway, como serviço separado (hermes-gateway-<perfil>.service). Então montar um agente no Telegram e outro no WhatsApp é assim:

root@ubuntu26: ~
# Bot 1: NOC no Telegram
$ hermes profile create noc
$ hermes -p noc setup                # modelo, ferramentas...
$ hermes -p noc gateway setup        # marca só o Telegram
$ hermes -p noc gateway install      # serviço 24/7 deste perfil

# Bot 2: atendimento no WhatsApp
$ hermes profile create atendimento
$ hermes -p atendimento setup
$ hermes -p atendimento gateway setup    # marca só o WhatsApp
$ hermes -p atendimento gateway install

Gerenciando a frota inteira:

referência
hermes gateway list           # todos os perfis e se o gateway de cada um roda (PID)
hermes gateway --all start    # sobe todos os gateways
hermes gateway --all restart  # reinicia todos (útil após hermes update)
hermes gateway --all stop     # para todos

04Exemplo de arquitetura pra um provedor

PerfilPlataformaModeloSkills / SOUL.md
nocTelegram (equipe)gpt-5.6-solSkills de infra do Fórum Telecom, SOUL.md técnico direto, cofre de senhas
atendimentoWhatsApp (clientes)gpt-5.6-terraatendimento-isp-n1-n2 + sgp-api, SOUL.md empático e sem jargão
admTelegram (gestor)solar-pro4:freeagenda-ops + financeiro-ops, relatórios diários por cron

Três agentes, três públicos, três personalidades — na mesma VM, sem um enxergar os dados do outro.

💡 Extras úteis: /profile no chat mostra qual perfil está ativo; hermes dashboard --isolated abre a interface web restrita ao perfil ativo (sem visibilidade cruzada); e hermes profile export gera um arquivo que você importa em outra máquina — ótimo pra migrar um bot pronto pro servidor do cliente.

⚠️ Cada gateway ativo é um processo consumindo memória, e cada perfil conversa com o provedor de LLM por conta própria — perfis demais no mesmo plano de assinatura esgotam os limites mais rápido. Comece com dois ou três.

O Telegram é o caminho mais fácil, mas no Brasil quem manda é o WhatsApp — e o Hermes conecta nele também. Tem dois jeitos de configurar: pedindo pro próprio Hermes (o mais fácil) ou manual pelo shell. E antes de tudo, uma escolha importante de modalidade.

01As 3 modalidades (e o risco que você precisa conhecer)

ModalidadeComo funcionaPra quem
Número dedicado via QR CodeUm chip/número só pro bot; o Hermes emula um WhatsApp Web (ponte Baileys, não oficial) — você escaneia um QR e prontoUso privado/lab — a recomendada pra começar
Seu WhatsApp pessoal (auto-chat)O agente responde só na conversa com você mesmo, no seu próprio númeroTeste rápido, usuário único
WhatsApp Business Cloud APIAPI oficial da Meta — exige conta Business verificada e webhook públicoAtendimento comercial, produção

⚠️ O aviso que o próprio Hermes dá: a conexão por QR Code usa integração não oficial, com risco de restrição/banimento da conta pela Meta. Por isso: use número dedicado (nunca o seu pessoal em modo bot), não dispare mensagens em massa, e só responda conversas que o usuário iniciou. Pra atendimento comercial de verdade, prefira a API oficial.

02Caminho 1 — pedindo pro próprio Hermes 🪄

O jeito mais elegante: como o agente opera a própria máquina, ele configura a própria integração. Manda no chat (aqui foi pelo Telegram):

Olha só, vamos subir o whatsapp aqui no perfil?21:04 ✓✓
❓ Podemos adicionar o WhatsApp ao perfil default, mantendo o Telegram. Qual modalidade você quer? A conexão por QR Code usa uma integração não oficial, com risco de restrição da conta; para atendimento comercial, prefira a API oficial.

1. Número dedicado via QR Code, para uso privado (Recommended)
2. Meu WhatsApp pessoal, somente conversa comigo mesmo
3. WhatsApp Business Cloud API oficial 21:05
121:05 ✓✓

Repara que ele mesmo: mantém o Telegram junto (as plataformas convivem no mesmo perfil), explica o risco, e oferece as 3 modalidades. Escolhida a opção, ele ajusta a configuração e te entrega o QR Code pra escanear — no celular do número dedicado: WhatsApp → Configurações → Aparelhos conectados → Conectar aparelho.

💡 Se o QR vier quebrado no chat, peça: "me manda o QR como imagem" — ou use o caminho manual abaixo, que mostra o QR no terminal.

03Caminho 2 — manual pelo shell

O assistente dedicado cuida de tudo (pergunta o modo e desenha o QR no terminal):

root@ubuntu26: ~
$ hermes whatsapp

Ou, por baixo dos panos, a configuração fica no ~/.hermes/.env:

~/.hermes/.env
WHATSAPP_ENABLED=true
WHATSAPP_MODE=bot                     # bot = número dedicado · self = auto-chat pessoal
WHATSAPP_ALLOWED_USERS=5599999999999  # números autorizados (DDI+DDD+número), ou * pra todos

E ajustes finos no ~/.hermes/config.yaml:

~/.hermes/config.yaml
whatsapp:
  unauthorized_dm_behavior: ignore   # ignora desconhecidos (em vez de oferecer pareamento)
  send_read_receipts: false          # não marca como lido

Depois de escanear o QR, reinicie o gateway pra plataforma subir junto do serviço:

root@ubuntu26: ~
$ hermes gateway restart
$ hermes gateway status   # confere Telegram + WhatsApp ativos

04Sessão, recursos e manutenção

ProblemaSolução
QR não renderiza no terminalTerminal com pelo menos 60 colunas de largura
Sessão não persisteVerifique permissão de escrita no diretório da sessão
Parou depois de update do WhatsApphermes update + reparear com hermes whatsapp

💡 Combinando com a aba Perfis: o cenário ideal de provedor é o WhatsApp no perfil de atendimento (skill atendimento-isp-n1-n2, SOUL.md sem jargão) e o Telegram no perfil de NOC — cada bot com seu número, seu público e seu gateway.

Toda conversa com o agente vive dentro de uma janela de contexto (a "memória de curto prazo" do modelo). Quando ela enche, o Hermes compacta sozinho: resume o começo da conversa pra abrir espaço — e nesse resumo, detalhes se perdem sem você ficar sabendo. Esta aba mostra como assumir o controle: desativar a compactação automática e ser avisado no Telegram ao chegar em 50%.

01Como a compactação funciona (e o que ela come)

Por padrão, ao atingir 50% do limite de contexto o Hermes resume as mensagens antigas, preservando as 20 mais recentes e as 3 iniciais. É útil pra sessões infinitas — mas numa sessão de trabalho técnico (aquele troubleshooting longo com outputs de equipamento), o resumo pode engolir exatamente o detalhe que você ia precisar.

Pra acompanhar o consumo a qualquer momento, no chat:

hermes — chat
Você: /context    → gráfico do uso da janela (com /context all: custo por skill)
Você: /status     → resumo da sessão, incluindo tokens
Você: /compress   → compacta AGORA, manualmente, na hora que VOCÊ escolher

E o próprio Hermes já avisa nativamente quando a pressão sobe: barra ciano a partir de ~60% do limiar, amarela em ~85%.

02Desativando a compactação automática

root@ubuntu26: ~
$ hermes config set compression.enabled false
$ hermes gateway restart

Ajustes mais finos (no config.yaml, se preferir calibrar em vez de desligar):

~/.hermes/config.yaml
compression:
  enabled: true
  threshold: 0.50        # compacta ao atingir 50% do limite (suba pra 0.80 se quiser)
  protect_last_n: 20     # mensagens recentes que nunca são resumidas
  protect_first_n: 3     # mensagens iniciais fixadas

⚠️ Com a compactação desligada, a sessão que encher o contexto trava ou começa a errar — a responsabilidade de dar /compress ou /new na hora certa passa a ser sua. É exatamente pra isso que serve o vigia abaixo.

03O vigia de 50% — construído pelo próprio Hermes 🪄

Aqui o pulo do gato do curso: em vez de configurar na mão, pedimos pro agente construir a própria automação. O pedido, direto no Telegram:

criar um aviso para informar a sessão longa 50% e também não compactar sem avisar23:40 ✓✓
Respondendo a: Show, só me avisa quando a sessão chegar em 50% Pronto, vigia ativo. Configuração final:

Monitor de sessão longa
– Cron: roda a cada 10 min, sem LLM (custo zero de tokens)
– Script: /root/.hermes/scripts/context_watch.py — lê o state.db em modo somente-leitura, estima os tokens da sessão ativa e compara com a janela do modelo
– Alertas: dispara no chat ao cruzar 50%, depois 75% e 90% — uma única vez por nível por sessão (ao abrir /new os níveis rearmam)
– Silêncio = tudo bem: sem nada a reportar, nenhuma mensagem é enviada 23:41
⚠️ Sessão longa: contexto estimado em ~N tokens (X% da janela). Compactação automática está desativada. Opções: /compress, /new ou continuar.
↑ a mensagem que chega ao cruzar 50% (testada com disparo forçado) 23:42

Repare na arquitetura que ele escolheu sozinho — e que é a certa: cron sem LLM (script Python puro, custo zero), leitura somente-leitura do banco de sessões, alerta uma vez por nível (sem spam) e silêncio quando está tudo bem.

O prompt pra reproduzir no seu Hermes:

prompt — cole no chat do Hermes
Desative a compactação automática de contexto e crie um monitor de
sessão longa: um cron a cada 10 minutos, SEM usar LLM (script Python
puro, custo zero), que leia o banco de sessões em modo somente-leitura,
estime os tokens da sessão ativa e me avise AQUI no chat ao cruzar
50%, 75% e 90% da janela de contexto — uma única vez por nível por
sessão, rearmando quando eu abrir /new. Se não houver nada a reportar,
não envie nada. Na mensagem de alerta, lembre as opções: /compress,
/new ou continuar. Ao final, teste com um disparo forçado e me mostre
a mensagem.

💡 Limitações honestas (que o próprio agente declarou): a estimativa é por caracteres÷4, com margem de ~±15% — suficiente pra um aviso de 50%; e com granularidade de 10 min, o alerta pode chegar alguns minutos depois de cruzar o limiar. Pra precisão exata, o /context continua sendo a fonte da verdade.

💡 Recebeu o aviso? Suas opções: /compress here 10 (resume o passado preservando as 10 trocas recentes na íntegra), /save md + /new (arquiva a conversa e começa limpa), ou seguir mesmo assim até o próximo alerta.

Dentro do chat (terminal ou Telegram), digite / pra ver os comandos disponíveis — ou Ctrl+P pra abrir a paleta com busca. Abaixo, todos os comandos traduzidos, nas categorias da documentação oficial.

💡 Atalho de prefixo: não precisa digitar o comando inteiro — /h vira /help, /mod vira /model. E qualquer skill instalada também vira comando: /gif-search, /github...

Nenhum comando encontrado com esse filtro.

📌Sessão

ComandoO que faz
/new [nome]alias: /resetInicia uma sessão nova (ID e histórico zerados), com título opcional. Acrescente now ou -y pra pular a confirmação.
/clearLimpa a tela e começa uma sessão do zero.
/historyMostra o histórico da conversa atual.
/save <json|md|html> [arquivo]Exporta a conversa atual pra arquivo (JSON, Markdown ou HTML).
/promptalias: /composeEscreve o próximo prompt no seu editor de texto ($EDITOR), em Markdown, e envia ao salvar. Ótimo pra prompts longos.
/retryReenvia a última mensagem (tenta de novo a resposta).
/undo [N]Desfaz as últimas N trocas de mensagem (padrão 1) e deixa pronto pra reescrever.
/title [nome]Dá um título à sessão atual (facilita achar depois).
/compress [here [N] | focus tema]Resume a conversa pra liberar espaço na janela de contexto; here N preserva as N trocas mais recentes na íntegra.
/rollback [número]Lista ou restaura checkpoints do sistema de arquivos — desfaz alterações que o agente fez em arquivos.
/diff [staged|all|session]Mostra as mudanças git feitas na sessão (--stat pro resumo).
/snapshotalias: /snapCria, restaura ou limpa snapshots do estado; sem argumento, lista todos.
/stopInterrompe o turno atual e mata os processos em segundo plano.
/queue <prompt>alias: /qEnfileira um prompt pro próximo turno, sem interromper o que está rodando.
/steer <texto>Injeta uma orientação no meio do turno em andamento (entra após a próxima ferramenta) — "corrige o rumo" sem parar.
/goal <texto>Define uma meta permanente que o agente persegue entre turnos; subcomandos status, pause, resume, clear.
/subgoal <texto>Adiciona um critério à meta ativa; remove N e clear gerenciam.
/heartbeat every <intervalo> <prompt>alias: /hbPrompt recorrente automático (ex.: a cada 30m, "verifica os alertas do Zabbix").
/refine [foco]Roda agora a revisão de auto-aprimoramento de memórias e skills do agente.
/review [instruções]Dispara um subagente revisor independente pra avaliar o trabalho recente.
/moa <prompt>Roda um prompt pelo preset Mixture of Agents (vários modelos combinados).
/resume [nome]Retoma uma sessão anterior pelo nome.
/sessionsalias no TUI: /switchNavegador interativo de sessões anteriores pra retomar qualquer uma.
/branch [nome]alias: /forkRamifica a sessão atual pra explorar um caminho alternativo sem perder o original.
/bg <prompt>Roda um prompt numa sessão separada em segundo plano.
/btw <pergunta>Pergunta paralela rápida sobre a conversa, sem interromper o trabalho atual.
/statusInfo da sessão: modelo, provedor, perfil, ID, diretório, tokens, estado do agente.
/context [all]alias: /ctxGráfico do uso da janela de contexto; all detalha o custo por skill/toolset.
/agentsalias: /tasksMostra agentes ativos e tarefas rodando.
/worktree [new [nome]|list]Cria ou inspeciona worktrees git isoladas (o agente trabalha numa cópia do repo).
/handoff <plataforma>Transfere a sessão atual pra uma plataforma de mensagens — começa no terminal, continua no Telegram.
/journeyaliases: /learning, /memory-graphAbre a linha do tempo de aprendizado do agente (o que ele aprendeu com o uso).
/redrawForça o redesenho da interface (recupera de bagunça visual no terminal).
/egress [status]Status do proxy de saída de rede do Docker.

⚙️Configuração

ComandoO que faz
/configMostra a configuração atual.
/model [modelo]Mostra ou troca o modelo. Flags: --global (permanente), --session (só esta sessão), --once (só a próxima resposta), --provider.
/personality [nome]Aplica uma personalidade (pirate, kawaii...); none volta ao normal.
/reasoning [nível]Esforço de raciocínio: noneminimallowmediumhighxhighmaxultra; show/hide exibe ou oculta o raciocínio.
/verboseAlterna o detalhe do progresso das ferramentas: off → new → all → verbose.
/focus [on|off]Modo foco: reduz a saída visual pra ficar só o essencial.
/fast [normal|fast]Modo rápido (processamento prioritário do provedor, quando disponível).
/skinMostra ou troca o tema visual do CLI.
/voice [on|off|tts]Modo voz: falar com o agente e/ou ouvir as respostas em áudio.
/wake [on|off]Ativa a escuta da palavra de ativação "Hey Hermes".
/yoloModo YOLO: pula as confirmações de comandos perigosos. Use com muito cuidado.
/approvals [manual|smart|off]Política de aprovação de comandos perigosos (manual, inteligente ou desligada).
/busy [queue|steer|interrupt]O que fazer se você mandar mensagem enquanto o agente trabalha: enfileirar, orientar ou interromper.
/statusbaralias: /sbLiga/desliga a barra de status (contexto/modelo) no rodapé.
/battery [on|off]Indicador de "bateria" colorido do contexto restante.
/timestamps [on|off]Mostra horário [HH:MM] nas mensagens e no /history.
/indicator [kaomoji|emoji|...]Estilo do indicador de "pensando" do TUI.
/footer [on|off]Rodapé com metadados de runtime nas respostas do gateway.
/export [perfil]Empacota o perfil num .tar.gz compartilhável (backup/migração).
/import <arquivo.tar.gz>Instala um arquivo de perfil como novo perfil.
/codex-runtime [auto|on|off]Liga/desliga o runtime do Codex app-server.

🧰Ferramentas & Skills

ComandoO que faz
/tools [list|enable|disable]Lista, liga ou desliga ferramentas específicas.
/toolsetsLista os conjuntos de ferramentas disponíveis.
/skills [browse|pending|approve...]Busca, instala e gerencia skills; revisa e aprova as que o agente quer gravar.
/learn <fonte>Ensina o agente: destila uma skill reutilizável de um diretório, URL, fluxo de trabalho ou anotações.
/memory [pending|approve|reject]Revisa e aprova/rejeita as memórias que o agente quer gravar.
/bundlesLista os pacotes (bundles) de skills configurados.
/cronGerencia tarefas agendadas: criar, editar, pausar, retomar, executar, remover.
/suggestionsalias: /suggestRevisa automações que o próprio agente sugeriu criar.
/blueprint [nome]alias: /bpCria automações a partir de modelos prontos (templates de cron).
/curator [status|run|pin|archive]Manutenção automática das skills em segundo plano.
/plan [tarefa]Escreve um plano de implementação em Markdown (sem executar nada).
/init [notas]Gera ou atualiza o AGENTS.md a partir de um scan do repositório.
/browser [connect|status]Gerencia a conexão com o Chromium local (automação de navegador).
/kanban <ação>Quadro kanban de colaboração entre perfis/agentes (list, show, create...).
/reload-mcpRecarrega os servidores MCP do config.yaml.
/reload-skillsRe-escaneia ~/.hermes/skills/ em busca de skills novas/removidas.
/reloadRecarrega as variáveis do .env na sessão atual.
/pluginsLista os plugins instalados e o status de cada um.
/pet [list|slug]Adota ou troca o mascote (petdex) do CLI. 🐾
/hatch <descrição>Gera um mascote novinho a partir de uma descrição em texto.

ℹ️Informações

ComandoO que faz
/help [filtro]Lista todos os comandos por categoria; /help voz filtra por texto.
/paletteatalho: Ctrl+PPaleta de comandos com busca fuzzy — digita, filtra, Enter insere.
/usageUso de tokens, custos por categoria, duração da sessão e limites da conta.
/insightsAnálises de uso dos últimos 30 dias.
/topupMostra o saldo Nous e abre o gerenciamento de créditos no portal.
/subscriptionalias: /upgradeVê o plano Nous atual e troca pelo navegador.
/versionVersão do Hermes, build e info do ambiente.
/whoamiSeu nível de acesso aos comandos (admin/usuário).
/profilePerfil ativo e seu diretório home.
/platformsalias: /gatewayStatus do gateway e das plataformas de mensagem conectadas.
/updateAtualiza o Hermes pra versão mais recente.
/pasteAnexa a imagem que está na área de transferência.
/image <caminho>Anexa um arquivo de imagem local ao próximo prompt.
/copy [N]Copia a última resposta (ou a N-ésima) pra área de transferência.
/debugEnvia um relatório de debug (sistema + logs) e devolve links compartilháveis.
/quitalias: /exitSai do CLI. Com --delete, apaga permanentemente o histórico da sessão.

💬Exclusivos do modo bot (Telegram etc.)

No Telegram/Discord/WhatsApp, quase todos os comandos acima também funcionam — e estes são só de lá:

ComandoO que faz
/sethomealias: /set-homeDefine o chat atual como home channel — destino dos resultados de cron e mensagens entre plataformas.
/topic [off|help]Só no Telegram: modo multi-sessão por tópicos no chat.
/approve [session|always]Aprova e executa um comando perigoso pendente.
/denyRejeita o comando perigoso pendente.
/platform <list|pause|resume>Opera as plataformas do gateway: pausar/retomar adaptadores.
/commands [página]Navega todos os comandos e skills, paginado (bom pro celular).
/restartReinicia o gateway graciosamente (espera as execuções ativas terminarem).
/startComando padrão do protocolo do Telegram; primeiro contato com o bot.

⚠️ Comandos destrutivos pedem confirmação: /new, /reset, /clear, /undo e /quit --delete abrem um modal (Aprovar / Sempre aprovar / Cancelar). Pra pular: acrescente now ou -y — ex.: /reset now.