๐๏ธ Arquitetura: replicando oh-my-openagent
O oh-my-openagent (OMO) e um dos sistemas multiagentes mais sofisticados em producao. Sua arquitetura e um pipeline hierarquico onde um orquestrador central โ chamado Sisyphus โ coordena uma equipe de agentes especializados: o Prometheus (planejador) que cria a spec, o Hephaestus (coder) que implementa, o Reviewer que avalia a qualidade e o Test Engineer que valida o resultado. Cada agente usa um modelo de IA diferente deliberadamente, criando uma diversidade cognitiva que captura erros que um unico modelo ignoraria.
Neste projeto, voce vai replicar essa arquitetura do zero. O objetivo nao e copiar o OMO linha por linha, mas entender os principios que fazem ele funcionar e construir sua propria versao. O Sisyphus e um "loop incansavel" โ ele delega, recebe resultado, avalia, e se nao estiver satisfeito, delega novamente. Ele nunca para ate que a tarefa esteja completa e aprovada. Esse padrao de persistencia e o que diferencia swarms de producao de demos.
๐ก Mapa de Agentes
- โข Sisyphus (Orquestrador): Recebe a tarefa do usuario, decompoe em subtarefas, delega para agentes especializados e nao para ate completar. Usa o modelo mais potente disponivel (Claude Opus, GPT-5.3)
- โข Prometheus (Planejador): Faz discovery questions, identifica requisitos e gera spec.md detalhada com criterios de aceitacao claros
- โข Hephaestus (Coder): Implementa o codigo seguindo a spec. Trabalha em tarefas atomicas com file ownership para evitar conflitos
- โข Reviewer + Test Engineer: Revisam o codigo usando modelo diferente do coder (anti-blindspot) e geram testes automatizados
๐ Fluxo de execucao
- 1. Receber tarefa: Sisyphus analisa o pedido do usuario e decide se precisa de planejamento ou pode executar diretamente
- 2. Planejar: Prometheus faz perguntas de clarificacao e gera spec.md com tasks atomicas e criterios de aceitacao
- 3. Executar: Hephaestus implementa cada task em sequencia (ou paralelo se nao houver dependencias)
- 4. Revisar: Reviewer avalia o codigo โ APPROVED ou NEEDS_REVISION com feedback especifico
- 5. Testar: Test Engineer gera e executa testes unitarios, de integracao e adversariais
- 6. Iterar: Se revisao ou testes falharem, Sisyphus envia de volta para correcao ate atingir qualidade aceitavel
๐ Fase de planejamento: entrevista e spec
A fase de planejamento e onde a maioria dos projetos de software falha โ e com swarms nao e diferente. Um agente coder que recebe uma instrucao vaga vai produzir codigo vago. O agente planejador (Prometheus) resolve isso fazendo discovery questions โ perguntas de clarificacao que forcam o usuario a definir exatamente o que quer. "Qual framework usar?", "Precisa de autenticacao?", "Qual banco de dados?" โ cada pergunta elimina ambiguidade que geraria retrabalho na execucao.
O resultado do planejamento e um arquivo spec.md que contem: descricao do projeto, requisitos funcionais e nao-funcionais, stack tecnologica escolhida, lista de tasks atomicas (cada uma com escopo claro e criterios de aceitacao) e dependencias entre tasks. Esse arquivo e o "contrato" entre o planejador e o coder โ tudo que nao esta na spec nao sera implementado, e tudo que esta na spec deve ser implementado completamente.
๐ก Componentes do Planejamento
- โข Discovery Questions: 5-10 perguntas que eliminam ambiguidade โ stack, escopo, dependencias, constraints, prioridades
- โข spec.md: Documento estruturado com requisitos, tasks, criterios de aceitacao e dependencias entre tasks
- โข Task Decomposition: Cada task deve ser atomica (completavel por um agente em uma sessao), testavel e independente quando possivel
- โข Acceptance Criteria: Cada task tem criterios claros do que significa "feito" โ sem criterios, e impossivel saber quando parar
โ ๏ธ Armadilha: "plano perfeito"
O planejamento deve ser bom o suficiente, nao perfeito. Gastar 30 minutos planejando uma tarefa de 5 minutos e desperdicio. A regra pratica: se a tarefa leva menos de 10 interacoes, o Sisyphus pode pular o planejamento e delegar diretamente para o coder. O Prometheus so e acionado para tarefas complexas que envolvem multiplos arquivos ou decisoes de arquitetura.
๐ป Fase de execucao: coding com zonas seguras
A execucao paralela e o santo graal dos swarms de desenvolvimento โ multiplos agentes codificando simultaneamente, cada um em sua tarefa, produzindo em minutos o que levaria horas sequencialmente. Mas paralelismo sem coordenacao e receita para desastre: dois agentes editando o mesmo arquivo geram conflitos de merge, um agente importando um modulo que outro esta modificando causa erros em cascata. A solucao e o conceito de zonas seguras.
Zonas seguras significam que cada agente tem ownership exclusivo sobre os arquivos que esta modificando. O orquestrador distribui tasks de forma que dois agentes nunca editem o mesmo arquivo simultaneamente. Quando isso nao e possivel (ex: dois agentes precisam adicionar rotas no mesmo router.ts), a task e dividida em sub-tasks sequenciais ou o arquivo conflitante e tratado por um unico agente. Cada task atomica define explicitamente quais arquivos serao criados ou modificados, e o sistema valida que nao ha sobreposicao antes de iniciar a execucao paralela.
๐ก Estrategias de Paralelismo Seguro
- โข File Ownership: Cada task lista os arquivos que vai criar/modificar. O scheduler garante que nao ha sobreposicao entre tasks paralelas
- โข Atomic Tasks: Cada task e autossuficiente โ cria os arquivos necessarios, escreve testes e valida localmente antes de marcar como completa
- โข Merge Strategy: Tasks paralelas sao mergeadas na ordem de conclusao. Se houver conflito, o orquestrador resolve com um merge agent dedicado
- โข Dependency Graph: Tasks com dependencias rodam sequencialmente; tasks independentes rodam em paralelo โ o scheduler otimiza automaticamente
๐ Ganhos de paralelismo
- 3-5x mais rapido: Projetos com 10+ tasks independentes completam em 1/3 a 1/5 do tempo sequencial
- Custo proporcional: Paralelismo nao aumenta custo total de tokens โ as mesmas tasks sao executadas, apenas simultaneamente
- Limite pratico: Alem de 5-7 agentes paralelos, a overhead de coordenacao comeca a superar o ganho de velocidade
- Quando evitar: Tasks altamente interdependentes ou que modificam muitos arquivos compartilhados sao melhor executadas sequencialmente
๐ Fase de revisao: cross-model review
A revisao cross-model e uma das tecnicas mais poderosas e menos intuitivas dos swarms: usar um modelo de IA diferente do que escreveu o codigo para revisao-lo. Se o Hephaestus codou usando Claude Sonnet, o Reviewer usa GPT-5.3 (ou vice-versa). A razao e que modelos do mesmo provider tendem a ter os mesmos blindspots โ padroes que eles nao conseguem detectar em seu proprio output porque sao inerentes ao seu treinamento. Usar um modelo de provider diferente introduz uma "perspectiva alternativa" que captura erros que o modelo original nunca veria.
O Reviewer nao faz apenas code review tradicional. Ele avalia contra uma checklist estruturada: corretude (o codigo faz o que a spec pede?), seguranca (ha vulnerabilidades OWASP?), performance (ha gargalos obvios?), manutenibilidade (o codigo e legivel e bem estruturado?) e completude (ha TODOs, stubs ou placeholders?). O resultado e binario: APPROVED ou NEEDS_REVISION com feedback especifico sobre o que precisa ser corrigido.
๐ก Checklist de Revisao
- โข Corretude: O codigo implementa todos os requisitos da spec? Os criterios de aceitacao sao atendidos?
- โข Seguranca: Ha injection, XSS, secrets hardcoded, path traversal ou outras vulnerabilidades OWASP Top 10?
- โข Manutenibilidade: Funcoes com mais de 50 linhas? Complexidade ciclomatica alta? Nomes de variaveis obscuros?
- โข Completude: Ha TODOs, stubs, funcoes vazias, imports nao utilizados ou placeholders nao resolvidos?
๐ Eficacia do cross-model review
- Reducao de 60% em bugs: Modelos diferentes capturam classes de erros que o modelo original nunca detectaria
- Custo adicional minimo: A revisao tipicamente consome 10-20% dos tokens da implementacao โ investimento com ROI altissimo
- Pares comprovados: Claude + GPT, Gemini + Claude, Codex + Sonnet โ diversidade de treinamento e o que importa
- Limite de iteracoes: Se o codigo nao e aprovado apos 3 revisoes, escala para humano โ evita loops infinitos de correcao
๐งช Fase de teste: testes automatizados
O agente testador (Test Engineer) e responsavel por gerar e executar testes que provam que o codigo funciona corretamente. Mas ha uma armadilha fundamental: IAs sao excelentes em gerar testes que parecem corretos mas nao testam nada de verdade. O fenomeno do "testing theater" โ 268 assertions testando strings de prompt em vez de comportamento real โ e um caso real documentado em projetos open-source gerados por IA.
Para evitar testing theater, o Test Engineer deve gerar tres tipos de testes: testes unitarios que verificam funcoes individuais com inputs variados (incluindo edge cases), testes de integracao que verificam que componentes funcionam juntos e testes adversariais que tentam deliberadamente quebrar o codigo com inputs maliciosos, volumes extremos e condicoes de corrida. Os testes devem verificar comportamento, nao implementacao โ testar que a funcao retorna o resultado correto, nao que ela usa determinada variavel interna.
๐ก Tipos de Testes
- โข Unit Tests: Testar funcoes isoladas com inputs normais, edge cases (null, vazio, overflow) e tipos invalidos
- โข Integration Tests: Verificar que modulos interagem corretamente โ API retorna dados certos, DB persiste corretamente
- โข Adversarial Tests: Inputs maliciosos (SQL injection, XSS payloads), volumes extremos (100k registros), race conditions
- โข Mutation Testing: Introduzir erros deliberados no codigo e verificar que os testes falham โ se nao falharem, os testes sao fracos
๐จ Anti-padrao: Testing Theater
Sinais de que seus testes nao testam nada real:
- โTestes verificam strings fixas de prompts em vez de outputs funcionais
- โ100% de cobertura mas nenhuma assertion de valor โ apenas "expect(fn).not.toThrow()"
- โMocks que retornam exatamente o que o teste espera โ sem testar logica real
- โTestes que passam mesmo quando voce introduz bugs deliberados no codigo
๐ Fase de documentacao: docs automaticos
A documentacao automatica e o ultimo elo da cadeia de desenvolvimento autonomo. O agente documentador (Documenter) nao apenas gera README e docstrings โ ele registra o racional de decisoes tomadas durante o desenvolvimento. Por que escolhemos Redis em vez de PostgreSQL para o cache? Por que o endpoint usa POST em vez de GET? Essas decisoes sao obvias no momento mas esquecidas em semanas. O decision log preserva esse conhecimento.
O Documenter gera tres artefatos: changelog (o que mudou e por que), decision log (decisoes de arquitetura com contexto e alternativas consideradas) e API docs (documentacao tecnica dos endpoints, funcoes e modulos). Cada artefato e gerado automaticamente a partir das tasks completadas, do historico de revisao e dos testes executados. O resultado e documentacao que nasce junto com o codigo, nao como afterthought.
๐ก Artefatos de Documentacao
- โข Changelog: Registro estruturado de cada mudanca โ o que, quando, por que, e quem (qual agente) fez
- โข Decision Log: Decisoes de arquitetura com contexto ("Escolhemos X porque Y, alternativas eram Z")
- โข API Documentation: Endpoints, parametros, exemplos de request/response, codigos de erro
- โข Setup Guide: Como instalar, configurar e executar o projeto โ gerado automaticamente a partir do ambiente de desenvolvimento
๐ Resumo do Modulo
Proximo Modulo:
3.3 - Memoria e Persistencia em Swarms