Apretaron las tuercas: los nuevos límites de los modelos free (Zen) de OpenCode/OpenWork a partir del 23/10/2026
El 26/10/2026, dos sesiones nuevas en OpenWork se detuvieron en el mismo aviso:
The free starter model is busy right now. Retrying... To keep working now, connect your own model provider.
La impresión era de sobrecarga temporal — y, sobre todo, de injusticia: ningún modelo gratuito se había usado ese día. El log del motor, sin embargo, mostraba otra cosa:
level=ERROR message="stream error" providerID=opencode modelID=deepseek-v4.1-flash-free
error.error="AI_APICallError: Free usage limit reached. Free models work in OpenCode
(https://opencode.ai); subscribe to OpenCode Go to keep going: https://opencode.ai/go"
Eran dos HTTP 429 (FreeUsageLimitError) disfrazados de "modelo ocupado". Pero lo importante no es el disfraz: es que, a partir del 23/10/2026, el régimen gratuito de Zen cambió — y el cambio no vino con anuncio, ni con un número nuevo en la documentación, ni con un contador en la interfaz.
1. Cuatro errores que parecen el mismo error
Antes de hablar de cuota, conviene separar lo que llega con un mensaje parecido y una causa completamente distinta:
| Lo que aparece | Causa real | Qué lo resuelve |
|---|---|---|
The free starter model is busy right now. Retrying... |
429 FreeUsageLimitError: cuota free de la IP agotada en el día UTC |
Esperar a que cambie el balde; usar un modelo pago |
403 FreeTierError · "OpenCode's free tier can only be used from within OpenCode" |
Llamada al free tier desde fuera del cliente OpenCode (proxy, gateway, curl) |
No insistir: el portón exige el cliente |
El proveedor opencode desaparece de la interfaz y todo *-free da 403 |
La versión de la app (desde la 0.18.60) inyecta un bloqueo de proveedor |
Revertir la versión — análisis completo en el otro artículo |
OpenWork Connect: Needs attention — provider/model not found |
Falso positivo de la sonda de salud mientras hay sesión en Cloud | Ignorarlo; no tiene relación con la cuota |
Solo la primera fila es sobre cuota. Las otras tres siguen existiendo, y son la razón por la que tanta gente cambia de clave, reinstala la app y concluye que "nada funciona" cuando el problema es otro.
2. El balde diario no cambia a la medianoche de tu ciudad
La cuota gratuita de Zen es un balde por IP y por día UTC, con la clave ip:<ip>:<AAAA-MM-DD>. El día UTC empieza a la medianoche en UTC+0; en Brasil (UTC−3) eso es a las 21:00 del día anterior. Si estás en otra zona horaria, conviene convertir: el corte es siempre 00:00 UTC.
La consecuencia práctica vale para cualquier usuario, en cualquier zona: el consumo hecho después de la hora local en que cambia el día UTC ya pertenece al balde siguiente. Quien usa el gratuito a las 22:00 de un martes está gastando la cuota del miércoles. Y quien abre la app a la mañana siguiente y ve "cuota agotada" no necesariamente usó algo ese día local.
Un caso concreto, para dimensionar: el 25/10, tres sesiones de agente corrieron en paralelo entre las 22:20 y las 22:42 y consumieron 167 llamadas free, 166 completadas. El primer rechazo llegó a las 22:42. A las 00:02 y 00:03 del 26/10 — ya en el día local siguiente — beam-free y nemotron-3.5-super-vl-free devolvían el mismo 429. A las 18:44 del 26/10, todavía antes de las 21:00, dos sesiones nuevas nacieron bloqueadas. Para el calendario local, "hoy no usé nada"; para el contador, el día había empezado la víspera a las 21:00.
Por eso "la cuota no volvió" es casi siempre una lectura de zona horaria, no un defecto.
3. Cómo funciona el mecanismo por dentro
El código del gateway (handler.ts, ipRateLimiter.ts y trialLimiter.ts) completa el dibujo:
- Quién elige el balde: los modelos marcados como
allowAnonymous— todo gratuito lo es — usan elipRateLimiter. Los modelos conrateLimitpropio cambian la fecha por un balde del modelo (los 2 primeros caracteres del id en lugar del día completo). Es por eso que dos gratuitos pueden responder de forma opuesta en el mismo segundo. - Cuota doblada para IP nueva: mientras el contador vitalicio de esa IP esté por debajo de
7 × límite diario, el límite del día es el doble. - El rechazo no cuenta: el
check()corre antes de la llamada al proveedor y lanza allí; eltrack()solo incrementa después de la respuesta. Reintentar desde el banner es inútil — no consume cuota, pero tampoco desbloquea nada. - El segundo techo no genera un 429: los modelos servidos por proveedores de prueba consumen un presupuesto de tokens por IP, vitalicio (
promoTokens). Agotado, el modelo deja de preferir ese proveedor y sigue por otro. Eso no produceFreeUsageLimitError— por lo tanto, no explica ventanas de minutos. - No existe contador: ni OpenWork ni la pestaña Usage del Console muestran "cuánto queda". El log de actividad del Console registra el rechazo como
errorCode: inference_failed, sin decir que es cuota.
El número no es una regla publicada
El FAQ de Go documenta 200 solicitudes/día para los modelos gratuitos. Lo medido, sin embargo, cambia:
| Fecha | Primer rechazo del día UTC |
|---|---|
| 22/10 | ~900 solicitudes completadas (rechazo solo al final del día) |
| 23/10 | 939 completadas |
| 25/10 | en la 215.ª solicitud |
| 26/10 | en la 168.ª solicitud |
Los mantenedores responden públicamente que la cuota free es dinámica — "we are always shifting based off what capacity we have vs demand" (#28055, #55816) — y que el límite vale "for your account or network as a whole, not to each model" (#56523). Es decir: 200 es una foto, no un contrato. Y, en el caso del 26/10, el rechazo en la posición 168 puede ser una config de servidor más baja o tráfico de otro cliente en la misma IP — las dos hipótesis caben en la medición, y no se pueden separar sin otra IP de comparación.
4. La cronología del corte
El apriete no fue un anuncio único; fue un desplazamiento que se puede datar por la avalancha de reportes.
17/10 — el catálogo se reduce por decisión de producto. muse-spark-1.3-contributor-free se retira a propósito. Los issues #56541 y #56580 reciben la respuesta de que el modelo era "a free model offered for a limited time" y fue retirado (PR #56301). El catálogo gratuito es rotativo por definición: hoy son DeepSeek V4.1 Flash Free, Nemotron 3 Ultra/3.5, Beam Free, GLM-5.3 Flash Free, MiMo y Big Pickle.
22–23/10 — el balde todavía era grande. En una IP monitoreada para este artículo, 903 y 939 solicitudes deepseek-v4.1-flash-free se completaron en un día, con rechazo solo al final. Es decir: hasta el 23/10, el nivel anterior todavía valía para al menos parte de los usuarios.
23/10 — empieza la avalancha. Es el día de la primera ola de reportes públicos de cuota rechazada sin consumo: el issue #58284 describe trece intentos el 22/10, todos rechazados, con cero uso en el Console. En las 48 horas siguientes se suman #58842, #58859, #58900, #58902 y #58919, todos con el mismo dibujo: un 429 que no vuelve después de la hora mostrada, o que vuelve con cero consumo.
25/10 — el nuevo techo aparece en la medición. El primer rechazo llegó en la 215.ª solicitud free del día UTC. Es el primer día en que el nivel de ~200 se puede medir — dos días después de que el balde todavía aceptara ~900.
26/10 — el nuevo techo se confirma. El rechazo llegó en la 168.ª solicitud, y dos sesiones nuevas, sin uso en el día local, nacieron bloqueadas. El issue #59176 reúne el mismo síntoma en más cuentas; el bot de triaje reconoce que "other people have reported the same symptom recently, which suggests it isn't specific to your account".
La lectura más probable del corte es el 23/10: es cuando empiezan los reportes en masa y cuando el comportamiento deja de ser "cuota alta que nadie alcanza" para volverse "rechazo con poco o ningún uso". El despliegue no llegó a todos el mismo día — la IP que originó la medición solo sintió el nuevo techo el 25/10 —, pero la fecha del cerco es la de la avalancha, no la de una medición aislada.
Y hay una ambigüedad que el diseño impone: el mismo mensaje cubre cuota legítimamente gastada y cuota trabada por un defecto de contabilidad. Aquí la aritmética cerró (167 llamadas antes del rechazo), así que fue agotamiento; en buena parte de los reportes del 23–26/10, no cierra.
Cerco cerrado: por qué no hay solución local
El gratuito de Zen dejó de ser una reserva previsible. Es una promoción: cambia de modelo, sale del catálogo y tiene el techo reducido sin changelog — y, ahora, puede rechazar por cuota gastada o por contabilidad trabada, con el mismo mensaje y sin contador para distinguirlas.
Lo que no cambia la cuota, aunque parezca que sí: una clave nueva (el balde es de la IP), reconectar la cuenta, volver a activar el Auto, restablecer el selector o cambiar de modelo free — este último compra minutos de un balde con margen, no una salida. Del lado de la app tampoco hay interruptor: la única palanca real es comercial, un modelo pago o una suscripción.
A diferencia del bloqueo por versión de la app, que tenía una reversión documentada en el otro artículo, este apriete no tiene disparador de salida del lado de quien usa. El camino seguro es presupuestar el trabajo importante en un modelo pago y tratar el gratuito como un bono: sirve para sesiones cortas y descartables, no para lo que tiene que ocurrir.
Recomiendo este
El gratuito no tiene salida; el pago tiene elección — y aquí la elección es directa: DeepSeek V4.1 Flash. Es el modelo que escribió este artículo: 5 horas de trabajo, 21 rondas de conversación y cerca de US$ 1,40 hasta el cierre. Cada ronda se convirtió, en promedio, en 14 solicitudes al modelo — 290 en total. El balde free del 26/10 cerró en la 168.ª solicitud del día, es decir, alrededor de la ronda 12: la conversación habría terminado antes de la mitad.
En Zen cuesta US$ 0,30 por 1M de tokens de entrada y US$ 1,20 por 1M de salida. En el ranking público de OpenRouter, la familia V4.1 Flash ocupa los dos primeros lugares de la semana (35,4T y 17,4T tokens) y el primero del mes (123T) — es el modelo más usado de la plataforma, lo que también significa más gente probándolo y más comportamiento documentado. Precios y rankings cambian; confirma antes de contratar.
Bruno Torres
Emprendedor digital solo. Construyo negocios digitales desde cero con agentes de IA — y documento el camino, incluido lo que no funcionó.
Comentarios
Debatir: LinkedIn
Compartir: X · Facebook · LinkedIn · WhatsApp · Telegram · E-mail ·