Mirna

HaaS — Deploy Guide

Mission Control / Deploy Guide · HaaS v3.0
HaaS v3.0 · Guia Oficial
Mirna HaaS
Hermes as a Service — Plataforma de agentes AI da CondoConta

O que é Mirna HaaS?

Mirna HaaS (Hermes as a Service) é a plataforma de agentes AI da CondoConta, construída sobre o Hermes Agent — um framework open-source de orquestração de agentes AI.

Cada área da empresa recebe um agente AI dedicado com persona própria, acesso ao projeto Jira da área, skills especializadas e integração com Slack e/ou Telegram.

A Mirna CC é o hub nativo (roda direto no VPS da CondoConta sem Docker) e coordena todos os spokes. Ela é a gestora central — recebe pedidos de deploy, decide a porta, configura o ambiente e executa o haas_deploy.py.

Topologia Hub-and-Spoke

flowchart TD Mirna["🧠 Mirna — Hub · Gestora Central"] Eva["👩‍💼 Eva — Collection"]:::active OB2["🏦 OB2 — Tesouraria"]:::standby FINC["💰 FINC — Finance"]:::standby REV["📊 REV — Sales"]:::standby Mais["··· +6 Spokes"]:::future Mirna --> Eva Mirna --> OB2 Mirna --> FINC Mirna --> REV Mirna -.-> Mais style Mirna fill:#7c3aed,stroke:#6d28d9,color:#ffffff,font-weight:bold classDef active fill:#f0fdf4,stroke:#48bb78,color:#1e293b classDef standby fill:#fff7ed,stroke:#f97316,color:#1e293b classDef future fill:#f8fafc,stroke:#cbd5e1,color:#64748b,stroke-dasharray:5 5
Native (sem Docker) Docker Container Em standby

Hub (Mirna): Processo nativo no VPS, sem Docker. É a gestora central que coordena todos os spokes e recebe pedidos de deploy.

Spokes: Containers Docker isolados. Cada um com seu projeto Jira, persona, skills e canal de comunicação.

Pré-requisitos

Para pedir um novo agente, você só precisa ter claro:

  • Qual área da CondoConta o agente vai atender
  • Qual o projeto Jira da área
  • Quem é a usuária (pessoa responsável)
  • Qual a persona do agente (como ele deve agir)
  • Se precisa de Slack e/ou Telegram
Não se preocupe com infra: Porta, Docker, .env, deploy — a Mirna CC resolve tudo. Você só define o YAML de configuração e chama ela.
Criar Novo Agente
Defina o YAML e chame a Mirna CC — ela faz o resto

1 Criar o YAML de configuração

Monte um YAML com as informações do agente. Não inclua porta — o haas_deploy.py da Mirna CC decide automaticamente a próxima porta disponível.

# config.yaml — Configuração do Agente HaaS
name: eva
team: collection
area: Collection
jira_project: CAIX
persona: >-
  Cobrança empática. Foco na recuperação
  de inadimplência com tom profissional e humano.
usuario: Solange
canais:
  - slack
  - telegram
skills:
  - collection-queries
  - eva-cartilha-collection
profiles:
  - EVA
model: deepseek/deepseek-v4-pro
crons:
  - schedule: "0 8 * * *"
    prompt: Gere o report diário de acordos e envie no Slack #collection
    deliver: slack:C028TDGD77V
    model: google/gemini-2.5-flash
    enabled: true
  - schedule: "*/30 8-21 * * 1-5"
    prompt: Sincronize cache de acordos e massivos
    deliver: local
    no_agent: true
    enabled: true

Campos do YAML:

  • name — nome do agente (lowercase, sem espaços) ✓ obrigatório
  • team — time/área slugificado (ex: collection, finance) ✓ obrigatório
  • area — nome da área por extenso (ex: "Collection", "Customer Success") ✓ obrigatório
  • jira_project — key do projeto Jira (ex: CAIX, OB2, FINC) ✓ obrigatório
  • persona — descrição da personalidade e tom do agente ✓ obrigatório
  • usuario — nome da pessoa responsável pelo agente ✓ obrigatório
  • canais — canais de comunicação: "slack", "telegram" ou ambos opcional
  • skills — lista de skills para o agente opcional
  • profiles — lista de sub-agentes/profiles opcional
  • crons — tarefas agendadas opcional
    • schedule — expressão cron (ex: "0 8 * * *")
    • prompt — instrução que o agente executa
    • deliver — destino: "slack:CHANNEL_ID", "telegram:CHAT_ID" ou "local"
    • model — modelo LLM (default: mesmo do agente). Para tarefas mecânicas, use "google/gemma-4-26b-a4b-it"
    • no_agenttrue para tarefas mecânicas (zero tokens, só roda script)
    • enabledtrue (default) ou false
Sem porta no YAML! O haas_deploy.py aloca automaticamente a próxima porta disponível (8643–8652). A Mirna CC (hub nativo) roda na 8642.

2 Chamar a Mirna CC

Envie o YAML para a Mirna CC com a instrução de deploy. Exemplo de mensagem:

Mirna CC, faz o deploy de um novo agente com essa config:

name: eva
team: collection
area: Collection
jira_project: CAIX
persona: >-
  Cobrança empática. Foco na recuperação.
usuario: Solange
canais:
  - slack
  - telegram
skills:
  - collection-queries
  - eva-cartilha-collection
profiles:
  - EVA
crons:
  - schedule: "0 8 * * *"
    prompt: Report diário de acordos → Slack #collection
    deliver: slack:C028TDGD77V
    enabled: true

Fluxo automático que a Mirna CC executa:

flowchart LR A["📋 YAML do Usuário"] --> B["🔍 Valida Config"] B --> C["🔢 Aloca Porta"] C --> D["🐳 Gera Compose"] D --> E["📝 Cria .env"] E --> F["📦 Build + Up"] F --> G["❤️ Health Check"] G --> H["✅ Agente Online!"]
  • ✅ Aloca a próxima porta disponível
  • ✅ Gera o docker-compose.yml com project name correto
  • ✅ Cria o .env com todas as variáveis (Jira, Slack, Telegram)
  • ✅ Cria os volumes externos nomeados
  • ✅ Builda a imagem e sobe o container
  • ✅ Verifica health check
  • ✅ Atualiza o Architecture Diagram no portal
  • ✅ Configura os bots Slack/Telegram se solicitado

3 Verificar

Após o deploy, confirme com a Mirna CC que o agente está saudável:

Mirna CC, verifica se o agente Eva está online

Se precisar checar manualmente:

# Health check (porta alocada pela Mirna CC)
curl http://localhost:{porta}/health

# Logs
docker logs {name}-{team}-1

# Status geral
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

Exemplo completo — Agente de Finance

name: finc
team: finance
area: Finance
jira_project: FINC
persona: >-
  Analista financeiro preciso e organizado.
  Foco em conciliação, relatórios e compliance.
usuario: Ricardo
canais:
  - slack
skills:
  - databricks-query
  - hubspot-query
profiles:
  - FINC
crons:
  - schedule: "0 9 * * 1-5"
    prompt: Conciliação diária — alerte discrepâncias no Slack #finance
    deliver: slack:C_FINANCE_ID
    enabled: true
Convenção: container_name = haas-{name} (lowercase). Ex: haas-eva, haas-finc. O haas_deploy.py usa o nome do agente como identificador único nos volumes e containers.
Bot Slack
Como conectar seu agente ao Slack da CondoConta

1 Criar app no Slack

Acesse api.slack.com/apps e clique "Create New App""From scratch".

  • App Name: Nome do seu agente (ex: "Eva — Collection")
  • Workspace: CondoConta

2 Configurar OAuth & Permissions

Em OAuth & Permissions, adicione os scopes:

  • chat:write — enviar mensagens
  • channels:read — ler canais
  • groups:read — ler canais privados
  • im:write — enviar DMs
  • users:read — ler info de usuários
  • files:write — upload de arquivos (opcional)

Clique "Install to Workspace" e copie o Bot User OAuth Token (começa com xoxb-).

3 Ativar Socket Mode

Em Socket Mode, ative e gere um App-Level Token (começa com xapp-). Scopes necessários: connections:write

Socket Mode permite que o bot se conecte sem IP público ou HTTPS — ideal para VPS via Tailscale.

4 Configurar Event Subscriptions

Em Event Subscriptions, ative e inscreva nos eventos:

  • message.channels — mensagens em canais públicos
  • message.groups — mensagens em canais privados
  • message.im — mensagens em DMs

Com Socket Mode ativo, não precisa de Request URL.

5 Adicionar o bot aos canais

Para que o agente receba mensagens, ele precisa estar nos canais. Em cada canal desejado:

  • Digite @Eva (ou o nome do seu bot) e envie
  • O Slack vai sugerir "Invite to Channel" — confirme
Importante: Sem adicionar o bot ao canal, ele não recebe mensagens — mesmo com tudo configurado corretamente.

6 Pedir ao agente para configurar

Envie os tokens para o seu agente:

Eva, configura o Slack com esses tokens:

Bot token: xoxb-xxxx
App token: xapp-xxxx
Canais: #collection, #mirna-sales-agent

O agente configura automaticamente:

  • ✅ Adiciona os tokens ao .env
  • ✅ Ativa o gateway Slack no config
  • ✅ Redeploya o container
Alternativa: Se o agente ainda não está online, envie os tokens para a Mirna CC que ela repassa na configuração.
Bot Telegram
Como conectar seu agente ao Telegram

1 Criar bot via BotFather

No Telegram, converse com @BotFather:

  • Envie /newbot
  • Dê um nome (ex: "Eva — Collection CondoConta")
  • Dê um username (ex: eva_condoconta_bot)
  • Copie o API Token retornado (formato: 123456:ABC-DEF...)

2 Personalizar o bot

Envie comandos ao BotFather para refinar:

  • /setdescription — descrição do agente
  • /setabouttext — texto "Sobre"
  • /setuserpic — avatar do agente
  • /setcommands — comandos disponíveis (ex: status — Verificar status do agente)
Dica: Use o mesmo avatar do agente no portal como foto do bot. Isso reforça a identidade visual.

3 Pedir ao agente para configurar

Envie o token para o seu agente:

Eva, configura o Telegram com esse token:

Token: 123456:ABC-DEF1234...

O agente configura automaticamente:

  • ✅ Adiciona o token ao .env
  • ✅ Ativa o gateway Telegram no config
  • ✅ Redeploya o container
Alternativa: Se o agente ainda não está online, envie o token para a Mirna CC.

4 Testar

Abra o bot no Telegram e envie uma mensagem. O agente deve responder com sua persona configurada.

Modo polling: O Hermes usa long polling por padrão no Telegram (sem necessidade de webhook ou IP público). Funciona perfeitamente com Tailscale.
Integração Jira
Credencial compartilhada e projeto por área

Como funciona

Todos os agentes Mirna HaaS compartilham a mesma credencial Jira (email + API token do Atlassian). Cada agente trabalha no projeto da sua área:

Área          Jira Project
─────────────────────────
Collection    CAIX
Tesouraria    OB2
Finance       FINC
Sales/Comerc  RAIX
CX            CX
CS            CS
Atendimento   ATD
People        PPL
Produto       PROD
AI Expert     COM
        
Serviço compartilhado: A credencial Jira é injetada automaticamente pela Mirna CC no deploy. Você só precisa informar o jira_project no YAML.

Adicionar Jira ao seu agente

Se o agente já está rodando e precisa de acesso Jira (ou trocar de projeto), peça direto a ele:

Eva, configura o Jira com o projeto CAIX

O agente configura automaticamente:

  • ✅ Adiciona a credencial Jira ao .env
  • ✅ Configura o projeto no profile
  • ✅ Redeploya o container
Alternativa: Se o agente ainda não está online, peça para a Mirna CC.

Trocar projeto Jira

Se o agente mudou de área ou precisa acessar outro projeto:

Eva, troca o projeto Jira de CAIX para OB2
Skills & Profiles
Como adicionar skills e sub-agentes ao agente

Skills

Skills são arquivos SKILL.md que ensinam o agente a executar tarefas específicas. Peça ao seu agente para adicionar:

Eva, adiciona essas skills:

- collection-queries
- eva-cartilha-collection
- databricks-query

O agente instala as skills no profile e redespliega se necessário.

Alternativa: Se o agente não está online, peça para a Mirna CC.

Profiles (Sub-agentes)

Profiles são sub-personalidades do agente principal. A Mirna CC, por exemplo, tem profiles como:

  • ada — Data Science
  • aixon — AI Expert Reports
  • lex — Product/PRD
  • cp — Content Producer

Para criar um novo profile para seu agente:

Eva, cria um profile "FINC".

Persona: Analista financeiro preciso. Foco em conciliação e compliance.
Skills: databricks-query, hubspot-query

O agente cria o diretório do profile, adiciona o SOUL.md com a persona, linka as skills e redespliega.

Alternativa: Se o agente não está online, peça para a Mirna CC.

Listar skills disponíveis

Eva, lista as skills disponíveis

O agente mostra todas as skills instaladas e as que podem ser adicionadas.