En un M3 Max de 128 GB con OpenClaw 2026.9.7 y Ollama 0.35.0, gemma4 —el modelo que recomienda la propia configuración de Ollama de OpenClaw— superó las 12 ejecuciones evaluadas en las cuatro tareas de agente; gpt-oss:20b superó 11 de 12, con casi tres veces más llamadas a herramientas fallidas; y qwen3-coder:30b, la opción habitual para programación, superó 2 de 12 porque sus llamadas a herramientas seguían rompiéndose en el analizador de Ollama. Ejecutamos cada modelo tres veces en cada tarea, en un espacio de trabajo nuevo, evaluamos el resultado mediante un script y registramos los recuentos de herramientas y tokens de OpenClaw y el registro del servidor de Ollama. Medido el 1 de octubre de 2026.
Para consultar cuánto cuesta OpenClaw y cuánto costaría en su lugar un modelo alojado, vea Precios de OpenClaw; para ejecutar un modelo local con una alternativa de API, consulte varios agentes y modelos en OpenClaw.
Qué se ejecutó
| Máquina | Apple M3 Max, 128 GB de memoria unificada |
| OpenClaw | 2026.9.7 de npm, Node 24.21.0, openclaw agent --local --json, un turno por ejecución |
| Ollama | Binario de la versión v0.35.0, API nativa (sin /v1) |
| Modelos | gemma4:latest — 7.5B, Q4_K_M, 6.6 GB en disco; gpt-oss:20b — 20.9B, MXFP4, 13.8 GB; qwen3-coder:30b — mezcla de expertos de 30.5B, Q4_K_M, 18.6 GB |
| Contexto | OpenClaw contextWindow 32,768 para los tres; Ollama cargó gemma4 y gpt-oss con 131,072, y qwen3-coder con 262,144 |
| Ejecución de herramientas | Sandbox de Docker de OpenClaw, con el espacio de trabajo montado con permisos de lectura y escritura |
| Ejecuciones | 4 tareas × 3 repeticiones × 3 modelos = 36, cada una en un espacio de trabajo nuevo con un estado nuevo de OpenClaw |
Las cuatro tareas
| Tarea | Qué debía hacer el agente | Supera la prueba cuando |
|---|---|---|
| Leer | Lee un registro de servicio de 301 líneas e indica el servicio de su única línea ERROR | La respuesta contiene el nombre correcto del servicio |
| Solución | Ejecuta un archivo de pruebas unitarias, corrige el error en el módulo que prueba y vuelve a ejecutarlo — sin tocar las pruebas | Las pruebas terminan con código 0 y el archivo de prueba es idéntico byte por byte |
| Contar | Cuenta las filas de datos de cinco archivos CSV y escribe los recuentos en counts.json | counts.json es igual al objeto esperado |
| Corrección de dos archivos | Dos errores independientes en dos módulos detrás de tres pruebas fallidas; corrige ambos sin tocar las pruebas | Todas las pruebas terminan con código 0 y los archivos de prueba son idénticos byte por byte |
Resultados
| Modelo | Tarea | Superadas | Tiempo mediano | Llamadas medianas a herramientas | Llamadas a herramientas fallidas (3 ejecuciones) | Tokens medianos de entrada / salida |
|---|---|---|---|---|---|---|
gemma4:latest | t1-read | 3/3 | 50.2 s | 1 | 0 | 21,438 / 19 |
gemma4:latest | t2-fix | 3/3 | 47.5 s | 4 | 0 | 13,387 / 866 |
gemma4:latest | t3-count | 3/3 | 37.9 s | 7 | 1 | 13,073 / 513 |
gemma4:latest | t4-multi | 3/3 | 75.1 s | 10 | 6 | 16,417 / 2,441 |
gpt-oss:20b | t1-read | 3/3 | 38.7 s | 3 | 5 | 16,971 / 508 |
gpt-oss:20b | t2-fix | 3/3 | 54.2 s | 7 | 6 | 12,409 / 1,193 |
gpt-oss:20b | t3-count | 2/3 | 76.5 s | 10 | 5 | 13,247 / 1,713 |
gpt-oss:20b | t4-multi | 3/3 | 65.1 s | 11 | 3 | 13,065 / 1,380 |
qwen3-coder:30b | t1-read | 0/3 | 25.1 s | 0 | 0 | 8,915 / 38 |
qwen3-coder:30b | t2-fix | 0/3 | 34.8 s | 3 | 0 | 9,435 / 163 |
qwen3-coder:30b | t3-count | 2/3 | 36.9 s | 3 | 0 | 9,503 / 279 |
qwen3-coder:30b | t4-multi | 0/3 | 42.5 s | 5 | 0 | 9,992 / 243 |
Los tiempos son de reloj transcurrido por ejecución, incluidos aproximadamente cinco a siete segundos de inicio de OpenClaw. "Tokens de entrada" son los tokens de entrada no almacenados en caché, tal como los registró OpenClaw; el contexto que reenvió desde la caché se suma a eso y se contabiliza en la sección de costes siguiente. La columna de llamadas a herramientas fallidas cuenta los fallos registrados por OpenClaw; los fallos de qwen3-coder ocurrieron antes de que una llamada llegara a OpenClaw, por lo que allí aparecen como cero y se explican más abajo.
Qué indican las cifras
- gemma4 y gpt-oss:20b son utilizables para tareas breves de agente. 23 de sus 24 ejecuciones superaron la prueba, incluida la corrección de dos archivos, que requiere leer varios módulos, editar dos de ellos y volver a ejecutar las pruebas.
- gemma4 utilizó las herramientas de forma más limpia. En la tarea de lectura hizo exactamente una llamada a herramienta cada vez; gpt-oss hizo tres, de las cuales normalmente dos fallaron antes de que leyera el archivo. En las doce ejecuciones, gpt-oss tuvo 19 llamadas a herramientas fallidas frente a 7 de gemma4, y promedió 9.1 turnos del asistente por tarea frente a 6.8 de gemma4.
- El único fallo fue gpt-oss en la tarea de contar: después de trece llamadas a herramientas escribió un counts.json mal formado y terminó el turno sin responder.
- La velocidad no es el factor diferenciador aquí. Mediana de 53 s para gemma4 y 54 s para gpt-oss en todas las ejecuciones; la ejecución individual más lenta fue la de gemma4, con 133 s en la corrección de dos archivos y diecisiete llamadas a herramientas. Las ejecuciones de qwen3-coder fueron más cortas únicamente porque fallaron pronto.
- Los modelos más grandes no aportaron precisión en estas tareas. gpt-oss:20b tiene casi tres veces la cantidad de parámetros de gemma4, y qwen3-coder:30b, diseñado para código, obtuvo la puntuación más baja de los tres.
Doce ejecuciones por modelo bastan para observar un patrón en estas tareas, pero no para clasificar modelos en general. No se probaron tareas largas, bases de código más grandes ni otras cuantizaciones.
Por qué falló qwen3-coder:30b
No fue por la programación. De sus diez ejecuciones fallidas:
- Cinco terminaron en el analizador de Ollama. qwen3-coder escribe las llamadas a herramientas como XML y, cuando un argumento contenía código, cerró un elemento
<parameter>con</function>. El registro del servidor de Ollama 0.35.0 anotó "qwen tool call parsing failed … XML syntax error … element <parameter> closed by </function>", y OpenClaw terminó el turno con "Agent run failed". - Cuatro nunca hicieron una llamada. La respuesta anunció el siguiente paso y luego imprimió un
</tool_call>aislado como texto, sin nada que Ollama pudiera analizar como llamada; el turno terminó ahí. Ese es el síntoma que la documentación de OpenClaw asocia con la URL/v1; aquí ocurrió con la API nativa. - Una fue una respuesta incorrecta: contó las líneas de encabezado del CSV como filas de datos.
El analizador es de Ollama, por lo que este resultado corresponde a Ollama 0.35.0, no es un veredicto sobre el modelo. Si ejecuta qwen3-coder con OpenClaw, observe el registro de ollama serve en busca de "qwen tool call parsing failed" antes de culpar al modelo y vuelva a probar después de actualizar Ollama.
La configuración que importó
- URL nativa de Ollama. La documentación de OpenClaw indica que la URL compatible con OpenAI
/v1"rompe las llamadas a herramientas y los modelos pueden emitir JSON de llamadas a herramientas sin procesar como texto plano"; las ejecuciones utilizaronbaseUrlsin/v1, junto conapi: "ollama". - Fije
contextWindowen las entradas escritas manualmente. En una prueba rápida, una entrada de modelo explícita sin ese valor se resolvió en un contexto de 200,000 tokens; la configuración propia de Ollama de OpenClaw escribe 32,768 para los modelos locales, que es lo utilizado en estas ejecuciones. - El contexto de Ollama es independiente. Ollama 0.35.0 cargó gemma4 y gpt-oss con 131,072 tokens, y qwen3-coder con 262,144 —45.3 GB residentes— independientemente de los 32,768 de OpenClaw; eso, no el presupuesto de OpenClaw, determina la memoria.
- Aísle el shell. Un modelo local que ejecuta comandos de shell en su máquina es el riesgo real aquí. Con
sandbox.mode: "all", exec se ejecutó en la imagen de Docker de OpenClaw, con únicamente el espacio de trabajo montado; la imagen se construye una vez con el comandodocker buildde la documentación de sandboxing de OpenClaw.
// ~/.openclaw/openclaw.json — the runs used one model per config; the
// fallbacks line shows the pattern and was not part of the measured runs
{
models: { providers: { ollama: {
apiKey: "ollama-local",
baseUrl: "http://127.0.0.1:11434", // native Ollama URL — no /v1
api: "ollama",
timeoutSeconds: 600,
models: [
{ id: "gemma4:latest", name: "gemma4:latest", contextWindow: 32768, maxTokens: 8192,
params: { keep_alive: "30m" } },
{ id: "gpt-oss:20b", name: "gpt-oss:20b", contextWindow: 32768, maxTokens: 8192,
params: { keep_alive: "30m" } },
],
} } },
agents: { defaults: {
model: { primary: "ollama/gemma4:latest", fallbacks: ["ollama/gpt-oss:20b"] },
sandbox: { mode: "all", workspaceAccess: "rw" }, // shell runs in Docker
} },
tools: { exec: { mode: "full" } },
}Cuánto cuesta en local
Un modelo local sustituye una factura por token por tiempo, disco y electricidad. Por ejecución, OpenClaw registró aproximadamente 16,415 tokens de entrada no almacenados en caché, 78,469 tokens de contexto reenviado desde la caché y 1,142 tokens de salida para gemma4, y 13,761, 88,688 y 1,192 para gpt-oss. Como cálculo aproximado —los tokenizadores difieren entre modelos— los mismos recuentos con las tarifas de Kunavo de Claude Haiku 4.5 ($0.70 de entrada, $0.07 en caché, $3.50 de salida por millón) ascienden a unos $0.021 y $0.020 por ejecución. No se midió la energía; la electricidad por ejecución es vatios × segundos ÷ 3,600,000 × su precio por kWh.
El patrón práctico es utilizar un modelo local como principal, con una alternativa alojada para los turnos en que falle el modelo local. OpenClaw acepta una lista de fallbacks por agente; una clave de Kunavo funciona como proveedor compatible con OpenAI junto a Ollama y se factura por token a partir de un saldo prepago. Nadie en Kunavo ha ejecutado OpenClaw contra su endpoint; estas ejecuciones fueron completamente locales.
Preguntas frecuentes
¿Cuál es el mejor modelo local para OpenClaw?
De los tres que medimos, gemma4 — el modelo de Ollama sugerido por el propio OpenClaw. En un M3 Max con 128 GB, ejecutando OpenClaw 2026.9.7 y Ollama 0.35.0, gemma4 (7.5B, Q4_K_M) superó las 12 ejecuciones evaluadas en cuatro tareas; gpt-oss:20b (20.9B, MXFP4) superó 11 de 12, con 19 llamadas a herramientas fallidas frente a las 7 de gemma4; qwen3-coder:30b superó 2 de 12 porque sus llamadas a herramientas seguían fallando en el analizador de Ollama. Es un resultado de tres modelos en tareas cortas, no una clasificación de todos los modelos locales.
¿Puede OpenClaw ejecutarse completamente sin conexión con Ollama?
Sí, para las llamadas al modelo: con el proveedor apuntando a un host local de Ollama, todas las solicitudes de modelo de estas ejecuciones fueron a 127.0.0.1. Usa la URL nativa, http://127.0.0.1:11434, no la compatible con OpenAI /v1 — la documentación de Ollama de OpenClaw indica que /v1 rompe las llamadas a herramientas y puede hacer que los modelos impriman JSON de llamadas a herramientas sin procesar como texto. Las habilidades o herramientas que accedan a Internet seguirán necesitándolo, y la imagen del sandbox de Docker de OpenClaw debe construirse una vez (no se descarga automáticamente).
¿Cuánta memoria necesita un modelo local de OpenClaw?
En disco, gemma4 ocupa 6.6 GB, gpt-oss:20b 13.8 GB y qwen3-coder:30b 18.6 GB. Cargados, Ollama informó de 13.7 GB para gpt-oss y 45.3 GB para qwen3-coder, porque Ollama 0.35.0 dimensionó el contexto por sí mismo: 131,072 tokens para gemma4 y gpt-oss, y 262,144 para qwen3-coder, independientemente de los 32,768 indicados a OpenClaw. En un Mac de 128 GB cabe todo; en una máquina de 16 o 32 GB no cabría sin un contexto menor. No se probaron máquinas más pequeñas.
¿Es gratis un modelo local en comparación con una API?
Not free, just billed differently: you pay in time, disk and electricity instead of per token. Each run here used about 95,000–105,000 tokens counting OpenClaw's re-sent context — on a metered API at Claude Haiku 4.5 rates that would be roughly $0.021 a run, as rough arithmetic across different tokenizers. A local run took about 54 seconds; power draw was not measured, so the electricity side is a formula: watts × seconds ÷ 3,600,000 × your price per kWh.
¿Por qué qwen3-coder falla en OpenClaw con Ollama?
En nuestras ejecuciones fue el formato de las llamadas a herramientas, no el código. qwen3-coder escribe las llamadas a herramientas como XML, y en Ollama 0.35.0 cinco de sus doce ejecuciones terminaron con el registro del servidor de Ollama informando de "qwen tool call parsing failed": un error de sintaxis XML, un elemento <parameter> cerrado por </function>; después OpenClaw se detuvo con "Agent run failed". Otras cuatro imprimieron un </tool_call> aislado como texto, sin ninguna llamada que Ollama pudiera analizar, por lo que no se ejecutó nada. Compruebe el registro del servidor para ver esa advertencia antes de culpar al modelo y vuelva a probar con una versión más reciente de Ollama: el analizador es de Ollama y este resultado es específico de 0.35.0.
¿Por qué establecer contextWindow al añadir manualmente modelos de Ollama a OpenClaw?
Porque una entrada de modelo explícita sin ese valor se resolvió en un contexto de 200,000 tokens en nuestra prueba rápida, muy por encima de lo que manejan la mayoría de los modelos locales, mientras que la configuración propia de Ollama de OpenClaw escribe 32,768 para los modelos locales. Fijar contextWindow (y maxTokens) mantiene realista el presupuesto de compactación de OpenClaw. No cambia el num_ctx propio de Ollama: aquí Ollama siguió cargando los modelos con 131,072.
Ejecutado el 1 de octubre de 2026 en un Apple M3 Max (128 GB): OpenClaw 2026.9.7 (npm, Node 24.21.0), Ollama v0.35.0 (binario de versión), gemma4:latest, gpt-oss:20b y qwen3-coder:30b descargados del registro de Ollama y verificados mediante sha256. Cada una de las 36 ejecuciones utilizó un espacio de trabajo nuevo y un estado nuevo de OpenClaw, exec en el sandbox de Docker de OpenClaw y un script evaluador; las llamadas a herramientas y los recuentos de tokens son la salida JSON propia de OpenClaw. Los accesorios de las tareas, los evaluadores y el script adaptador se publican con las pruebas de esta página. No medido: consumo eléctrico, tareas largas, otras cuantizaciones o máquinas más pequeñas.