Hoje
O que está esperando você e como o funil está andando.
Sinais
O Thomas propõe o que sabe procurar. Você decide o que define um bom contato — nada é coletado até você confirmar.
Uma lista de contatos é uma consulta, não um arquivo. Escolha os sinais que um bom contato precisa ter — e os que o desqualificam — e veja quantas empresas combinam agora.
Descobrir
Encontre empresas que combinam com o seu perfil de cliente ideal. Escolha uma fonte, veja quanto vai custar e então execute — nada é chamado até você apertar o botão.
Empresas
Organizações que o Thomas pesquisou, das que mais combinam para as que menos. Clique numa linha para ver os contatos dela.
Contatos
Pessoas que o Thomas encontrou, quanta certeza ele tem do endereço e em que ponto cada uma está.
Campanhas
Sequências de e-mail que o Thomas escreveu e até onde cada uma chegou.
Caixa de saída
Mensagens esperando você. Leia uma, decida, siga em frente — A aprovar, R rejeitar, E editar, J/K para mover.
Conversas
Cada resposta e como o Thomas tratou.
Atividade
Um registro corrido de cada ação dos agentes do Thomas.
Uso
Uso de modelos na sua assinatura (Claude ou Codex): chamadas e tokens por provedor, agente e tarefa. Planos de assinatura não cobram por token, então não há custos em dólar aqui.
Ajustes
As credenciais ficam guardadas no servidor do Thomas, em .env ou no banco de dados (a conexão da uazapi), e nunca são enviadas a lugar nenhum além dos próprios serviços.
channels.email.provider em harvey.yaml para gmail, microsoft, smtp ou instantlyGmail / Google Workspace Recomendado
Use uma caixa de e-mail num domínio secundário dedicado. Crie um cliente OAuth (tipo "App para computador") no Google Cloud Console → API do Gmail, cole o id e o segredo, salve e clique em Conectar o Google. No Google Cloud, deixe a tela de consentimento como Interno: em Teste, o Google cancela o acesso depois de 7 dias.
Caixa de e-mail SMTP + IMAP
Qualquer caixa de e-mail de verdade (AgentMail, Fastmail, uma senha de aplicativo do Workspace). O IMAP usa o servidor e o login do SMTP se ficar em branco.
Ler respostas de outro servidor IMAP ou login
Microsoft 365 / Outlook
A Microsoft desligou o login por senha no IMAP, então as caixas do Outlook se conectam por OAuth. No Entra → Registros de aplicativos, registre um aplicativo só para a sua organização e adicione o URI de redirecionamento http://localhost:8766 como "Cliente público/nativo". Cole os dois IDs aqui, salve e depois rode thomas microsoft auth. Não precisa de segredo do cliente.
Instantly Legado
Pegue a sua chave de API em Instantly, Configurações → Integrações (plano Growth ou superior para usar a API).
Verificadores
Adicione pelo menos um para que os e-mails encontrados sejam verificados. Sem nenhum, os endereços ficam como guess e nunca são enviados. A Reoon tem a melhor faixa grátis (600 por mês).
Para prospecção automática no LinkedIn. O Thomas faz login e busca como uma pessoa.
Cloudflare
Leitura profunda de sites, com JavaScript, durante o treinamento do produto. Cerca de US$ 5 por mês.
Controles
Inicie e pare o ciclo do Thomas e acompanhe o que ele está fazendo.
Agente
Registros recentes
Ajuda
O que é o Thomas, como funciona e como resolver os problemas mais comuns.
O que é o Thomas?
O Thomas é um agente de vendas autônomo, com IA, da BTW. Depois de configurado, ele trabalha sozinho: encontra empresas que combinam com o cliente ideal, escreve mensagens personalizadas, envia pelo WhatsApp (e, quando ligado, por e-mail) dentro dos limites do dia, lê cada resposta, trata objeções e trabalha para marcar uma reunião. Você revisa tudo por este painel.
O Thomas roda na assinatura do Claude (ou, se você optar, no seu plano do ChatGPT pelo Codex), então não há custo extra de IA. Tudo fica em uma única pasta.
Primeiros passos
São três coisas a fazer:
1. Vá à aba Ajustes e conecte um provedor de e-mail (Gmail é o recomendado) 2. Treine o Thomas no seu produto (pelo Claude ou pela linha de comando) 3. Vá à aba Controles e clique em Iniciar
A aba Hoje mostra exatamente o que já foi feito e o que ainda falta.
Onde fica cada coisa
Tudo o que o Thomas precisa está nesta pasta do projeto. Nada fica guardado em outro lugar.
| .env | Suas chaves de API e credenciais (nunca compartilhadas nem versionadas) |
| harvey.yaml | Dados do seu produto, clientes-alvo e ajustes de comportamento |
| skills/ | Arquivos de conhecimento de vendas. Edite para mudar como o Thomas escreve e vende. |
| skills/product_knowledge.md | Tudo o que o Thomas sabe sobre o seu produto (gerado do treinamento) |
| prompts/ | Modelos de instruções de cada agente. Personalização avançada. |
| data/harvey.db | Banco de dados com todos os contatos, campanhas e conversas |
| data/harvey.log | Arquivo de registro do que o Thomas está fazendo |
Como pegar suas chaves de API
Chave de API da Instantly (legado)
A Instantly é a opção antiga de envio; o recomendado é Gmail ou SMTP.
1. Crie uma conta em instantly.ai (é preciso o plano Growth para usar a API)
2. Vá em Configurações > Integrações
3. Copie sua chave de API
4. Cole na aba Ajustes aqui
Credenciais do LinkedIn (opcional)
Se você quer que o Thomas encontre contatos no LinkedIn, informe o e-mail e a senha do LinkedIn. O Thomas usa um navegador de verdade para buscar como uma pessoa, com pausas aleatórias e limites de ritmo para não ser detectado.
Se você pular isso, o Thomas encontra contatos por buscas no Google e pela leitura dos sites das empresas.
Cloudflare Browser Rendering (opcional)
Só é usado durante o treinamento do produto (quando o Thomas lê o seu site para aprender sobre o produto). Ele cuida de sites pesados em JavaScript que um leitor simples não consegue ler.
1. Crie uma conta em Cloudflare (plano pago do Workers, cerca de US$ 5 por mês)
2. Vá em Workers & Pages > Browser Rendering
3. Crie um token de API com permissão de edição do Browser Rendering
4. Informe o ID da conta e o token de API na aba Ajustes
Sem isso, o Thomas usa um leitor próprio que funciona bem na maioria dos sites, mas não executa JavaScript.
Problemas comuns
"command not found: thomas"
source .venv/bin/activateA API da Instantly devolve 401
O modo sem tela do Claude falha
claude login no terminal e que tem uma assinatura ativa do Claude. O Thomas usa a assinatura que você já tem, não uma chave de API separada.As chamadas do Codex falham
brain.provider: codex, defina brain.model para o ID de um modelo disponível, incluindo Luna, Sol ou Terra (por exemplo gpt-6.1-sol), ou deixe em branco para escolher um modelo da lista. O Thomas roda esses modelos sem ferramentas; gpt-5.5 também continua aceito quando está no catálogo da sua conta. Rode codex login e escolha "Sign in with ChatGPT" (logins por chave de API são recusados). O Thomas nunca renova o seu login do Codex: se o registro disser que ele venceu ou está perto de vencer, use o Codex uma vez ou rode codex login. O Thomas precisa da CLI do Codex 0.159.3 no macOS ou no Linux (o Codex não é aceito no Windows; use o Claude lá) e recusa outras versões. Enquanto o Codex não pode ser usado, o Thomas pausa (a aba Hoje mostra "Codex pausado" e o motivo), não mexe nas respostas nem nos e-mails na fila e volta quando o problema for resolvido; thomas status --check confere sob demanda. Se o registro disser que o isolamento não pôde ser verificado, uma camada de configuração do Codex está forçando de volta uma ferramenta, um gancho, um servidor MCP ou um endereço próprio — o Thomas recusa enviar instruções até isso ser removido. O Thomas nunca troca para o Claude por conta própria.