Volver al blog

Pedro Enrique Perez González

Cómo tengo tokens (casi) ilimitados

Cómo combino Codex, OpenCode y NaN para construir productos sin estar mirando continuamente la cuota

Un Word, un Excel y ni puta idea de qué hacer

Con el apagón me di cuenta de una cosa bastante incómoda.

Sin internet, podía abrir un Word. O un Excel. Las herramientas de toda la vida, con las que se supone que sé trabajar.

Y me quedé pensando qué cojones hacía yo ahora.

Había metido tanto la IA en mi forma de trabajar que, al desaparecer, me costaba encontrar por dónde seguir. Yo, que había escrito sobre la rendición cognitiva. Predicando con el ejemplo, como siempre.

La cuestión es que la IA ya ocupa una parte central de mi trabajo. La uso para construir productos: definir funcionalidades, diseñarlas, implementarlas, comprobarlas y desplegarlas. Y también para trabajar con el navegador, hojas de cálculo y otras aplicaciones.

Eso me ha dado una velocidad de la hostia. También me ha hecho depender muchísimo de quien pone los modelos.

De ahí viene esta historia. Y el título, que tiene un poco de clickbait. Ese (casi) tiene trabajo que hacer.

Cuando empiezas a correr y alguien mueve el suelo

Cuando empecé a trabajar con los modelos Sol, Terra y Luna, sentí un salto enorme. Podía delegar tareas complejas de diseño o despliegue que antes me llevaban la vida, y llevar varias en paralelo.

Mi sensación era que iba veinte veces más rápido que con las herramientas de IA que usaba antes. Es mi estimación personal, sin cronómetro ni estudio detrás. Pero el cambio en lo que podía sacar adelante era muy bestia.

Después empecé a notar algo que ya me había pasado con otros modelos: tareas que antes resolvían bien empezaban a atascarse. Me ocurrió antes de Astra y volví a tener esa sensación antes de GPT-6.1 Sol.

Yo lo llamo mierdear un modelo.

No sé qué cojones hacen. Si cambian cómo lo sirven, si le ponen un palo en la rueda o si alguien está metiendo cáscaras de pipas en el datacenter. Desde mi silla, a veces parece que el modelo se vuelve más gilipollas y luego llega el siguiente y parece que es la polla.

Ojo: no tengo pruebas de que lo empeoren a propósito. Estoy contando mi percepción. Tampoco tenía una comparación controlada con las mismas tareas, el mismo contexto y las mismas condiciones.

Además, los aproximadamente 100 euros de mi suscripción para trabajar con Codex me duraban cada vez menos en términos de uso. También es verdad que yo le estaba metiendo más trabajo y más tareas complejas en paralelo.

El resultado era bastante concreto: mi capacidad de trabajar dependía de unas condiciones que podían cambiar sin que yo decidiera nada.

Y entonces llegó mi cuñado

También estaba dándole vueltas a cuánto de todo esto estamos pagando realmente y cuánto se sostiene con inversión y expectativas de futuro.

En La Tertul-IA escuché «La triple burbuja de la IA». Es un análisis que merece la pena escuchar y contrastar. A mí me dejó una pregunta: ¿cómo trabajaría si mañana el uso de IA se encareciera muchísimo?

En esas estaba cuando mi cuñado empezó a darme la brasa con NaN.

Que lo estaba probando. Que podía usar modelos abiertos. Que tenía que verlo.

Y, como buen cuñado, en muchas de las cosas que dice tiene razón. Lo jodido es que luego hay que reconocérselo.

NaN da acceso a modelos que ejecutan en su infraestructura mediante una suscripción. Yo pago la de 70 euros al mes. Hay otras opciones, pero con esa me apaño.

La primera vez los conecté en VS Code y me parecieron tontos de cojones.

Luego mi cuñado se sentó conmigo y me explicó cómo trabajaba él con perfiles, agentes y skills. Ahí empecé a sacarles partido.

Antes de seguir, explico qué significa todo esto. Si ya trabajas con agentes, salta a cómo lo tengo montado.

De preguntar a encargar trabajo

Ver la animación: de preguntar a encargar trabajo

Un chat te permite preguntar, pedir un resumen o contrastar una idea. Con un agente puedes encargar un trabajo que requiera varios pasos: leer archivos, proponer cambios, ejecutarlos y comprobar el resultado, según las herramientas y permisos que tenga.

Para entender mi configuración basta con separar cinco cosas:

Pieza Qué aporta Ejemplo
Modelo La capacidad de razonar y generar respuestas DeepSeek V4 Flash o GLM 5.3 Flash
Agente Un rol con instrucciones, modelo y permisos Product Design revisa una interacción
Herramienta Una acción que puede ejecutar Leer un archivo o usar una terminal
MCP Un protocolo para conectar herramientas y datos Consultar un servicio que lo ofrezca
Skill Instrucciones reutilizables para una tarea Cómo revisar claridad y continuidad de una interfaz

Una skill puede incluir referencias o scripts. Es una forma de darle un procedimiento cuando lo necesita; no estás entrenando de nuevo el modelo.

Y ponerle «Product Designer» a un agente no le da, por arte de magia, acceso al navegador o al teléfono. Ese acceso depende del entorno y de sus herramientas.

La ventaja es repartir encargos y mantener criterios de trabajo sin tener que explicarlo absolutamente todo desde cero cada vez. A cambio, hay que mantener ese contexto, concretar las entregas y revisar lo que vuelve.

Porque varias IAs también pueden organizarse para hacer una mierda bastante compleja.

Cómo lo tengo montado

Empecé con agentes dentro de VS Code y con Zoo Code, una extensión que me recomendó mi cuñado. Pero mi trabajo se fue saliendo del editor.

Necesitaba navegador, integraciones con Google Sheets y uso del ordenador. Por eso seguía trabajando desde el entorno de OpenAI. En este flujo, el coordinador es Codex; lo distingo del chat de preguntas y respuestas para que se entienda qué estoy usando.

Intenté llevar también ese trabajo de VS Code a mi entorno mediante MCP y no conseguí montarlo como necesitaba. OpenCode me encajó porque Codex podía llamarlo desde la terminal.

Actualmente, el recorrido es este:

Yo planteo el objetivo
        ↓
Codex selecciona y coordina los agentes necesarios
        ↓
OpenCode los ejecuta con modelos de NaN
        ↓
Los agentes entregan trabajo, dudas y comprobaciones
        ↓
Codex revisa e integra; yo conservo las decisiones de fondo

Tengo estos perfiles:

Agente Para qué lo uso Modelo configurado
Product Manager Concretar encargos y coordinar especialistas DeepSeek V4 Flash
Product Design Diseñar y revisar la experiencia DeepSeek V4 Flash
Tech Lead Implementar y verificar cambios GLM 5.3 Flash
Content Editor Investigar y redactar contenido DeepSeek V4 Flash
Ofertas Preparar propuestas comerciales GLM 5.3 Flash
Legal Fiscal Preparar análisis y contrastar fuentes DeepSeek V4 Flash
Growth Analizar adquisición y experimentos DeepSeek V4 Flash

Es mi reparto actual. Para un encargo sencillo quizá basta un perfil. En otros, el Product Manager coordina diseño y desarrollo y devuelve la entrega a Codex.

Los tokens que consumen esos agentes salen de NaN. El trabajo que hace Codex sigue consumiendo mi cuota de Codex. Esta combinación no convierte los modelos de OpenAI en ilimitados.

El ejemplo de Pic on Site

Ver la animación: cómo iteramos en Pic on Site

En Pic on Site, mi aplicación para trabajar con fotos de obra, quería dar un salto en la sensación de calidad. La aplicación funcionaba, pero necesitaba ese plus para resultar más profesional y usable.

Me puse a buscar referencias sobre animaciones, transiciones, respuesta y tiempos de carga, y se las pasé a Codex.

Diseño convirtió esas referencias en criterios para la aplicación. Desarrollo estudió qué implicaba llevarlos al código y, entre ambos, concretaron el plan. El Tech Lead implementó; Product Design revisó y pidió correcciones.

Por ejemplo, al pasar fotos, la interfaz debía acompañar el dedo. Si una imagen ya estaba disponible y nítida, una transición no debía devolverla a un estado borroso. Y había que distinguir cuánto duraba la animación de cuánto tardaban en llegar los datos.

Después volvía a Codex para la revisión del conjunto. También trabajamos con el móvil conectado y la aplicación instalada, desde el entorno de Codex que tenía preparado para ello.

Eso permitía comprobar el comportamiento y aportar evidencia a los especialistas. Leer el código, ver una captura y recorrer la aplicación en el teléfono son comprobaciones diferentes. No todos los agentes tenían las tres capacidades.

El proceso duró tiempo: propuestas, implementación, revisión y correcciones. Hasta que llegó un punto en que las siguientes iteraciones eran bastante más complejas para lo que aportaban y paramos.

No tengo un porcentaje de mejora que darte. Lo que puedo explicar es cómo repartí el trabajo y cómo fuimos comprobando las entregas.

Cómo probarlo tú, sin montar todo de golpe

Vamos a empezar por un agente que revise una pantalla. Después añadimos implementación y coordinación.

La guía está preparada para Windows, PowerShell y OpenCode v2.0.22. Tienes los archivos completos del ejemplo. La pantalla incluida es ficticia: sirve para probar la conexión y el procedimiento, no es código de Pic on Site.

1. Instala y comprueba OpenCode

Necesitas Node.js con npm. Si todavía no tienes OpenCode, la instalación de esta versión es:

npm install --global @opencode/cli@2.0.22
opencode --version

Usa la documentación de OpenCode V2. Hay diferencias de configuración con V1; comprueba tu versión antes de mezclar tutoriales.

2. Conecta NaN

Crea una carpeta para la prueba y ábrela en PowerShell. Dentro, crea .opencode/opencode.json con esto:

{
  "$schema": "https://opencode.ai/config.json",
  "default_agent": "product-design",
  "providers": {
    "nan": {
      "name": "NaN",
      "env": ["NAN_API_KEY"],
      "package": "@opencode/ai/providers/openai-compatible",
      "settings": {
        "baseURL": "https://api.nan.builders/v1"
      },
      "models": {
        "deepseek-v4-flash": { "name": "DeepSeek V4 Flash" },
        "glm5.3-flash": { "name": "GLM 5.3 Flash" }
      }
    }
  }
}

Obtén tu clave en API Keys, dentro de tu cuenta de NaN con acceso a inferencia. Después ejecuta:

opencode auth login nan --method key

Cuando te pida la clave, pega TU_API_KEY_DE_NAN, sustituyendo ese marcador por la real. OpenCode guarda la credencial fuera de esta carpeta. nan es el identificador del proveedor y debe coincidir con el del JSON. La configuración admite también NAN_API_KEY si ya trabajas con variables de entorno.

El endpoint procede de la documentación de NaN; la estructura providers y el adaptador de este ejemplo corresponden a OpenCode V2.

3. Dale un rol

Crea .opencode/agents/product-design.md:

---
description: Revisa una interfaz y concreta cambios y criterios de aceptación antes de implementarlos.
mode: all
model: nan/deepseek-v4-flash
steps: 8
permissions:
  - action: "*"
    resource: "*"
    effect: deny
  - action: read
    resource: "*"
    effect: allow
  - action: glob
    resource: "*"
    effect: allow
  - action: grep
    resource: "*"
    effect: allow
  - action: skill
    resource: revisar-interfaz
    effect: allow
---

Carga la skill revisar-interfaz antes de revisar. Lee el archivo y el encargo indicados.
Entrega hasta tres problemas priorizados, con evidencia y una comprobación por problema.
Si solo has leído código, dilo; no afirmes haber observado la interfaz en ejecución.
Tu entrega es una especificación para el Tech Lead. No implementes cambios.

Este perfil puede leer y cargar esa skill; no puede editar. Es una versión pequeña del tipo de separación que uso. Los permisos del agente hacen esa distinción efectiva.

4. Añade el procedimiento

Crea .opencode/skills/revisar-interfaz/SKILL.md:

---
name: revisar-interfaz
description: Revisa claridad, respuesta y continuidad de una interfaz antes de implementar cambios o aceptar una entrega.
---

Identifica qué intenta hacer el usuario y qué evidencia tienes: código, captura, vídeo o uso real.

Comprueba las etiquetas de las acciones, el feedback durante la espera, los estados vacíos y de error,
el teclado, el foco y el movimiento reducido cuando sean relevantes para el recorrido.
Prioriza lo que impide completar o entender la tarea. No añadas animaciones por decorar.

Para cada hallazgo entrega: problema, evidencia, cambio propuesto y comprobación de aceptación.
Separa lo observado de lo inferido. Una lectura de CSS no acredita fluidez ni tiempos de carga.
Si falta evidencia para evaluar el uso real, indica qué recorrido habría que comprobar.

OpenCode descubre las skills del proyecto y el agente carga su contenido cuando las necesita. Aquí se lo pedimos explícitamente. Registrar una skill y cargarla son pasos distintos.

5. Haz una prueba pequeña

Coloca pantalla.html y encargo-diseno.md del ejemplo en la raíz de la carpeta. Desde allí:

opencode run --standalone --agent product-design --model nan/deepseek-v4-flash --format json --file encargo-diseno.md "Lee el encargo adjunto y realiza la revisión."

--standalone usa un servidor privado para esa ejecución. --model fija el modelo de la sesión; elegir solo un agente puede conservar otro modelo en una sesión existente.

Comprueba que aparece una llamada a la herramienta skill con el identificador revisar-interfaz, que la respuesta señala problemas apoyados en el archivo y que no ha cambiado pantalla.html.

Conserva el sessionID de la salida JSON. Para comprobar el proveedor y el modelo registrados por el cliente, sustituye el marcador y exporta esa sesión:

$idSesion = "PEGA_AQUI_EL_SESSION_ID"
$sesion = opencode session export $idSesion --sanitize | ConvertFrom-Json
$sesion.info.model

Debe indicar providerID: nan e id: deepseek-v4-flash. Eso verifica la selección registrada por OpenCode; que el modelo diga «soy DeepSeek» no la demuestra. Para leer una respuesta normal en futuras pruebas puedes quitar --format json del comando de ejecución.

6. Añade al Tech Lead y a Codex

En los archivos completos tienes también .opencode/agents/tech-lead.md, configurado con nan/glm5.3-flash. En esta prueba solo puede editar pantalla.html.

Guarda la especificación revisada como especificacion.md y prepara encargo-implementacion.md con los cambios que aceptas. El ejemplo incluye ambos para una implementación pequeña; puedes usarlos primero y sustituirlos después por tu encargo. Luego:

opencode run --standalone --agent tech-lead --model nan/glm5.3-flash --file especificacion.md --file encargo-implementacion.md "Implementa el encargo adjunto en pantalla.html."

Para coordinar desde Codex, abre esa misma carpeta en un entorno de Codex con acceso a terminal. Puedes darle este encargo:

Usa los perfiles de .opencode/agents. Encarga la revisión a product-design con DeepSeek mediante OpenCode. Revisa su entrega y concreta la especificación antes de encargar los cambios a tech-lead con GLM. Pasa a cada agente los archivos, el objetivo y los criterios de aceptación. Comprueba los cambios y devuelve a diseño la evidencia disponible para revisar. Si falta una decisión de producto, pregúntamela. No des por probado el navegador o el móvil si no los has usado.

Esa coordinación es una instrucción de trabajo que Codex ejecuta por terminal. El acceso al navegador y al teléfono se configura aparte; copiar estos perfiles no lo añade.

Lo que pago y lo que significa «casi»

Mi combinación cuesta aproximadamente:

Herramienta Mi gasto mensual
Suscripción con la que uso Codex 100 €
NaN 70 €
Total 170 €

Son mis costes actuales, no una tarifa universal de Codex. Para probar solo OpenCode con NaN puedes empezar por esa parte; reproducir mi coordinación incluye mantener acceso a Codex.

NaN publica cuotas por modelo y límites de peticiones y concurrencia. A fecha de esta guía, los dos modelos que uso tienen 3.000 millones de tokens mensuales para DeepSeek V4 Flash y 2.000 millones para GLM 5.3 Flash. Puedes comprobar las condiciones en su catálogo de modelos.

A mí todavía no me ha saltado ningún límite de NaN. Eso es lo que sostiene el título desde mi experiencia. Sigue habiendo cuotas, esperas, capacidad de contexto y condiciones que pueden cambiar.

También sigo necesitando internet y dependiendo de servicios externos. Repartir el trabajo entre proveedores me da más opciones; el apagón seguiría dejándome sin esta combinación.

Y tengo que revisar las entregas. Darles contexto. Corregir el encargo cuando está mal planteado. Decidir qué merece otra iteración y qué se queda como está.

De todo lo que me explicó mi cuñado, eso es lo que más me ha servido: aprender a organizar el trabajo alrededor de los modelos.

Con bastantes más tokens de los que he conseguido gastar hasta ahora.

Y con la incómoda obligación de darle la razón.