Kommandozeile und Schlüssel
Holen Sie die Definition Ihres Projekts auf die Festplatte, starten Sie die App auf Ihrem Rechner und veröffentlichen Sie sie zurück, ohne das Terminal zu verlassen.
Die Fabapp-Kommandozeile ist dasselbe Projekt, das Sie im Studio bauen, nur von woanders aus gesehen. Sie ist kein
eigenes Produkt und keine andere App: pull holt die Definitionsdateien in Ihren Ordner, push schickt zurück,
was Sie bearbeitet haben, und dev startet die App lokal auf derselben Vorlage, mit der die Plattform
veröffentlicht.
Sie kommt zusammen mit dem MCP-Server, über den Claude Code, Cursor und andere Assistenten in Ihrem Projekt lesen und schreiben.
Was Sie brauchen
- Node 20 oder neuer. Prüfen Sie mit
node --version. - Den Builder-Plan oder höher. Die Kommandozeile ist ab Builder freigeschaltet. Wenn Ihr Plan sie noch nicht enthält, zeigt der Bildschirm Schlüssel und CLI, was sich ändert, und führt direkt zum Abschluss.
Mehr nicht. Das Werkzeug hat keine einzige Abhängigkeit: es hält eine Zugangsberechtigung und spricht mit Ihrem Konto, und jedes Paket im Graphen könnte beides erreichen.
Diesen Rechner autorisieren
Sie erstellen nie von Hand einen Schlüssel. Das übernimmt der Anmeldebefehl:
npx @fabappai/cli login
Er öffnet den Browser auf einer Fabapp-Seite mit einem kurzen Code. Sie prüfen, ob der Code auf dem Bildschirm
derselbe ist wie im Terminal, autorisieren, und der Rechner ist verbunden. Auf einem Server oder in CI, ohne
Browser, nutzen Sie --no-open und öffnen die Adresse selbst.
Das ist der Geräte-Ablauf, und es gibt ihn aus einem sehr konkreten Grund: ein Schlüssel, den man kopiert und einfügt, wandert durch Orte, durch die Schlüssel nicht wandern sollten, etwa die Shell-Historie, einen Chat-Kanal oder eine Konfigurationsdatei, die in einem Repository landet. Hier entsteht der Schlüssel in Ihrem Rechner und wird nie angezeigt.
Wo die Zugangsberechtigung liegt
Im Schlüsselbund des Betriebssystems. Hat der Rechner keinen, landet sie in einer Datei mit 0600, und der Befehl
sagt das. Ein Werkzeug, das stillschweigend den schlechteren Ort wählt, bringt Ihnen bei, es sei immer sicher.
Lese- oder Schreibrecht
Standardmäßig fragt die Anmeldung nach Lesen und Schreiben. Für einen Rechner, der nur nachsehen muss, fragen Sie weniger:
npx @fabappai/cli login --scopes "read"
Eine Berechtigung nur zum Lesen sieht die Schreibbefehle gar nicht, weder im Terminal noch im MCP-Server. Eine Operation anzukündigen, die mit 403 antwortet, ist schlimmer, als sie nicht anzukündigen: der Assistent versucht es, scheitert und versucht es erneut mit anderen Argumenten, weil die Ablehnung wie ein Problem der Anfrage aussieht und nicht wie eines der Berechtigung.
Das erste Projekt auf der Festplatte
npx @fabappai/cli link <projekt-id>
npx @fabappai/cli pull
link bindet den aktuellen Ordner an ein Projekt und prüft Ihren Zugriff, bevor irgendetwas geschrieben wird.
pull holt die Definitionsdateien: fab.schema.json (die Entitäten und ihre Felder), fab.automations.json,
fab.settings.json, fab.connectors.json und die fab.config.json jedes Bildschirms.
Bearbeiten, und zurückschicken:
npx @fabappai/cli push
Um die App vor dem Veröffentlichen auf Ihrem Rechner zu starten:
npx @fabappai/cli dev
Und um zu veröffentlichen, was Sie bearbeitet haben:
npx @fabappai/cli deploy
Was sie absichtlich nicht tut
Sie löscht nicht. Weder bei pull noch bei deploy. Eine Datei, die aus Ihrem Ordner verschwunden ist, wird
gemeldet, nie aus der App entfernt. Ihre Kopie kann gegenüber dem Server veraltet sein (die KI könnte die App
inzwischen im Studio bearbeitet haben), und dort wegen einer Abwesenheit hier zu löschen zerstört Arbeit, um deren
Verwaltung uns niemand gebeten hat.
Sie überschreibt nicht, was Sie bearbeitet haben. dev baut den Arbeitsbereich einmal auf; bei späteren Läufen
vergleicht es und warnt, wenn die Vorlage sich geändert hat, statt darüberzugehen. Das Neuaufbauen ist Ihre
Entscheidung (--reset), und es sagt Ihnen, dass dabei Ihre Änderungen verloren gehen.
Sie sendet nicht, was nicht Ihnen gehört. deploy schickt nur, was Sie geändert haben. Die Komponenten der
Plattform, das SDK und das Gerüst der App bleiben, wo sie sind.
Sie hält keine Integrations-Zugangsdaten. fab.connectors.json und fab.integrations.json sind nur lesbar: sie
sagen, was das Projekt verbunden hat, damit ein Assistent weiß, dass es existiert und welche Operationen er rufen
kann, und nie die Zugangsdaten selbst. Verbinden und Erneuern passiert auf der Plattform.
Mit Claude Code und anderen Assistenten
Der MCP-Server nutzt die Zugangsberechtigung, die login bereits abgelegt hat. Er fragt nie nach einem Geheimnis
und zeigt nie eines.
{ "mcpServers": { "fabapp": { "command": "npx", "args": ["-y", "@fabappai/cli", "mcp"] } } }
Das wichtigste Werkzeug ist fabapp_read_definition: ohne das Schema zur Hand antwortet eine falsche Modell-ID mit
404 und ein erfundenes Feld mit 422. Es ist das Erste, was ein Agent aufrufen sollte.
Verbundene Rechner sehen und widerrufen
Öffnen Sie im Panel Profil und gehen Sie zu Schlüssel und CLI. Der Bildschirm listet jeden autorisierten Rechner mit dem Namen, den er gemeldet hat, der erhaltenen Berechtigung und der letzten Nutzung.
Der Widerruf wirkt sofort und serverweit: der widerrufene Rechner hört beim nächsten Aufruf auf zu funktionieren,
auch wenn die Zugangsberechtigung noch auf seiner Festplatte liegt. Umgekehrt gilt das nicht: logout auf einem
Rechner vergisst die Berechtigung dort, und sie bleibt auf dem Server gültig, bis sie hier widerrufen wird.
Wenn ein Notebook verschwindet, klärt das dieser Bildschirm, nicht logout.
Wenn etwas nicht funktioniert
„Ihr Plan enthält die Kommandozeile nicht.“ Die Anmeldung stellt erst ab Builder eine Berechtigung aus. Der Bildschirm Schlüssel und CLI nennt den nötigen Plan.
Der Code im Browser stimmt nicht mit dem im Terminal überein. Autorisieren Sie nicht. Schließen Sie die Seite
und führen Sie login erneut aus: beide Codes stammen aus derselben Anfrage und weichen nur ab, wenn Sie auf eine
Autorisierung schauen, die nicht Ihre ist.
push beschwert sich über eine Datei, die die App nicht überschreiben kann. Es sagt, welche. Das ist besser,
als mit einer 200 zu speichern und nichts zu ändern.
Eine andere API. FABAPP_API_URL ändert die Basisadresse, standardmäßig https://api.fabapp.ai.