<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Coding Assistants on Cloud Hasta en la Sopa</title>
    <link>https://cloudhastaenlasopa.com/tags/coding-assistants/</link>
    <description>Recent content in Coding Assistants on Cloud Hasta en la Sopa</description>
    <image>
      <title>Cloud Hasta en la Sopa</title>
      <url>https://cloudhastaenlasopa.com/images/Portada.jpg</url>
      <link>https://cloudhastaenlasopa.com/images/Portada.jpg</link>
    </image>
    <generator>Hugo -- 0.165.0</generator>
    <language>es-ES</language>
    <lastBuildDate>Thu, 03 Sep 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://cloudhastaenlasopa.com/tags/coding-assistants/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Tengo la sensación de que Kiro es más eficiente. ¿Soy yo o es real?</title>
      <link>https://cloudhastaenlasopa.com/2026/09/tengo-la-sensaci%C3%B3n-de-que-kiro-es-m%C3%A1s-eficiente.-soy-yo-o-es-real/</link>
      <pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://cloudhastaenlasopa.com/2026/09/tengo-la-sensaci%C3%B3n-de-que-kiro-es-m%C3%A1s-eficiente.-soy-yo-o-es-real/</guid>
      <description>Tenía la sensación de que Kiro me duraba más que Codex o Claude Code, pero sin números no me lo creía ni yo. Así que he montado un benchmark con los mismos modelos, los mismos ejercicios y el mismo prompt en las tres herramientas. Los resultados me han sorprendido, y no en la dirección que esperaba.</description>
      <content:encoded><![CDATA[<p>Últimamente, en cualquier evento al que voy, termino discutiendo con otros compañeros, Ambassadors o Community Builders sobre qué asistente nos funciona mejor: Codex, Claude Code o Kiro. Y, personalmente, en este tiempo tenía un feeling bastante claro: <strong>Kiro es el más eficiente</strong>.</p>
<p>No tenía un dato real. No tenía pruebas. Básicamente, mi tenant personal de Kiro me duraba más que el de Codex o Claude Code, y podía usar un modelo potente sin llegar a un punto de bloqueo en cuestión de horas (me ha pasado). Pero ya me ha pasado otras veces que lo que pienso o mis sensaciones pueden estar influenciadas y que, sin números, nadie se lo cree — ni yo mismo.</p>
<p>Así que empecé a preguntarme si podía medirlo de forma objetiva y verificable. Y aquí estamos, con un benchmark reproducible sin posibilidad de influir:</p>
<ul>
<li>El mismo modelo en cada herramienta</li>
<li>Los mismos ejercicios</li>
<li>El mismo prompt</li>
<li>Los mismos pesos</li>
</ul>
<h3 id="la-respuesta-corta">La respuesta corta</h3>
<p>Por si no te apetecen seis mil palabras: <strong>la sensación era cierta, pero el motivo no era el que yo pensaba</strong>.</p>
<p>En el coste por tarea no hay un ganador único: depende del modelo y no es un valor comparable al 100%. Aquí sale perdiendo Kiro en comparaciones directas, aunque en el modo auto <strong>Kiro gana</strong>. Me ha sorprendido gratamente el coste de Codex, que realmente tenía como tercera opción.</p>
<p>Mi sensación venía de otras dos cosas: <strong>termina antes</strong> (entre un 20% y un 35% más rápido con el mismo modelo) y <strong>no te bloquea</strong>, porque su límite es mensual, mientras que Codex te corta cada semana y Claude Code cada 5 horas.</p>
<p>En cuanto a la calidad del código, los tres están prácticamente empatados — 4,34, 4,22 y 3,95 sobre 5. Pensaba que Claude Code iba a arrasar, pero no ha podido con Kiro, lo cual ha sido una grata sorpresa.</p>
<p>Si quieres saber cómo se mide esto y por qué el esfuerzo de razonamiento lo cambia todo, sigue leyendo.</p>
<h2 id="las-diferencias-de-cada-asistente">Las diferencias de cada asistente</h2>
<p>Lo primero es saber qué hace cada herramienta, porque, aunque son muy similares, funcionan de forma diferente.</p>
<h3 id="kiro">Kiro</h3>
<p>Kiro es la herramienta de AWS; originalmente solo usaba los modelos de Claude, pero últimamente ha ido ampliando su catálogo — Claude, GPT-5.6, DeepSeek, Qwen, GLM — y también incluye un <strong>router automático</strong> (<code>auto</code>) que elige el modelo según la tarea. Factura en <strong>credits</strong> con un multiplicador por modelo. El plan Pro son 20$/mes con 1000 credits.</p>
<p>Una cosa que hay que tener en cuenta es que <strong>Kiro no expone directamente los tokens consumidos</strong>. Da credits y tiempo, pero no un desglose de input/output/caché.</p>
<h3 id="codex">Codex</h3>
<p>Codex CLI es la herramienta de OpenAI. Con el plan ChatGPT Plus (20$/mes) tienes acceso a los modelos GPT-5.6 — Sol, Terra y Luna — con límites por ventana semanal. <strong>No tiene router de modelo</strong>: eliges uno o, si no defines modelo por defecto, usas Sol con esfuerzo bajo.</p>
<p>A diferencia de Kiro, Codex sí da tokens exactos por ejecución, con un desglose completo: input, output, caché leída, caché escrita y tokens de razonamiento.</p>
<h3 id="claude-code">Claude Code</h3>
<p>Claude Code es la herramienta de Anthropic. Con Claude Pro (20$/mes) da acceso a Haiku, Sonnet, Opus y también Fable (En EEUU puedes acceder a Mithos). Tiene algo parecido a un router — <code>opusplan</code>, que usa Opus para planificar y Sonnet para ejecutar — pero no es una selección automática por tarea.</p>
<p>Un detalle interesante es que <strong>Claude Code siempre usa dos modelos a la vez</strong>. Cuando pides Sonnet, en realidad se usa Sonnet + Haiku de fondo. Solo <code>--model haiku</code> usa un único modelo. Y su esfuerzo de razonamiento por defecto es <code>high</code>, mientras que Codex va a <code>medium</code> o <code>low</code> según el modelo.</p>
<h3 id="el-campo-de-juego-3-suscripciones-a-20mes">El campo de juego: 3 suscripciones a 20$/mes</h3>
<table>
	<thead>
			<tr>
					<th></th>
					<th>Kiro Pro</th>
					<th>ChatGPT Plus</th>
					<th>Claude Pro</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Precio</td>
					<td>20$/mes</td>
					<td>20$/mes</td>
					<td>20$/mes</td>
			</tr>
			<tr>
					<td>Modelos GPT-5.6</td>
					<td>✓</td>
					<td>✓</td>
					<td>✗</td>
			</tr>
			<tr>
					<td>Modelos Claude</td>
					<td>✓</td>
					<td>✗</td>
					<td>✓</td>
			</tr>
			<tr>
					<td>Router automático</td>
					<td>✓ (auto)</td>
					<td>✗</td>
					<td>parcial (opusplan)</td>
			</tr>
			<tr>
					<td>Tokens visibles</td>
					<td>✗</td>
					<td>✓</td>
					<td>✓</td>
			</tr>
			<tr>
					<td>Esfuerzo por defecto</td>
					<td>high (GPT-5.6)</td>
					<td>low/medium</td>
					<td>high</td>
			</tr>
	</tbody>
</table>
<p>Una de las cosas más importantes de un asistente es el Hardness y es algo que no vemos aunque define el funcionamiento, por eso es importante entender que aunque la comparativa es lo más justa posible es muy difícil igualar todo a los mismos parámetros</p>
<h2 id="qué-hemos-ejecutado-y-cómo-lo-medimos">Qué hemos ejecutado y cómo lo medimos</h2>
<h3 id="los-ejercicios">Los ejercicios</h3>
<p>Necesitamos tareas que cumplan tres cosas: que sean públicas (para que cualquiera pueda repetirlas), que tengan tests automáticos (para que el resultado sea binario, sin juicios subjetivos) y que presenten un gradiente de dificultad.</p>
<p>La respuesta era <a href="https://exercism.org/">Exercism</a>: ejercicios de programación con tests unitarios incluidos, dificultad del 1 al 10, y todo de acceso público en GitHub. Se seleccionan <strong>15 ejercicios de Python</strong> en tres bandas de dificultad:</p>
<ul>
<li><strong>5 fáciles</strong> (dificultad 1-2): hamming, eliuds-eggs, list-ops, resistor-color-expert, transpose</li>
<li><strong>5 medios</strong> (dificultad 4-5): complex-numbers, forth, knapsack, relative-distance, scale-generator</li>
<li><strong>5 difíciles</strong> (dificultad 7-9): dominoes, paasio, pov, rest-api, sgf-parsing</li>
</ul>
<p>La selección es determinista y reproducible — el script está en el repo.</p>
<p>Es verdad que solo estamos comparando un lenguaje, pero, por desgracia, no tengo ni tokens infinitos ni tiempo infinito. Aun así, es algo que nos dará una visión muy interesante.
Por otro lado, es el caso que más uso, además de IaC en Terraform para AWS, pero aquí Kiro podría tener cierta ventaja por su Hardness y ensuciaría esta comparativa.</p>
<h3 id="el-prompt">El prompt</h3>
<p>Idéntico para los tres. Literalmente el <code>instructions.md</code> del ejercicio, con un preámbulo mínimo:</p>
<pre tabindex="0"><code>Solve the following Python exercise.
Write your solution in `&lt;fichero&gt;.py`.
Do not modify `&lt;fichero&gt;_test.py`.
The tests are run with `python3 -m unittest &lt;test_module&gt;`.
</code></pre><p>Sin pistas, sin guía, sin contexto adicional. Lo mismo que si hicieses un test a alguien a quien quisieses contratar.
Aquí estamos realizando las entrevistas de trabajo para mis asistentes de código.</p>
<h3 id="el-aislamiento">El aislamiento</h3>
<p>Cada herramienta se ejecutó <strong>desnuda</strong>: sin configuración personal, sin plugins, sin MCP, sin steering. Como si fuese mi primer día con cada asistente.</p>
<p><strong>Nota</strong>: No os recomiendo que tengáis vuestros asistentes desnudos, ya que su rendimiento es peor, pero es verdad que es la forma más justa de compararlos.</p>
<h3 id="qué-medimos">Qué medimos</h3>
<table>
	<thead>
			<tr>
					<th>Métrica</th>
					<th>Cómo</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Pass/fail</td>
					<td>Tests de Exercism, escritos por terceros</td>
			</tr>
			<tr>
					<td>Tiempo</td>
					<td>Wall clock del proceso</td>
			</tr>
			<tr>
					<td>Tokens (Codex y Claude Code)</td>
					<td>Del JSON de salida</td>
			</tr>
			<tr>
					<td>Credits (Kiro)</td>
					<td>Reportados por la herramienta</td>
			</tr>
			<tr>
					<td>Llamadas a herramientas</td>
					<td>Parseadas del log</td>
			</tr>
			<tr>
					<td>Reintentos de test</td>
					<td>Cuántas veces falló antes de acertar</td>
			</tr>
	</tbody>
</table>
<h3 id="integridad">Integridad</h3>
<p>Antes de cada ejecución verificamos que los tests <strong>fallen</strong> con el stub vacío (si no, el ejercicio no mide nada). Después verificamos que el fichero de test no ha sido modificado — un agente que toca los tests para que pasen no cuenta como solución.</p>
<h3 id="las-tandas">Las tandas</h3>
<p>En total son más de 390 ejecuciones (26 configuraciones × 15) entre tandas por defecto y tandas con esfuerzo igualado.</p>
<h3 id="el-torneo-de-calidad-del-código">El torneo de calidad del código</h3>
<p>Lo normal es que todos los asistentes resuelvan todos los ejercicios (pequeño spoiler: no ha sido así), pero no todos lo van a resolver de la misma forma, por lo que tenemos que medir la calidad del código; y para eso hay que buscar la forma más objetiva posible de hacerlo.</p>
<p>Y aquí había una solución bastante salomónica: que otros modelos juzgaran a ciegas las resoluciones de los ejercicios.</p>
<p><strong>Torneo de jueces a ciegas</strong> (3 modelos que no compiten en el benchmark):</p>
<ul>
<li>Cada ejercicio se juzga con las soluciones anonimizadas (solucion-A, solucion-B&hellip;)</li>
<li>10 pasadas por juez con el orden barajado, para neutralizar el sesgo de posición</li>
<li>3 jueces independientes (glm-5, deepseek-3.2, minimax-m2.5) — Imparciales ya que ninguno es un modelo relacionado con los que juzgan</li>
<li>Solo cuenta si hay mayoría clara; si los jueces discrepan, se reporta como tal</li>
</ul>
<p>El torneo tiene dos partes: primero se enfrenta el mismo modelo en dos herramientas (¿quién escribe mejor código con el mismo modelo?) y después, una final entre los modelos más potentes de cada herramienta.</p>
<p>Nota: los modelos los ha ejecutado Kiro, ya que un cuarto asistente para este ejercicio me parecía excesivo y, además, al ser una revisión ciega, el Hardness no tiene tanta importancia.</p>
<h3 id="lo-que-puede-medir-cada-asistente">Lo que puede medir cada asistente</h3>
<p>No todos exponen las mismas métricas, y eso condiciona la comparativa:</p>
<table>
	<thead>
			<tr>
					<th>Métrica</th>
					<th>Kiro</th>
					<th>Codex</th>
					<th>Claude Code</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Tiempo</td>
					<td>✓</td>
					<td>✓</td>
					<td>✓</td>
			</tr>
			<tr>
					<td>Pass/fail</td>
					<td>✓</td>
					<td>✓</td>
					<td>✓</td>
			</tr>
			<tr>
					<td>Coste estimado por ejercicio ($)</td>
					<td>✓ (credits × $0.02)</td>
					<td>✓ (tokens × rate card)</td>
					<td>✓ (estimación del SDK)</td>
			</tr>
			<tr>
					<td>Desglose de caché</td>
					<td>✗</td>
					<td>✓</td>
					<td>✓</td>
			</tr>
			<tr>
					<td>Tokens de razonamiento</td>
					<td>✗</td>
					<td>✓</td>
					<td>✗</td>
			</tr>
			<tr>
					<td>Llamadas a herramientas</td>
					<td>✓</td>
					<td>✓</td>
					<td>✓</td>
			</tr>
			<tr>
					<td>Reintentos de test</td>
					<td>✓</td>
					<td>✓</td>
					<td>✓</td>
			</tr>
	</tbody>
</table>
<p>Los tres proporcionan un coste estimado por ejercicio en $, por lo que se puede comparar cuánto cuesta resolver la misma tarea en cada herramienta. Ninguno es la factura real — son aproximaciones basadas en la rate card o en el SDK — pero los tres usan la misma lógica: el precio por token del modelo que están usando.</p>
<p>Lo que varía es la granularidad: Codex y Claude Code permiten ver cuánto se fue a caché o a razonamiento; Kiro da el coste total sin abrir la caja.</p>
<h3 id="cómo-comparamos">Cómo comparamos</h3>
<p>La comparación se hace en tres ejes:</p>
<p><strong>Mismo modelo, distinto hardness.</strong> El eje principal. Si ponemos <code>gpt-5.6-terra</code> en Kiro y en Codex con el mismo prompt, la diferencia que salga es pura herramienta: cómo construye el contexto, cuántas llamadas hace, cuánto cachea. No es una diferencia de modelo, sino de hardness.</p>
<p><strong>Router automático vs elección manual.</strong> Kiro tiene <code>auto</code> a 1.00x. ¿Rinde igual que elegir un modelo concreto a mano? ¿Y a qué coste?</p>
<p><strong>Esfuerzo igualado.</strong> Cada herramienta tiene un esfuerzo de razonamiento por defecto distinto. Para determinar cuánto pesa esa variable, se lanzan tandas adicionales con el esfuerzo igualado a <code>high</code> en Codex y en Kiro.</p>
<h2 id="los-resultados">Los resultados</h2>
<h3 id="todos-resuelven-casi">Todos resuelven&hellip; casi</h3>
<p>Lo primero que sorprende es que tengamos 4 fallos:</p>
<table>
	<thead>
			<tr>
					<th>Herramienta</th>
					<th>Ejercicios</th>
					<th>Pasan</th>
					<th>Tasa</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Kiro</td>
					<td>150</td>
					<td>150</td>
					<td><strong>100%</strong></td>
			</tr>
			<tr>
					<td>Codex</td>
					<td>90</td>
					<td>90</td>
					<td><strong>100%</strong></td>
			</tr>
			<tr>
					<td>Claude Code</td>
					<td>60</td>
					<td>56</td>
					<td>93,3%</td>
			</tr>
	</tbody>
</table>
<p>Los cuatro fallos son todos de Claude Code y ninguno es de Opus ni de Sonnet:</p>
<ul>
<li><strong><code>--model haiku</code></strong> falla tres: forth, scale-generator y transpose</li>
<li><strong><code>--model opusplan</code></strong> falla uno: relative-distance</li>
</ul>
<p>Cuidado con no confundir <code>opusplan</code> con Opus: <code>opusplan</code> es la configuración de router de Claude Code, que planifica con Opus y ejecuta con Sonnet. <strong>Opus a secas pasó los 15 y Sonnet también.</strong></p>
<p>Con los tests como único criterio, entonces, la conclusión es aburrida: <strong>estas herramientas resuelven ejercicios de Exercism sin dificultad, con casi cualquier modelo</strong>. Lo interesante no es si llegan, sino lo que gastan y cuánto tardan en llegar.</p>
<p>Aquí el problema es más el modelo: Haiku 4.5 es un modelo antiguo y poco potente. Salió hace casi un año, y ahora mismo un año es mucho para un modelo, más teniendo en cuenta que Sonnet ha tenido 2 versiones, Opus 3, y que los modelos de GPT son bastante nuevos.</p>
<h3 id="con-el-mismo-modelo-kiro-va-más-rápido">Con el mismo modelo, Kiro va más rápido</h3>
<p>Algo curioso de este ejercicio es la medición del <strong>tiempo</strong>. Wall clock, medido con reloj, sin interpretación posible.</p>
<table>
	<thead>
			<tr>
					<th>Modelo</th>
					<th>Codex / Claude Code</th>
					<th>Kiro</th>
					<th>Diferencia</th>
					<th>Pareado</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Luna</td>
					<td>9,9m</td>
					<td><strong>6,5m</strong></td>
					<td><strong>−35%</strong></td>
					<td>Kiro gana 15/15</td>
			</tr>
			<tr>
					<td>Terra</td>
					<td>8,1m</td>
					<td><strong>5,5m</strong></td>
					<td><strong>−32%</strong></td>
					<td>Kiro gana 14/15</td>
			</tr>
			<tr>
					<td>Sol</td>
					<td>7,8m</td>
					<td><strong>6,3m</strong></td>
					<td><strong>−20%</strong></td>
					<td>Kiro gana 12/15</td>
			</tr>
			<tr>
					<td>Haiku 4.5</td>
					<td>23,4m</td>
					<td><strong>15,8m</strong></td>
					<td><strong>−32%</strong></td>
					<td>Kiro gana 13/15</td>
			</tr>
			<tr>
					<td>Sonnet 5</td>
					<td>8,0m</td>
					<td><strong>5,4m</strong></td>
					<td><strong>−32%</strong></td>
					<td>Kiro gana 11/15</td>
			</tr>
			<tr>
					<td>Opus 5</td>
					<td>10,4m</td>
					<td>10,7m</td>
					<td>+2% (empate)</td>
					<td>Kiro gana 10/15</td>
			</tr>
			<tr>
					<td>Auto/Router</td>
					<td>7,5m</td>
					<td><strong>5,8m</strong></td>
					<td><strong>−23%</strong></td>
					<td>Kiro gana 10/15</td>
			</tr>
	</tbody>
</table>
<p><strong>Kiro es más rápido en 6 de los 7 modelos</strong>, con reducciones del 20% al 35%. El único empate es Opus (+2%, dentro del ruido). Y el detalle por modelo lo confirma: con Luna, Kiro gana 15 de 15. No es que la media sea más baja por un caso extremo — es que gana ejercicio a ejercicio.</p>
<p>Un caso extremo: <strong>Haiku en Kiro tarda 15,8 minutos</strong> — tres veces más que Sonnet — porque reintenta 20 veces los tests antes de acertar. Pero acierta los 15. En Claude Code, Haiku no reintenta y falla en 3 casos. El modelo es el mismo; la diferencia es que Kiro insiste y Claude Code se rinde. Esa insistencia tiene un coste: Haiku, con tarifa 0,4x, acaba gastando 6,46 credits frente a los 5,79 de Sonnet, con tarifa 1,3x. <strong>El modelo barato de base no siempre es el más eficiente, y menos aún si necesita varios reintentos.</strong></p>
<p>Esto es algo que pasa cuando cotizamos un proyecto: en ciertas tareas, un perfil más junior puede acabar saliendo más caro porque necesita muchas más horas — igual que poner a un senior en tareas muy sencillas.</p>
<h3 id="lo-que-consume-cada-uno">Lo que consume cada uno</h3>
<p>Antes de medir, hay que confesar que medir el consumo es muy complicado. Las tres herramientas cuestan 20$/mes, pero <strong>no miden el consumo de la misma forma ni tienen límites temporales iguales</strong>:</p>
<table>
	<thead>
			<tr>
					<th></th>
					<th>Unidad</th>
					<th>Ventanas</th>
					<th>Límite</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Kiro Pro</td>
					<td>credits</td>
					<td><strong>mensual</strong></td>
					<td>1000 credits/mes</td>
			</tr>
			<tr>
					<td>ChatGPT Plus</td>
					<td>credits ChatGPT</td>
					<td><strong>semanal</strong></td>
					<td>se resetea cada 7 días</td>
			</tr>
			<tr>
					<td>Claude Pro</td>
					<td>tokens ponderados</td>
					<td><strong>semanal</strong> + <strong>5 horas</strong></td>
					<td>se resetea cada 7 días + ventana rodante</td>
			</tr>
	</tbody>
</table>
<p>Eso significa que un mismo porcentaje no tiene el mismo valor en cada herramienta. Cada una tiene un límite principal (semanal o mensual) y, además, Claude Code tiene un <strong>límite de ventana de 5 horas</strong>, que es el que te bloquea primero en trabajo intensivo.</p>
<p>Nota: Codex tenía una ventana de 5 horas similar, pero OpenAI la suspendió temporalmente el 12 de julio de 2026 cuando GPT-5.6 Sol fue lanzado. A fecha de este benchmark (agosto de 2026), sigue suspendida en los planes Plus, Pro y Business. Si la reactivan, Codex también tendría ese bloqueo adicional.</p>
<p>La siguiente tabla compara el coste por modelo para la ejecución de los ejercicios: el consumo del plan semanal (Kiro está prorrateado a 1 semana), el % del límite que se alcanzaría en una semana (para Kiro es mensual) y el % del límite que se alcanzaría en 5 horas.</p>
<table>
	<thead>
			<tr>
					<th>Modelo</th>
					<th>Herramienta</th>
					<th>%plan/sem</th>
					<th>% límite semanal</th>
					<th>% límite 5 horas</th>
					<th>Tiempo</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Luna</strong></td>
					<td>Codex</td>
					<td>0,08%</td>
					<td>0,08%</td>
					<td>—</td>
					<td>9,9m</td>
			</tr>
			<tr>
					<td></td>
					<td>Kiro</td>
					<td>0,23%</td>
					<td><strong>0,06%</strong> (mensual)</td>
					<td>—</td>
					<td><strong>6,5m</strong></td>
			</tr>
			<tr>
					<td><strong>Terra</strong></td>
					<td>Codex</td>
					<td>0,72%</td>
					<td>0,72%</td>
					<td>—</td>
					<td>8,1m</td>
			</tr>
			<tr>
					<td></td>
					<td>Kiro</td>
					<td>1,72%</td>
					<td><strong>0,43%</strong> (mensual)</td>
					<td>—</td>
					<td><strong>5,5m</strong></td>
			</tr>
			<tr>
					<td><strong>Sol</strong></td>
					<td>Codex</td>
					<td>1,34%</td>
					<td>1,34%</td>
					<td>—</td>
					<td>7,8m</td>
			</tr>
			<tr>
					<td></td>
					<td>Kiro</td>
					<td>4,42%</td>
					<td><strong>1,10%</strong> (mensual)</td>
					<td>—</td>
					<td><strong>6,3m</strong></td>
			</tr>
			<tr>
					<td><strong>Haiku 4.5</strong></td>
					<td>Claude Code</td>
					<td>2,33%</td>
					<td>2,33%</td>
					<td><strong>21%</strong></td>
					<td>23,4m</td>
			</tr>
			<tr>
					<td></td>
					<td>Kiro</td>
					<td>2,58%</td>
					<td><strong>0,65%</strong> (mensual)</td>
					<td>—</td>
					<td><strong>15,8m</strong></td>
			</tr>
			<tr>
					<td><strong>Sonnet 5</strong></td>
					<td>Claude Code</td>
					<td>2,30%</td>
					<td>2,30%</td>
					<td><strong>21%</strong></td>
					<td>8,0m</td>
			</tr>
			<tr>
					<td></td>
					<td>Kiro</td>
					<td>2,32%</td>
					<td><strong>0,58%</strong> (mensual)</td>
					<td>—</td>
					<td><strong>5,4m</strong></td>
			</tr>
			<tr>
					<td><strong>Opus 5</strong></td>
					<td>Claude Code</td>
					<td>5,17%</td>
					<td>5,17%</td>
					<td><strong>47%</strong></td>
					<td>10,4m</td>
			</tr>
			<tr>
					<td></td>
					<td>Kiro</td>
					<td>5,28%</td>
					<td><strong>1,32%</strong> (mensual)</td>
					<td>—</td>
					<td>10,7m</td>
			</tr>
			<tr>
					<td><strong>Auto/Router</strong></td>
					<td>Claude Code</td>
					<td>2,20%</td>
					<td>2,20%</td>
					<td><strong>20%</strong></td>
					<td>7,5m</td>
			</tr>
			<tr>
					<td></td>
					<td>Kiro</td>
					<td>1,49%</td>
					<td><strong>0,37%</strong> (mensual)</td>
					<td>—</td>
					<td><strong>5,8m</strong></td>
			</tr>
	</tbody>
</table>
<p><strong>Codex es más barato por tarea con los GPT-5.6.</strong> Con un uso uniforme repartido a lo largo del mes, Codex ofrece entre 2,4x y 3,3x más capacidad. Pero si concentras el trabajo en pocos días, su ventana semanal se parece al límite mensual de Kiro. A su favor: la ventana de 5 horas está suspendida, así que hoy el único muro de Codex es el semanal.</p>
<p>Este resultado es sorprendente porque el coste es mucho más bajo, y aquí es donde vemos que Kiro emplea un esfuerzo distinto, lo cual revisaremos en el siguiente punto.</p>
<p><strong>Con los modelos de Claude, el precio por tarea es similar</strong> — a primera vista puede parecer que Claude Code gana, pero tenemos que tener en cuenta los límites semanales y de 5 horas. <strong>Llegas al límite mucho antes en Claude Code</strong>, y el primer límite no es el semanal, sino el de 5 horas. Con Opus este test lo podemos lanzar dos veces y ahí se acaba la sesión: cada tanda se come el 47%, así que las dos suman el 94% y la tercera ya no entra.</p>
<p>Esto es un tema interesante, porque si puedes esperar y eres paciente, vas a poder continuar, pero en caso de algo crítico lo normal es subir de tier, aunque no lo necesites el resto del mes.</p>
<p><strong>El router de Kiro es la única victoria clara en coste</strong>: 0,37% del mes frente al 2,20% de la semana de opusplan. Y además termina antes.</p>
<h3 id="el-esfuerzo-de-razonamiento-no-es-neutral">El esfuerzo de razonamiento no es neutral</h3>
<p>Hemos visto en la comparativa que algo raro pasaba con Kiro: los modelos GPT salían excesivamente caros. Investigándolo, descubrimos que el esfuerzo por defecto en Kiro es diferente:</p>
<ul>
<li><strong>Codex</strong>: Sol va a <code>low</code>, Terra y Luna a <code>medium</code></li>
<li><strong>Claude Code</strong>: todos a <code>high</code></li>
<li><strong>Kiro</strong>: GPT-5.6 a <code>high</code> (documentado), Claude a <code>high</code></li>
</ul>
<p>Es decir: <strong>Kiro y Claude Code ya corren a <code>high</code> por defecto, mientras que Codex va más bajo</strong>. Esa asimetría afecta directamente al consumo — un modelo que razona menos gasta menos tokens por tarea.</p>
<p>Para medirlo, tenemos que hacer una nueva prueba con las tandas de Codex forzadas a <code>high</code>:</p>
<table>
	<thead>
			<tr>
					<th>Modelo</th>
					<th>Herramienta</th>
					<th>Esfuerzo</th>
					<th>%plan/sem</th>
					<th>% límite semanal</th>
					<th>Tiempo</th>
					<th>Δ consumo vs default</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Luna</strong></td>
					<td>Codex</td>
					<td>medium (default)</td>
					<td>0,08%</td>
					<td>0,08%</td>
					<td>9,9m</td>
					<td>—</td>
			</tr>
			<tr>
					<td></td>
					<td>Codex</td>
					<td>high</td>
					<td>0,09%</td>
					<td>0,09%</td>
					<td>12,4m</td>
					<td>+15%</td>
			</tr>
			<tr>
					<td></td>
					<td>Kiro</td>
					<td>high (default)</td>
					<td>0,23%</td>
					<td><strong>0,06%</strong> (mensual)</td>
					<td>6,5m</td>
					<td>—</td>
			</tr>
			<tr>
					<td><strong>Terra</strong></td>
					<td>Codex</td>
					<td>medium (default)</td>
					<td>0,72%</td>
					<td>0,72%</td>
					<td>8,1m</td>
					<td>—</td>
			</tr>
			<tr>
					<td></td>
					<td>Codex</td>
					<td>high</td>
					<td>0,83%</td>
					<td>0,83%</td>
					<td>10,3m</td>
					<td>+16%</td>
			</tr>
			<tr>
					<td></td>
					<td>Kiro</td>
					<td>high (default)</td>
					<td>1,72%</td>
					<td><strong>0,43%</strong> (mensual)</td>
					<td>5,5m</td>
					<td>—</td>
			</tr>
			<tr>
					<td><strong>Sol</strong></td>
					<td>Codex</td>
					<td>low (default)</td>
					<td>1,34%</td>
					<td>1,34%</td>
					<td>7,8m</td>
					<td>—</td>
			</tr>
			<tr>
					<td></td>
					<td>Codex</td>
					<td>high</td>
					<td>2,07%</td>
					<td>2,07%</td>
					<td>12,5m</td>
					<td><strong>+55%</strong></td>
			</tr>
			<tr>
					<td></td>
					<td>Kiro</td>
					<td>high (default)</td>
					<td>4,42%</td>
					<td><strong>1,10%</strong> (mensual)</td>
					<td>6,3m</td>
					<td>—</td>
			</tr>
	</tbody>
</table>
<p><strong>El gap de coste entre Codex y Kiro se reduce con el esfuerzo igualado.</strong> Con Sol en default (<code>low</code>), Codex consume el 1,34% frente al 4,42% de Kiro (3,3x). Con ambos en <code>high</code>, pasa al 2,07% frente al 4,42% (2,1x). Parte de la ventaja de Codex se debía a que su Sol corre a <code>low</code> por defecto.</p>
<p>Pero si la comparación la hacemos contra el límite real de cada uno — la semana de Codex frente al mes de Kiro — el dato empeora para Codex: consume el 2,07% de su semana mientras Kiro se lleva el 1,10% de su mes.</p>
<p>El caso de Sol es el más llamativo: subir de <code>low</code> a <code>high</code> le cuesta a Codex un <strong>55% más de consumo</strong> y un 59% más de tiempo.</p>
<h3 id="detalle-por-ejercicio">Detalle por ejercicio</h3>
<p>Para quien quiera ver el desglose completo:</p>
<details>
<summary><strong>Ver la tabla completa</strong> — 15 ejercicios × 17 configuraciones</summary>
<div class="heat-table wide-table">
<table>
	<thead>
			<tr>
					<th>Ejercicio</th>
					<th>Banda</th>
					<th style="text-align: right">K-Luna</th>
					<th style="text-align: right">K-Terra</th>
					<th style="text-align: right">K-Sol</th>
					<th style="text-align: right">K-Haiku</th>
					<th style="text-align: right">K-Son.</th>
					<th style="text-align: right">K-Opus</th>
					<th style="text-align: right">K-Auto</th>
					<th style="text-align: right">Cx-Luna</th>
					<th style="text-align: right">Cx-Terra</th>
					<th style="text-align: right">Cx-Sol</th>
					<th style="text-align: right">Cx-Lu-H</th>
					<th style="text-align: right">Cx-Te-H</th>
					<th style="text-align: right">Cx-So-H</th>
					<th style="text-align: right">CC-Haiku</th>
					<th style="text-align: right">CC-Son.</th>
					<th style="text-align: right">CC-Opus</th>
					<th style="text-align: right">CC-Plan</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>eliuds-eggs</td>
					<td>fácil</td>
					<td style="text-align: right">0,004%</td>
					<td style="text-align: right">0,048%</td>
					<td style="text-align: right">0,140%</td>
					<td style="text-align: right">0,044%</td>
					<td style="text-align: right">0,068%</td>
					<td style="text-align: right">0,196%</td>
					<td style="text-align: right">0,056%</td>
					<td style="text-align: right">0,002%</td>
					<td style="text-align: right">0,033%</td>
					<td style="text-align: right">0,071%</td>
					<td style="text-align: right">0,002%</td>
					<td style="text-align: right">0,025%</td>
					<td style="text-align: right">0,074%</td>
					<td style="text-align: right">0,059%</td>
					<td style="text-align: right">0,067%</td>
					<td style="text-align: right">0,223%</td>
					<td style="text-align: right">0,067%</td>
			</tr>
			<tr>
					<td>hamming</td>
					<td>fácil</td>
					<td style="text-align: right">0,004%</td>
					<td style="text-align: right">0,060%</td>
					<td style="text-align: right">0,100%</td>
					<td style="text-align: right">0,040%</td>
					<td style="text-align: right">0,064%</td>
					<td style="text-align: right">0,200%</td>
					<td style="text-align: right">0,040%</td>
					<td style="text-align: right">0,002%</td>
					<td style="text-align: right">0,026%</td>
					<td style="text-align: right">0,071%</td>
					<td style="text-align: right">0,003%</td>
					<td style="text-align: right">0,026%</td>
					<td style="text-align: right">0,075%</td>
					<td style="text-align: right">0,051%</td>
					<td style="text-align: right">0,087%</td>
					<td style="text-align: right">0,207%</td>
					<td style="text-align: right">0,081%</td>
			</tr>
			<tr>
					<td>list-ops</td>
					<td>fácil</td>
					<td style="text-align: right">0,008%</td>
					<td style="text-align: right">0,104%</td>
					<td style="text-align: right">0,240%</td>
					<td style="text-align: right">0,056%</td>
					<td style="text-align: right">0,124%</td>
					<td style="text-align: right">0,340%</td>
					<td style="text-align: right">0,092%</td>
					<td style="text-align: right">0,003%</td>
					<td style="text-align: right">0,046%</td>
					<td style="text-align: right">0,074%</td>
					<td style="text-align: right">0,005%</td>
					<td style="text-align: right">0,048%</td>
					<td style="text-align: right">0,130%</td>
					<td style="text-align: right">0,085%</td>
					<td style="text-align: right">0,132%</td>
					<td style="text-align: right">0,252%</td>
					<td style="text-align: right">0,127%</td>
			</tr>
			<tr>
					<td>resistor-color-expert</td>
					<td>fácil</td>
					<td style="text-align: right">0,008%</td>
					<td style="text-align: right">0,144%</td>
					<td style="text-align: right">0,312%</td>
					<td style="text-align: right">0,060%</td>
					<td style="text-align: right">0,144%</td>
					<td style="text-align: right">0,324%</td>
					<td style="text-align: right">0,088%</td>
					<td style="text-align: right">0,004%</td>
					<td style="text-align: right">0,037%</td>
					<td style="text-align: right">0,073%</td>
					<td style="text-align: right">0,004%</td>
					<td style="text-align: right">0,082%</td>
					<td style="text-align: right">0,140%</td>
					<td style="text-align: right">0,082%</td>
					<td style="text-align: right">0,117%</td>
					<td style="text-align: right">0,333%</td>
					<td style="text-align: right">0,177%</td>
			</tr>
			<tr>
					<td>transpose</td>
					<td>fácil</td>
					<td style="text-align: right">0,008%</td>
					<td style="text-align: right">0,064%</td>
					<td style="text-align: right">0,192%</td>
					<td style="text-align: right">0,284%</td>
					<td style="text-align: right">0,116%</td>
					<td style="text-align: right">0,232%</td>
					<td style="text-align: right">0,068%</td>
					<td style="text-align: right">0,005%</td>
					<td style="text-align: right">0,031%</td>
					<td style="text-align: right">0,060%</td>
					<td style="text-align: right">0,005%</td>
					<td style="text-align: right">0,044%</td>
					<td style="text-align: right">0,087%</td>
					<td style="text-align: right">0,191%</td>
					<td style="text-align: right">0,095%</td>
					<td style="text-align: right">0,358%</td>
					<td style="text-align: right">0,113%</td>
			</tr>
			<tr>
					<td>complex-numbers</td>
					<td>medio</td>
					<td style="text-align: right">0,012%</td>
					<td style="text-align: right">0,088%</td>
					<td style="text-align: right">0,244%</td>
					<td style="text-align: right">0,068%</td>
					<td style="text-align: right">0,172%</td>
					<td style="text-align: right">0,360%</td>
					<td style="text-align: right">0,124%</td>
					<td style="text-align: right">0,004%</td>
					<td style="text-align: right">0,047%</td>
					<td style="text-align: right">0,111%</td>
					<td style="text-align: right">0,006%</td>
					<td style="text-align: right">0,042%</td>
					<td style="text-align: right">0,137%</td>
					<td style="text-align: right">0,133%</td>
					<td style="text-align: right">0,156%</td>
					<td style="text-align: right">0,345%</td>
					<td style="text-align: right">0,137%</td>
			</tr>
			<tr>
					<td>forth</td>
					<td>medio</td>
					<td style="text-align: right">0,028%</td>
					<td style="text-align: right">0,164%</td>
					<td style="text-align: right">0,344%</td>
					<td style="text-align: right">0,412%</td>
					<td style="text-align: right">0,240%</td>
					<td style="text-align: right">0,388%</td>
					<td style="text-align: right">0,132%</td>
					<td style="text-align: right">0,011%</td>
					<td style="text-align: right">0,059%</td>
					<td style="text-align: right">0,186%</td>
					<td style="text-align: right">0,011%</td>
					<td style="text-align: right">0,079%</td>
					<td style="text-align: right">0,213%</td>
					<td style="text-align: right">0,219%</td>
					<td style="text-align: right">0,167%</td>
					<td style="text-align: right">0,412%</td>
					<td style="text-align: right">0,195%</td>
			</tr>
			<tr>
					<td>knapsack</td>
					<td>medio</td>
					<td style="text-align: right">0,004%</td>
					<td style="text-align: right">0,068%</td>
					<td style="text-align: right">0,192%</td>
					<td style="text-align: right">0,052%</td>
					<td style="text-align: right">0,100%</td>
					<td style="text-align: right">0,224%</td>
					<td style="text-align: right">0,064%</td>
					<td style="text-align: right">0,002%</td>
					<td style="text-align: right">0,032%</td>
					<td style="text-align: right">0,061%</td>
					<td style="text-align: right">0,004%</td>
					<td style="text-align: right">0,033%</td>
					<td style="text-align: right">0,073%</td>
					<td style="text-align: right">0,050%</td>
					<td style="text-align: right">0,089%</td>
					<td style="text-align: right">0,214%</td>
					<td style="text-align: right">0,089%</td>
			</tr>
			<tr>
					<td>relative-distance</td>
					<td>medio</td>
					<td style="text-align: right">0,016%</td>
					<td style="text-align: right">0,096%</td>
					<td style="text-align: right">0,556%</td>
					<td style="text-align: right">0,092%</td>
					<td style="text-align: right">0,152%</td>
					<td style="text-align: right">0,416%</td>
					<td style="text-align: right">0,100%</td>
					<td style="text-align: right">0,006%</td>
					<td style="text-align: right">0,048%</td>
					<td style="text-align: right">0,077%</td>
					<td style="text-align: right">0,007%</td>
					<td style="text-align: right">0,049%</td>
					<td style="text-align: right">0,118%</td>
					<td style="text-align: right">0,175%</td>
					<td style="text-align: right">0,295%</td>
					<td style="text-align: right">0,430%</td>
					<td style="text-align: right">0,115%</td>
			</tr>
			<tr>
					<td>scale-generator</td>
					<td>medio</td>
					<td style="text-align: right">0,020%</td>
					<td style="text-align: right">0,132%</td>
					<td style="text-align: right">0,272%</td>
					<td style="text-align: right">0,108%</td>
					<td style="text-align: right">0,136%</td>
					<td style="text-align: right">0,316%</td>
					<td style="text-align: right">0,084%</td>
					<td style="text-align: right">0,006%</td>
					<td style="text-align: right">0,040%</td>
					<td style="text-align: right">0,068%</td>
					<td style="text-align: right">0,005%</td>
					<td style="text-align: right">0,077%</td>
					<td style="text-align: right">0,129%</td>
					<td style="text-align: right">0,241%</td>
					<td style="text-align: right">0,130%</td>
					<td style="text-align: right">0,317%</td>
					<td style="text-align: right">0,120%</td>
			</tr>
			<tr>
					<td>dominoes</td>
					<td>difícil</td>
					<td style="text-align: right">0,016%</td>
					<td style="text-align: right">0,104%</td>
					<td style="text-align: right">0,248%</td>
					<td style="text-align: right">0,252%</td>
					<td style="text-align: right">0,120%</td>
					<td style="text-align: right">0,256%</td>
					<td style="text-align: right">0,096%</td>
					<td style="text-align: right">0,004%</td>
					<td style="text-align: right">0,050%</td>
					<td style="text-align: right">0,076%</td>
					<td style="text-align: right">0,007%</td>
					<td style="text-align: right">0,059%</td>
					<td style="text-align: right">0,134%</td>
					<td style="text-align: right">0,138%</td>
					<td style="text-align: right">0,114%</td>
					<td style="text-align: right">0,315%</td>
					<td style="text-align: right">0,108%</td>
			</tr>
			<tr>
					<td>paasio</td>
					<td>difícil</td>
					<td style="text-align: right">0,032%</td>
					<td style="text-align: right">0,168%</td>
					<td style="text-align: right">0,448%</td>
					<td style="text-align: right">0,260%</td>
					<td style="text-align: right">0,236%</td>
					<td style="text-align: right">0,716%</td>
					<td style="text-align: right">0,148%</td>
					<td style="text-align: right">0,008%</td>
					<td style="text-align: right">0,061%</td>
					<td style="text-align: right">0,152%</td>
					<td style="text-align: right">0,011%</td>
					<td style="text-align: right">0,084%</td>
					<td style="text-align: right">0,215%</td>
					<td style="text-align: right">0,200%</td>
					<td style="text-align: right">0,333%</td>
					<td style="text-align: right">0,567%</td>
					<td style="text-align: right">0,365%</td>
			</tr>
			<tr>
					<td>pov</td>
					<td>difícil</td>
					<td style="text-align: right">0,024%</td>
					<td style="text-align: right">0,148%</td>
					<td style="text-align: right">0,396%</td>
					<td style="text-align: right">0,612%</td>
					<td style="text-align: right">0,188%</td>
					<td style="text-align: right">0,444%</td>
					<td style="text-align: right">0,140%</td>
					<td style="text-align: right">0,012%</td>
					<td style="text-align: right">0,086%</td>
					<td style="text-align: right">0,086%</td>
					<td style="text-align: right">0,008%</td>
					<td style="text-align: right">0,076%</td>
					<td style="text-align: right">0,131%</td>
					<td style="text-align: right">0,211%</td>
					<td style="text-align: right">0,216%</td>
					<td style="text-align: right">0,339%</td>
					<td style="text-align: right">0,179%</td>
			</tr>
			<tr>
					<td>rest-api</td>
					<td>difícil</td>
					<td style="text-align: right">0,016%</td>
					<td style="text-align: right">0,148%</td>
					<td style="text-align: right">0,356%</td>
					<td style="text-align: right">0,124%</td>
					<td style="text-align: right">0,256%</td>
					<td style="text-align: right">0,404%</td>
					<td style="text-align: right">0,108%</td>
					<td style="text-align: right">0,004%</td>
					<td style="text-align: right">0,054%</td>
					<td style="text-align: right">0,079%</td>
					<td style="text-align: right">0,009%</td>
					<td style="text-align: right">0,050%</td>
					<td style="text-align: right">0,165%</td>
					<td style="text-align: right">0,206%</td>
					<td style="text-align: right">0,118%</td>
					<td style="text-align: right">0,321%</td>
					<td style="text-align: right">0,123%</td>
			</tr>
			<tr>
					<td>sgf-parsing</td>
					<td>difícil</td>
					<td style="text-align: right">0,028%</td>
					<td style="text-align: right">0,188%</td>
					<td style="text-align: right">0,380%</td>
					<td style="text-align: right">0,120%</td>
					<td style="text-align: right">0,200%</td>
					<td style="text-align: right">0,460%</td>
					<td style="text-align: right">0,148%</td>
					<td style="text-align: right">0,007%</td>
					<td style="text-align: right">0,069%</td>
					<td style="text-align: right">0,091%</td>
					<td style="text-align: right">0,006%</td>
					<td style="text-align: right">0,057%</td>
					<td style="text-align: right">0,253%</td>
					<td style="text-align: right">0,293%</td>
					<td style="text-align: right">0,185%</td>
					<td style="text-align: right">0,538%</td>
					<td style="text-align: right">0,198%</td>
			</tr>
			<tr>
					<td><strong>TOTAL</strong></td>
					<td></td>
					<td style="text-align: right"><strong>0,23%</strong></td>
					<td style="text-align: right"><strong>1,72%</strong></td>
					<td style="text-align: right"><strong>4,42%</strong></td>
					<td style="text-align: right"><strong>2,58%</strong></td>
					<td style="text-align: right"><strong>2,32%</strong></td>
					<td style="text-align: right"><strong>5,28%</strong></td>
					<td style="text-align: right"><strong>1,49%</strong></td>
					<td style="text-align: right"><strong>0,08%</strong></td>
					<td style="text-align: right"><strong>0,72%</strong></td>
					<td style="text-align: right"><strong>1,34%</strong></td>
					<td style="text-align: right"><strong>0,09%</strong></td>
					<td style="text-align: right"><strong>0,83%</strong></td>
					<td style="text-align: right"><strong>2,07%</strong></td>
					<td style="text-align: right"><strong>2,33%</strong></td>
					<td style="text-align: right"><strong>2,30%</strong></td>
					<td style="text-align: right"><strong>5,17%</strong></td>
					<td style="text-align: right"><strong>2,20%</strong></td>
			</tr>
	</tbody>
</table>
</div>
<script>
(function() {
  var div = document.querySelector('.heat-table');
  if (!div) return;
  var table = div.querySelector('table');
  if (!table) return;
  var rows = table.querySelectorAll('tbody tr');
  rows.forEach(function(row) {
    var cells = row.querySelectorAll('td');
    var vals = [];
    for (var i = 2; i < cells.length; i++) {
      var v = parseFloat(cells[i].textContent.replace(/,/g,'.').replace(/%/g,'').replace(/\*/g,''));
      if (!isNaN(v) && v > 0) vals.push({idx: i, val: v});
    }
    if (!vals.length) return;
    var rowMax = Math.max.apply(null, vals.map(function(x){return x.val;}));
    var rowMin = Math.min.apply(null, vals.map(function(x){return x.val;}));
    var range = rowMax - rowMin;
    vals.forEach(function(item) {
      var ratio = range > 0 ? (item.val - rowMin) / range : 0;
      var r, g;
      if (ratio < 0.5) {
        r = Math.round(255 * ratio * 2);
        g = 180;
      } else {
        r = 255;
        g = Math.round(180 * (1 - (ratio - 0.5) * 2));
      }
      cells[item.idx].style.backgroundColor = 'rgb(' + r + ',' + g + ',50)';
      cells[item.idx].style.color = '#000';
      cells[item.idx].style.fontWeight = ratio > 0.7 ? 'bold' : 'normal';
    });
  });
})();
</script>
<p>Columnas: K = Kiro, Cx = Codex (default), Cx-*-H = Codex con esfuerzo <code>high</code>, CC = Claude Code. Todas en %plan/sem (Kiro prorrateado a 250 cr/semana, Codex y CC contra su límite semanal).</p>
</details>
<p>Lo que se observa al comparar Cx-Sol (1,34%) con Cx-So-H (2,07%) es que el mismo modelo gasta un 55% más al aumentar el esfuerzo. Y comparando Cx-So-H (2,07%) con K-Sol (4,42%): incluso igualando a <code>high</code>, Kiro sigue siendo 2,1x más caro con Sol. La diferencia ya no es el esfuerzo — es la estructura de costes del plan.</p>
<p><strong>Nota sobre los precios de GPT-5.6 en Bedrock:</strong> a finales de julio de 2026, los precios bajaron significativamente — Luna un 80%, Terra un 20% y Sol un 20%. Si Kiro traslada esa reducción a sus multiplicadores de crédito — que a fecha de este benchmark (agosto 2026) no lo ha hecho — el coste de Kiro con GPT podria ser mas bajo.</p>
<h2 id="calidad-del-código">Calidad del código</h2>
<p>Que un ejercicio pase los tests no dice nada sobre si el código es bueno. Para medirlo, un torneo a ciegas: 3 jueces independientes (glm-5, deepseek-3.2, minimax-m2.5) que no participan en el benchmark puntúan las soluciones anonimizadas en 10 pasadas, en orden aleatorio. Solo cuenta si hay una mayoría clara de 2 de los 3 jueces.</p>
<h3 id="duelos-directos-mismo-modelo-distinta-herramienta">Duelos directos: mismo modelo, distinta herramienta</h3>
<p>Cada duelo enfrenta las soluciones del <strong>mismo ejercicio, con el mismo modelo</strong>, producidas por dos herramientas distintas. La pregunta es: ¿quién escribe mejor código con el mismo modelo?</p>
<p><strong>Con esfuerzo por defecto:</strong></p>
<table>
	<thead>
			<tr>
					<th>Modelo</th>
					<th>Herramienta A</th>
					<th>Herramienta B</th>
					<th>A gana</th>
					<th>B gana</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>gpt-5.6 Luna</td>
					<td>Codex (medium)</td>
					<td>Kiro (high)</td>
					<td><strong>8</strong></td>
					<td>6</td>
			</tr>
			<tr>
					<td>gpt-5.6 Terra</td>
					<td>Codex (medium)</td>
					<td>Kiro (high)</td>
					<td>7</td>
					<td><strong>8</strong></td>
			</tr>
			<tr>
					<td>gpt-5.6 Sol</td>
					<td>Codex (low)</td>
					<td>Kiro (high)</td>
					<td>4</td>
					<td><strong>11</strong></td>
			</tr>
			<tr>
					<td>Claude Haiku 4.5</td>
					<td>Claude Code (high)</td>
					<td>Kiro</td>
					<td><strong>6</strong></td>
					<td>5</td>
			</tr>
			<tr>
					<td>Claude Sonnet 5</td>
					<td>Claude Code (high)</td>
					<td>Kiro</td>
					<td>7</td>
					<td><strong>8</strong></td>
			</tr>
			<tr>
					<td>Claude Opus 5</td>
					<td>Claude Code (high)</td>
					<td>Kiro</td>
					<td>5</td>
					<td><strong>10</strong></td>
			</tr>
	</tbody>
</table>
<p><strong>Con esfuerzo igualado a <code>high</code>:</strong></p>
<table>
	<thead>
			<tr>
					<th>Modelo</th>
					<th>Codex-high gana</th>
					<th>Kiro gana</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>gpt-5.6 Luna</td>
					<td>4</td>
					<td><strong>9</strong></td>
			</tr>
			<tr>
					<td>gpt-5.6 Terra</td>
					<td><strong>7</strong></td>
					<td><strong>7</strong></td>
			</tr>
			<tr>
					<td>gpt-5.6 Sol</td>
					<td><strong>8</strong></td>
					<td>6</td>
			</tr>
	</tbody>
</table>
<p>En el modo por defecto de cada herramienta, <strong>Kiro gana en los modelos potentes</strong> (Sol 11-4, Opus 10-5) y <strong>empata o pierde ligeramente en los menos potentes</strong> (Luna 6-8, Haiku 5-6). El patrón es claro: cuanto más capaz es el modelo, más partido le saca Kiro.</p>
<p>Pero recordemos que el esfuerzo en Codex era distinto: Kiro corre a <code>high</code> por defecto y Codex no. Al igualar a <code>high</code>:</p>
<ul>
<li><strong>Luna se invierte</strong>: Kiro pasa de perder 6-8 a ganar 9-4. El hardness de Kiro saca más partido a Luna cuando ambos se esfuerzan igual.</li>
<li><strong>Terra empata</strong>: 7-7. Sin diferencia medible.</li>
<li><strong>Sol se invierte</strong>: Codex pasa de perder 4-11 a ganar 8-6. Cuando Sol razona a fondo en Codex, su hardness produce mejor código, aunque el resultado es similar.</li>
</ul>
<p><strong>No hay un ganador universal claro en calidad.</strong> Cada herramienta saca más partido de un perfil de modelo distinto. Y, además, los resultados son similares.</p>
<h3 id="totales">Totales</h3>
<p>Comparación justa por enfrentamiento directo (mismo modelo, distinta herramienta):</p>
<table>
	<thead>
			<tr>
					<th>Enfrentamiento</th>
					<th>Kiro</th>
					<th>Rival</th>
					<th>Sin consenso</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Kiro vs Codex (GPT default)</td>
					<td><strong>25</strong></td>
					<td>19</td>
					<td>1</td>
			</tr>
			<tr>
					<td>Kiro vs Codex (GPT high)</td>
					<td><strong>22</strong></td>
					<td>19</td>
					<td>4</td>
			</tr>
			<tr>
					<td>Kiro vs Claude Code</td>
					<td><strong>23</strong></td>
					<td>18</td>
					<td>1</td>
			</tr>
	</tbody>
</table>
<p>Kiro gana en los tres cruces, pero ninguno es un dominio aplastante. Con esfuerzo igualado (la fila de high), la diferencia se reduce — Codex se acerca a 22-19.</p>
<h3 id="la-final-el-mejor-de-cada-herramienta">La final: el mejor de cada herramienta</h3>
<p>La última fase enfrenta directamente al mejor modelo de cada herramienta: <strong>Kiro con Opus 5</strong>, <strong>Codex con Sol a esfuerzo <code>high</code></strong>, <strong>Claude Code con Opus 5</strong> y <strong>Kiro Auto</strong> (el router). Cuatro soluciones por ejercicio, mismo prompt, mismos tests — pura diferencia de hardness.</p>
<table>
	<thead>
			<tr>
					<th>Ejercicio</th>
					<th>Banda</th>
					<th>Ganador</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>list-ops</td>
					<td>fácil</td>
					<td><strong>Kiro Opus</strong> (3/3)</td>
			</tr>
			<tr>
					<td>transpose</td>
					<td>fácil</td>
					<td><strong>CC Opus</strong> (3/3)</td>
			</tr>
			<tr>
					<td>forth</td>
					<td>medio</td>
					<td><strong>Kiro Opus</strong> (2/3)</td>
			</tr>
			<tr>
					<td>pov</td>
					<td>difícil</td>
					<td><strong>CC Opus</strong> (3/3)</td>
			</tr>
			<tr>
					<td>sgf-parsing</td>
					<td>difícil</td>
					<td><strong>Kiro Opus</strong> (3/3)</td>
			</tr>
			<tr>
					<td>10 ejercicios</td>
					<td></td>
					<td>sin consenso</td>
			</tr>
	</tbody>
</table>
<p><strong>Con consenso (5/15): Kiro Opus 3, CC Opus 2, Codex Sol 0, Kiro Auto 0.</strong></p>
<p>Lo que quiere decir que Kiro Opus gana por poco, pero no de forma abrumadora. Es más: si miramos las medias por ejercicio, el resultado es similar:</p>
<table>
	<thead>
			<tr>
					<th>Agente</th>
					<th>Puntuación media (1-5)</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Kiro Opus 5</strong></td>
					<td><strong>4,34</strong></td>
			</tr>
			<tr>
					<td>CC Opus 5</td>
					<td>4,22</td>
			</tr>
			<tr>
					<td>Codex Sol high</td>
					<td>3,95</td>
			</tr>
			<tr>
					<td>Kiro Auto</td>
					<td>3,25</td>
			</tr>
	</tbody>
</table>
<p>Los tres modelos potentes están cerca — 0,39 puntos separan al primero del tercero en una escala de 5. La diferencia entre Kiro y Claude Code con el mismo modelo (Opus) es de 0,12: <strong>algo mínimo</strong>. Codex Sol queda un escalón por debajo, pero sigue produciendo código de calidad 4/5.</p>
<p>El router auto de Kiro (3,25) confirma lo que cabía esperar: un router que elige modelos baratos para tareas que considera sencillas no puede competir en calidad absoluta con un modelo top razonando a fondo. Pero resuelve los 15 de 15 en 5,8 minutos gastando 3,72 credits — ahí la relación calidad/precio es otra historia.</p>
<h3 id="detalle-de-los-jueces-por-ejercicio">Detalle de los jueces por ejercicio</h3>
<details>
<summary><strong>Ver el detalle de los 128 duelos</strong> — quién gana cada ejercicio con cada modelo</summary>
<div class="quality-table wide-table">
<table>
	<thead>
			<tr>
					<th>Ejercicio</th>
					<th>Banda</th>
					<th style="text-align: center">Luna</th>
					<th style="text-align: center">Terra</th>
					<th style="text-align: center">Sol</th>
					<th style="text-align: center">Luna-H</th>
					<th style="text-align: center">Terra-H</th>
					<th style="text-align: center">Sol-H</th>
					<th style="text-align: center">Haiku</th>
					<th style="text-align: center">Sonnet</th>
					<th style="text-align: center">Opus</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>eliuds-eggs</td>
					<td>fácil</td>
					<td style="text-align: center">—</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Claude Code</td>
			</tr>
			<tr>
					<td>hamming</td>
					<td>fácil</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Claude Code</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Claude Code*</td>
			</tr>
			<tr>
					<td>list-ops</td>
					<td>fácil</td>
					<td style="text-align: center">Codex*</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Kiro</td>
			</tr>
			<tr>
					<td>resistor-color-expert</td>
					<td>fácil</td>
					<td style="text-align: center">Codex*</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Codex*</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">—</td>
					<td style="text-align: center">Claude Code</td>
					<td style="text-align: center">Kiro</td>
			</tr>
			<tr>
					<td>transpose</td>
					<td>fácil</td>
					<td style="text-align: center">Codex*</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Codex*</td>
					<td style="text-align: center">—</td>
					<td style="text-align: center">Claude Code*</td>
					<td style="text-align: center">Claude Code</td>
			</tr>
			<tr>
					<td>complex-numbers</td>
					<td>medio</td>
					<td style="text-align: center">Codex*</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Codex*</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Claude Code*</td>
					<td style="text-align: center">Claude Code</td>
					<td style="text-align: center">Claude Code</td>
			</tr>
			<tr>
					<td>forth</td>
					<td>medio</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">—</td>
					<td style="text-align: center">Claude Code*</td>
					<td style="text-align: center">Kiro</td>
			</tr>
			<tr>
					<td>knapsack</td>
					<td>medio</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Codex*</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Claude Code*</td>
					<td style="text-align: center">Kiro</td>
			</tr>
			<tr>
					<td>relative-distance</td>
					<td>medio</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Claude Code</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Kiro</td>
			</tr>
			<tr>
					<td>scale-generator</td>
					<td>medio</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">—</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">—</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Claude Code</td>
			</tr>
			<tr>
					<td>dominoes</td>
					<td>difícil</td>
					<td style="text-align: center">Codex*</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Codex*</td>
					<td style="text-align: center">Codex*</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Claude Code*</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Kiro*</td>
			</tr>
			<tr>
					<td>paasio</td>
					<td>difícil</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Claude Code*</td>
					<td style="text-align: center">Claude Code</td>
					<td style="text-align: center">Kiro</td>
			</tr>
			<tr>
					<td>pov</td>
					<td>difícil</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Codex*</td>
					<td style="text-align: center">—</td>
					<td style="text-align: center">Codex*</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Claude Code</td>
					<td style="text-align: center">Claude Code</td>
					<td style="text-align: center">Kiro</td>
			</tr>
			<tr>
					<td>rest-api</td>
					<td>difícil</td>
					<td style="text-align: center">Codex*</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">—</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro*</td>
			</tr>
			<tr>
					<td>sgf-parsing</td>
					<td>difícil</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Codex</td>
					<td style="text-align: center">—</td>
					<td style="text-align: center">Kiro</td>
					<td style="text-align: center">Kiro*</td>
					<td style="text-align: center">Kiro</td>
			</tr>
	</tbody>
</table>
</div>
<script>
(function() {
  var div = document.querySelector('.quality-table');
  if (!div) return;
  var cells = div.querySelectorAll('tbody td');
  cells.forEach(function(cell) {
    if (cell.textContent.trim().endsWith('*')) {
      cell.style.backgroundColor = 'rgba(128,128,128,0.18)';
    }
  });
})();
</script>
<p>Columnas: Luna/Terra/Sol = esfuerzo por defecto de cada herramienta. Luna-H/Terra-H/Sol-H = ambos a <code>high</code>. Haiku/Sonnet/Opus = modelos Claude.</p>
<p><strong>Leyenda:</strong> las celdas con fondo gris y asterisco (*) son victorias ajustadas — solo dos de los tres jueces coinciden. El resto son por unanimidad. &ldquo;—&rdquo; = los jueces no llegaron a un acuerdo.</p>
</details>
<h2 id="conclusiones">Conclusiones</h2>
<p>Es curioso porque el resultado me ha sorprendido, en general me ha sorprendido el precio/rendimiento de Codex, pensaba que iba a estar más lejos y la igualdad en calidad de los 3, pero sobre todo que Kiro fuese hasta mejor, esperaba que Claude Code fuese el más potente.</p>
<p>A nivel objetivo es difícil dar un ganador absoluto, pero hay algunas cosas que, a mi modo de ver, dan la victoria a <strong>Kiro</strong> y probablemente a Codex como segundo en esta revisión (Si Codex vuelve a implementar la ventana de 5 horas empeoraría mi visión).</p>
<p>Claude Code es muy potente, pero a mi modo de ver el límite de 5 horas es un problema, si ejecutas una tarea y llegas a ese límite, lo normal es tener que subir a un plan superior, por lo que su coste real se dispara, esto mismo le pasaba a Codex, pero al eliminar (No sabemos si temporalmente) su ventana de 5 horas, el problema se traslada a la semana, mientras que en Kiro este problema es mensual, lo que lo hace más llevadero.</p>
<p>Sé que esto puede ser lo más controvertido, ya que en un plan mensual sin llegar a los límites Kiro sale perdiendo, pero en el mundo real trabajando con fechas de entrega, picos de trabajo y bastante estrés llegar a los límites de cualquier plan es normal y este modelo de límites temporales de 5 horas y semanales se aprovecha de eso, de que una vez hemos empezado probablemente no nos quede otra opción que subir de Tier.</p>
<p>Por otro lado, Kiro tiene una ventaja que Codex y Claude Code no tienen: dispone de los modelos del otro. es cierto que por ejemplo falta Fable en Claude Code, pero a no ser que tu requisito sea usar Fable no es un problema.</p>
<p>Hay una cosa en la que Kiro no puede competir y es que no permite crear imágenes o PPTs directamente, pero en mi caso es algo salvable con otras herramientas, de hecho prefiero esto que las PPTs clónicas que veo últimamente.</p>
<p>Así que sí podemos decir que Kiro es más eficiente durante el mes completo y más si usamos el modelo auto.</p>
<p>De todos modos, esto no es una verdad grabada en piedra: cada uno tiene sus preferencias. La mía está clara y es Kiro. ¿Cuál es la tuya?</p>
<h2 id="para-reproducirlo">Para reproducirlo</h2>
<p>Todo el código está en el repositorio: <strong><a href="https://github.com/CloudHastaEnLaSopa/coding-agents-benchmark">coding-agents-benchmark</a></strong>.</p>
<p>No hace falta creerse ningún número a ciegas. Los scripts son agnósticos a la herramienta — reciben el comando por plantilla — así que puedes añadir el asistente que quieras, o repetirlo con otros modelos y otro lenguaje.</p>
<p><strong>Preparar los ejercicios:</strong></p>
<div class="highlight"><div style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>./stage-exercises.py --lang python
</span></span><span style="display:flex;"><span>./check-baseline.sh          <span style="color:#57606a"># verifica que los tests fallan con el stub vacío</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>Lanzar una tanda</strong> (15 ejercicios con verificación incluida):</p>
<div class="highlight"><div style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#57606a"># Kiro, con HOME aislado para que no herede configuración personal</span>
</span></span><span style="display:flex;"><span><span style="color:#953800">KA</span><span style="color:#0550ae">=</span><span style="color:#0a3069">&#39;./kiro-aislado.sh --no-interactive --agent benchmark&#39;</span>
</span></span><span style="display:flex;"><span>./tanda.py --agente kiro-sonnet5 --cmd <span style="color:#0a3069">&#34;</span><span style="color:#953800">$KA</span><span style="color:#0a3069"> --model claude-sonnet-5 {prompt}&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#57606a"># Codex</span>
</span></span><span style="display:flex;"><span>./tanda.py --agente codex-terra <span style="color:#0a3069">\
</span></span></span><span style="display:flex;"><span>    --cmd <span style="color:#0a3069">&#39;codex exec --json -s workspace-write -m gpt-5.6-terra {prompt}&#39;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#57606a"># Claude Code</span>
</span></span><span style="display:flex;"><span><span style="color:#953800">CC</span><span style="color:#0550ae">=</span><span style="color:#0a3069">&#39;claude -p {prompt} --output-format json --permission-mode acceptEdits --safe-mode&#39;</span>
</span></span><span style="display:flex;"><span>./tanda.py --agente cc-sonnet --cmd <span style="color:#0a3069">&#34;</span><span style="color:#953800">$CC</span><span style="color:#0a3069"> --model sonnet&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>tanda.py</code> es reanudable: si un run ya está completo, lo salta, así que puedes cortar y seguir cuando el plan se recupere. Y <code>verificar.sh</code> comprueba el checksum del fichero de test después de cada ejecución — si el agente lo ha tocado, el run se marca como manipulado y no se cuenta.</p>
<p><strong>El torneo de calidad:</strong></p>
<div class="highlight"><div style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>./torneo.py --parejas          <span style="color:#57606a"># ver qué duelos son posibles con los datos que hay</span>
</span></span><span style="display:flex;"><span>./torneo.py --fase1            <span style="color:#57606a"># duelos del mismo modelo en dos herramientas</span>
</span></span><span style="display:flex;"><span>./juez.py --todos --panel      <span style="color:#57606a"># panel de 3 jueces sobre un directorio preparado</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>Lo que hay que declarar si lo repites:</strong> los porcentajes de plan salen de leer el <code>/status</code> de cada herramienta, que redondea al entero — eso deja una banda de error de entre el ±7% y el ±20% según el caso. Los credits de Kiro sí son exactos: la suma de los 150 logs coincide con lo que reporta la cuenta hasta el segundo decimal.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
