EN · Read in English Explorar gratis

Comparativa · Intermedio · 20 min

Claude Code vs Codex vs Gemini vs Cursor: misma tarea, con datos

Cómo comparar Claude Code, Codex CLI, Gemini o Antigravity CLI y Cursor CLI con la misma tarea, pruebas ocultas y 5 repeticiones. Metodología y scripts.

Portada: Claude Code vs Codex vs Gemini vs Cursor: misma tarea, con datos

Probado con Claude Code 2.1.316 · revisado

Ver los archivos en GitHub Gratis · licencia MIT

Resumen y veredicto

Metodología lista; resultados pendientes. Todavía no hemos ejecutado la prueba, así que esta página no declara ganador ni publica números de rendimiento. Lo que sí tienes: el diseño completo de una comparativa honesta entre cuatro agentes de programación de terminal (Claude Code, Codex CLI de OpenAI, Antigravity CLI o Gemini CLI de Google y Cursor CLI), los datos oficiales de cada uno, los comandos verificados y los scripts para repetirla tú en tu propio código. Están en el repositorio ctrlia-claude-code-vs-codex-gemini-cursor.

Aviso de imparcialidad: Ctrl+IA es un sitio sobre Claude Code. Por eso publicaremos todo (repositorio, prompts, script y registros crudos), también los resultados en los que Claude Code pierda. Cuando tengamos los datos, el veredicto irá por tipo de tarea, no como un ganador absoluto.

Los cuatro contendientes, con datos oficiales

Cómo lo probamos (metodología)

El repositorio y las tres tareas

Un repositorio público y pequeño en Python 3.12, solo con la biblioteca estándar y pytest (unas 600 líneas), congelado en un commit con etiqueta, para que el lenguaje y las dependencias no favorezcan a nadie. Tres tareas, cada una en un archivo tareas/Tn.md con el mismo texto para todos:

  1. T1, arreglar un bug: parsear_fecha falla con fechas «31/12/2026» y años bisiestos; hay un test visible que falla.
  2. T2, añadir una función: un comando exportar --csv que respete comas, comillas y tildes en UTF-8.
  3. T3, refactorizar sin romper: dividir un módulo de 400 líneas en tres sin cambiar el comportamiento ni añadir dependencias.

Cada tarea tiene pruebas ocultas, guardadas fuera del repositorio, que se copian solo cuando termina el agente: miden si el arreglo es real o solo pasa el test visible. Las instrucciones van dentro del prompt (no en CLAUDE.md, AGENTS.md ni reglas propias) para que ninguna herramienta tenga ventaja por leer su archivo de configuración.

Métricas: tiempo, coste, calidad y tests

Repeticiones, control de variables y evaluación a ciegas

Los modelos no dan siempre la misma respuesta, así que una sola ejecución no prueba nada (en nuestra investigación descartamos por eso una comparativa de DeployHQ que hacía una sola ejecución por herramienta). El plan:

Los comandos

Claude Code sin interfaz, con permisos acotados y límite de gasto (flags verificados en 2.1.316):

claude -p "$(cat tareas/T1.md)" --output-format json \
  --permission-mode acceptEdits \
  --allowedTools "Bash(python3 -m pytest *)" \
  --max-budget-usd 2 --no-session-persistence > claude-T1-1.json
python3 -c "import json;d=json.load(open('claude-T1-1.json'));print(d['duration_ms'],d['num_turns'],d['total_cost_usd'],d['usage']['output_tokens'])"

Los otros agentes, según su documentación oficial (sin probar aquí: no los hemos instalado):

# Codex CLI
npm install -g @openai/codex
codex exec "$(cat tareas/T1.md)"
# Cursor CLI
curl https://cursor.com/install -fsS | bash
export CURSOR_API_KEY=...   # tu clave, nunca en el repositorio
agent -p --force --output-format json "$(cat tareas/T1.md)"
# Antigravity CLI (sucesor de Gemini CLI para particulares)
curl -fsSL https://antigravity.google/cli/install.sh | bash
agy --version
# Gemini CLI (solo licencias Code Assist o claves de pago heredadas)
gemini -p "$(cat tareas/T1.md)" --output-format json

El script de una ejecución

bench.sh clona el repositorio de prueba en una carpeta temporal, lanza la herramienta, mide el tiempo, guarda el diff y después copia y ejecuta las pruebas ocultas. Es el archivo del repositorio, comprobado con bash -n y con un claude simulado (sin gastar nada):

#!/usr/bin/env bash
# bench.sh — una ejecución: bench.sh <herramienta> <tarea> <repeticion>
# Herramientas: claude | codex | cursor | agy. Tareas: T1 | T2 | T3.
# Requiere: el repo de prueba en $FIXTURE (commit fijo) y las pruebas ocultas en $OCULTAS (fuera del repo).
set -euo pipefail
[ $# -eq 3 ] || { echo "uso: $0 <herramienta> <tarea> <repeticion>" >&2; exit 2; }
H=$1; T=$2; N=$3
FIXTURE=${FIXTURE:?define FIXTURE}; OCULTAS=$(cd "${OCULTAS:?define OCULTAS}" && pwd)
OUT=$PWD/${OUT:-resultados}; mkdir -p "$OUT"; LOG=$OUT/$H-$T-$N
W=$(mktemp -d); trap 'rm -rf "$W"' EXIT
git clone -q "$FIXTURE" "$W/repo"; cd "$W/repo"
PROMPT=$(cat "tareas/$T.md")
rc=0; t0=$(date +%s.%N)
case $H in
  claude) claude -p "$PROMPT" --output-format json --permission-mode acceptEdits \
            --allowedTools "Bash(python3 -m pytest *)" --max-budget-usd 2 \
            --no-session-persistence > "$LOG.json" || rc=$? ;;
  codex)  codex exec "$PROMPT" > "$LOG.txt" || rc=$? ;;   # flags de JSON y sandbox: confirmar con `codex exec --help` el día de la prueba
  cursor) agent -p --force --output-format json "$PROMPT" > "$LOG.json" || rc=$? ;;
  agy)    echo "Antigravity CLI: modo headless sin verificar; ver su página Headless mode" >&2; exit 2 ;;
  *)      echo "herramienta desconocida: $H" >&2; exit 2 ;;
esac
t1=$(date +%s.%N)
# el diff antes de copiar las pruebas ocultas, para que no cuenten como cambios del agente
git diff --stat HEAD > "$LOG.diff.txt"; git status --porcelain >> "$LOG.diff.txt"
python3 -m pytest -q tests --tb=no > "$LOG.visibles.txt" 2>&1 || true
cp -r "$OCULTAS" ./tests_ocultos
python3 -m pytest -q tests_ocultos --tb=no > "$LOG.ocultas.txt" 2>&1 || true
echo "$H,$T,$N,$(python3 -c "print(round($t1 - $t0, 2))"),$rc" >> "$OUT/tiempos.csv"

Y el bucle completo, 4 herramientas × 3 tareas × 5 repeticiones, intercaladas (lote.sh; con HERRAMIENTAS=claude ./lote.sh corres solo Claude Code):

#!/usr/bin/env bash
# lote.sh — todas las herramientas × T1-T3 × 5 repeticiones, intercaladas
set -euo pipefail
cd "$(dirname "$0")"
mkdir -p resultados
for n in 1 2 3 4 5; do
  for t in T1 T2 T3; do
    for h in ${HERRAMIENTAS:-claude codex cursor agy}; do
      ./bench.sh "$h" "$t" "$n" || echo "$h,$t,$n,,fallo" >> resultados/tiempos.csv
    done
  done
done

Qué podemos medir en este PC y qué necesita cuentas de terceros

Tabla comparativa

Datos oficiales a 1-nov-2026. Las filas de resultados están vacías a propósito: resultados pendientes.

Claude CodeCodex CLIAntigravity CLI / Gemini CLICursor CLI
FabricanteAnthropicOpenAIGoogleCursor
Versión2.1.316 (instalada)0.166.0 (npm)Gemini CLI 0.66.0 (npm); agy sin anotarsin anotar
Comando sin interfazclaude -pcodex execagy: sin verificar; gemini -pagent -p
CuentaPro, Max, Ultra, Team, Enterprise o APIChatGPT Plus o superior, o APIagy: cuenta Google (Free, Pro, Ultra); gemini: Code AssistCuenta de Cursor y CURSOR_API_KEY
Archivo de instruccionesCLAUDE.mdAGENTS.mdsin verificarsin verificar
Probado por Ctrl+IAComandos sí; prueba noNo instaladoNo instaladoNo instalado
Pruebas ocultas superadas (mediana y rango)pendientependientependientependiente
Tiempo por tareapendientependientependientependiente
Coste o tokens informadospendientependientependientependiente
Archivos fuera de alcancependientependientependientependiente
Afirmaciones falsaspendientependientependientependiente
Legibilidad (1-5, a ciegas)pendientependientependientependiente

Cuando haya resultados publicaremos una tabla por tarea (T1, T2, T3) con estas filas, la fecha y las versiones. Reglas que seguiremos: no citar precios de terceros salvo con enlace a su página oficial y fecha, no comparar planes de suscripción como si fueran equivalentes (cada fabricante mide el uso de forma distinta) y repetir la prueba cuando cambien las versiones, porque en un mes el resultado puede ser otro.

Cuándo usar cada uno

Sin resultados propios, solo podemos orientarte con los datos oficiales:

Preguntas frecuentes

¿Cuál es mejor, Claude Code o Codex?

Depende de la tarea y cambia con cada versión. Aún no hemos ejecutado la prueba; cuando la publiquemos, con fecha, versiones y script, mira la tabla de tu tipo de tarea y repítela en tu propio repositorio antes de pagar.

¿Gemini CLI sigue siendo gratis?

Según su README oficial, desde el 18-jun-2026 Gemini CLI es para licencias Gemini Code Assist Standard/Enterprise y claves de pago heredadas; el acceso individual gratuito pasó a Antigravity CLI (comando agy). Los límites del plan gratuito de Antigravity no los hemos verificado.

¿Por qué no comparan precios de los planes?

Cada fabricante mide el uso de forma distinta y los cambia a menudo. Comparamos lo medible (tiempo, tokens informados, calidad) y enlazamos la página oficial de precios de cada uno con fecha.

¿Puedo usar Claude Code dentro de Cursor?

Sí: la extensión oficial de Claude Code se instala en Cursor (la documentación tiene un enlace directo). Nuestra receta de VS Code explica cómo instalarla sin riesgos tras la versión manipulada del 29-oct en el marketplace de Cursor.

¿Por qué Python y no JavaScript?

Para que la prueba corra solo con la biblioteca estándar y pytest, sin instalar dependencias que puedan fallar. Se puede añadir una segunda ronda en TypeScript con el mismo diseño.

¿Un sitio de Claude Code puede ser imparcial?

Lo declaramos arriba y lo compensamos publicando todo: repositorio, prompts, script y registros crudos, también donde Claude Code pierda. Cualquiera puede repetirlo y corregirnos.

Toda la biblioteca