2

Um agente de IA tocando um negócio sozinho: como montei o loop e o que aprendi nos primeiros dias

Domingo eu dei pro Claude Code um VPS e uma única instrução: invente e construa um negócio que gere receita de verdade. Não escolhi ideia, stack nem mercado. Queria ver até onde um agente vai sem supervisão e o que sobra pra mim. Aqui está o setup e o que deu errado.

O loop

Um timer do systemd roda o Claude Code em modo headless a cada 30 minutos, com limite de 25 minutos por rodada. Cada rodada é uma sessão nova, sem memória. O que passa de uma rodada pra outra são 3 arquivos num repo git:

  • STATE.md: a verdade atual do negócio (o que está no ar, métricas, próximos passos). Limite de ~200 linhas e a regra de reescrever, não acumular. Sem limite, vira um log que ninguém lê.
  • JOURNAL.md: uma entrada por rodada, só acrescentada.
  • TICK.md: as instruções com que toda rodada começa. Ele mesmo edita conforme aprende o que faz uma rodada boa.

Processo que precisa continuar rodando (o app, workers) vai pra container Docker com restart policy ou serviço systemd, porque tudo que a rodada deixa em background morre quando ela acaba.

Falar com o humano

Um script manda mensagem pro meu Telegram. Ele usa pra pedir o que só eu posso dar: dinheiro, identidade, CAPTCHA, login. Minha resposta entra no prompt da rodada seguinte. A instrução é juntar as perguntas numa mensagem só e seguir com outro trabalho enquanto espera.

Limites

A conta do Stripe é compartilhada com outros projetos meus. Tudo que ele cria leva uma tag de metadata e ele não pode alterar nada sem a tag. Segredos vêm de um gerenciador de segredos como variáveis de ambiente. Ele não tem cartão. E não pode spam, review fake, nem oferta regulada.

O que aconteceu

  • Rodada 1: escolheu fazer uma auditoria de landing page com IA. Playwright tira screenshot no desktop e no celular, extrai títulos, CTAs e metadados, um LLM avalia em 7 critérios e devolve os 3 maiores problemas com correções que citam o texto da página. Stripe Checkout pro relatório completo. No ar em menos de uma hora.
  • Dia 1, 45 rodadas: mais de 120 páginas, 80 homepages ranqueadas, 5 ferramentas grátis, uma API e um servidor MCP no registry oficial, cadastro em diretórios com uma caixa de e-mail catch-all que ele mesmo lê.
  • Erros: avaliou páginas de desafio da Cloudflare como se fossem o site (hoje espera o desafio e falha com mensagem clara), contou scanners que rodam JavaScript como visitantes, e passou o dia construindo. Zero pessoas viram.
  • Dia 2: perguntei por que o produto usava Gemini Flash. Era só o padrão da primeira rodada. Ele reprocessou 3 auditorias salvas em 5 modelos e trocou pro Claude Haiku, com crítica igual ou melhor e umas 7x mais barato (uns US$ 0,003 por auditoria). Bônus: com JSON schema estrito, o modelo parou de pular campos.

Lições

  1. Arquivo de memória precisa de limite de tamanho e regra de reescrita.
  2. "Gere receita" sem fases vira "construa mais" pra sempre. A regra que resolveu: nada de feature nova até 100 visualizações reais.
  3. O canal pra falar com o humano é a ferramenta mais importante do agente.
  4. Código é a parte fácil. Distribuição precisa de gente: o HN proíbe texto gerado, metade dos diretórios tem CAPTCHA.

Hoje está em US$ 0 de clientes e praticamente zero usuários. Ele escreve um diário público (https://pagecritic.app/journal) e mantém os números ao vivo (https://pagecritic.app/stats). Se quiserem testar com a landing page de vocês: https://pagecritic.app/?via=tabnews. A nota e os 3 maiores problemas são grátis, com um prompt pra colar no seu agente de código, e os 10 primeiros leitores do TabNews ganham o relatório completo (um por pessoa; a página mostra quantos restam). Depois disso, US$ 9,50 na semana de lançamento. O site é em inglês e funciona com páginas em português.

Carregando publicação patrocinada...
1

Cada rodada nasce sem memória e abre pelo TICK.md. O STATE.md tem teto e é reescrito. O TICK.md a própria rodada edita, e o texto não fala de teto nenhum. Se a instrução de abertura cresce a cada ciclo, o arquivo que entra em toda sessão vira o log que o STATE.md existe para não ser.