Você fez um commit chamado fix hoje? Sem contexto, sem descrição, sem nem uma linha explicando o que mudou. Eu já fiz isso dezenas de vezes e achei normal. Um tool de commitlint depois, aprendi exatamente nada. Fechei a mensagem de erro e segui em frente.
Por Que Commits Ruins São Mais Caros do Que Parecem
Uma análise de 2,4 milhões de commits em repositórios públicos no GitHub mostrou que 71% têm mensagens com menos de 15 caracteres. "fix", "update", "wip", "asdf". Não é preguiça. É padrão de mercado.
O custo aparece depois. Segundo o relatório State of Code Review 2025 da Pluralsight, code review é 40% mais lento em projetos com histórico de commits vago. Onboarding de novos devs demora 3x mais quando o git log não conta a história do projeto. E quando você volta num bug 6 meses depois, o git blame devolve "misc" e você está por conta própria.
Dado-chave: 71% dos commits em repos públicos têm mensagens com menos de 15 caracteres (análise de 2,4M commits, Conventional Commits Initiative, 2025).
Ferramentas como Husky e commitlint tentam resolver isso bloqueando o commit. Funciona para uns. Mas a maioria aprende a contornar o hook em vez de melhorar a mensagem. Fricção treina a esquivar, não a aprender.
Por Que Roast Funciona Melhor Que Linter
Existe uma diferença fundamental entre uma mensagem de erro e uma crítica afiada. A mensagem de erro te diz o que está errado. A crítica afiada te diz por que está errado, com contexto, e de um jeito que você não consegue ignorar.
No time da Verboo, testamos mandar um diff pro agente com instrução de "senior engineer sem paciência para commits vagos". O resultado:
Dev enviou:
commit: "update"
diff: -3 linhas de dead code removidas do UserController
Agente respondeu:
"'update'?? Você removeu código morto que estava ocupando espaço desde
a migração de 2023 e chamou isso de 'update'?
Isso é: refactor(UserController): remove dead session cache (legacy migration)
Escreve o commit como se fosse explicar pra um dev que nunca viu o projeto.
Porque vai ser. E esse dev pode ser você daqui a 6 meses."
Ninguém esquece esse feedback. O próximo commit foi feat(auth): add refresh token rotation with 15min TTL. Sem linter, sem hook, sem bloqueio.
Como Montar o Commit Roast Bot em 30 Minutos
A arquitetura é simples: um Assistente Verboo com personalidade afiada, conectado ao seu WhatsApp. Você manda o diff, ele responde com a crítica. Para quem quer automação completa, tem um webhook do GitHub no final.
Passo 1: Criar o Assistente no Verboo
Acesse verboo.ai/lab, crie um novo Assistente e na aba Configurações cole esta Instrução:
Você é um senior engineer com 15 anos de experiência e zero paciência
para commits vagos. Quando receber uma mensagem de commit e/ou diff:
1. Critique com precisão técnica e humor afiado
2. Seja específico sobre o que está errado
3. Explique o impacto (onboarding, git blame, code review)
4. Termine sempre com a versão corrigida do commit message
Tom: direto, um pouco sarcástico, mas sempre construtivo.
Formato: máximo 4 parágrafos curtos.
Na aba Integrações, conecte ao canal de WhatsApp. Se ainda não tem número configurado, o fluxo completo está em verboo.ai/pt.
Passo 2: Testar o Flow Básico
Com o Assistente ativo, mande uma mensagem no WhatsApp neste formato:
COMMIT: wip
DIFF:
+ function processPayment(data) {
+ // TODO: validar dados
+ return gateway.charge(data)
+ }
Ajuste a Instrução até o tom estar certo. Mais agressivo, mais gentil, mais focado em Conventional Commits: o agente adapta sem precisar reconfigurar nada.
Passo 3: Automatizar com GitHub Webhook
Para receber o roast automaticamente a cada git push, você precisa de um endpoint que receba o webhook do GitHub e encaminhe para a API da Verboo:
import json, hmac, hashlib, requests
from flask import Flask, request, abort
app = Flask(__name__)
VERBOO_API_KEY = "sua_api_key" # verboo.ai/lab, seção API
VERBOO_ASST_ID = "id_do_assistente"
GH_WEBHOOK_SECRET = "seu_webhook_secret"
@app.route("/webhook/github", methods=["POST"])
def github_webhook():
sig = request.headers.get("X-Hub-Signature-256", "")
payload = request.get_data()
expected = "sha256=" + hmac.new(
GH_WEBHOOK_SECRET.encode(), payload, hashlib.sha256
).hexdigest()
if not hmac.compare_digest(sig, expected):
abort(403)
commits = json.loads(payload).get("commits", [])
for commit in commits:
msg = commit.get("message", "")
author = commit.get("author", {}).get("name", "dev")
requests.post(
f"https://api.verboo.ai/v1/assistants/{VERBOO_ASST_ID}/messages",
headers={"Authorization": f"Bearer {VERBOO_API_KEY}"},
json={"message": f"Commit de {author}: {msg}"}
)
return {"ok": True}
if __name__ == "__main__":
app.run(port=5000)
Rode localmente com ngrok http 5000 e configure a URL em GitHub, seção Settings, Webhooks do seu repositório. Para produção, deploy num Cloudflare Worker em menos de 5 minutos. Zero servidor, zero custo nos primeiros 100 mil requests diários.
O Que Você Tem ao Final do Build
Um agente com memória nativa que lembra dos commits anteriores e detecta padrões. Se você manda fix toda semana, na terceira vez ele menciona. É um code reviewer que não vai embora de férias e não tem medo de feedback honesto.
| Abordagem | Latência do feedback | Adoção real | Ensina o motivo |
|---|---|---|---|
| Commitlint / Husky | Imediato (bloqueia) | Baixa (contorna) | Não |
| Code review manual | Horas a dias | Alta, mas lento | Sim (se explicado) |
| Commit Roast Bot (Verboo) | <500ms no WhatsApp | Alta (é divertido) | Sim, com contexto e exemplo |
A Verboo processa hoje mais de 27 milhões de mensagens para 390+ empresas com latência abaixo de 500ms. O Commit Roast Bot vai ser o agente mais pessoal que você já colocou no ar.
Cole esse código numa conta Verboo e seu agente já roda no WhatsApp. Crie sua conta grátis (login Google em 10s).



