1

Pitch: Sorcerer: um app open source pra macOS que simula uma comunidade de agentes de IA reagindo a uma pergunta "e se...?"

Fala, pessoal! Eu sou o Guilherme e sou o autor do projeto. Queria mostrar o Sorcerer e explicar como ele funciona por dentro.

O que é

É um app nativo para macOS (SwiftUI, macOS 15+, licença MIT). Você escreve uma hipótese, tipo "e se o app subisse o plano de US$ 9 pra US$ 14?", monta uma comunidade de personagens e acompanha rodada a rodada como eles postam, respondem, concordam, discordam e mudam de opinião.

Cada personagem tem papel, bio, traços, objetivos, humor (de -1 a 1), memórias e laços com outros personagens ("colega", "rivais"). Durante a simulação dá pra:

  • pausar e injetar um evento no mundo
  • puxar um personagem pra uma conversa 1:1 e perguntar por que ele pensa aquilo
  • fazer enquetes (⌘P) com todo mundo, com ou sem "registro"
  • deixar os personagens agirem: assinar, cancelar, sair, voltar, convidar alguém
  • criar uma ramificação do mundo a partir de qualquer rodada e comparar os futuros

No fim sai um relatório em que cada conclusão aponta pros posts que a geraram.

Por que eu fiz

Eu queria um jeito rápido de levantar objeções e reações antes de testar uma ideia com gente de verdade, principalmente coisas de produto como preço e mensagem. Me inspirei no MiroFish, mas quis algo local, nativo e que rodasse com a IA que eu já pago, sem pedir chave de API pra ninguém. Vale o aviso que está no README: simulação gera hipóteses, não substitui evidência real.

Como funciona por dentro

Sem chave de API. O app não embarca modelo nem guarda token. Ele chama as ferramentas oficiais que você já tem logadas: o CLI claude (Claude Code), o CLI codex (ChatGPT) ou o Ollama em localhost:11434. No caso do Claude, roda claude -p sem ferramentas, sem persistir sessão e com --output-format stream-json, que também traz as janelas de uso da assinatura. Assim o app pausa antes de você estourar o limite.

Uma rodada = um prompt. O Engine.swift monta um prompt com o elenco (handle, papel, humor, laços, últimas 4 memórias, última ação), os eventos, os últimos 24 posts e o que cada um pode saber. O modelo responde só com JSON: posts, reações, uma memória nova por personagem e ações. O app valida tudo, descarta autor desconhecido e limita o humor entre -1 e 1.

Quem sabe o quê. Você pode apontar o app pra um repositório do GitHub (pelo seu gh), uma pasta, um site ou arquivos. Ele escreve um "brief" com fatos marcados como public, insider ou hidden. Fato de insider só entra no prompt dos personagens insiders, e o hidden ninguém vê. Arquivos .env e chaves nunca são abertos.

Streaming. Enquanto o JSON da rodada chega, um parser parcial decodifica os posts que já fecharam e mostra o que está aberto como "@fulano está digitando...". Funciona com Claude e Ollama. O codex ainda não faz streaming (é uma das issues abertas).

Ramificações. Criar um fork copia o branch atual com as mesmas pessoas e memórias. Pra voltar a uma rodada antiga, o rewind filtra posts, eventos, ações e enquetes até a rodada N e reconstrói o humor de cada um a partir dos posts.

O app é Swift puro, sem dependências. A landing page fica num monorepo com Bun + Turbo (React, TanStack Router, Hono, tRPC).

Quer contribuir?

Abri issues bem delimitadas, com contexto, arquivos e critério de aceite:

  • #15 Configurar outro host do Ollama
  • #16 Labels de acessibilidade (VoiceOver)
  • #17 Criar um novo template de experimento
  • #18 Testes do parsing do Ollama
  • #19 Biome e build da landing no CI
  • #20 Remover módulo todo que sobrou do scaffold
  • #21 Streaming no ChatGPT/codex (help wanted)

Pra rodar: cd apps/macos && swift run. Os testes são swift test. Dica: com Ollama dá pra testar sem gastar limite de assinatura.

Feedback é muito bem-vindo, principalmente sobre onde a simulação convence e onde ela desanda.

Carregando publicação patrocinada...