Ligne de commande et clés
Amenez la définition de votre projet sur votre disque, lancez l'application sur votre machine et publiez-la sans quitter le terminal.
La ligne de commande Fabapp, c'est le même projet que celui que vous construisez dans Studio, vu d'ailleurs. Ce
n'est ni un produit à part ni une autre application : pull amène les fichiers de définition dans votre dossier,
push renvoie ce que vous avez modifié, et dev exécute l'application en local sur le même gabarit que celui
utilisé pour la publication.
Elle est livrée avec le serveur MCP, par lequel Claude Code, Cursor et d'autres assistants lisent et écrivent dans votre projet.
Ce qu'il vous faut
- Node 20 ou plus récent. Vérifiez avec
node --version. - Le plan Builder ou supérieur. La ligne de commande est ouverte à partir de Builder. Si votre plan ne l'inclut pas encore, l'écran Clés et CLI montre ce qui change et mène directement à l'abonnement.
Rien d'autre. L'outil n'a pas une seule dépendance : il détient une identification et parle à votre compte, et chaque paquet du graphe pourrait atteindre les deux.
Autoriser cette machine
Vous ne créez jamais de clé à la main. C'est la commande de connexion qui la crée :
npx @fabappai/cli login
Elle ouvre le navigateur sur une page Fabapp affichant un code court. Vous vérifiez que le code à l'écran est bien
celui affiché dans le terminal, vous autorisez, et la machine est connectée. Sur un serveur ou en CI, sans
navigateur, utilisez --no-open et ouvrez l'adresse vous-même.
C'est le flux d'appareil, et il existe pour une raison très concrète : une clé que l'on copie-colle passe par des endroits où une clé ne devrait pas passer, comme l'historique du shell, un canal de discussion ou un fichier de configuration qui finit dans un dépôt. Ici la clé naît à l'intérieur de votre machine et n'est jamais affichée.
Où vit l'identification
Dans le trousseau du système. Quand la machine n'en a pas, elle va dans un fichier en 0600, et la commande le
dit. Un outil qui choisit silencieusement le moins bon endroit vous apprend que c'est toujours sûr.
Permission de lecture ou d'écriture
Par défaut, la connexion demande la lecture et l'écriture. Pour une machine qui n'a qu'à consulter, demandez moins :
npx @fabappai/cli login --scopes "read"
Une identification en lecture seule ne voit même pas les commandes d'écriture, ni dans le terminal ni dans le serveur MCP. Annoncer une opération qui répondra 403 est pire que de ne pas l'annoncer : l'assistant essaie, échoue et recommence avec d'autres arguments, parce que le refus ressemble à un problème de requête et non de permission.
Le premier projet sur le disque
npx @fabappai/cli link <id-du-projet>
npx @fabappai/cli pull
link rattache le dossier courant à un projet, en vérifiant votre accès avant d'écrire quoi que ce soit.
pull récupère les fichiers de définition : fab.schema.json (les entités et leurs champs),
fab.automations.json, fab.settings.json, fab.connectors.json et le fab.config.json de chaque écran.
Modifiez, puis renvoyez :
npx @fabappai/cli push
Pour lancer l'application sur votre machine avant de publier :
npx @fabappai/cli dev
Et pour publier ce que vous avez modifié :
npx @fabappai/cli deploy
Ce qu'elle ne fait pas, volontairement
Elle ne supprime pas. Ni dans pull ni dans deploy. Un fichier disparu de votre dossier est signalé,
jamais retiré de l'application. Votre copie peut être en retard sur le serveur (l'IA a pu modifier l'application
dans Studio entre-temps), et supprimer là-bas à cause d'une absence ici détruit un travail que personne ne nous a
demandé de gérer.
Elle n'écrase pas ce que vous avez modifié. dev assemble l'espace de travail une fois ; ensuite il compare
et vous prévient quand le gabarit a changé, au lieu de passer par-dessus. Reconstruire est votre décision
(--reset), et il vous dit que cela efface vos modifications.
Elle n'envoie pas ce qui n'est pas à vous. deploy n'envoie que ce que vous avez changé. Les composants de la
plateforme, le SDK et la coquille de l'application restent où ils sont.
Elle ne détient aucune identification d'intégration. fab.connectors.json et fab.integrations.json sont en
lecture seule : ils disent ce que le projet a connecté, pour qu'un assistant sache que cela existe et quelles
opérations appeler, et jamais l'identification elle-même. Connecter et renouveler se fait sur la plateforme.
L'utiliser avec Claude Code et d'autres assistants
Le serveur MCP utilise l'identification que login a déjà rangée. Il ne demande jamais de secret et n'en montre
jamais.
{ "mcpServers": { "fabapp": { "command": "npx", "args": ["-y", "@fabappai/cli", "mcp"] } } }
L'outil qui compte le plus est fabapp_read_definition : sans le schéma sous la main, un mauvais identifiant de
modèle répond 404 et un champ inventé répond 422. C'est la première chose qu'un agent devrait appeler.
Voir et révoquer les machines connectées
Dans le panneau, ouvrez Profil puis Clés et CLI. L'écran liste chaque machine autorisée avec le nom qu'elle a donné, la permission qu'elle a reçue et sa dernière utilisation.
La révocation est immédiate et vaut pour tout le serveur : la machine révoquée cesse de fonctionner dès l'appel
suivant, même si l'identification est encore sur son disque. L'inverse n'est pas vrai : lancer logout sur une
machine oublie l'identification là, et elle reste valable sur le serveur jusqu'à sa révocation ici. Quand un
portable disparaît, c'est cet écran qui règle la question, pas logout.
Quand quelque chose ne marche pas
« Votre plan n'inclut pas la ligne de commande. » La connexion n'émet d'identification qu'à partir de Builder. L'écran Clés et CLI indique le plan nécessaire.
Le code du navigateur ne correspond pas à celui du terminal. N'autorisez pas. Fermez la page et relancez
login : les deux codes viennent de la même requête et ne diffèrent que si vous regardez une autorisation qui
n'est pas la vôtre.
push se plaint d'un fichier que l'application ne peut pas écraser. Il dit lequel. C'est mieux que d'enregistrer
avec un 200 sans rien changer.
Une autre API. FABAPP_API_URL change l'adresse de base, par défaut https://api.fabapp.ai.