Saltar al contenido principal

Referencia técnica

Una live app es una aplicación React guardada más un conjunto de scripts de datos almacenados que se ejecutan del lado del servidor contra las fuentes que la app declaró al construirse. Esta página describe el modelo de ejecución, sus restricciones y las superficies que expone.

Modelo de ejecución

Ningún modelo de lenguaje se ejecuta cuando se usa una app. La IA participa únicamente en el momento de la construcción; después la app es un bundle fijo cuyos scripts de datos ejecuta un runner aislado (sandbox).

  • Los scripts de datos se almacenan del lado del servidor y se ejecutan sin acceso de red a nada que no sean sus fuentes declaradas. Cada script declara sus fuentes, sus parámetros y la forma de su salida; esa declaración es el límite de mínimo privilegio de la app.
  • Las credenciales se resuelven en el servidor. Nunca están presentes en el bundle de la app ni en el navegador. Quien ve una app compartida tampoco las recibe.
  • El vínculo con las fuentes queda fijado al construir. Un script solo puede alcanzar las herramientas, tablas de base de datos y áreas de datos de Nirvai que declaró. Agregar una fuente es una edición, no una decisión en tiempo de ejecución.
  • El acceso a base de datos es de solo lectura. Las fuentes de tipo tabla exponen un select filtrado. No existe camino de escritura desde una app hacia una tabla.

El ciclo de vida de una actualización

De este diseño se desprenden dos propiedades:

  • Semántica de snapshot. Una ejecución con los parámetros por defecto de la app actualiza el snapshot almacenado — la copia que todos ven al abrirla. Una ejecución con parámetros distintos a los por defecto (un filtro o rango de tiempo cambiado) se devuelve solo a quien la pidió y no lo sobrescribe.
  • Renderizado a prueba de fallos. Una actualización fallida nunca deja en blanco una sección que ya tiene datos. Los valores anteriores permanecen, con un aviso de error encima. Solo una primera carga sin snapshot se renderiza vacía.

La concurrencia es de una ejecución por script de datos a la vez. Una segunda actualización mientras hay una en vuelo se rechaza en lugar de encolarse; una ejecución que excede su ventana se considera obsoleta y se libera.

Modelo de acceso

PropiedadComportamiento
Propiedad de la appUna sola persona dueña por app. La propiedad no se transfiere.
Visibilidadpersonal u organization. No hay lista de permisos por usuario ni URL pública o basada en token.
Acceso de miembrosVer y actualizar. Editar, renombrar, eliminar y volver a compartir son exclusivos de la persona dueña.
Identidad de ejecuciónLas actualizaciones compartidas se ejecutan como la persona dueña. Las herramientas, credenciales y tablas se resuelven contra su cuenta, no contra la de quien mira — con la identidad del espectador no se resolvería ninguna.
Estadodraft, published, o needs_attention cuando un script de datos está fallando.

Límites

LímiteValor
Tiempo total de ejecución por script de datos5 minutos
Una sola llamada a un servicio externo150 segundos
Llamadas externas por ejecución25
Filas devueltas a la interfazAgrega del lado del servidor a aproximadamente 200 filas por script; los resultados más grandes se dividen en trozos
Ejecuciones concurrentes por script1

Las apps se construyen para agregar antes de devolver. Un script que necesita miles de filas para responder una pregunta debería reducirlas del lado del servidor en vez de paginarlas hacia el navegador.

Tipos de error

Las fallas se devuelven como resultados tipados que la app renderiza, no como páginas rotas.

TipoSignificado
auth_expiredLa credencial de un servicio conectado venció o fue rechazada. Reconéctala.
tool_errorEl servicio externo devolvió un error para esta llamada.
tool_missingUna herramienta o tabla declarada ya no se resuelve — eliminada, renombrada o ya no es tuya. Deja la app en Requiere atención.
timeoutEl script, o una llamada dentro de él, excedió su ventana de tiempo.
already_runningYa hay una ejecución de este script en vuelo.
no_snapshotTodavía no hay datos almacenados para este script; nunca se ha ejecutado.
invalid_paramsUn valor de filtro entregado está fuera de los parámetros declarados del script.
script_errorEl script mismo lanzó un error.
output_too_largeEl resultado excedió el límite de tamaño.

Construir desde un asistente externo

Un asistente conectado por MCP — Claude Code, Codex, Cursor — puede construir una live app en tu cuenta. La división del trabajo es deliberada: el asistente escribe y prueba, tú apruebas y guardas.

PuedeNotas
Listar tus apps y leer el contrato completo de unaManifiesto, parámetros por script, fuentes declaradas, historial de ejecuciones
Listar qué datos hay disponibles para construirLos mismos tres tipos de fuente que el generador dentro de la app
Proponer fuentes y proponer una aparienciaCada una abre una página de revisión en Nirvai que tú apruebas
Probar un script de datos y validar la app completaLa misma batería de validación que corre el generador dentro de la app
Dejar un borrador listoSolo después de que pase la validación; produce una vista previa real con un botón de Guardar
PublicarEstá disponible, pero el Guardar revisado dentro de Nirvai es el camino previsto

Estas acciones aparecen una por una en tu Feed de Actividad, cada una con enlace directo a lo que produjo. Leer la app compartida de otro miembro a través del plugin no está expuesto — un asistente alcanza únicamente las apps de la cuenta a la que pertenece.

El generador dentro de la app no es una acción invocable

El generador nativo es una conversación en streaming, no una sola operación. Un asistente externo reproduce el mismo pipeline paso a paso en vez de invocarlo de golpe.

Qué sigue