Pular para o conteúdo
Pedro Braiti
← Todos os projetos

Sistemas autônomos

Scout · Valet · Vizier

Uma stack em três camadas que deixa um agente de IA pesquisar mercado, decidir e executar ordens de verdade — com a trava de segurança fechando por padrão.

Scout · Valet · Vizier
Medido

US$ 2

a ordem real que provou que 653 testes verdes não bastavam

Condição
conta live na Interactive Brokers · ordem de mercado em AAPL
Papel
Autor, projeto próprio
Contexto
Três repositórios públicos, licença MIT
Período
2026
Situação
Público · validado com ordem real

O problema

Dar a um agente de IA acesso a uma corretora é fácil. O difícil é garantir que ele não faça besteira com dinheiro de verdade — e provar que a garantia funciona.

Separei o sistema em três peças que não se misturam. Scout só lê: 62 ferramentas de pesquisa sobre ações, ETFs, cripto, macro, SEC e dados on-chain, todas de fontes gratuitas, sem nenhuma capacidade de escrever. Valet é a única peça que toca na corretora, e toda ordem passa por um guarda que fecha por padrão: sem autorização explícita, a ordem não sai. Vizier decide — pesquisa, dimensiona por convicção, guarda a tese entre sessões e mede o próprio desempenho contra o benchmark.

A decisão que mudou o projeto

Eu tinha 653 testes passando e CI verde nos três repositórios — a contagem de julho de 2026, antes da ordem. Mandei uma ordem de dois dólares numa conta real, só para ver.

A ordem revelou um bug de unidade: o sistema tratava um valor em dólares como se fosse quantidade de ações. Numa venda, isso teria colocado um stop vendendo mais papel do que existia na carteira — uma posição vendida a descoberto que ninguém pediu.

Os testes não pegaram porque os fakes mentiam: eles respondiam no formato que eu esperava, não no formato que a corretora devolve. Nenhuma quantidade de teste offline encontraria isso.

O resultado

O bug foi corrigido nos dois repositórios afetados e virou uma decisão registrada: integração se prova em produção, com dinheiro pequeno. Testes provam lógica; eles não provam que você entendeu a outra ponta.

O mesmo princípio derrubou outro problema mais tarde — o servidor travava na primeira chamada porque as bibliotecas de dados bloqueavam o loop assíncrono. A correção não foi aumentar o timeout: foi aquecer as bibliotecas no startup, atacando a causa.