Línea de comandos y claves
Lleva la definición de tu proyecto al disco, ejecuta la app en tu máquina y publícala de vuelta sin salir de la terminal.
La línea de comandos de Fabapp es el mismo proyecto que construyes en Studio, visto desde otro lugar. No es un
producto aparte ni una app distinta: pull trae los archivos de definición a tu carpeta, push devuelve lo que
editaste y dev ejecuta la app localmente sobre la misma plantilla que la plataforma usa para publicar.
Viene junto con el servidor MCP, que es como Claude Code, Cursor y otros asistentes leen y escriben en tu proyecto.
Lo que necesitas
- Node 20 o más reciente. Compruébalo con
node --version. - El plan Builder o superior. La línea de comandos se habilita a partir de Builder. Si tu plan todavía no lo incluye, la pantalla de Claves y CLI muestra qué cambia y te lleva directo a la suscripción.
Nada más. La herramienta no tiene una sola dependencia: guarda una credencial y habla con tu cuenta, y cada paquete del grafo podría alcanzar ambas cosas.
Autorizar esta máquina
Nunca creas una clave a mano. Quien la crea es el comando de inicio de sesión:
npx @fabappai/cli login
Abre el navegador en una página de Fabapp con un código corto. Compruebas que el código en pantalla es el mismo que
apareció en la terminal, autorizas, y la máquina queda conectada. En un servidor o en CI, sin navegador, usa
--no-open y abre la dirección tú mismo.
Esto es el flujo de dispositivo, y existe por una razón muy concreta: una clave que copias y pegas pasa por lugares por donde las claves no deberían pasar, como el historial del shell, un canal de chat o un archivo de configuración que termina en un repositorio. Aquí la clave nace dentro de tu máquina y nunca se muestra.
Dónde queda la credencial
En el llavero del sistema operativo. Cuando la máquina no tiene llavero, va a un archivo con permiso 0600, y el
comando lo dice. Una herramienta que elige en silencio el peor lugar te enseña que siempre es seguro.
Permiso de lectura o de escritura
Por defecto, el inicio de sesión pide lectura y escritura. Para una máquina que solo necesita consultar, pide menos:
npx @fabappai/cli login --scopes "read"
Una credencial de solo lectura ni siquiera ve los comandos de escritura, ni en la terminal ni en el servidor MCP. Anunciar una operación que responderá 403 es peor que no anunciarla: el asistente lo intenta, falla e intenta otra vez con otros argumentos, porque el rechazo parece un problema con la petición y no con el permiso.
El primer proyecto en el disco
npx @fabappai/cli link <id-del-proyecto>
npx @fabappai/cli pull
link ata la carpeta actual a un proyecto, comprobando tu acceso antes de escribir nada. pull trae los
archivos de definición: fab.schema.json (las entidades y sus campos), fab.automations.json,
fab.settings.json, fab.connectors.json y el fab.config.json de cada pantalla.
Edita y devuélvelo:
npx @fabappai/cli push
Para ejecutar la app en tu máquina antes de publicar:
npx @fabappai/cli dev
Y para publicar lo que editaste:
npx @fabappai/cli deploy
Lo que no hace, a propósito
No borra. Ni en pull ni en deploy. Un archivo que desapareció de tu carpeta se informa, nunca se
elimina de la app. Tu copia puede estar desactualizada respecto al servidor (la IA puede haber editado la app en
Studio mientras tanto), y borrar allí por una ausencia aquí destruye trabajo que nadie nos pidió gestionar.
No sobrescribe lo que editaste. dev monta el espacio de trabajo una vez; en las ejecuciones siguientes
compara y avisa cuando la plantilla cambió, en lugar de pasar por encima. Reconstruir es decisión tuya
(--reset), y te avisa de que eso borra tus ediciones.
No envía lo que no es tuyo. deploy manda solo lo que cambiaste. Los componentes de la plataforma, el SDK y el
esqueleto de la app se quedan donde están.
No guarda credenciales de integración. fab.connectors.json y fab.integrations.json son de solo lectura:
dicen qué tiene conectado el proyecto, para que un asistente sepa que existe y qué operaciones llamar, y nunca la
credencial. Conectar y rotar ocurre en la plataforma.
Usarla con Claude Code y otros asistentes
El servidor MCP usa la credencial que login ya guardó. Nunca pide un secreto y nunca muestra uno.
{ "mcpServers": { "fabapp": { "command": "npx", "args": ["-y", "@fabappai/cli", "mcp"] } } }
La herramienta más importante es fabapp_read_definition: sin el esquema a mano, un id de modelo equivocado
responde 404 y un campo inventado responde 422. Es lo primero que un agente debería llamar.
Ver y revocar las máquinas conectadas
En el panel, abre Perfil y ve a Claves y CLI. La pantalla lista cada máquina autorizada con el nombre que informó, el permiso que recibió y cuándo se usó por última vez.
Revocar es inmediato y vale para todo el servidor: la máquina revocada deja de funcionar en su siguiente llamada,
aunque la credencial siga en su disco. Lo contrario no es cierto: ejecutar logout en una máquina olvida la
credencial allí, y sigue siendo válida en el servidor hasta que se revoque aquí. Cuando un portátil desaparece,
es esta pantalla la que resuelve, no logout.
Cuando algo no funciona
"Tu plan no incluye la línea de comandos". El inicio de sesión solo emite credenciales a partir de Builder. La pantalla de Claves y CLI indica el plan necesario.
El código del navegador no coincide con el de la terminal. No autorices. Cierra la página y ejecuta login de
nuevo: ambos códigos salen de la misma petición y solo difieren si estás mirando una autorización que no es tuya.
push se queja de un archivo que la app no puede sobrescribir. Dice cuál. Eso es mejor que guardar con un 200
y no cambiar nada.
Otra API. FABAPP_API_URL cambia la dirección base, que por defecto es https://api.fabapp.ai.