https://github.com/alanpcf/cocada-core
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.
https://github.com/alanpcf/cocada-core
ai cli code-review developer-tools llm rust
Last synced: 3 days ago
JSON representation
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.
- Host: GitHub
- URL: https://github.com/alanpcf/cocada-core
- Owner: alanpcf
- License: mit
- Created: 2026-06-02T15:31:21.000Z (15 days ago)
- Default Branch: main
- Last Pushed: 2026-06-11T22:03:37.000Z (6 days ago)
- Last Synced: 2026-06-11T22:05:03.122Z (6 days ago)
- Topics: ai, cli, code-review, developer-tools, llm, rust
- Language: Rust
- Size: 729 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Cocada
[](https://crates.io/crates/cocada)
[](https://github.com/alanpcf/cocada-core/actions/workflows/ci.yml)
[](LICENSE)
> **C**ross-examination **O**f **C**ode by **A**dversarial **D**iverse **A**gents
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`](docs/JUDGE.md). Medicao com bugs
plantados: [`eval/`](eval/).
## Quick start
```bash
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`
```bash
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):
```text
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//judge/-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`](docs/JUDGE.md)):
```bash
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`](docs/JUDGE.md); medicao
sistematica em [`eval/`](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:
```bash
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/-/-/`:
`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`.