MagAudit vs CodeRabbit

Escrito por quienes hacemos uno de los dos. Léelo teniéndolo en cuenta.

Dónde nos gana CodeRabbit, y no es de cerca

CodeRabbit es mucho más grande y tiene mucho más dinero que nosotros, y su bot ha comentado en más de 6,5 millones de pull requests públicos — una cifra que cualquiera reproduce con una búsqueda en GitHub por commenter:coderabbitai[bot], que es como la obtuvimos el 18 de septiembre de 2026. Ellos revisan el razonamiento y el diseño, no solo patrones. Si quieres una segunda opinión sobre cómo está escrito el código, eso lo hacen ellos y nosotros no.

Quitamos otras tres cifras que estaban en este párrafo —número de clientes, facturación, volumen semanal—. Venían de informaciones que hoy no pudimos volver a verificar, y un número que no podemos comprobar no pinta nada en una página que nos compara con otro.

Pusimos a los dos sobre el mismo pull request

El 18 de septiembre de 2026 instalamos CodeRabbit en nuestro propio repositorio público y abrimos un pull request con un fichero que habíamos hecho defectuoso a propósito. Los dos revisores vieron el mismo diff en el mismo instante. CodeRabbit corrió con su configuración por defecto todo el rato —lo dice él mismo en su comentario— porque una comparativa en la que nosotros configuramos al otro no vale nada. Publicamos nuestro resultado esperado antes de abrir el pull request, como una huella SHA-256 registrada doce segundos antes, para que no se pudiera retocar después.

Defecto plantadoMagAuditCodeRabbit
Credencial escrita en el códigoLo encuentraSe le escapa
pickle.loads sobre datos externosLo encuentraSe le escapa
shell=True con un valor interpoladoLo encuentraSe le escapa
Verificación TLS desactivadaLo encuentraLo encuentra
SQL construido con una variableLo encuentraLo encuentra
Doble reembolso — carrera entre comprobar y escribirSe nos escapaLo encuentra
Comisión truncada a cero por división enteraSe nos escapaSe le escapa
Tres trozos de código correcto con mala pinta0 falsas alarmas0 falsas alarmas

Donde nos ganan, nos ganan en lo que no sabemos hacer. CodeRabbit detectó que una función de reembolso lee un saldo, lo comprueba y lo escribe sin transacción ni bloqueo de fila, de forma que el mismo apunte se puede devolver dos veces. Todas las líneas de esa función son Python válido y SQL válido; no hay patrón que casar. Además siguió un valor desde una función hasta otra, y ejecutó la consulta en un entorno aislado para demostrar el efecto. Esa es una clase de error que no detectamos ni decimos detectar.

Donde íbamos por delante era en gravedad: no levantó la credencial escrita en el código, ni el pickle.loads, ni el shell=True. Los dos últimos son ejecución de código a distancia de manual. Y el error de división entera que deja las comisiones pequeñas a cero se nos escapó a los dos, que preferimos escribirlo a omitirlo.

Una asimetría que tenemos que declarar, porque nos favorece. CodeRabbit podía ver nuestros hallazgos y nosotros no veíamos los suyos: nuestro check publica anotaciones en el pull request, y su comentario las cita. Además ejecutó Ruff y OpenGrep. Nosotros corrimos solo sobre el diff. Sus tres hallazgos se alcanzaron con los nuestros cinco ya a la vista, y aun así no los repitió —pero las dos columnas no son estrictamente comparables, y decirlo sale más barato que que nos pillen no diciéndolo.

El primer intento de esta comparativa lo teníamos para perder y lo perdimos: el fichero de prueba se documentaba a sí mismo, CodeRabbit leyó el comentario que decía que era un examen deliberado y con buen criterio no reportó nada, y nosotros disparamos igual porque no leemos el contexto. Esa ronda también está publicada, incluido por qué no contaba. Las dos rondas, la hoja de respuestas y la huella están aquí — un fichero, una ejecución cada uno, así que léelo como una ilustración de en qué se diferencian dos herramientas, no como un marcador.

Lo que dice su propio mercado que falla

Estas no son cifras nuestras, y hoy no pudimos volver a verificar su fuente, así que léelas como informadas y no como medidas. Se informó de una auditoría ajena sobre 28 pull requests que encontró que el 15 % de los comentarios de CodeRabbit era ruido y el 21 % quisquilloso. Mantenemos la cifra porque es el tipo de número por el que pedimos que se nos juzgue a nosotros —pero no vamos a presentar la información de otro como si la hubiéramos medido.

Lo que sí podemos decir de nuestro lado: publicamos nuestra propia tasa de falsos positivos, derivada de las pruebas, en esta página. Ellos no publican la suya. La asimetría es el argumento; el 15 % no.

Las diferencias que salen de ahí

CodeRabbitMagAudit
Configuración antes de que sirva Un .coderabbit.yaml que cuidar Ninguna. Existe un .magaudit.yml opcional si quieres ajustarlo
Si se equivoca sobre tu código Fichero de configuración, o @coderabbitai ignore Contestas @magaudit ignore <id>, un fichero de configuración, o el marcador que ya usa tu escáner actual — pragma: allowlist secret, nosec, nosemgrep, gitleaks:allow
PrecioDesde 24 $ por desarrollador y mes Plano por organización. Diez personas: 69 €, no 240 $
Vulnerabilidades conocidas en las dependencias que añades Complemento, con precio por uso Incluido. Contrastado con la GitHub Advisory Database, y solo se informa cuando la línea fija una versión exacta
Dockerfiles, workflows, Terraform, Kubernetes Con linters que configuras tú Incluido. Incluido pull_request_target con checkout de la rama de quien contribuye — el que entrega tus secretos a cualquiera que abra un pull request
Correcciones de un clic Generadas por un modelo — potentes, y a veces equivocadas Deducidas, no inventadas. Se ofrecen solo donde la corrección se deduce de la regla; donde no, no hay sugerencia
Ejecutarlo en local antes de subirCLI, en los planes de pago El mismo detector, sin conexión. Si aquí sale limpio, allí sale limpio
Su propia tasa de falsos positivosNo publicada Publicada, y derivada de las pruebas
Lee el código que ya está en el repositorioRevisa el diff Sí, al instalar
Distintivo para el README—Sí

Lo que NO estamos afirmando

No decimos que seamos más silenciosos que CodeRabbit. No los hemos medido a ellos, y el 15 % de arriba es información de un tercero que hoy no pudimos volver a verificar —así que la marcamos como informada y no la repetimos como nuestra. Hasta el 18 de septiembre este párrafo decía que enlazábamos esa auditoría. No la enlazábamos, y no había ningún enlace en la página. Eso estaba mal y se corrige aquí en vez de quitarlo en silencio. Lo que sí podemos decir es cuál fue nuestra tasa, porque la medimos y la publicamos: la primera ejecución automática produjo 150 hallazgos sobre 249 pull requests públicos, 79 de ellos críticos, y casi ninguno era real. Esto es lo que eran.

Los dos casos que nos costaron una disculpa pública

Estábamos preparando avisos de seguridad para repositorios públicos, y comprobamos cada uno a mano antes de enviarlo. Los dos estaban mal, y los dos están ahora fijados por una prueba de regresión escrita con la línea exacta:

1. Una variable forzada a vacío es el arreglo, no el fallo

...(command === "build"
  ? { "import.meta.env.VITE_OPENAI_API_KEY": '""' }
  : {}),

Esa línea elimina la clave de todas las compilaciones de producción. Un comentario de seis líneas encima explica que Vite incrusta las VITE_* en el paquete. Le habríamos dicho a un equipo que entiende esto mejor que nuestro escáner que tenía el fallo que ya había arreglado.

2. Leer una variable en Node no es publicarla

module.exports = {
  openAIApiKey: process.env.VITE_OPENAI_API_KEY,
}

La configuración de una herramienta de traducción. Corre en Node en tiempo de compilación. El prefijo VITE_ despista: el código de cliente nunca referencia la variable, así que nada llega al navegador. Cualquier escáner que busque el prefijo va a marcar esto, y se va a equivocar.

Lo que medimos, y publicamos

MediciónResultado
Primera ejecución automática sobre 249 pull requests públicos 150 hallazgos, 79 CRÍTICOS — casi ninguno real
La misma población tras cuatro rondas de correcciones 39 hallazgos, 0–1 CRÍTICO
Dependencias resueltas en vivo contra PyPI y npm la cifra en vivo
Paquetes alucinados por IA confirmados 0

Esa última fila juega en nuestra contra: construimos esto alrededor de los nombres de paquete inventados, lo medimos, y el ataque resulta ser más raro de lo que sugiere el sector. Un paquete que no existe hace que pip install falle y que el CI se ponga rojo, gratis. Lo publicamos porque un proveedor al que puedes comprobar vale más que un proveedor al que tienes que creer.

Instalar en GitHub →

Última revisión: 21 de septiembre de 2026. Todas las cifras sobre nosotros son medición propia y reproducibles contra nuestro endpoint público y nuestro registro de errores. Las cifras sobre CodeRabbit o las puedes verificar tú en un paso —su precio, leído de su propia página de precios; su recuento de comentarios públicos, de una búsqueda en GitHub— o están marcadas explícitamente como informadas por un tercero. Si encuentras cualquier otra cosa en esta página que no se sostenga, dínoslo.