N.º 03X by Nexow
De una frase a un widget en vivo
En X by Nexow describes un widget con palabras normales. El modelo escribe un pequeño programa, y el lienzo lo ejecuta en una caja de la que no puede salir.
Alex Colls Outumuro
Cofundador y CTO · · 3 min de lectura
X by Nexow convierte una frase en un widget sobre un lienzo: el gráfico de un mercado, la tabla de una cartera, una lista de seguimiento que se mueve en vivo. Mucha gente supone que el modelo rellena una plantilla. No es así. Escribe código.
El modelo escribe un módulo
Cada widget es un pequeño árbol de archivos. Su punto de entrada, index.js, exporta una sola función:
export async function render(ctx) { … }El modelo lo construye como lo haría un desarrollador, con herramientas para escribir, editar, leer y listar archivos. Mientras escribe, puede consultar: la documentación de referencia de cada conector, una sonda que llama a un endpoint real para ver qué devuelve, y una búsqueda de API públicas.
El contenido de los archivos llega en streaming mientras el modelo lo escribe, así que ves aparecer el código en lugar de un indicador de carga. Hacer streaming de la entrada de una herramienta tiene una trampa: la API ya no la valida por ti. Nuestro bucle vuelve a analizar cada llamada a una herramienta, de forma estricta, y devuelve la entrada truncada para que el modelo lo intente de nuevo.
Comprobado antes de ejecutarse
Antes de montar un widget, su código se limpia de prosa suelta y de marcas de markdown, y pasa por el linter. Un segundo agente trabaja junto al primero y vuelve a comprobar los endpoints de los que depende el widget, con hasta cinco sondas y una ronda de reparación en el mismo turno. Una vez montado, una prueba de humo busca un render vacío o un bucle desbocado.
Si un widget se rompe justo después de construirse, X lo repara una vez, en 45 segundos, y ahí se detiene. No va a seguir gastando tus créditos en sus propios arreglos.
Una caja de la que no puede salir
Cada widget se ejecuta en su propio iframe aislado, con los scripts permitidos y nada más, así que recibe un origen opaco. Una política de seguridad de contenido bloquea las llamadas a otros hosts. Todo lo que viene de fuera, datos o contenido multimedia, entra por ctx, que la app obtiene en nombre del widget.
Así es también como las claves quedan fuera de alcance. El modelo nunca ve una credencial: solo ve si una fuente está conectada, no necesita clave o no está conectada. Las claves guardadas en la nube se cifran con AES-GCM, y por defecto las llamadas pasan por proxies sin estado.
El modelo escribe el código. Nunca tiene las claves.
En vivo, sin diez conexiones
Un widget sigue en vivo gracias a ctx: histórico, suscripciones, datos de cuenta, consultas. Detrás, un hub de datos compartido abre cada flujo una sola vez, lo lean cuantos widgets lo lean, y pausa los flujos mientras la pestaña está en segundo plano. Diez gráficos del mismo mercado comparten un solo WebSocket.
Hoy hay 95 conectores, desde exchanges con sus propios flujos WebSocket hasta fuentes REST en un bucle de sondeo compartido con espera progresiva. Dos están marcados como estables. Los demás aún llevan una etiqueta beta en la app.
Alex

