Skip to content

alanpcf/cocada-core

Repository files navigation

Cocada

Crates.io CI License: MIT

Cross-examination Of Code by Adversarial Diverse Agents

Toda IA opina. A Cocada julga.

Qualquer IA revisa o seu codigo e devolve uma lista de achados em tom confiante — uns reais, varios ruido plausivel. O trabalho de descobrir em qual achado confiar sobra pra voce. O cocada judge resolve essa parte: familias de modelo diferentes (Claude, Codex/GPT, Antigravity/Gemini) revisam o MESMO diff de forma independente, cruzam os achados em cross-exame, e sobra um veredito classificado — voce so decide onde elas discordam.

Ferramenta Pergunta que responde Como
teste (cargo test, pytest...) "o comportamento que eu previ continua valendo?" roda o codigo
revisor IA (1 familia) "o que PODE estar errado?" le o diff e opina, com falsos positivos
cocada judge "em quais achados da pra CONFIAR?" familias diferentes se cross-examinam

Tese, mecanica e roadmap: docs/JUDGE.md. Medicao com bugs plantados: eval/.

Quick start

cargo install cocada               # via crates.io

# ou a partir do fonte:
git clone https://github.com/alanpcf/cocada-core
cd cocada-core
cargo install --path . --force

cd /qualquer/projeto/com/git
cocada judge .                     # julga o diff local (working tree vs HEAD)

Pre-requisito por maquina: os CLIs oficiais das familias no PATH e logados nos planos que voce ja paga — bastam 2 entre claude, codex e agy. Confira com cocada doctor.

O comando central: judge

cocada judge .                     # diff local
cocada judge . --staged            # so o que esta em staging
cocada judge . --range main..HEAD  # diff da branch
cocada judge . --with c,x,g        # escolhe as familias (default: c,x)
cocada judge . --dry-run           # plano + prompts exatos, sem chamar modelo
cocada judge . --json              # relatorio machine-readable no stdout
cocada judge . --gate              # exit 2 se sobrar achado HIGH (uso em CI)

Como funciona, em duas ondas de LLM (ambas paralelas):

1. revisao INDEPENDENTE   cada familia revisa o diff sem ver as outras
2. convergencia (local)   mesmo problema achado por 2+ familias de forma
                          independente -> confirmado sem gastar chamada
3. CROSS-EXAME (batched)  cada familia tenta REFUTAR os achados solo das
                          outras, todos numa unica chamada por familia
4. veredito               confirmado | refutado | EM DISPUTA (sua pauta)

Custo maximo: 2 chamadas por familia, independente do numero de achados. Read-only de fato em Claude e Codex; o agy so tem sandbox (permite escrita no workspace) e o judge avisa quando ele entra no time.

O veredito sai no terminal (disputas primeiro) e fica salvo em ~/.agent-harness/projects/<repo-key>/judge/<timestamp>-report.{md,json}.

Acoplavel a qualquer projeto

O judge julga git diff — qualquer linguagem, qualquer repo. Tres acoples prontos (receitas completas em docs/JUDGE.md):

cocada judge ~/outro/projeto                                  # binario global
cocada judge . --range origin/main..HEAD --gate               # hook pre-push
cocada judge . --gate --json > judge.json                     # CI/ferramentas

O judge ja julgou a si mesmo

Nos dois primeiros runs reais, o proprio diff que criou o judge foi julgado: 5 achados reais confirmados em cross-exame (incluindo uma promessa falsa de read-only e um bug de convergencia dependente de ordem) — todos viraram fixes com teste. Historia completa em docs/JUDGE.md; medicao sistematica em eval/.

Por baixo do judge

O judge chama os CLIs oficiais (claude, codex, agy) com os logins locais. Por padrao tudo usa --auth subscription: as variaveis de API (OPENAI_API_KEY, ANTHROPIC_API_KEY, credenciais Google etc.) sao removidas do ambiente dos subprocessos para nao cair em billing por API sem querer. --auth inherit herda o ambiente de proposito.

Suporte ao judge:

cocada doctor                                   # CLIs no PATH, versoes, env de API
cocada models                                   # modelos/perfis reais por familia
cocada config show
cocada config set codex --model gpt-5.5 --effort xhigh
cocada config set claude --model opus --effort max
cocada config unset codex

Defaults ficam em ~/.config/cocada/config.json. Precedencia: flag explicita (--with c:opus) > default salvo do provider > default do proprio CLI.

Logs

Cada execucao real grava em ~/.agent-harness/runs/<repo>-<hash>/<timestamp>-<provider>/: prompt.txt, command.txt, status.json (atualizado ao vivo), stdout.txt, stderr.txt, result.json e summary.md. Dry-run nao cria logs nem chama modelo.

Por que Rust

Binario rapido de iniciar, distribuicao sem runtime, controle fino de subprocessos (streaming, timeout, kill de process group, env limpo) e tipagem forte para providers e modos de acesso.

Politica de idioma

Comandos, subcomandos, flags e aliases em ingles — CLI previsivel e documentavel. Prompts e documentacao em portugues; versao EN dos docs e parte do plano de abertura do repositorio.

Estado atual

  • cocada judge: julgamento multi-familia de diffs, acoplavel a qualquer repo git — ver docs/JUDGE.md;
  • eval com bugs plantados em eval/ (corpus + runner + scorer + resultados);
  • ~5 mil linhas de Rust focadas: o legado da era harness/sala foi removido (vive no historico do git e nos documentos historicos);
  • zero warnings de clippy (gate de CI com -D warnings) e 69 testes, incluindo E2E que dirigem o binario real contra providers stub;
  • licenca MIT em LICENSE.

About

Toda IA opina. A Cocada julga. — Multi-family judge for your diffs: Claude, Codex and Gemini review independently and cross-examine each other; you only decide where they disagree.

Topics

Resources

License

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors