DocumentaçãoCódigo
Disponível a partir do plano Builder

Linha de comando e chaves

Traga a definição do seu projeto para o disco, rode o app na sua máquina e publique de volta, sem sair do terminal.

Custo em créditos: nenhum passo deste guia consome crédito de IA.

A linha de comando da Fabapp é o mesmo projeto que você constrói no Studio, visto de outro lugar. Ela não é um produto separado nem um app diferente: pull traz os arquivos de definição para a sua pasta, push devolve o que você editou, e dev roda o app localmente no mesmo template que a plataforma usa para publicar.

Ela vem junto com o servidor MCP, que é como o Claude Code, o Cursor e outros assistentes leem e escrevem no seu projeto.

O que você precisa

  • Node 20 ou mais novo. Confira com node --version.
  • O plano Builder ou superior. A linha de comando é liberada a partir do Builder. Se o seu plano ainda não inclui, a tela de Chaves e CLI mostra o que muda e leva direto para a assinatura.

Nada mais. A ferramenta não tem uma única dependência: ela guarda uma credencial e conversa com a sua conta, e cada pacote no caminho poderia alcançar as duas coisas.

Autorizando esta máquina

Você nunca cria uma chave à mão. Quem cria é o comando de login:

npx @fabappai/cli login

Ele abre o navegador numa página da Fabapp com um código curto. Você confere que o código na tela é o mesmo que apareceu no terminal, autoriza, e pronto: a máquina fica conectada. Em servidor ou CI, sem navegador, use --no-open e abra o endereço manualmente.

Isso é o fluxo de dispositivo, e ele existe por um motivo bem concreto: uma chave que você copia e cola passa por lugares onde chaves não deveriam passar, como o histórico do shell, um canal de chat ou um arquivo de configuração que acaba num repositório. Aqui a chave nasce já dentro da sua máquina e nunca é exibida.

Onde a credencial fica

No chaveiro do sistema operacional. Quando a máquina não tem chaveiro, ela vai para um arquivo com permissão 0600, e o comando diz que foi para lá. Uma ferramenta que silenciosamente escolhe o lugar pior ensina você a achar que é sempre seguro.

Permissão de leitura ou de escrita

Por padrão, o login pede permissão de leitura e escrita. Para uma máquina que só precisa consultar, peça menos:

npx @fabappai/cli login --scopes "read"

Uma credencial só de leitura não enxerga os comandos de escrita, nem no terminal nem no servidor MCP. Anunciar uma operação que vai responder 403 é pior do que não anunciar: o assistente tenta, falha, e tenta de novo com outros argumentos, porque a recusa parece um problema com o pedido e não com a permissão.

O primeiro projeto no disco

npx @fabappai/cli link <id-do-projeto>
npx @fabappai/cli pull

O link amarra a pasta atual a um projeto, conferindo o seu acesso antes de escrever qualquer coisa. O pull traz os arquivos de definição: fab.schema.json (as entidades e os campos), fab.automations.json, fab.settings.json, fab.connectors.json e o fab.config.json de cada tela.

Edite, e devolva:

npx @fabappai/cli push

Para rodar o app na sua máquina antes de publicar:

npx @fabappai/cli dev

E para publicar o que você editou:

npx @fabappai/cli deploy

O que ela não faz, de propósito

Não apaga. Nem no pull nem no deploy. Um arquivo que sumiu da sua pasta é reportado, nunca removido do app. A sua cópia pode estar velha em relação ao servidor (a IA pode ter editado o app no Studio enquanto isso), e apagar lá por causa de uma ausência aqui destrói trabalho que ninguém pediu para gerenciar.

Não sobrescreve o que você editou. O dev monta a área de trabalho uma vez; nas execuções seguintes ele compara e avisa quando o template mudou, em vez de passar por cima. Reconstruir é decisão sua (--reset), e ele avisa que isso apaga suas edições.

Não envia o que não é seu. O deploy manda só o que você mudou. Os componentes da plataforma, o SDK e o esqueleto do app ficam onde estão.

Não guarda credencial de integração. Os arquivos fab.connectors.json e fab.integrations.json são só de leitura: eles dizem o que o projeto tem conectado, para que um assistente saiba que existe e quais operações chamar, e nunca a credencial. Conectar e rotacionar acontece na plataforma.

Usando com Claude Code e outros assistentes

O servidor MCP usa a credencial que o login já guardou. Ele nunca pede um segredo e nunca mostra um.

{ "mcpServers": { "fabapp": { "command": "npx", "args": ["-y", "@fabappai/cli", "mcp"] } } }

A ferramenta mais importante é a fabapp_read_definition: sem o schema em mãos, um id de modelo errado responde 404 e um campo inventado responde 422. É a primeira coisa que um agente deveria chamar.

Vendo e revogando as máquinas conectadas

No painel, abra Perfil e vá em Chaves e CLI. A tela lista cada máquina autorizada com o nome que ela informou, a permissão que recebeu e quando foi usada pela última vez.

Revogar é imediato e vale para o servidor inteiro: a máquina revogada para de funcionar na próxima chamada, mesmo que a credencial continue no disco dela. O caminho contrário não é verdade: rodar logout numa máquina esquece a credencial ali, e ela continua válida no servidor até ser revogada aqui. Quando um notebook some, é esta tela que resolve, não o logout.

Quando alguma coisa não funciona

"Plano não inclui a linha de comando". O login só emite credencial a partir do Builder. A tela de Chaves e CLI mostra o plano necessário.

O código do navegador não bate com o do terminal. Não autorize. Feche a página e rode o login de novo: os dois códigos são gerados no mesmo pedido e só divergem se você estiver olhando para uma autorização que não é a sua.

push reclama de um arquivo que o app não pode sobrescrever. Ele diz qual é. Isso é melhor do que salvar com um 200 e não mudar nada.

Outra API. FABAPP_API_URL troca o endereço base, que por padrão é https://api.fabapp.ai.

Abrir a Fabapp
Relacionados
Conhecendo o StudioCréditos: o que gasta, o que não gasta