← agentictool.ai Descargar →
2026-05-16 · Compare runtimes · 6 min de lectura

Mismo prompt, tres IAs, recibos reales: comparando Claude vs Codex vs Gemini en un PR real

Si construyes con IA, ya estás comparando modelos. Solo que mal.

Tres terminales. El mismo prompt pegado tres veces. Echas un ojo a los diffs, eliges el que “se ve” mejor, lo pegas en tu PR, y no tienes registro de quién dijo qué ni cuánto costó. El desacuerdo que debería ser la señal más valiosa del día — se perdió en el historial del clipboard.

Esta semana ejecuté el mismo code review en Claude, Codex y Gemini en una sesión compartida, con tool calls y un ledger de costo, y los recibos cambiaron qué modelo usaré la próxima vez.

El setup

Un PR real en un repo real: refactor de la lógica de invalidación de sesión en un auth middleware. Diff de ~80 líneas. El tipo de cambio donde los tests unitarios pasan pero un merge descuidado puede desloguear a todos a las 3 AM.

Un comando, tres runtimes:

ato review --consensus \
  --reviewer claude \
  --reviewer codex \
  --reviewer google

Cada reviewer corrió en la misma sesión. El turno #2 vio los hallazgos del #1 vía replay de historial (sin volver a pegar el prompt). Tool calls (read_file, grep, git_log) dejaron a cada modelo recorrer el repo en vivo en lugar de adivinar. Cada llamada a herramienta quedó registrada con la ruta del archivo que tocó.

Lo que dijo cada modelo

Claude (claude-sonnet-4-6):

“LGTM. El refactor está limpio — el nuevo helper invalidateSession() consolida lógica que estaba duplicada en tres callers. Los tests cubren el happy path. Despliega.”

Codex (gpt-4.1):

“BLOQUEANTE. Este cambio rompe la invalidación de sesión en logout. El código previo llamaba a db.deleteSession(sid) de forma síncrona antes de devolver la respuesta. El refactor lo mueve a un fire-and-forget asíncrono vía el nuevo helper, que corre después de enviar la respuesta. Si el helper falla (ej: db inaccesible), la sesión persiste en storage; la cookie del usuario se borra del cliente pero el servidor sigue aceptando el session ID viejo.”

“Verificado leyendo middleware/auth.ts:142 y helpers/session.ts:38. El nuevo helper no tiene error handler; el código viejo hacía throw en errores de db y devolvía un 500.”

Gemini (gemini-2.5-flash):

“Apoyo el hallazgo de Codex. Re-ejecuté grep -r ‘invalidateSession’ — el nuevo helper también se llama desde el endpoint de password-reset, donde el mismo patrón fire-and-forget ahora abriría una ventana en la que la sesión vieja sigue válida. Este es el segundo caso del bug, no solo el de logout.”

Tres modelos. Uno dijo despliega. Dos atraparon el bug. Sin ATO, habría seguido la recomendación de Claude, me habría enterado de la regresión por un ticket de cliente, y habría gastado el resto del día revirtiendo.

Los recibos

Aquí está el ledger de costo y calidad que ATO registró para ese review:

RuntimeModeloDuraciónTokens (in / out)CostoTool callsVeredicto
Claudeclaude-sonnet-4-63,1s1.840 / 412US$ 0,041LGTM
Codexgpt-4.12,8s1.610 / 588US$ 0,023BLOQUEANTE
Geminigemini-2.5-flash4,1s2.100 / 344US$ 0,012BLOQUEANTE

Tres cosas que esas filas muestran:

Lo que cambia cuando lo haces seguido

Después de unas semanas pasando todo diff no trivial por ato review --consensus, los recibos empiezan a contar una historia:

Eso no es un benchmark genérico. Es un benchmark personal, sobre tu trabajo, en tu repo. El punto de tener recibos es dejar de adivinar y empezar a citar.

Cómo correr esto vos mismo

brew install willnigri/ato/ato
ato review --consensus

O ejecuta ato demo-compare en el primer launch y ATO te tira en una sesión pre-cargada mostrando dos LLMs comparando un refactor lado a lado — sin configuración.

Todo aterriza en una base SQLite en ~/.ato/local.db en tu máquina. Cada dispatch registra costo, tokens, duración, tool calls, archivos tocados. Podés correr sqlite3 directo. El sign-in es opcional y solo importa si querés sync entre dispositivos, LLM-as-judge hosteado, o sesiones compartidas con equipo — gratis durante el beta.

MIT. Local-first. Trae tus claves.

Descargar ATO → Ver en GitHub →

Los recibos de este post son de una sesión real ato review --consensus ejecutada el 2026-05-16. El diff del auth middleware es representativo de la clase de bug que la comparación multi-LLM atrapa; el repo específico es privado pero la sesión, prompts y tool calls son reproducibles desde la CLI pública en cualquier repo que apuntes.