TL;DR
- Las dos herramientas ejecutaron las mismas dos tareas con el mismo modelo (
claude-sonnet-5), con el mismo conjunto de herramientas y en directorios limpios. 12 ejecuciones en total.- Claude Code fue más rápido de forma consistente: OpenCode tardó 1,54× en la primera tarea y 1,56× en la segunda. Dos tareas independientes, misma proporción con menos de un 2% de diferencia.
- OpenCode salió más barato por ejecución contra OpenCode Zen: 0,82× y 0,87× del coste. Con matices importantes sobre cómo se factura cada uno.
- Empate técnico en calidad objetiva: las 12 ejecuciones pasaron el 100% de las comprobaciones automáticas del brief, incluidas seis trampas diseñadas para provocar fallos.
- El hallazgo que no buscábamos: OpenCode lee
~/.claude/skills, el mismo directorio de Claude Code. La diferencia de calidad visual entre ejecuciones no la marcó el agente, sino si cargó o no una skill.
Por qué esta comparativa es distinta
Casi todas las comparativas publicadas de OpenCode y Claude Code enfrentan dos productos con modelos distintos. Eso mide los modelos, no los agentes.
Aquí los dos lados ejecutaron claude-sonnet-5: Claude Code contra la API de Anthropic, OpenCode a través de OpenCode Zen, que revende los mismos modelos de Anthropic. Con el modelo fijo, lo que queda medido es el agente: cuántas vueltas da, cuánto contexto arrastra y cuánto tarda en llegar al mismo sitio.
Cómo se hizo
Dos tareas, pensadas para quien monta su propio negocio y no para quien mantiene un compilador.
Tarea 1 — landing page. Una página de una sola pieza para una gestoría online: hero, tres beneficios, tabla de precios con tres planes, testimonios, FAQ y pie con enlaces legales. Sin build, sin CDN, todo el CSS dentro del archivo, responsive y con modo oscuro.
Tarea 2 — página de precios con trampas. El mismo formato, pero con un brief lleno de restricciones fáciles de incumplir mientras se produce algo bonito:
- Exactamente dos planes, no tres.
- Prohibida la palabra «gratis» en toda la página.
- El texto literal «IVA no incluido» bajo cada precio.
- Cero JavaScript.
- Menos de 20 KB.
- Exactamente 6 filas en la tabla comparativa y 3 preguntas en la FAQ.
Las condiciones de ejecución fueron idénticas en los dos lados:
- Directorio limpio por ejecución. Ninguno de los dos agentes vio nunca el trabajo del otro ni su propio intento anterior.
- Mismo conjunto de herramientas. Escritura, lectura, edición, búsqueda y carga de skills. Sin shell en ninguno de los dos, porque la tarea no lo necesitaba.
- Modo desatendido, sin intervención humana durante la ejecución.
- Ejecuciones en serie, nunca en paralelo: dos agentes compitiendo por CPU y red corrompen justo el número que se quiere medir.
Los resultados
Tarea 1: landing page
| Métrica | Claude Code | OpenCode (Zen) |
|---|---|---|
| Tiempo medio | 99,3 s | 153,2 s |
| Coste medio | 0,377 $ | 0,310 $ |
| Tamaño del HTML | 26.349 B | 27.151 B |
| Comprobaciones del brief | 7/7 | 7/7 |
Tarea 2: página de precios con trampas
| Métrica | Claude Code | OpenCode (Zen) |
|---|---|---|
| Tiempo medio | 34,4 s | 53,5 s |
| Coste medio | 0,190 $ | 0,166 $ |
| Tamaño del HTML | 5.668 B | 7.806 B |
| Comprobaciones del brief | 10/10 | 10/10 |
Lo interesante es la consistencia. OpenCode tardó 1,54× en la primera tarea y 1,56× en la segunda. Costó 0,82× y 0,87×. Dos tareas de tamaño y naturaleza distintas producen prácticamente la misma proporción, lo que sugiere que la diferencia es estructural del agente y no ruido de una tarea concreta.
Ninguna trampa funcionó
Las seis restricciones de la tarea 2 se comprobaron una a una sobre los seis archivos generados. Cero apariciones de «gratis». Cero etiquetas <script>. El texto «IVA no incluido» aparece dos veces en los seis, una por plan. Seis filas exactas en la tabla. Todos por debajo de 8 KB, muy lejos del límite de 20 KB.
A nivel Sonnet, seguir un brief cerrado es un problema resuelto en las dos herramientas. La diferencia no está en si cumplen, sino en cuánto tardan en cumplir.
De dónde sale la diferencia de tiempo
Los datos de uso apuntan a una explicación concreta: OpenCode consumió tokens de razonamiento y Claude Code no reportó ninguno. Entre 376 y 11.554 tokens de razonamiento por ejecución, frente a cero.
No es que un agente piense y el otro no. Es que traen configuraciones de esfuerzo distintas por defecto, y eso se paga en segundos. Es ajustable en los dos lados, así que quien mida su propio caso debería fijarlo antes de comparar.
El hallazgo que no buscábamos
En la primera ejecución de la landing page, OpenCode produjo una página notablemente mejor que todas las demás: paleta cálida en tonos terracota, etiquetas de sección, una ilustración de producto real en el hero, valoraciones con estrellas en los testimonios. El resto de ejecuciones —de las dos herramientas— produjeron la página azul o verde genérica que cualquiera reconoce como salida de un agente.
El registro de herramientas explicó por qué. Esa ejecución cargó una skill: frontend-design. Y la cargó desde ~/.claude/skills/, el directorio de Claude Code.
Es decir: OpenCode lee las mismas skills que Claude Code, sin conversión ni puerto. El mismo SKILL.md sirve a los dos agentes, que es exactamente lo que promete el formato.
La comprobación quedó limpia por accidente:
- OpenCode con la skill → diseño distintivo, con variables CSS (
var(--font-display)) y paleta propia. - OpenCode sin la skill → página azul genérica con la pila de fuentes del sistema.
- Claude Code sin cargarla → página verde genérica con la misma pila de fuentes.
De cinco ejecuciones de la tarea 1, la única que usó tokens de diseño en lugar de la fuente por defecto del sistema fue la que cargó la skill. La calidad visual no la decidió el agente: la decidió la skill.
Y la skill también rompió algo
Conviene no idealizarlo. Esa misma ejecución fue la única de las seis con un defecto real en móvil: a 375 px de ancho, la navegación se salía 11 px del viewport y recortaba el botón de la cabecera. Las ejecuciones sin skill no tenían ese problema.
También añadió al hero un campo de email que el brief no pedía.
Más bonita, peor probada en móvil y con más iniciativa de la solicitada. Para quien monta su propia página, esa combinación es más peligrosa que una página fea, porque un recorte de navegación no se nota hasta que lo dice un cliente.
Qué elegir
Claude Code, si tu limitación es tu tiempo. Es 1,5× más rápido de forma consistente en trabajo de este tipo, y en una tarde de iteraciones esa diferencia se acumula.
OpenCode, si tu limitación es la factura o el proveedor. Sale más barato por ejecución contra Zen, funciona con más de 75 proveedores y con modelos locales, y es software libre con licencia MIT. Si el problema es que un proveedor te cambie el precio, esto lo resuelve y lo otro no.
Los dos, si ya estás tocando los límites de uso. Es lo que hace la mayoría: uno como herramienta principal y otro cuando se cierra la ventana de cinco horas o hace falta un modelo que Anthropic no vende.
Y en cualquiera de los tres casos, las skills que instales valen para los dos. Puedes verlas en el directorio de Claude Skills, con la guía de qué son y cómo funcionan y la selección por trabajo.
Límites de esta medición
Conviene decir qué no demuestra esto:
- La muestra es pequeña. Dos ejecuciones por lado en la tarea 1 y tres en la tarea 2. Suficiente para ver una proporción estable, insuficiente para dar un intervalo de confianza.
- Una máquina, un modelo, dos tareas, un idioma. Nada aquí dice qué pasa con un refactor de 40 archivos, con otro modelo o en otro idioma.
- Los costes no son comparables sin matiz. La cifra de Claude Code sale de su propia salida JSON y equivale a precio de API. Quien tenga una suscripción Pro o Max paga distinto por ejecución. La cifra de OpenCode es pago por uso real en Zen, con los precios vigentes en septiembre de 2026.
- Las dos primeras ejecuciones se descartaron. La configuración inicial daba shell a OpenCode y no a Claude Code, lo que medía la configuración y no el agente. Están fuera de todas las medias de este artículo.
- Los tiempos incluyen latencia de proveedor, que ninguno de los dos agentes controla.
Las tareas, los archivos generados y el script de medición son reproducibles: dos briefs en texto plano, un lanzador y un script de puntuación que comprueba cada requisito del brief sobre el HTML resultante.