v1 · núcleo construído e testado (47 testes)

Uma agência de sites de uma pessoa só, no automático

Descobre negócios bem avaliados com site ruim, redesenha a página, publica e manda a proposta — orquestrador determinístico + IA só onde precisa, operado pelo Telegram.

# a esteira, do começo ao fim
descoberto
   qualificado     # julga "site ruim?" (IA)
   redesenhado     # página premium (IA)
   publicado       # git → GitHub Pages
   [ PORTÃO ]      # aprova no Telegram (ou --auto)
   enviado         # proposta via Resend
   respondido  fechado
O que é

Uma esteira que roda achou → refez → publicou → ofertou

Semi-autônoma: as fases pesadas rodam sozinhas, e você mantém o controle do envio. Baseada no plugin prospector-de-sites (usado como referência), reconstruída como serviço operável.

⛏️ Esteira completa

Descobre, qualifica, redesenha, publica e envia — cada fase é um estágio de uma máquina de estados que sobrevive a reinício e é idempotente por lead.

🧠 IA só onde precisa

Fila, portão e estados são Python puro e testável. O modelo (claude -p) entra só pra julgar o site e redesenhar a página — o resto é código, sem gastar token.

🔌 Plugável e portável

A descoberta troca de navegador para API por config. A mesma base roda local, híbrido em VPS ou tudo em VPS — sem reescrever nada.

Como funciona

O ciclo de vida de um lead

Cada seta é uma transição idempotente: se já foi feita, pula. O único ponto de humano é o portão antes do envio — e ele some quando o pedido vem com --auto.

descoberto qualificado redesenhado publicado [ portão ] enviado respondido fechado

Ramos: sem site / site bom / sem e-mail → descartado. Falha de rede/API → erro (alerta no Telegram, com /retry).

Pré-requisitos

O que você vai precisar (v1, local)

A v1 roda na sua máquina — o navegador resolve o captcha do Maps com você por perto. As versões seguintes migram pra API e VPS.

Python 3.11+

Todo o núcleo. Sem dependências pesadas no começo.

# confira a versão
python3 --version

Claude Code CLI

As fases de IA (qualificar, redesenhar) usam claude -p com skills.

# confira o CLI
claude --version

Contas + segredos

Resend (e-mail), GitHub (Pages), Telegram (bot). Tokens só no .env, nunca no chat.

# template
cp .env.example .env
Guia de uso · roteiro por milestone

Como colocar de pé

A construção é por milestones, cada um entregando software testável. O M1 (Fundação) é o alvo atual — o design e o plano já estão no repo.

Status: v1 (núcleo determinístico) construído e testado — 47 testes verdes. Os comandos demo e prospectar --provider fake já rodam; os que tocam Google Maps, claude -p, Resend, Telegram e deploy dependem das suas credenciais (ver README → "O que falta").
0

Clonar e ler o design

Todo o projeto parte de um spec e um plano versionados.

git clone https://github.com/inematds/prospector-agent
cd prospector-agent
# design completo e plano do M1:
#   docs/superpowers/specs/2026-07-14-prospector-agent-design.md
#   docs/superpowers/plans/2026-07-14-m1-fundacao.md
1

M1 · Fundação — o núcleo e o dry-run

Config, Store SQLite, máquina de estados e a CLI que avança um lead pela esteira sem publicar nem enviar.

python -m pytest -v                 # suíte do núcleo
python -m prospector demo --dry-run --auto
# → descoberto → qualificado → redesenhado → publicado → enviado
2

M2 · Descoberta + Qualificação

Acha candidatos no Google Maps (nota ≥ 4.7, com site) e julga quais têm site ruim, extraindo e-mail e WhatsApp.

prospector prospectar nutricionistas Bauru
# → leads qualificados salvos no prospector.db
3

M3 · Criação + Publicação

Redesenha a página premium (mantendo logo, cores e conteúdo reais) e publica no GitHub Pages com HTTPS.

prospector publicar <slug>
# → https://usuario.github.io/prospector-sites/<slug>/
4

M4 · Envio + Telegram (esteira completa)

Manda a proposta via Resend, com o portão de aprovação no Telegram. O bot opera tudo; o --auto pula o portão.

# pelo bot do Telegram:
/prospectar nutricionistas Bauru --auto
# fases correm sozinhas; o bot notifica cada envio
O núcleo

Controle determinístico, em código

O coração do sistema não é o agente — é a máquina de estados e o portão. Ficam em código simples e testável; a IA é chamada só dentro de dois estágios.

# prospector/maquina_estados.py — transições válidas
TRANSICOES = {
  DESCOBERTO: {QUALIFICADO, DESCARTADO},
  QUALIFICADO: {REDESENHADO, DESCARTADO},
  REDESENHADO: {PUBLICADO, ERRO},
  PUBLICADO: {AGUARDANDO_APROVACAO, ENVIADO, ERRO},
  AGUARDANDO_APROVACAO: {ENVIADO, DESCARTADO},
  ENVIADO: {RESPONDIDO, ERRO},
  RESPONDIDO: {FECHADO, DESCARTADO},
}
# o portão A+B, em uma linha
if lead.sem_portao or aprovado_no_telegram(lead):
    enviar(lead)          # Resend
else:
    aguardar_aprovacao(lead)   # pede OK no Telegram

# dry-run: roda a esteira sem publicar nem enviar
$ python -m prospector demo --dry-run --auto
descoberto → qualificado → redesenhado
           → publicado → enviado
Roadmap

Local → híbrido → tudo em VPS

A portabilidade de topologia é um princípio de design: a mesma base sobe de nível só trocando config e onde roda.

v1 · Local
Esteira completa na sua máquinaDescoberta por navegador (você resolve o captcha), portão ligado, dashboard local.
v1.x · Híbrido
Orquestrador na VPSBot, publicação e envio sempre no ar na VPS; o scanner (browser) fica local e empurra os leads.
v2 · Tudo VPS
Descoberta por API, sem navegadorPlaces API (oficial) ou terceiros como provider plugável; repo próprio + domínio custom por cliente na conversão.