Guia do Concierge
Concierge — Agente de Atendimento Multicanal
Escopo único: runtime, canais, isolamento multi-tenant, billing e critérios de aceite do Concierge — o agente de atendimento multicanal da fábrica. Regras de
billing_targete Work Type → canon/CONTEXT.md; Vaultwarden (cofre compartilhado) → platform/04-secrets-security; handoff e SLA → business/05-contract-legal.Fonte: spec deep interview 2026-06-07 (
di-whatsapp-agent-20260607, ambiguidade final 11%); pesquisa Hermes Agent e MiniMax ToS, 2026-06-07.
Visão geral
O Concierge é o agente de atendimento multicanal da fábrica: o Client conversa por WhatsApp ou Telegram (texto ou áudio) e o agente cria issues em nome dele, responde status em linguagem humana, fecha o ciclo needs-info pelo canal (a dúvida da equipe no GitHub vira outreach proativo no chat; a resposta volta como comentário atribuído na issue) e notifica entregas — sem que o Client precise viver no GitHub.
- Atendimento incluído na mensalidade —
billing_target=service: mede sempre, fatura nunca. - Ator distinto no threat model — conta-bot própria, allowlist de contatos, permissões GitHub mínimas.
- Brain continua único despachante — o Concierge é boca e ouvido; o Brain decide o que merece outreach.
- Client-facing: “Concierge da Hendrios” — apresenta-se como assistente de IA (transparência; EU AI Act).
Avoid: bot (solto), assistente, agente (solto — colide com os agentes de execução da fábrica).
Runtime: Hermes Agent + MiniMax-M3 (R3)
| Atributo | Valor |
|---|---|
| Framework | Hermes Agent (Nous Research, MIT, v0.16.0) |
| Modelo | MiniMax-M3 via Token Plan (ToS-safe: listado oficialmente) |
| Fallback | OpenClaw se o multi-tenant do MiniMax decepcionar |
| Deploy | Imagem Docker oficial (debian 13.4), 1–2 GB RAM |
| Config | config.yaml com GitHub MCP + canais + profiles |
NOTA — ADR 0008: chamadas MiniMax via Subscription Key com base URL customizada têm status ambíguo (sem cláusula pública de enforcement; risco documentado = throttling por janela 5h/semanal, não suspensão por harness). Ticket de suporte em
platform.minimax.iopendente para confirmação. Ver canon/adr/0008.
NOTA — Hermes v0.16: bugs MiniMax endpoint
#5781(routing/anthropic) e#6039(custombase_urlignorado) reportados na v0.15. Verificar correção na v0.16.0 antes do deploy (AC9). Releases ~bimensais — fixar versão nodocker-compose.yml.
Canais: Telegram + WhatsApp (R6)
- Telegram: integração nativa do Hermes (bot token via
@BotFather). - WhatsApp: via Baileys (QR pairing; não-oficial). Mitigantes do risco de ban: número dedicado, volume PME, comportamento não-spam.
- Um número/identidade para todos os Clients (R4): isolamento por profiles, não por número.
- Evolution API: mantida intocada para o tracer; adaptador Evolution↔Hermes rejeitado na decisão R6 — só reviver se Baileys falhar em produção.
Autoria e outreach (R5)
- Conta-bot única da fábrica — permissões GitHub mínimas:
Issues:read/write+Commentsnos repos da allowlist apenas. - Carimbo de atribuição no corpo da issue:
"criada via WhatsApp/Telegram em nome de <username>". - Label de canal:
via:whatsappouvia:telegramaplicada automaticamente. - Outreach proativo: GitHub → Brain → webhook nativo do Hermes → mensagem no canal do Client.
- O Brain decide quais eventos merecem outreach; o Hermes só entrega.
- Ciclo
needs-info: comentário/label da equipe → Brain → outreach no canal → resposta do Client vira comentário atribuído na issue (AC4).
- GitHub App da conta-bot: upgrade para App na org na migração para conta de organização (passo futuro).
Isolamento multi-tenant (R4)
- Profiles do Hermes: um profile por Client; doc oficial recomenda 1 container Docker por profile para dados sensíveis.
- Sessions por contato:
group_sessions_per_user: trueem grupos — sessões por autor dentro do grupo, não por grupo. - Allowlist de contatos: números de WhatsApp + usernames Telegram definidos no onboarding de cada Client; sem auto-cadastro no MVP; registrada via platform/10-onboarding-automation.
- Critério de aceite: isolamento validado por teste adversarial entre 2 Clients de teste — nenhum dado vaza, incluindo cenário de grupo (AC6).
Captação guiada (R8 — A2+B1)
Issue só nasce com os 3 campos preenchidos:
| Campo | Descrição |
|---|---|
| O quê | Descrição do pedido |
| Onde | Sistema/módulo — resolvido por mapa de apelidos no perfil do Client; pergunta só em ambiguidade |
| Como saber que ficou pronto | Critério de aceite nas palavras do Client |
O agente oferece prévia da issue antes de confirmar a criação. Captação por texto e áudio (faster-whisper local / Groq / OpenAI; OGG/Opus do WhatsApp suportado — AC1, AC2). Mapa de apelidos coletado no preboarding via platform/10-onboarding-automation.
Filtro de dados sensíveis (R9)
P1 (MVP): filtro ativo na escrita — senhas, chaves API, CPF/NIF, números de cartão substituídos por placeholder antes de tocar issue/GitHub/LLM; Client avisado com mensagem educada (AC11). Dado ausente da sessão, da issue e do GitHub.
P3 (Fase 2): cofre Vaultwarden self-hosted para segredos que precisam ser retidos. Instalação compartilhada com o Deputy (decisão L10 — antecipação da necessidade). Ver platform/04-secrets-security.
Handoff humano (R10 — H2)
Três gatilhos disparam handoff para a equipe:
| # | Gatilho |
|---|---|
| 1 | Pedido explícito do Client |
| 2 | 2 falhas de entendimento consecutivas |
| 3 | Tema sensível: fatura, contrato, reclamação formal |
Ao detectar o gatilho:
- Mattermost notificado com resumo + transcript da conversa.
- Client recebe promessa com prazo (≤ régua SLA de R24).
- Ponte no mesmo número (continuar a conversa sem troca de canal) = evolução futura.
Apresentação e tom (R11 — T2)
- Nome client-facing: “Concierge da Hendrios”.
- Auto-apresentação como assistente de IA na primeira conversa de contato novo (EU AI Act — AC13).
- Idioma automático pelo perfil do Client:
pt-PT(EU) /pt-BR(Brasil). - Tom: profissional-próximo (guideline no system prompt).
- Coerente com a política de IA na comunicação (L13): resultado primeiro, IA como motor — não é manchete nem segredo.
Grupos (R12 — G2)
O Concierge suporta DM + um grupo oficial por Client desde o MVP, com 3 regras duras:
- Só executa ações para autores da allowlist — membro fora dela presente no grupo é ignorado para qualquer ação (AC7).
- Em grupo, responde apenas quando mencionado ou endereçado diretamente.
- Atribuição sempre pelo autor da mensagem (nunca “do grupo”).
ACs 6 e 7 incluem cenários de grupo (isolamento e recusa de intruso).
Billing (R2)
work_type=afk+billing_target=serviceem toda conversa atribuída ao Client (AC8).- Mede sempre; fatura nunca — incluído na mensalidade.
- Anti-abuso futuro via Spend Caps suaves (jamais cobrança adicional).
Fases
| Fase | Escopo |
|---|---|
| MVP | AC1–AC10: captação texto/áudio, status, needs-info, notificações, isolamento, allowlist, metering, runbook |
| Fase 2 | Aprovação de estimativa no chat (quando o gate de estimativa da esteira existir); trilha de auditoria; Vaultwarden P3 |
| Futuro distante | Portal próprio (Concierge é o precursor conversacional) |
Gate de estimativa (
awaiting-client-approval) documentado como FUTURO na esteira — validação com o Client no MVP é de trade-offs/escopo vianeeds-info, nunca financeira.
Acceptance Criteria (13 ACs — aprovados R7 + R8–R12, 2026-06-07)
| AC | Critério |
|---|---|
| AC1 | Captação por texto: allowlist → prévia (3 campos) → confirmação → issue no repo certo com carimbo + label de canal |
| AC2 | Captação por áudio (transcrição) com o mesmo fluxo |
| AC3 | Status de issue em linguagem humana (labels/PR traduzidos) |
| AC4 | Ciclo needs-info completo: comentário/label da equipe → Brain → outreach no canal → resposta vira comentário atribuído na issue |
| AC5 | Notificações de entrega (PR aberto/deploy) com régua anti-spam mínima |
| AC6 | Isolamento multi-tenant validado por teste adversarial entre 2 Clients de teste (nada vaza) — incluindo cenário de grupo (sessões por autor dentro do grupo) |
| AC7 | Número fora da allowlist: recusa educada, zero ação no GitHub — incluindo membro intruso em grupo (presente no grupo, fora da allowlist → mensagens dele nunca geram ação) |
| AC8 | Metering: toda conversa com work_type=afk + billing_target=service, atribuída ao Client |
| AC9 | Bugs MiniMax #5781/#6039 verificados na v0.16.0 antes do deploy; fallback de provider documentado |
| AC10 | Runbook do agente (re-pair QR, restart, logs) no padrão do §12 do PLANO-FABRICA |
| AC11 | Filtro de sensíveis: senha/CPF plantados na conversa → issue nasce com placeholder; dado ausente da sessão e do GitHub; Client avisado |
| AC12 | Handoff: cada um dos 3 gatilhos → Mattermost notificado com resumo+transcript + Client recebe promessa com prazo (≤ régua SLA) |
| AC13 | Apresentação: primeira conversa de contato novo contém auto-apresentação como IA, na variante de idioma do perfil do Client |
Contexto técnico do Hermes Agent (digest da pesquisa, 2026-06-07)
Nous Research · MIT · lançado fev/2026 · ~185k stars · v0.16.0 (5/jun/2026). Releases ~bimensais — fixar versão no compose. Telegram nativo; WhatsApp via Baileys (QR pairing; não-oficial — risco de ban mitigado por número dedicado/volume PME); sessões por contato + profiles por Client (doc recomenda 1 container/profile para dados sensíveis); áudio via faster-whisper local / Groq / OpenAI (OGG/Opus do WhatsApp suportado); GitHub via MCP (create_issue, list_issues); webhook server nativo para eventos GitHub→chat; Docker oficial (debian 13.4, 1–2 GB RAM). Listado oficialmente no MiniMax Token Plan (junto com OpenClaw, Claude Code, OpenCode, Cursor, TRAE, Kilo Code, Droid, Zed).
Fontes: hermes-agent.nousresearch.com/docs · github.com/nousresearch/hermes-agent · platform.minimax.io/docs/token-plan/hermes-agent · issues #5781 e #6039.
Links relacionados
- canon/CONTEXT.md — Concierge,
billing_target=service, Allowlist, Work Type, Brain - canon/adr/0004 — Emergency fura a pausa
- canon/adr/0008 — MiniMax via OpenCode (pendência ToS)
- platform/04-secrets-security — Vaultwarden, threat model, conta-bot
- platform/06-operations — Mattermost, runbook, SLA 24/7
- platform/08-deploy-client-vps — House Stack, Rescue, provisionamento
- platform/10-onboarding-automation — ChiefOnboarding (coleta allowlist + alias map no portal)
- business/05-contract-legal — Dunning, fatura, handoff
- business/07-onboarding-playbook — allowlist coletada no onboarding