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.
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
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.
Para pedir um novo agente, você só precisa ter claro:
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:
haas_deploy.py aloca automaticamente a próxima porta disponível (8643–8652). A Mirna CC (hub nativo) roda na 8642.
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!"]
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}}"
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
haas_deploy.py usa o nome do agente como identificador único nos volumes e containers.
Converse com seu agente HaaS:
@Eva, gere o YAML manifest do Slack. Nome: Eva — Collection Descrição: Responde dúvidas de inadimplência
O agente gera YAML com scopes, Socket Mode e eventos já configurados.
@Eva, configura o Slack: Bot token: xoxb-xxxx App token: xapp-xxxx Canais: #collection
O agente adiciona ao .env e reinicia.
api.slack.com/apps → "From scratch". Nome do agente, workspace CondoConta.
Instale e copie o Bot Token (xoxb-...).
Ative e gere App-Level Token (xapp-...) com scope connections:write.
Ative: message.channels, message.groups, message.im.
@Eva, configura o Slack: Bot token: xoxb-xxxx App token: xapp-xxxx
| Onde | Quando responde |
|---|---|
| Canal público | Apenas com @menção |
| Dentro de thread | Livremente — sem @menção |
| DM | Todas as mensagens |
| App criado (manifest ou manual) |
| Tokens: xoxb-... e xapp-... |
| NÃO tem SLACK_CLIENT_ID no .env |
| Bot adicionado aos canais |
| Agente online |
| Teste: @bot oi no canal |
No Telegram, converse com @BotFather:
Envie comandos ao BotFather para refinar:
Envie o token para o seu agente:
Eva, configura o Telegram com esse token: Token: 123456:ABC-DEF1234...
O agente configura automaticamente:
Abra o bot no Telegram e envie uma mensagem. O agente deve responder com sua persona configurada.
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
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:
Se o agente mudou de área ou precisa acessar outro projeto:
Eva, troca o projeto Jira de CAIX para OB2
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.
Profiles são sub-personalidades especializadas — cada uma com persona, skills e histórico isolados.
| Vantagem | Explicação |
|---|---|
| 🎯 Especialização por pessoa | Cada membro do time tem seu próprio profile com tom de voz e skills específicos. Ex: "sol" foca em cobrança, "rod" em PRDs. |
| 🔒 Isolamento de contexto | Histórico separado por profile. O que você discute no seu não vaza para outros. |
| ⚡ Skills por perfil | Cada profile carrega só as skills que precisa — economiza tokens e mantém o foco. |
| 👤 Identidade individual | Nome, avatar e persona próprios. O time se relaciona com "seu" agente — aumenta adoção. |
| Profile | Especialidade | Skills | Membro |
|---|---|---|---|
| ada | Data Science | jupyter-live-kernel, data-viz | Caju |
| aixon | AI Expert Reports | aix-monthly-review | Caju |
| lex | Product/PRD | prd-creation, prd-to-clickup | Rodrigo |
| cp | Content Producer | content-factory | — |
| sol | Collection | collection-queries, eva-cartilha | Solange |
Eva, cria um profile "rod" para o Rodrigo: Persona: Product Manager técnico, foco em clareza e execução. Skills: prd-creation, jira-issue-manager, confluence-search
O agente cria o diretório, adiciona SOUL.md, linka skills e redespliega.
Eva, lista as skills disponíveis
O agente mostra todas as skills instaladas e as que podem ser adicionadas.