Seção 17: Assistente sempre ligado (Hermes Agent)¶
O assistente é um agente que você chama pelo Telegram, de qualquer lugar: "como está o servidor?", "anota isso em estudos", "o que eu escrevi sobre o backup?", "o que eu pedi ontem sobre o backup?". Ele roda o Hermes Agent (Nous Research) na ai-desktop-vm, em modo gateway, e conversa por um bot próprio do Telegram.
flowchart LR
voce[Você no Telegram] -- bot do assistente --> h[Hermes<br/>stack assistente]
h -- chave assistente --> llm[LiteLLM]
h -- "rota autonomos :4200" --> hub[agentgateway]
hub --> ops[ops_controle]
ops -- ações --> apr[aprovador<br/>botões no bot de avisos]
h -- busca --> qmd[qmd]
h -- escrita --> esc[notes_escrita<br/>Trabalho e Estudos]
| Peça | Onde | O que faz |
|---|---|---|
assistente |
stack assistente, ai-desktop-vm (imagem nousresearch/hermes-agent:v0.22.5) |
Conversa pelo Telegram e guarda memória |
| Bot do assistente | hermes_telegram_bot_token |
Separado do bot de avisos, que o aprovador lê (seção 16) |
| Modelo | LiteLLM, assistente_modelo (padrão principal), chave litellm_client_keys.assistente |
Orçamento em litellm_key_budgets.assistente; traces no Langfuse |
O que ele pode e o que não pode¶
| Pode | Como |
|---|---|
| Ler o servidor (métricas, logs, alertas, containers, stacks) | MCP servidor, pela rota autonomos do hub (chave agents_autonomos_keys.assistente) |
| Agir no servidor (reiniciar, redeploy, Ansible) | Pelo mesmo MCP, cada ação esperando a sua aprovação no bot de avisos ou em aprovacoes. (seção 16) |
| Buscar em todas as notas e documentos | MCP notas (http://qmd:8181/mcp) |
| Escrever notas em Trabalho e Estudos | MCP escrita (http://notes_escrita:8000/mcp); o vault Pessoal nem está montado lá (seção 12) |
| Lembrar de você e do que conversaram | Memória do Hermes (memory) e a busca nas conversas |
Não pode: rodar comandos (terminal), executar código (code_execution), mexer em arquivos do container (file), navegar ou buscar na internet (browser, web, search), acrescentar MCPs (connections), instalar skills (skills), delegar a subagentes (delegation), agendar tarefas e lembretes (cronjob). Esses grupos estão em agent.disabled_toolsets no config.yaml. Um assistente aberto a mensagens e que lê conteúdo de notas e logs é alvo de injeção de prompt; sem terminal, código nem conexões novas, o pior caso fica restrito às notas de Trabalho e Estudos (com snapshots a cada 15 minutos) e a ações que você precisa aprovar.
Por que sem lembretes
As tarefas agendadas do Hermes (cronjob) buscam qualquer URL para "monitorar" e entregam o resultado em qualquer chat que o modelo escolher, fora das listas acima. Uma nota ou um log com instruções escondidas poderia agendar uma tarefa que manda dados para fora, sem você ver. Para lembretes, use o calendário do celular ou um fluxo do n8n. A API compatível com OpenAI do Hermes também fica desligada (platforms.api_server.enabled: false): a imagem gera uma chave sozinha e, sem isso, abriria uma porta.
Só você conversa com ele
O Hermes só responde a quem está em TELEGRAM_ALLOWED_USERS (assistente_telegram_usuarios, padrão: o seu telegram_chat_id). Mensagens de outras pessoas são ignoradas. Se o token do bot vazar, revogue no BotFather (/revoke) e troque no vault.
Dados que saem de casa
O que você conversa, as notas que ele lê e os dados do servidor que ele consulta vão ao provedor do apelido escolhido (no principal, a Anthropic; com fallback na OpenAI).
Arquivos¶
docker/stacks/assistente/docker-compose.yml— o serviçoassistente:gateway run, sem porta, sem painel (HERMES_DASHBOARDdesligado), sem API (platforms.api_server.enabled: falsenoconfig.yaml), sem o socket do Docker,no-new-privileges, usuário do dockeruser (HERMES_UID/HERMES_GID), redesai_networkenotes_mcp.ansible/playbooks/setup-assistente-volumes.yml— cria/opt/local-data/hermes(disco local: SQLite), gera oconfig.yamle o.env(0600) e oassistente.envda stack.ansible/templates/assistente/config.yaml.j2— modelo pelo LiteLLM, os três MCPs, a API desligada e os grupos de ferramentas desligados. Sem segredos:${VAR}vem do.env.ansible/templates/assistente/env.j2— token do bot, usuários permitidos, chat principal (TELEGRAM_HOME_CHANNEL), chave do LiteLLM e chave do hub.
O config.yaml é regravado a cada execução do playbook: o que mudar por comando no Hermes (/model, por exemplo) volta ao que esta página diz. Para mudar de vez, mude aqui.
Primeira configuração¶
- Bot: no Telegram, fale com o @BotFather,
/newbot, e guarde o token emhermes_telegram_bot_tokenno vault. - Vault (seção 1):
litellm_client_keys.assistente(echo sk-$(openssl rand -hex 24)) eagents_autonomos_keys.assistente(ag-+openssl rand -hex 24). - Chaves:
ansible-playbook -i inventories/home/hosts.ini playbooks/setup-ai-keys.yml --ask-vault-pass(LiteLLM) esetup-agents-volumes.yml+docker restart agentgateway(hub), se ainda não fez na seção 16. - Assistente:
ansible-playbook -i inventories/home/hosts.ini playbooks/setup-assistente-volumes.yml --ask-vault-pass. No Portainer, ambienteai-desktop-vm: Add stackassistentecomdocker/stacks/assistente/docker-compose.ymle oassistente.envem Advanced mode. - No Telegram, abra o bot novo e mande
/start.
Teste de ponta a ponta¶
docker logs assistentemostra o gateway conectado ao Telegram e os três MCPs (servidor,notas,escrita) com as ferramentas carregadas.- "Como está o servidor?" → ele responde com dados reais (alertas, containers).
- "Anota em estudos/inbox.md: testar o assistente" → a nota aparece no Obsidian depois da sincronização. "Anota em pessoal/…" → ele não consegue (o vault Pessoal não existe para o
notes_escrita). - "Reinicie o container homepage" → chega o pedido com botões no bot de avisos; aprove, responda "aprovei, pode seguir", e ele confirma.
- "Rode
ls /" → ele diz que não tem como executar comandos. - De outra conta do Telegram, mande uma mensagem ao bot: nenhuma resposta.
- "Me lembre em 5 minutos de beber água" → ele diz que não agenda lembretes.
Falhas¶
| Falha | Comportamento | O que fazer |
|---|---|---|
| Bot não responde | Token errado, ou outro programa lendo o mesmo bot | docker logs assistente; um bot por programa |
| Ferramentas do servidor somem | Hub fora ou chave errada (401 na rota autonomos) |
docker logs agentgateway; confira agents_autonomos_keys.assistente |
| Notas não aparecem | qmd ou notes_escrita fora, ou a stack notes subiu depois |
Portainer → stack notes; depois Restart do assistente |
| Orçamento estourado | Erro do LiteLLM na conversa | Tela do LiteLLM (llm.); ajuste litellm_key_budgets.assistente e rode o setup-ai-keys.yml |