melgarafael/DeskcommCRMPublic

Open-source AI sales OS — self-hosted CRM with native AI agents + WhatsApp (WAHA). Open alternative to Kommo, Octadesk & Intercom for any business that sells by chat. MCP-ready, multi-tenant, LGPD.

AI summary: An open-source AI sales operating system designed to run customer service and qualification natively on WhatsApp.

Stars
4.4K
+110 today
Forks
1.1K
Watchers
21
Open issues
169
Open PRs
60
Contributors
~119
Commits
9K
Branches
142

TypeScriptMITCreated Apr 28, 2026Last push 2d agoLatest release v1.69.0+517 stars this week+3.1K this month

Quick answers

What is DeskcommCRM?
An open-source AI sales operating system designed to run customer service and qualification natively on WhatsApp.
What does DeskcommCRM do?
DeskcommCRM provides a self-hosted alternative to proprietary CRMs by integrating AI agents directly into WhatsApp communications. It allows businesses to automate customer service, lead qualification, and sales processes without relying on costly monthly subscriptions or locked features. The system is designed to be hosted entirely on user-controlled servers, ensuring complete data sovereignty. A streamlined deployment process allows for rapid installation on a VPS, complete with the application, WhatsApp integration, and database. It empowers teams to build complex, AI-driven sales pipelines that interact seamlessly with users on their preferred messaging platform.
Who is DeskcommCRM for?
Small to medium businesses, sales teams, and developers looking for a cost-effective, self-hosted CRM tightly integrated with WhatsApp. Requires basic knowledge of VPS hosting and command-line execution for deployment.
How do I get started with DeskcommCRM?
curl -fsSL https://raw.githubusercontent.com/melgarafael/DeskcommCRM/main/hostgator-setup-kit/install.sh | bash
How popular is DeskcommCRM on GitHub?
melgarafael/DeskcommCRM has 4,373 stars and 1,131 forks on GitHub, and gained 517 stars in the last 7 days.
What license does DeskcommCRM use?
melgarafael/DeskcommCRM is released under the MIT license.

Star history

since Sep 11, 2026
02K4KSep 2026Sep 2026Sep 2026Oct 2026
4.4K stars as of Oct 2, 2026. Measured daily since Sep 11, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 47 commits2026-04-29: 47 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 7 commits2026-05-05: 15 commits2026-05-06: 11 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 6 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 26 commits2026-07-07: 1 commit2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 1 commit2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 16 commits2026-07-17: 74 commits2026-07-18: 75 commits2026-07-19: 19 commits2026-07-20: 10 commits2026-07-21: 78 commits2026-07-22: 102 commits2026-07-23: 61 commits2026-07-24: 82 commits2026-07-25: 393 commits2026-07-26: 16 commits2026-07-27: 70 commits2026-07-28: 34 commits2026-07-29: 22 commits2026-07-30: 59 commits2026-07-31: 12 commits2026-08-01: 19 commits2026-08-02: 0 commits2026-08-03: 47 commits2026-08-04: 61 commits2026-08-05: 80 commits2026-08-06: 68 commits2026-08-07: 51 commits2026-08-08: 59 commits2026-08-09: 7 commits2026-08-10: 141 commits2026-08-11: 24 commits2026-08-12: 22 commits2026-08-13: 62 commits2026-08-14: 53 commits2026-08-15: 4 commits2026-08-16: 0 commits2026-08-17: 5 commits2026-08-18: 2 commits2026-08-19: 33 commits2026-08-20: 42 commits2026-08-21: 9 commits2026-08-22: 3 commits2026-08-23: 1 commit2026-08-24: 52 commits2026-08-25: 56 commits2026-08-26: 196 commits2026-08-27: 109 commits2026-08-28: 83 commits2026-08-29: 11 commits2026-08-30: 42 commits2026-08-31: 21 commits2026-09-01: 24 commits2026-09-02: 43 commits2026-09-03: 108 commits2026-09-04: 49 commits2026-09-05: 13 commits2026-09-06: 21 commits2026-09-07: 12 commits2026-09-08: 40 commits2026-09-09: 11 commits2026-09-10: 34 commits2026-09-11: 73 commits2026-09-12: 50 commits2026-09-13: 29 commits2026-09-14: 115 commits2026-09-15: 279 commits2026-09-16: 214 commits2026-09-17: 271 commits2026-09-18: 313 commits2026-09-19: 202 commits2026-09-20: 109 commits2026-09-21: 36 commits2026-09-22: 88 commits2026-09-23: 200 commits2026-09-24: 164 commits2026-09-25: 249 commits2026-09-26: 344 commits2026-09-27: 114 commits2026-09-28: 143 commits2026-09-29: 138 commits2026-09-30: 138 commits2026-10-01: 26 commits2026-10-02: 45 commits2026-10-03: 0 commits
6,342 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Rising fast

    +517 stars this week

  • Very active

    6,342 commits in 52 weeks

  • Community-driven

    ~119 contributors

  • Well documented

    High community health score

  • Permissive license

    MIT

  • Repeat trending

    17 trending appearances

What DeskcommCRM does

DeskcommCRM provides a self-hosted alternative to proprietary CRMs by integrating AI agents directly into WhatsApp communications. It allows businesses to automate customer service, lead qualification, and sales processes without relying on costly monthly subscriptions or locked features. The system is designed to be hosted entirely on user-controlled servers, ensuring complete data sovereignty. A streamlined deployment process allows for rapid installation on a VPS, complete with the application, WhatsApp integration, and database. It empowers teams to build complex, AI-driven sales pipelines that interact seamlessly with users on their preferred messaging platform.

Small to medium businesses, sales teams, and developers looking for a cost-effective, self-hosted CRM tightly integrated with WhatsApp. Requires basic knowledge of VPS hosting and command-line execution for deployment.

  • WhatsApp native AI: Deploys conversational AI agents that operate directly within WhatsApp to handle customer interactions.
  • Open-source CRM: Provides a full-featured customer relationship management system that is completely free from vendor lock-in.
  • Data sovereignty: Ensures all customer interactions and lead data remain securely on the user's own self-hosted infrastructure.
  • One-command deployment: Offers a simplified installation script to set up the entire stack on a VPS effortlessly.
  • Automated lead qualification: Utilizes AI to analyze incoming messages, qualify leads, and route them to appropriate sales pipelines.

Where teams use it

Automating customer service

Deploy AI agents on WhatsApp to handle common customer inquiries and support requests 24/7.

Managing sales pipelines

Utilize the open-source CRM to track leads and coordinate sales efforts without paying per-seat license fees.

Qualifying incoming leads

Leverage AI to interact with new prospects on WhatsApp, gather information, and score them before human intervention.

Self-hosting business infrastructure

Run the entire customer communication stack on a private VPS to ensure complete control over sensitive data.

Getting started: curl -fsSL https://raw.githubusercontent.com/melgarafael/DeskcommCRM/main/hostgator-setup-kit/install.sh | bash

README

main branch

🇧🇷 Português · 🇺🇸 English · 🇪🇸 Español

Deskcomm CRM

🛠️ DeskcommCRM — o Sistema Operacional de Vendas com IA, open source, pro WhatsApp

Agentes de IA que atendem, qualificam e vendem no WhatsApp — dentro de um CRM open source rodando no seu servidor. Sem mensalidade, sem feature travada, seus dados com você. A alternativa aberta a Kommo, Octadesk e Intercom.

Next.js 16 TypeScript Supabase Self-hosted CI License: MIT

⚡ Instalar · 🔄 Atualizar · 🧭 Visão · 🏗️ Arquitetura · 🤝 Contribuir · 🗺️ Roadmap


☁️ Rode este CRM em produção com 1 comando

O DeskcommCRM foi desenvolvido em parceria com a HostGator: o hostgator-setup-kit/ instala o CRM completo (app + WhatsApp + banco) numa VPS com um único comando, e o runbook de produção já assume esse ambiente.

👉 Assinar a VPS HostGator com desconto da parceria — datacenter em São Paulo, ideal pro WhatsApp rodando 24/7. (link de parceiro — assinar por ele apoia o projeto e sai mais barato)

Ainda não tem servidor? Rode isto no seu computador (macOS, Linux ou WSL). Ele diz qual plano contratar — com os números do runbook, não um "depende" — e te devolve o comando certo pro seu caso:

curl -fsSL https://raw.githubusercontent.com/melgarafael/DeskcommCRM/main/hostgator-setup-kit/comecar.sh | bash

(prefere ler antes de executar? clone o repo e rode bash hostgator-setup-kit/comecar.sh — ele não instala nada sem você confirmar.)


⚡ Instalar na sua VPS (o caminho principal)

1. Entre na sua VPS

Abra o Terminal no seu computador (no Windows, o PowerShell; no Mac ou Linux, o Terminal) e conecte com o IP e a porta que a hospedagem te mandou por e-mail:

ssh -p PORTA root@SEU_IP

Troque PORTA e SEU_IP pelos seus. Se a hospedagem não mencionou porta nenhuma, é a padrão (22) e você pode omitir: ssh root@SEU_IP.

Ele pede a senha. Ao digitar, não aparece nada na tela — nem asteriscos. Isso não é travamento: é o terminal escondendo a senha. Digite (ou cole) e dê Enter.

Na primeira conexão ele pergunta Are you sure you want to continue connecting? — responda yes. É o servidor se apresentando pela primeira vez.

2. Rode o instalador

Já dentro da VPS:

git clone https://github.com/melgarafael/DeskcommCRM.git
cd DeskcommCRM
bash hostgator-setup-kit/install.sh

É isso. Você não instala Node, nem pnpm, nem compila nada — a imagem do app já vem pronta. Se faltar Docker, o instalador pergunta e instala sozinho.

O que você precisa ter em mãos

Item Onde conseguir
VPS com Docker HostGator (parceria) — ou qualquer VPS com Docker. 4 GB de RAM recomendados
Domínio Um registro A apontando pro IP da VPS (ex.: crm.suaempresa.com.br)
Banco Conta grátis no supabase.com — 3 chaves + connection string do Session pooler
IA Uma chave de OpenRouter, Anthropic ou OpenAI — o instalador pergunta qual você quer
WhatsApp Seu número, conectado por QR code no onboarding (ou o canal oficial da Meta)

O instalador também atende VPS ARM64/aarch64, como a Oracle Ampere A1, e escolhe a imagem NOWEB oficial do WAHA compatível com essa arquitetura. Vale para os dois caminhos: com Supabase externo e com o Supabase na mesma VPS (as imagens do Supabase self-hosted fixadas pelo kit também são publicadas para linux/arm64). Nada é compilado na VPS.

💡 O Supabase pode ser criado pelo próprio instalador. Exporte um SUPABASE_ACCESS_TOKEN antes de rodar e ele cria o projeto, espera o banco ficar saudável, busca as 4 credenciais e descobre o host do pooler testando conexão real — sem copiar e colar.

O que o instalador faz por você

Ele pergunta só o que é seu (domínio, chaves, senha do admin), valida cada resposta antes de seguir — chave errada ele recusa na hora, não três passos depois — e cuida do resto:

  1. Gera todos os segredos técnicos sozinho (você não inventa senha nenhuma).
  2. Cria as extensões do Postgres e aplica o schema completo (supabase/baseline.sql).
  3. Cria o primeiro admin com o e-mail e a senha que você escolheu.
  4. Sobe a stack inteira com HTTPS automático e confere a saúde no fim.
  5. Instala o cron das automações (sem ele, as regras QUANDO/SE/ENTÃO ficam paradas na fila) e o agente de atualização, que é o que faz o botão "Atualizar agora" existir na tela.

Rodar de novo não quebra nada — o install.sh é idempotente: não duplica cron, não recria usuário, retoma de onde parou.

Modo não-interativo: copie .env.hostgator.example para .env, preencha e rode bash hostgator-setup-kit/install.sh --yes.

Outra hospedagem? (Hostinger, Coolify, Dokploy, CapRover…)

Funciona. Se a sua VPS já vem com um proxy reverso próprio ocupando as portas 80/443, o instalador detecta isso sozinho e publica o CRM através dele, em vez de tentar subir um Caddy que não caberia. Num caso específico — proxy em --network host, como faz a Hostinger — ele pergunta em vez de adivinhar, porque publicar atrás do proxy errado instala "com sucesso" um site mudo. Detalhes em hostgator-setup-kit/README.md.

Primeiro acesso

Abra https://<seu-domínio> (o cadeado leva ~1 min pra aparecer), entre com o admin, e tenha o Google Authenticator ou Authy à mão se você quiser ligar a verificação em duas etapas — ela é opcional e fica em Configurações › Segurança; o primeiro login não a exige. No onboarding, escaneie o QR code com o WhatsApp do seu número.

🤖 Prefere que uma IA instale pra você?

O repositório traz guias do assistente que carregam sozinhos no Claude Code, Codex, Cursor, OpenCode ou Antigravity: instalar, montar um cliente por nicho, analisar métricas, afinar o prompt do agente e contribuir. Para tê-los em qualquer pasta — inclusive antes de clonar, no seu computador —, rode uma vez:

curl -fsSL https://raw.githubusercontent.com/melgarafael/DeskcommCRM/main/scripts/instalar-guias.sh | bash

Depois abra uma sessão nova do seu assistente e diga "quero instalar o CRM na minha VPS": pedir o assunto em português aciona o guia certo em qualquer um dos cinco. Para chamar um guia pelo nome, cada um tem o seu jeito — /deskcomm-instalar no Claude Code, no Cursor e no Antigravity; $deskcomm-instalar no Codex; no OpenCode, peça pelo nome, em linguagem natural.

Os guias não se atualizam sozinhos: rodar o mesmo comando de novo traz a versão nova. Para desfazer:

curl -fsSL https://raw.githubusercontent.com/melgarafael/DeskcommCRM/main/scripts/instalar-guias.sh | bash -s -- --remover

Com o repositório já clonado, os guias vêm dentro dele (.agents/skills/) e nem isso é preciso. Se você rodou o comando mesmo assim, saiba que no Claude Code o guia instalado vale mais que o do clone — e fica na versão do dia em que rodou, até rodar de novo (ou desfazer). Também funciona o jeito antigo: jogar só a pasta hostgator-setup-kit/ no chat do Claude Code dentro da VPS — ele lê o CLAUDE.md do kit e conduz tudo em português.


🔄 Atualizar

Saiu versão nova? Há dois caminhos, e o primeiro não exige terminal.

Pela tela (recomendado)

Quando existe versão nova, o rodapé do menu lateral acende "Nova versão" — só pro dono do servidor, porque avisar quem não pode atualizar é ruído. Clique e você cai em Configurações → Atualização, que mostra o que muda, faz backup do banco sozinha e acompanha cada fase (backup → código → banco → no ar) até terminar. Nada de SSH.

Se a versão nova subir quebrada, o agente volta pra imagem anterior sozinho e grava essa volta no .env — sem isso, o próximo restart traria o app quebrado de novo, em silêncio.

Por baixo: o app só registra o pedido; quem executa é o agente que o install.sh deixou na sua VPS, num cron que confere a cada 5 minutos — então a atualização começa em até 5 minutos depois do clique. Se esse agente estiver fora do ar, a tela avisa "Atualização automática indisponível" e mostra o comando abaixo — ela não finge que deu certo.

Pelo terminal

cd /caminho/do/DeskcommCRM
bash hostgator-setup-kit/update.sh

O comando faz, nesta ordem: (1) confere se há mesmo versão nova — se não houver, sai na hora; (2) faz backup do banco antes de tocar em qualquer coisa; (3) baixa o código novo; (4) atualiza o banco re-aplicando o baseline.sql, que é idempotente e auto-curativo (conserta sozinho dados bagunçados por versões antigas); (5) puxa a imagem nova do app; (6) confere a saúde no fim.

O alvo é a última versão publicada (v1.2.3), não o topo da main — atualizar leva sempre a uma versão marcada e descrita no CHANGELOG.md, nunca a um commit não testado. Ele recusa voltar pra uma versão anterior à instalada (isso desligaria coisas que você já tem); pra isso existe --force, de propósito.

Coisas normais que você vai ver: um monte de already exists / multiple primary keys na parte do banco — é esperado e inofensivo, são coisas que já existiam. O script filtra esse ruído e mostra ✓ banco atualizado. Se o banco estiver ocupado com o CRM atendendo, ele aplica de novo sozinho (até 3 passadas) e conta isso na tela — isso vale a partir da atualização seguinte à que instalar esta correção. Se aparecer ⚠ Apareceram avisos no banco que NÃO são os esperados, aí sim guarde a mensagem: o fim da saída diz o que fazer em cada caso (repetir com --force quando foi o banco ocupado, declarar SUPABASE_DB_ADMIN_URL quando foi permissão). Restaurar o backup é o último recurso.

Deu ruim? bash hostgator-setup-kit/restore.sh volta pro backup. Quer só diagnosticar? bash hostgator-setup-kit/healthcheck.sh.

⚠️ Numa instalação antiga que ainda não tem o agente da tela, rode update.sh duas vezes: a primeira execução ainda é a do script velho (que baixa o novo); a segunda instala o agente e liga o botão.

Passo a passo em linguagem simples: docs/ATUALIZANDO.md.

Outros comandos do kit

Script Função
install.sh Instala tudo (idempotente — pode rodar de novo)
update.sh Atualiza pra versão nova, com backup automático
backup.sh Backup do banco + sessões de WhatsApp
restore.sh Restaura um backup
reset-password.sh Redefine a senha de um usuário
reset-mfa.sh Remove o MFA de quem perdeu o celular
healthcheck.sh Diagnóstico de todos os serviços de uma vez

Backup importa: o plano grátis do Supabase não faz backup sozinho. Vale agendar backup.sh no cron diariamente. O update.sh já roda um backup antes de cada atualização.

🧹 Desinstalar (tirar esta aplicação do Docker)

Para parar e apagar somente os recursos Docker desta instalação, na raiz do repositório:

bash desinstalar_docker.sh

Ele descobre o projeto pelo label que o Docker Compose grava e remove apenas os containers, volumes e redes internas deste projeto. Outras aplicações do mesmo servidor, imagens, cache de build, a rede externa do proxy reverso, o código, o .env, os backups e um Supabase externo não são tocados.

O modo interativo mostra quantos recursos encontrou e exige a confirmação REMOVER-<nome-do-projeto> antes de remover qualquer coisa. Para uma rotina de descarte de ambiente, bash desinstalar_docker.sh --force pula a pergunta. Use --project-name NOME só quando a instalação tiver um COMPOSE_PROJECT_NAME personalizado que não esteja mais no .env.

Os volumes vão junto — inclusive as sessões locais do WhatsApp. Rode backup.sh antes se precisar preservá-las.


✨ O que é

Deskcomm vem de Desk (mesa) + comm (comércio): o comercial de mesa — toda a operação de vendas do seu negócio numa mesa só, operada por pessoas e agentes de IA juntos.

O projeto nasceu como CRM de e-commerce e a comunidade o levou muito além: hoje roda em clínicas, imobiliárias, infoprodutos, agências, lojas e prestadores de serviço — qualquer negócio que vende pelo WhatsApp. O produto acompanhou essa virada e virou um sistema operacional de vendas: agentes de IA com RAG por tenant atendem, qualificam, movem leads no funil, disparam automações e sabem a hora de passar pra um humano — com o CRM inteiro exposto via MCP pros agentes operarem de verdade. A história completa está em VISION.md.

Diferenciais

  • 🤖 Agentes de IA que operam o CRM — RAG por tenant, skills que o agente executa sozinho durante o atendimento, memória da operação, análise de sentimento, handoff IA→humano auditado, IA como assignee de primeira classe e teto de gasto por organização. Não é chatbot decorativo: o agente atende, qualifica e move o funil.
  • 🔁 Nada morre no silêncio — follow-up que retoma a conversa esfriada (com tempo adaptativo e gatilhos por etapa do funil), radar do que está em risco de morrer sem resposta, e central de avisos pro que precisa de decisão humana.
  • 🧠 Agentes que se auto-aprimoram — conversas resolvidas viram conhecimento novo; a tela de Evolução da IA mostra se o agente está melhorando, onde erra e o que falta ensinar; Propostas são melhorias que a IA sugere pra si mesma, aplicáveis como versão nova — sempre com gate humano.
  • 🧩 Multi-nicho por design — vocabulário configurável por pipeline: lead vira Cliente, Paciente ou Comprador; won vira Pago, Agendado ou Fechado. O mesmo core serve e-commerce (nosso berço, com integração Nuvemshop), clínica, imobiliária ou infoproduto.
  • 💬 WhatsApp de duas formas — por QR code (WAHA, multi-número, com anti-banimento: throttle + jitter + janela de horário) ou pelo canal oficial da Meta (Cloud API, com templates aprovados e sincronizados). Mídia via Storage, STOP detection.
  • 🔀 Escolha sua IA — OpenRouter, Anthropic ou OpenAI, decidido na instalação e trocável depois pela tela, por parte do sistema (o que conversa não precisa ser o que indexa).
  • 👥 Governança de atendimento — RBAC server-side de verdade, atribuição/transferência auditada, fila com rodízio, roteamento automático por intenção e escopo de visualização por papel.
  • 🏢 Multi-tenant + LGPD by-design — RLS em toda tabela tenant-aware com teste de isolamento como gate de CI; anonimização preferida sobre delete; audit append-only com retenção 5 anos.
  • 🖥️ Self-hosted de verdade — seus dados na sua VPS; instalação e atualização com 1 comando (ou 1 clique); sem versão paga, sem feature travada.

🔌 Webhooks & Automações

Todo tenant pode criar fontes de captação: um endereço público (/api/v1/webhooks/in/<token>) que recebe leads de landing pages, formulários próprios ou ferramentas como Zapier/n8n via POST (JSON ou application/x-www-form-urlencoded) e já entra direto no funil/estágio escolhido — sem código, sem integração customizada por tenant. Em cima dessas fontes (e dos outros eventos do CRM — lead mudou de etapa, ganhou tag, chegou mensagem no WhatsApp), o tenant monta automações: regras no formato QUANDO/SE/ENTÃO que disparam ações como adicionar tag, mover o lead no funil, atribuir a um atendente, mandar uma mensagem de WhatsApp ou avisar outro sistema via webhook de saída.

Na UI, tudo mora em Webhooks na sidebar (visível só pra quem tem papel manager/admin). A tela tem três abas: Receber dados (criar fonte, copiar o endereço/formulário pronto, disparar um lead de teste, ver os últimos recebimentos), Automações (montar a regra, que sempre nasce pausada até você revisar e ligar) e Atividade (timeline de cada execução, com o resultado de cada ação e reenvio manual quando uma chamada externa falha).

Por baixo, cada evento vira uma linha em event_log — nenhum trigger de banco faz chamada HTTP diretamente. Quem drena essa fila é a rota /api/v1/cron/event-log-drain, chamada a cada minuto. O install.sh/update.sh já configuram esse cron sozinhos — sem ele, as automações são criadas normalmente mas nunca rodam.


🖥️ O que você opera (as telas)

Grupo Telas
Atendimento Inbox (conversas de WhatsApp, você e a IA lado a lado) · Radar (quem esfriou e ainda está aberto) · Respostas rápidas
CRM Kanban (onde cada negócio está no funil) · Contatos · Funis (etapas, vocabulário do negócio e motivos de perda)
Agente de IA Agentes · Follow-ups · Roteadores · Provedores e Credenciais · Conhecimento (RAG) · Memória · Skills · Casos · Alertas · Propostas · Execuções · Uso e orçamento
Canais Conexões (QR ou canal oficial da Meta, com saúde, reconexão e templates) · Nuvemshop · Webhooks
Análise Desempenho (funil e performance por atendente) · Evolução da IA · Audit Log
Organização Equipe · Distribuição de atendimento · Organização · LGPD · API Tokens · Segurança (MFA, códigos de recuperação, sessões) · Perfil, Notificações, Billing

Toda tela tem porta na navegação — o CI reprova tela que existe mas em que só se chega digitando a URL.


🧱 Stack

Camada Escolha Por quê
Frontend Next.js 16 App Router (Turbopack) + React 19 + TypeScript 6 estrito Server Components + Route Handlers no mesmo repo
Estilo Tailwind + shadcn/ui (new-york, neutral) Customizável sem lock-in
DB Supabase (Postgres + RLS + vector) Multi-tenant nativo, embedding pra RAG
Auth Supabase Auth via @supabase/ssr Cookie SameSite=Strict, HttpOnly
Realtime Supabase Realtime postgres_changes + broadcast
Storage Supabase Storage (URLs assinadas) Bucket privado whatsapp-media
WhatsApp WAHA Plus (engine NOWEB) + Meta Cloud API QR pra começar rápido; canal oficial pra escala
Filas event_log table + workers (cron) Trigger de banco nunca faz HTTP
Rate limit Upstash Redis (sliding window) Serverless, free tier suficiente
AI Vercel AI SDK v7 — OpenRouter, Requesty, Anthropic, OpenAI e Google Instalador pergunta qual; troca depois pela tela
Validação Zod Input externo, env, payloads
Observability Sentry (scrub em erro, transação, span e breadcrumb) Telemetria opt-in no install
Hospedagem VPS com Docker (HostGator/SP na parceria) App + WhatsApp + workers na sua máquina

Detalhes: ARCHITECTURE.md.


🧑‍💻 Desenvolvimento (só pra contribuir com o código)

⚠️ Se você quer USAR o CRM, não é aqui — use o instalador da VPS. Esta seção é pra quem vai mexer no código.

git clone https://github.com/melgarafael/DeskcommCRM.git
cd DeskcommCRM

nvm use                     # Node 22
npm install -g pnpm && pnpm install

cp .env.example .env.local  # guia completo em docs/SETUP.md

docker compose up -d        # WAHA local (opcional em dev sem WhatsApp)

# Schema: aplique o baseline, NÃO as migrations.
# As migrations 0001-0009 e 0013 são stubs `SELECT 1;` — a cadeia não sobe do zero.
# O schema real vive no baseline.sql, o mesmo que o install.sh aplica na VPS.
# `supabase db push` "passa" e deixa o banco vazio.
supabase link --project-ref <seu-ref>

# Num projeto Supabase NOVO, habilite antes as extensões que o schema usa —
# sem elas o baseline para em `type public.vector does not exist`.
psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 -c \
  'create extension if not exists vector with schema public;
   create extension if not exists citext with schema public;
   create extension if not exists pg_trgm with schema public;'

psql "$SUPABASE_DB_URL" -v ON_ERROR_STOP=1 -f supabase/baseline.sql

pnpm dev

App: http://localhost:3000 · Health check: http://localhost:3000/api/v1/health

docs/SETUP.md é o tutorial completo de todas as integrações (Supabase, WAHA, provedores de IA, Upstash, Sentry, Resend, Nuvemshop) — ~60–90 min do zero ao app rodando.


📁 Estrutura

DeskcommCRM/
├── app/                    # Next.js App Router
│   ├── (admin)/            # Rotas super-admin (impersonate, tenants)
│   ├── (public)/           # Login, recovery
│   ├── app/                # Rotas autenticadas: inbox, radar, kanban, contacts,
│   │                       #   connections, ai/*, integrations, metrics, lgpd,
│   │                       #   audit, team, settings
│   └── api/v1/             # API REST canônica
├── components/             # React (ui/, inbox/, kanban/, shell/, ...)
├── lib/                    # supabase/, waha/, channels/, ai/, agent-engine/,
│                           #   api/, routing/, navigation/, env.ts
├── workers/                # consumers de event_log (IA, RAG, LGPD, mídia, rotinas)
├── supabase/migrations/    # SQL versionado (+ baseline.sql pro self-host)
├── tests/{e2e,unit,invariants,shell}/
├── scripts/                # seeds, qa-waves, manutenção
├── docs/                   # PRDs, specs, runbooks, SETUP.md, ATUALIZANDO.md
└── hostgator-setup-kit/    # instalação e atualização self-host

🧪 Testes

pnpm typecheck     # tsc --noEmit -p tsconfig.typecheck.json (inclui tests/)
pnpm lint          # eslint next/core-web-vitals
pnpm test:unit     # Vitest (NÃO inclui tests/invariants/**)
pnpm test:db       # Postgres efêmero + baseline install/update + invariantes
pnpm test:e2e      # Playwright (requer dev server)

Estes checks são obrigatórios pra mergear na main. A lista abaixo já disse "quatro" e depois "cinco" — meça, não confie nela:

gh api repos/melgarafael/DeskcommCRM/branches/main/protection \
  --jq '.required_status_checks.contexts|join(", ")'
# em 2026-08-14: verify, build-and-size, invariants, e2e, imagens-ok
Check O que faz
verify typecheck + lint + lint:channels + test:unit + test:shell
invariants sobe um Postgres limpo, aplica o baseline.sql em modo install e depois em modo update — as duas passadas com ON_ERROR_STOP=1, que é o que torna a segunda uma prova de idempotência e não só um "terminou" —, e roda os invariantes de RBAC, atribuição, escopo, roteamento, follow-up, webhooks e automações
build-and-size pnpm build em Node 22
e2e sobe Supabase local, aplica o baseline.sql e roda pelo frontend todas as specs Playwright menos as que FORA_DO_CI declara
imagens-ok reprova quando qualquer uma das três imagens Docker (app, worker, scheduler) não constrói — é o artefato que o self-hoster instala

Quais specs ficam de fora é pergunta de comando, não de leitura — esta linha já afirmou que a única era vps-fresh-onboarding, e desde o PR #983 ela roda no CI:

git show origin/main:.github/workflows/e2e.yml | python3 -c "import sys,re; y=sys.stdin.read(); print(sorted({s for _,c in re.findall(r'(FORA_DO_CI):\s*>-\n((?:[ ]{8,}.*\n)+)',y) for s in re.findall(r'[a-z0-9-]+\.spec\.ts',c)}))"

vps-fresh-onboarding segue sendo a P0 da nossa doutrina de QA visual, porque a instalação fresca é o produto que se vende. Ter gate não dispensa a prova pela tela: gate prova que não regrediu, não que a experiência ficou boa.

Entre os invariantes está o teste de isolamento RLS: cria 2 organizações, simula os claims JWT pelo mesmo caminho auth.uid() / fn_user_org_ids() que as policies de produção usam, e prova que um usuário da org A enxerga zero linhas da org B em conversations, messages, contacts e crm_leads. Antes disso, um caso de controle prova que as linhas da org B realmente existem — sem ele, o teste passaria com a tabela vazia.


📚 Documentação

Doc O que tem
hostgator-setup-kit/README.md Instalação self-host — o kit, os scripts, as hospedagens com proxy próprio
docs/ATUALIZANDO.md Como atualizar sua instalação, em linguagem simples
VISION.md Visão e posicionamento — o que o projeto é, no que acredita e pra onde vai
CHANGELOG.md O que mudou em cada versão — leia a seção da versão antes de atualizar
docs/SETUP.md Setup de desenvolvimento, passo a passo de todas as integrações
docs/white-label.md Instalar para clientes — trocar a marca, uma instalação por cliente vs compartilhada, revenda
docs/runbooks/waha-hostgator.md Runbook de WAHA em produção (dimensionamento, recuperação)
docs/runbooks/deploy.md Deploy em produção
CLAUDE.md Convenções não-negociáveis (leitura obrigatória pra contribuir)
ARCHITECTURE.md Visão de 1 página da arquitetura
docs/index.md Índice geral da documentação, com a regra de precedência
docs/handoffs/ Diário dos épicos (HANDOFF*.md), com o índice em docs/handoffs/README.md
docs/prd/ · docs/specs/ PRDs e specs técnicas (schema SQL, payloads, MCP, governança)

🤝 Contribuindo

Esse projeto é open source pra comunidade. Toda contribuição é bem-vinda — desde fix de typo em doc até feature nova.

Antes de abrir PR:

  1. Leia CLAUDE.md (~5 min) — convenções não-negociáveis (multi-tenancy, RLS, audit, LGPD).
  2. Leia CONTRIBUTING.md — fluxo de branches, commits, epic-executor.
  3. Siga o Código de Conduta.

Fluxo curto:

git checkout -b feat/short-slug
# implementa + testes
pnpm typecheck && pnpm lint && pnpm lint:channels && pnpm test:unit && pnpm test:shell && pnpm build
pnpm test:db   # precisa de Docker — é o job `invariants`, obrigatório no merge
git commit -m "feat(escopo): descrição"
# abre PR — o template já traz o checklist de Definition of Done

Essas duas linhas são tudo o que dá para rodar na sua máquina, de propósito: rodar só metade e descobrir o resto como surpresa vermelha depois de horas de espera é a pior primeira experiência que este repositório sabe entregar.

Dois gates obrigatórios não cabem aí e só rodam no CI: o e2e (precisa de Supabase local) e o imagens-ok (constrói as três imagens Docker). Verde na sua máquina não é verde no merge.

Definition of Done: typecheck zero, lint zero, testes relevantes verdes, RLS testada se toca tabela tenant-aware, audit log emitido em mutações, migration versionada + apêndice no baseline.sql se muda schema (senão a mudança não chega em quem se auto-hospeda). Detalhes em CLAUDE.md.


🐛 Reportando bugs

Abra uma issue — o template pede o que precisamos (ambiente, /api/v1/health, steps). Rodar bash hostgator-setup-kit/healthcheck.sh e colar a saída ajuda muito.

Pra vulnerabilidades de segurança, NÃO abra issue pública — use o relato privado de vulnerabilidades. Detalhes em SECURITY.md.


🗺️ Roadmap

✅ Entregue

  • Fundação & plataforma — auth (MFA pra admin), multi-tenancy com RLS + teste de isolamento, RBAC 4 papéis, audit log append-only, onboarding de tenant.
  • Atendimento WhatsApp — inbox 3 painéis em tempo real, conexões multi-número por QR (WAHA) ou canal oficial da Meta (templates aprovados e sincronizados), mídia via Storage, anti-banimento (throttle + jitter + janela de horário), STOP detection.
  • CRM & pedidos — kanban com vocabulário configurável por nicho (fractional indexing), gestão de funis pela tela, customer 360, contatos, tags, integração Nuvemshop.
  • IA nativa — agentes com RAG por tenant (pgvector), skills que o agente executa sozinho, memória da organização, roteador de intenção por número, análise de sentimento, handoff IA→humano, teto de gasto por org, MCP server interno.
  • Escolha de provedor de IA — OpenRouter, Anthropic ou OpenAI, decidido na instalação e trocável por parte do sistema pela tela.
  • Follow-up vivo — retomada de conversa esfriada com tempo adaptativo, gatilhos por etapa do funil e por caso, fila com rodízio, e o Radar do que corre risco de morrer sem resposta.
  • LGPD — export e redact via workers, anonimização em cascata, consentimento auditado.
  • Self-host — hostgator-setup-kit (app + WhatsApp + banco com 1 comando), baseline.sql auto-curativo, atualização pela tela com backup automático, runbook de produção.
  • Webhooks & automação — fontes de captação + regras QUANDO/SE/ENTÃO + gatilhos pra sistemas externos.
  • Governança de atendimento — RBAC server-side em toda a API, atribuição e transferência auditadas (IA como assignee de 1ª classe), visualização por papel (RLS) + métricas por atendente, roteamento automático com fila e painel de gestão, e contrato de governança pra agentes de IA externos (docs/specs/14).
  • Operação visível — motivo da retenção anti-ban traduzido na conversa, central de avisos com severidade, aviso de mensagem presa, controle de proteção de envio (janela/ritmo/teto), capacidades declaradas do agente e propostas do flywheel aplicáveis como versão nova (com gate humano).

🔮 Próximo

  • MCP público — capabilities do CRM expostas pro ecossistema de agentes: plugue o agente que quiser e ele opera o Deskcomm.
  • Templates por nicho — pipelines e vocabulários prontos pra clínica, imobiliária, infoproduto e serviços (e-commerce já entregue).
  • Integrações — VTEX e Shopify via adapter pattern (Nuvemshop já entregue).
  • Identity probabilística — unificação de contatos entre canais.

💬 Comunidade


📜 Licença

Distribuído sob a licença MIT — veja LICENSE. Você pode usar, modificar e distribuir livremente, inclusive comercialmente. O software é fornecido "como está", sem garantias (ver cláusula de isenção no LICENSE).


🛟 Suporte & responsabilidades (self-host)

Este é um projeto self-host: cada pessoa roda o CRM na própria infraestrutura (VPS, banco Supabase e chave de IA próprios). Isso implica:

  • Suporte é comunitário e "as-is". Dúvidas e bugs entram como Issues ou Discussions. Não há SLA nem suporte garantido — é open source mantido por boa vontade.
  • Você é responsável pela sua instalação. Atualizações não são automáticas (você clica ou roda update.sh quando quiser), e manter/backup do seu servidor é com você.
  • LGPD — atenção: quem hospeda a instância é o controlador dos dados pessoais ali tratados (clientes, conversas, pedidos), com as obrigações legais decorrentes. Os mantenedores do projeto não são controladores nem operadores da sua instância, e não têm acesso ao seu banco, ao seu WhatsApp nem ao seu storage. A única coisa que pode sair da sua máquina para nós é o relatório de erro descrito abaixo — e só se você deixar.
  • Telemetria (Sentry): o install.sh pergunta durante a instalação e respeita a sua resposta; em modo não-interativo, sem SENTRY_DSN definido, a telemetria fica desligada. Se você aceitar o Sentry da comunidade, o que é enviado são relatórios de erro (stack trace) com CPF, telefone e e-mail substituídos, cabeçalhos sensíveis removidos, e token de webhook/convite redigido da URL — sem rastreamento de performance e sem replay de sessão, que ficam em 0 nesse caminho. Para desligar a qualquer momento: SENTRY_DSN=off no .env. Para mandar ao seu Sentry (aí sim com performance e replay): SENTRY_DSN=<seu-dsn>. O que é redigido, e por quê, está em lib/sentry/scrub.ts; a resolução do DSN em lib/sentry/dsn.ts.

🙏 Agradecimentos

  • WAHA (devlikeapro) — engine WhatsApp.
  • Supabase — Postgres + Auth + Storage + Realtime numa stack só.
  • HostGator — parceria de infraestrutura que tornou o self-host de 1 comando possível.
  • Anthropic, OpenAI e OpenRouter — os provedores de IA que o CRM sabe usar.
  • shadcn/ui — base de componentes.
  • A comunidade que nos levou do e-commerce pra clínicas, imobiliárias, infoprodutos e além — vocês definiram o que este projeto é.

Built with ☕ in Brasil · Made for the community

Siga o desenvolvimento: Instagram · YouTube

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

94 total
  1. v1.69.0v1.69.0Sep 30, 2026

    ### Adicionado - **O Jev passa a ler, só observando, a resposta do cliente ao follow-up e comparar a saída que ele escolheria com a da sua IA** O Jev ganha a tarefa **Ler a resposta ao follow-up**. Num fluxo de follow-up com o passo **"Classificar (IA)"**, a sua IA de sempre lê a resposta do cliente à mensagem do fluxo e escolhe por qual das saídas que você criou no passo o fluxo segue. Com o Jev ligado, ele responde a mesma pergunta, entre as mesmas saídas e ao mesmo tempo, recebendo só o que o cliente digitou na resposta — sem CPF, telefone e e-mail — e as saídas e a dica que você escreveu no passo. Resposta em áudio, imagem ou documento não é enviada ao Jev. Nesta versão a tarefa **só observa**: quem escolhe a saída do fluxo é sempre a sua IA de sempre, e o follow-up não espera pelo Jev. O cartão do Jev, em **IA › Provedores**, mostra em quantas mensagens dos últimos 30 dias os dois puseram a resposta do cliente na mesma saída, e diz por que não há o botão "Deixar o Jev decidir" nela: a saída escolhida muda o caminho do cliente no fluxo, e primeiro se mede, com respostas de verdade, o quanto os dois concordam. Passos "Classificar (IA)" com uma saída só não são enviados ao Je

  2. v1.68.0v1.68.0Sep 30, 2026

    ### Adicionado - **O Jev passa a perceber quando o cliente pede para falar com uma pessoa ou para parar de receber mensagens, e pode avisar a equipe na Central** O Jev ganha duas tarefas: **Perceber pedido para falar com uma pessoa** e **Perceber pedido para parar de receber mensagens**. Hoje quem percebe esses pedidos é uma regra sem IA: ela passa a conversa a uma pessoa quando o cliente escreve "quero falar com um atendente" (ou uma das palavras de passagem do agente) e bloqueia o contato quando ele manda "PARAR". Ela é precisa, mas estreita: "quero falar com alguém de verdade, não com robô" passa por ela sem ser visto. O Jev só é perguntado **onde a regra de hoje disse não** — a mensagem que ela já pegou nem sai para a TypeSafe, e a regra olha todas as mensagens do cliente ainda sem resposta, como o atendimento automático olha: "quero falar com um atendente" seguido de "por favor, alguém de verdade" é um pedido que ela pegou — e só onde há um atendente automático no ar naquele número, sem pessoa no comando. Pedido mandado por áudio não é perguntado. As duas perguntas vão juntas, numa chamada ao Jev separada da do clima da conversa: uma falha nela nunca muda a medição do clim

  3. v1.67.0v1.67.0Sep 30, 2026

    ### Adicionado - **O tempo que o agente espera antes de responder passa a ser ajustável por número** A proteção de envio de cada número (em Conexões › Proteção de envio) ganhou quatro campos para o "tempo de pensar" do agente antes da primeira mensagem da resposta: o tempo para ver a notificação, o tempo por caractere digitado, o mínimo e o máximo. Campo vazio mantém exatamente o ritmo de antes (0,9 s + 22 ms por caractere, entre 1,2 s e 7,5 s). Um mínimo acima do máximo é recusado na hora, com a explicação na tela. Quando a resposta sai em várias mensagens, o intervalo entre elas passa a seguir o "intervalo entre mensagens" configurado para o número, em vez de um valor fixo de 1,2 s a 2 s. Quem nunca mudou esse intervalo não nota diferença; quem mudou vê as mensagens da resposta seguindo o valor escolhido. Não é preciso fazer nada na instalação: a atualização acrescenta as colunas sozinha. Contribuição de @webtecnica (#1996), fechando a #653. - **Espera antes de responder (janela de rajada) configurável por agente** No cadastro do agente, em "Freios de segurança", agora dá para ajustar quanto tempo o agente espera antes de responder mensagens do mesmo contato que chegam

  4. v1.66.1v1.66.1Sep 30, 2026

    ### Corrigido - **Anonimizar um contato passa a apagar também a transcrição dos áudios e o texto lido das imagens dele** Quando um contato era anonimizado (LGPD), o texto das mensagens virava "[mensagem anonimizada]", mas a transcrição automática dos áudios e o texto lido das imagens e documentos continuavam guardados e legíveis, inclusive para o agente de IA. Agora a anonimização apaga esse texto junto, pelo pedido formal e pelo botão da ficha, e a atualização limpa também os contatos que já tinham sido anonimizados antes. Não é preciso fazer nada na instalação. Achado na triagem do #1988 (@AlecLimaDev).

  5. v1.66.0v1.66.0Sep 30, 2026

    ### Adicionado - **Cada número ganha uma janela de resposta separada da janela de disparo** Até aqui, a proteção de envio de cada número tinha um único horário (7h às 22h por padrão), e ele valia para tudo: a resposta do agente a quem escreveu, os disparos em massa e as mensagens que retomam conversa parada. Para o agente responder de madrugada, era preciso abrir o horário inteiro, e com ele os disparos. Agora há duas janelas por número, em Conexões › Proteção de envio. A **janela de resposta** vale quando o cliente escreveu e o agente responde. A **janela de disparo** vale para disparos em massa, prospecção e mensagens que retomam conversa parada. Para o agente responder a qualquer hora, use 0 e 24 na janela de resposta. Nada muda ao atualizar: enquanto a janela de resposta estiver em branco, ela segue a janela de disparo, como antes. O teto diário, o aquecimento do número e o intervalo entre envios continuam valendo para os dois tipos de envio. Contribuição de @suporteubere99-coder (#1983).

Commits per week

last 52 weeks
14230Week of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 94 commitsWeek of 2026-05-03: 33 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 0 commitsWeek of 2026-06-21: 0 commitsWeek of 2026-06-28: 6 commitsWeek of 2026-07-05: 28 commitsWeek of 2026-07-12: 165 commitsWeek of 2026-07-19: 745 commitsWeek of 2026-07-26: 232 commitsWeek of 2026-08-02: 366 commitsWeek of 2026-08-09: 313 commitsWeek of 2026-08-16: 94 commitsWeek of 2026-08-23: 508 commitsWeek of 2026-08-30: 300 commitsWeek of 2026-09-06: 241 commitsWeek of 2026-09-13: 1423 commitsWeek of 2026-09-20: 1190 commitsWeek of 2026-09-27: 604 commitsOct 5, 2025Sep 27, 2026
6.3K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 8 commitsSun 1:00 — 26 commitsSun 2:00 — 12 commitsSun 3:00 — 19 commitsSun 4:00 — 6 commitsSun 5:00 — 14 commitsSun 6:00 — 5 commitsSun 7:00 — 10 commitsSun 8:00 — 10 commitsSun 9:00 — 17 commitsSun 10:00 — 19 commitsSun 11:00 — 12 commitsSun 12:00 — 12 commitsSun 13:00 — 20 commitsSun 14:00 — 5 commitsSun 15:00 — 6 commitsSun 16:00 — 9 commitsSun 17:00 — 32 commitsSun 18:00 — 13 commitsSun 19:00 — 11 commitsSun 20:00 — 23 commitsSun 21:00 — 24 commitsSun 22:00 — 19 commitsSun 23:00 — 28 commitsMon 0:00 — 13 commitsMon 1:00 — 6 commitsMon 2:00 — 4 commitsMon 3:00 — 2 commitsMon 4:00 — 6 commitsMon 5:00 — 3 commitsMon 6:00 — 1 commitsMon 7:00 — 26 commitsMon 8:00 — 17 commitsMon 9:00 — 40 commitsMon 10:00 — 47 commitsMon 11:00 — 47 commitsMon 12:00 — 42 commitsMon 13:00 — 52 commitsMon 14:00 — 45 commitsMon 15:00 — 46 commitsMon 16:00 — 35 commitsMon 17:00 — 62 commitsMon 18:00 — 46 commitsMon 19:00 — 33 commitsMon 20:00 — 29 commitsMon 21:00 — 21 commitsMon 22:00 — 40 commitsMon 23:00 — 26 commitsTue 0:00 — 30 commitsTue 1:00 — 14 commitsTue 2:00 — 22 commitsTue 3:00 — 17 commitsTue 4:00 — 14 commitsTue 5:00 — 2 commitsTue 6:00 — 13 commitsTue 7:00 — 16 commitsTue 8:00 — 26 commitsTue 9:00 — 31 commitsTue 10:00 — 37 commitsTue 11:00 — 28 commitsTue 12:00 — 48 commitsTue 13:00 — 42 commitsTue 14:00 — 30 commitsTue 15:00 — 21 commitsTue 16:00 — 32 commitsTue 17:00 — 32 commitsTue 18:00 — 75 commitsTue 19:00 — 89 commitsTue 20:00 — 47 commitsTue 21:00 — 65 commitsTue 22:00 — 66 commitsTue 23:00 — 99 commitsWed 0:00 — 50 commitsWed 1:00 — 28 commitsWed 2:00 — 22 commitsWed 3:00 — 14 commitsWed 4:00 — 9 commitsWed 5:00 — 4 commitsWed 6:00 — 0 commitsWed 7:00 — 9 commitsWed 8:00 — 19 commitsWed 9:00 — 74 commitsWed 10:00 — 63 commitsWed 11:00 — 76 commitsWed 12:00 — 48 commitsWed 13:00 — 86 commitsWed 14:00 — 34 commitsWed 15:00 — 76 commitsWed 16:00 — 72 commitsWed 17:00 — 72 commitsWed 18:00 — 74 commitsWed 19:00 — 64 commitsWed 20:00 — 71 commitsWed 21:00 — 81 commitsWed 22:00 — 41 commitsWed 23:00 — 34 commitsThu 0:00 — 61 commitsThu 1:00 — 48 commitsThu 2:00 — 20 commitsThu 3:00 — 5 commitsThu 4:00 — 1 commitsThu 5:00 — 0 commitsThu 6:00 — 9 commitsThu 7:00 — 27 commitsThu 8:00 — 32 commitsThu 9:00 — 30 commitsThu 10:00 — 41 commitsThu 11:00 — 60 commitsThu 12:00 — 77 commitsThu 13:00 — 28 commitsThu 14:00 — 45 commitsThu 15:00 — 38 commitsThu 16:00 — 39 commitsThu 17:00 — 53 commitsThu 18:00 — 121 commitsThu 19:00 — 68 commitsThu 20:00 — 51 commitsThu 21:00 — 57 commitsThu 22:00 — 50 commitsThu 23:00 — 66 commitsFri 0:00 — 39 commitsFri 1:00 — 17 commitsFri 2:00 — 11 commitsFri 3:00 — 7 commitsFri 4:00 — 4 commitsFri 5:00 — 2 commitsFri 6:00 — 11 commitsFri 7:00 — 29 commitsFri 8:00 — 28 commitsFri 9:00 — 37 commitsFri 10:00 — 36 commitsFri 11:00 — 56 commitsFri 12:00 — 62 commitsFri 13:00 — 47 commitsFri 14:00 — 79 commitsFri 15:00 — 59 commitsFri 16:00 — 47 commitsFri 17:00 — 88 commitsFri 18:00 — 97 commitsFri 19:00 — 75 commitsFri 20:00 — 70 commitsFri 21:00 — 37 commitsFri 22:00 — 61 commitsFri 23:00 — 96 commitsSat 0:00 — 80 commitsSat 1:00 — 33 commitsSat 2:00 — 21 commitsSat 3:00 — 5 commitsSat 4:00 — 3 commitsSat 5:00 — 1 commitsSat 6:00 — 6 commitsSat 7:00 — 34 commitsSat 8:00 — 54 commitsSat 9:00 — 78 commitsSat 10:00 — 116 commitsSat 11:00 — 85 commitsSat 12:00 — 153 commitsSat 13:00 — 66 commitsSat 14:00 — 58 commitsSat 15:00 — 67 commitsSat 16:00 — 60 commitsSat 17:00 — 55 commitsSat 18:00 — 53 commitsSat 19:00 — 47 commitsSat 20:00 — 28 commitsSat 21:00 — 24 commitsSat 22:00 — 37 commitsSat 23:00 — 16 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits5,549 (63%)
Community commits3,282 (37%)

8,831 commits in total over the last year.

DateListRankStars gained
Sep 28, 2026monthly#18+3,489
Sep 27, 2026monthly#18+3,489
Sep 26, 2026monthly#18+3,286
Sep 25, 2026monthly#18+3,225
Sep 24, 2026monthly#18+3,113
Sep 23, 2026monthly#19+3,015
Sep 22, 2026monthly#21+2,968
Sep 20, 2026monthly#18+2,721
Sep 19, 2026monthly#18+2,721
Sep 18, 2026monthly#19+2,586
Sep 17, 2026monthly#19+2,535
Sep 16, 2026daily#4+408
Sep 15, 2026daily#4+408
Sep 14, 2026daily#4+504
Sep 13, 2026daily#4+504
  • public-apis/public-apis

    A collective list of free APIs

    486.1K stars · Python

  • freeCodeCamp/freeCodeCamp

    freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.

    456.7K stars · TypeScript

  • openclaw/openclaw

    The AI that really does things. Any OS. Any Platform. The lobster way. 🦞

    391.3K stars · TypeScript

  • awesome-selfhosted/awesome-selfhosted

    A list of Free Software network services and web applications which can be hosted on your own servers

    323.9K stars

  • obra/superpowers

    An agentic skills framework & software development methodology that works.

    295.3K stars · Shell

  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    272.9K stars · JavaScript