Referência de comandos
Rode zeltro --help para ver a mesma lista no terminal, ou zeltro <command> --help para um comando específico.
Os comandos marcados com (diretório do projeto) precisam ser executados de dentro de um diretório de projeto.
🛠️ Ferramentas de desenvolvimento#
Rode a partir do diretório do projeto
| Comando | Descrição |
|---|---|
zeltro composer <args> |
Roda comandos do Composer dentro do contêiner |
zeltro art <args> |
Roda comandos do Artisan do Laravel (alias: zeltro artisan) |
zeltro wp <args> |
Roda comandos do WordPress CLI |
zeltro drush <args> |
Roda o Drush (Drupal) a partir do vendor/bin do projeto |
zeltro php <args> |
Roda o PHP dentro do contêiner |
zeltro npm <args> |
Roda comandos do npm dentro do contêiner |
zeltro npx <args> |
Roda comandos do npx dentro do contêiner |
zeltro node <args> |
Roda o Node.js dentro do contêiner |
zeltro python <args> |
Roda o python3 dentro do contêiner (alias: zeltro python3) |
zeltro pip <args> |
Roda o pip3 dentro do contêiner (alias: zeltro pip3); pip install acrescenta --break-system-packages |
zeltro shell |
Abre o shell interativo ou REPL adequado ao framework |
✅ Análise estática e linting#
Rode a partir do diretório do projeto; os caminhos são relativos à raiz do projeto (por exemplo app/Console/Commands/Foo.php)
| Comando | Descrição |
|---|---|
zeltro phpcs <relative-path> |
Roda o PHPCS com o conjunto de regras padrão |
zeltro phpcbf <relative-path> |
Roda o PHPCBF com o conjunto de regras padrão para corrigir automaticamente |
zeltro phpmd <relative-path> |
Roda o PHPMD em um arquivo com as regras padrão |
zeltro php -l <relative-path> |
Roda o lint do PHP em um arquivo |
📦 Execução no contêiner#
Rode a partir do diretório do projeto
| Comando | Descrição |
|---|---|
zeltro exec <cmd> |
Executa um comando como o usuário developer (sem TTY, ideal para automação) |
zeltro exec-root <cmd> |
Executa um comando como root (sem TTY) |
zeltro exec-tty <cmd> |
Executa um comando como o usuário developer com TTY (interativo) |
zeltro exec-tty-root <cmd> |
Executa um comando como root com TTY (interativo) |
zeltro bash [args] |
Abre um shell bash dentro do contêiner com TTY |
zeltro tinker [args] |
Abre o REPL tinker do Laravel dentro do contêiner com TTY |
⚡ Comandos extras para Laravel#
Rode a partir do diretório do projeto
| Comando | Descrição |
|---|---|
zeltro db-refresh |
Migration do zero + seed |
zeltro cache-refresh |
Limpa todos os caches do Laravel |
🐍 Comandos extras para Django#
Rode a partir do diretório do projeto
| Comando | Descrição |
|---|---|
zeltro django manage <args> |
Roda o manage.py com argumentos |
zeltro django shell |
Abre o shell interativo do Django |
🔧 Gerenciamento de serviços#
Rode de qualquer lugar
| Comando | Descrição |
|---|---|
zeltro mysql <args> |
Roda o cliente do MariaDB como root dentro do contêiner zeltro-mariadb (o serviço mysql precisa estar ativado) |
zeltro redis <cmd> |
Roda comandos do Redis CLI (sem argumentos, abre o REPL) |
zeltro redis-flush |
Apaga todos os dados do Redis |
zeltro memcache <cmd> |
Envia um comando bruto ao Memcached (stats, version, flush_all, get <key>, set <key> <value>) |
zeltro memcache-flush |
Apaga todos os dados do Memcached |
zeltro memcache-stats |
Mostra as estatísticas do Memcached |
🎛️ Gerenciamento de processos#
Rode a partir do diretório do projeto
| Comando | Descrição |
|---|---|
zeltro supervisor <cmd> |
Roda comandos do supervisorctl |
zeltro supervisor-status |
Mostra todos os processos supervisionados |
📁 Gerenciamento de projetos#
| Comando | Descrição |
|---|---|
zeltro up <project> |
Inicia um projeto (os serviços compartilhados iniciam de qualquer forma) |
zeltro up-all |
Inicia todos os projetos (os projetos desativados são ignorados) |
zeltro down <project> |
Para um projeto (os serviços compartilhados continuam rodando — use zeltro stop-services) |
zeltro down-all |
Para todos os projetos (os serviços compartilhados continuam rodando) |
zeltro status [project] [--all] |
Mostra os projetos em execução e o endereço local e LAN de cada um; --all inclui os projetos parados |
zeltro new <framework> <name> [options] |
Cria um projeto novo (framework e nome obrigatórios; o banco de dados é escolhido automaticamente, troque com --database) |
zeltro new folder <name> |
Um projeto de pasta: uma pasta com uma sessão de IA, sem contêiner, banco de dados nem endereço. Para scripts, scrapers, documentos, ferramentas de linha de comando e bots |
zeltro add <path> [--name N] |
Usa uma pasta que você já tem como projeto de pasta. Ela fica onde está, nada é escrito dentro dela, e o zeltro remove apenas a esquece |
zeltro create "<idea>" |
Cria um projeto a partir de uma ideia em linguagem comum e depois passa para o seu agente de IA no diretório do projeto |
zeltro resume <project> |
Retoma a última sessão de IA de um projeto |
zeltro install <app> [name] [--image <ref>] |
Instala um app open source popular com um comando (--list mostra todos; --one-off pula a entrega para a IA) |
zeltro clone <mode> <repo> [name] |
Clona um repositório existente (modo: work-directly / fork / new-repo) |
zeltro setup <project> [database] [options] |
Configura um diretório de projeto existente |
zeltro remove <project> [options] |
Remove um projeto (o banco de dados é preservado, a menos que você use --force-db-delete) |
zeltro rename <project> <new-name> [--github] [--dry-run] [--force] |
Renomeia um projeto. A pasta, o contêiner, os volumes de dados e o histórico do Claude Code acompanham; o endereço, a porta, o banco de dados e as configurações continuam iguais. Um projeto em execução reinicia com o novo nome. --github também renomeia o repositório no GitHub |
zeltro set-metadata <project> [--emoji E] [--name N] [--description D] [--idea TEXT|--idea-file F|--idea -] |
Define o emoji, o nome e a descrição de exibição de um projeto, ou a ideia do Criar com IA que deu origem a ele (qualquer texto de até 200 KB; --idea "" a remove) |
zeltro get-metadata <project> [--idea] [--json-output] |
Mostra os metadados de um projeto; --idea imprime só a ideia, byte por byte |
zeltro disable <project> |
Para e estaciona um projeto: ignorado pelo up-all, recusado pelo up, escondido na interface gráfica. Nada é excluído |
zeltro enable <project> |
Reativa um projeto desativado |
O zeltro status imprime endereços que você pode abrir a partir do host: http://<container-ip> localmente (ou http://localhost:<port> no macOS) e http://<host-lan-ip>:<port> a partir da LAN. http://<project>/ não funciona a partir do host — os nomes dos projetos só são resolvidos dentro dos contêineres. Não existe zeltro ps.
⚙️ Gerenciamento do sistema#
| Comando | Descrição |
|---|---|
zeltro configure |
Configura o ambiente do Zeltro |
zeltro ai [--interactive] "<prompt>" |
Envia um prompt ao seu agente de IA (execução única por padrão) (diretório do projeto) |
zeltro ai-set [options] |
Configura o agente de IA, o modelo e a chave de API |
zeltro ai-unattended [agent] [--revoke|--status] |
Deixa um agente rodar sem pedir aprovação (gravado na configuração do próprio agente) |
zeltro peers |
Lista as sessões de agentes rodando no app Zeltro, em todos os hosts |
zeltro send <project>[@host] ... -- <message> |
Envia mensagens a outras sessões de agentes (diretório do projeto) |
zeltro gui <action> |
A partir de um agente no app Zeltro: faz uma pergunta ao usuário, coleta um segredo para o .env, envia uma notificação ou abre uma URL (diretório do projeto) |
zeltro update [--full] |
Atualiza o CLI com um git pull (--full também roda de novo o instalador da plataforma e baixa as imagens outra vez, parando os projetos em execução) |
zeltro start-services |
Inicia os serviços compartilhados |
zeltro stop-services |
Para os serviços compartilhados |
zeltro enable-service <name> |
Ativa um serviço compartilhado opcional (veja abaixo) |
zeltro disable-service <name> |
Desativa um deles (o volume de dados é mantido) |
zeltro uninstall |
Remove os recursos Docker e os arquivos do CLI do Zeltro |
zeltro projects-dir |
Imprime o caminho do diretório de projetos |
zeltro version |
Imprime a versão e se há atualização disponível (também --version, -v) |
zeltro create-installer "<idea>" |
Gera um instalador de app novo via IA (--print só imprime o prompt) |
zeltro update-installer <app>|--all |
Atualiza instaladores em relação ao upstream via IA (--print só imprime o prompt) |
Serviços compartilhados opcionais
Só o Redis, o Memcached e o MailHog rodam sempre. Todo o resto fica desligado até ser ativado, e a lista de ativados fica guardada em OPTIONAL_SERVICES em /etc/zeltro-cli/.env. zeltro new, zeltro setup e zeltro install ativam automaticamente o banco de dados de que um projeto precisa.
| Nome | Serviço | Endereço (de dentro de um contêiner) |
|---|---|---|
mysql |
MariaDB 12 | zeltro-mariadb:3306 |
postgres |
PostgreSQL 17 | zeltro-postgres:5432 |
mongo |
MongoDB 8 | zeltro-mongo:27017 |
phpmyadmin |
phpMyAdmin | http://zeltro-phpmyadmin |
adminer |
Adminer | http://zeltro-adminer:8080 |
mongo-express |
mongo-express | http://zeltro-mongo-express:8081 |
redisinsight |
RedisInsight | http://zeltro-redisinsight:5540 |
minio |
Armazenamento S3 (Silo, o fork mantido do MinIO) | http://zeltro-minio:9000, console :9001 |
meilisearch |
Meilisearch | http://zeltro-meilisearch:7700 |
zeltro enable-service minio
zeltro disable-service minio
zeltro enable-service --json-output # no name: list every optional service and its state
Um serviço só é registrado como ativado se iniciar e continuar rodando. Em uma máquina instalada antes da mudança de nome para Zeltro, rode zeltro migrate-names para passar os contêineres para os nomes zeltro-*.
Mensagens entre sessões de agentes
Quando o app Zeltro hospeda sessões de agentes em vários projetos (em um host ou em vários), elas podem trocar mensagens. O app faz o roteamento por uma fila por usuário em ~/.zeltro/bus/: ele publica o peers.json, e o send deixa um arquivo JSON por mensagem em outbox/.
zeltro peers # list live sessions as project@host; marks yours
zeltro peers --json-output
zeltro send blog -- "API schema changed" # one target
zeltro send blog api@shop -- "Rebuild please" # several targets
zeltro send --all -- "Heading out" # every live session except you
git diff | zeltro send api -- - # read the message from stdin
- Rode o
sendde dentro do diretório do seu projeto; é assim que você é identificado. - Um
projectsozinho funciona quando só uma sessão ativa tem esse nome; caso contrário, useproject@host. - Todos os destinos precisam ser sessões ativas, senão nada é enviado. As mensagens têm limite de 16 KB.
- Com um único destino, o
--é opcional:zeltro send blog "message". - Saída 0 significa que a mensagem entrou na fila. Ela chega ao terminal do destino como
[Zeltro message from <you>@<host> to <targets>] ....
Pedindo coisas ao app Zeltro
Um agente em uma sessão iniciada pelo app Zeltro pode usar a janela do app para falar com o usuário:
zeltro gui notify --level info "Admin login" "http://shop/admin user: admin password: ..."
zeltro gui notify --level success "Pricing page added" "Open /pricing to see it"
zeltro gui secret STRIPE_KEY --reason "for checkout" # writes it into .env; never printed
zeltro gui notify --level warning "Tests failing" "3 failures in api/"
zeltro gui open --project # or: zeltro gui open https://...
zeltro gui settings ai --reason "add an OpenRouter key"
Códigos de saída: 0 ok, 1 erro, 2 uso incorreto, 3 o app não está disponível (pergunte no chat), 4 tempo esgotado, 5 o usuário recusou, 6 o app recusou. O secret só escreve em arquivos dentro do projeto.
zeltro ai e zeltro resume também avisam o app quando cada turno termina, usando o zeltro gui event como hook para o Claude Code, o Codex e o aider. As flags de hook valem só para aquela execução e não alteram os seus arquivos de configuração, e o do Codex é pulado se você tiver definido o seu próprio notify.
Opções do zeltro ai-set
O zeltro ai-set gerencia o CLI de agente de IA global, o modelo e a chave de API usados pelo Zeltro.
zeltro ai-set --agent claude --model opus
zeltro ai-set --agent codex --model gpt-6-sol
zeltro ai-set --agent aider --model anthropic/claude-sonnet-5 --api-key sk-ant-...
zeltro ai-set --install-only --agent qwen
zeltro ai-set --json-output
Flags suportadas:
--agent <name>– Define o CLI do agente de IA (codex,claude,agy,qwen,aider,opencodeouhermes).geminiainda funciona, mas está obsoleto: o Google deixou de oferecer o Gemini CLI para contas pessoais em 2026-06-18, então useagy, o Antigravity CLI que o substitui.--model <name>– Define o nome do modelo (opcional para Codex, Claude, agy, Gemini, OpenCode e Hermes; obrigatório para Qwen e Aider, e para OpenCode e Hermes com--api-base). OpenCode e Hermes recebemprovider/model, por exemploopenai/gpt-5.4-mini.--api-key <key>– Define a chave de API da IA (opcional para Codex, Claude, agy, OpenCode e Hermes; para agy e Gemini, uma chave de API do Gemini, passada comoGEMINI_API_KEY; obrigatória para Aider).--api-key ""apaga uma chave guardada.--api-base <url>– Define um endpoint de API personalizado: compatível com OpenAI para Codex, Qwen, Aider, OpenCode e Hermes; um proxy compatível com Anthropic para Claude.--api-base noneo apaga.--allow-unattended/--no-allow-unattended– Deixa o agente rodar sem pedir aprovação, ou desliga isso. Gravado na configuração do próprio agente; omita as duas para não mudar nada. É o que as execuções no terminal seguem; no app desktop, o botão "Trabalha sem perguntar" de cada projeto (ligado por padrão) passa por cima disso a cada sessão, viaZELTRO_AI_UNATTENDED.--install-only– Com--agent: instala o CLI desse agente se estiver faltando, sem torná-lo o padrão. Não escreve nada na configuração do Zeltro.--json-output– Devolve o resultado como JSON (não interativo). Sozinho,zeltro ai-set --json-outputé uma consulta somente leitura: não instala nem escreve nada, e informa as configurações atuais mais"session_overrides": true,"ai_language": truee"installed_agents": [...].
Trocar o --agent sem --model ou --api-base apaga o modelo e o endpoint anteriores.
Exemplos:
- Ver as configurações de IA atuais:
zeltro ai-set --json-output
- Configurar o Codex com um modelo:
zeltro ai-set --agent codex --model gpt-6-sol
- Configurar o Claude com um modelo:
zeltro ai-set --agent claude --model opus
- Configurar o Aider com a Anthropic:
zeltro ai-set --agent aider --model anthropic/claude-sonnet-5 --api-key sk-ant-...
- Configurar o Aider com um servidor Ollama local:
zeltro ai-set --agent aider --model openai/llama3.1 --api-key ollama --api-base http://localhost:11434/v1
Substituições de IA por sessão
zeltro ai, resume, create (inclusive --classify-only), clone, create-installer e update-installer usam o agente definido pelo zeltro ai-set. Para usar outro em uma única execução, defina estas variáveis de ambiente. Elas nunca são escritas em /etc/zeltro-cli/.env.
| Variável | Substitui |
|---|---|
ZELTRO_AI_AGENT |
AI_AGENT — codex, claude, agy, aider, qwen, opencode, hermes ou gemini (obsoleto) |
ZELTRO_AI_MODEL |
AI_MODEL |
ZELTRO_AI_API_BASE |
AI_API_BASE |
ZELTRO_AI_API_KEY |
AI_API_KEY |
ZELTRO_AI_API_KEY_FILE |
AI_API_KEY, lida da primeira linha do arquivo; tem prioridade sobre ZELTRO_AI_API_KEY |
ZELTRO_AI_LANGUAGE |
O idioma em que o agente responde, por exemplo Spanish. A saída do próprio Zeltro continua em inglês |
Não definida significa "usar o valor do ai-set"; definida mas vazia significa "apagar o valor nesta execução". Um agente desconhecido, um arquivo de chave ilegível ou um agente de substituição que não está instalado é um erro antes de qualquer coisa rodar, e nada é instalado — use zeltro ai-set --install-only --agent <name> antes.
ZELTRO_AI_AGENT=qwen ZELTRO_AI_MODEL=qwen/qwen3-coder-30b-a3b-instruct \
ZELTRO_AI_API_BASE=https://openrouter.ai/api/v1 ZELTRO_AI_API_KEY_FILE=~/.or-key \
zeltro ai "Add a health-check endpoint at /ping"
Aider
O Aider é o único agente suportado sem login próprio — ele sempre fala diretamente com a API de um provedor, então precisa de um modelo e de uma chave.
- O nome do modelo escolhe o provedor:
openai/gpt-6-sol,anthropic/claude-sonnet-5,gemini/gemini-2.5-pro,deepseek/deepseek-chat. Veja a lista de modelos do aider. - O Aider marca as chaves por provedor (
--api-key openai=sk-...). O Zeltro guarda a chave pura e a marca a partir do prefixo do modelo, então--api-key sk-...é tudo de que você precisa. Uma chave que já contém=é repassada como está. - O
--api-basesó é necessário para um servidor compatível com OpenAI — Ollama, LM Studio, OpenRouter, vLLM. Ponha o prefixoopenai/no modelo quando usar um deles. Deixe-o em branco para a API hospedada do próprio provedor. - O Zeltro roda o Aider com
--no-auto-commits, então as edições dele caem na sua árvore de trabalho como as de qualquer outro agente, em vez de serem commitadas automaticamente.
🤖 Criação de projetos com IA#
O zeltro create recebe a sua ideia de projeto, acrescenta instruções específicas do Zeltro e entrega o prompt combinado ao CLI de IA que você configurou. O Zeltro prepara o ambiente. A IA constrói o app.
# asks what you want to build (interactive terminals only)
zeltro create
# Pass the idea directly
zeltro create "A timeclock for employees in Django"
zeltro create "A customer check-in system in Laravel"
zeltro create "An inventory tracker in Express"
# Read a long idea from a file or stdin
zeltro create -f big-prompt.md
cat big-prompt.md | zeltro create
# Point to an existing GitHub repo to clone and set it up
zeltro create "https://github.com/monicahq/monica"
Passe --one-off para parar depois da criação e pular a entrega para a IA.
O que o agente de IA faz:
- Se o framework ou a stack não estiver claro, pergunta qual usar antes de continuar.
- Roda
zeltro newpara criar o projeto e iniciar os contêineres dele. - Lê o arquivo
.envgerado para entender a configuração de banco de dados, cache e e-mail. - Constrói o app seguindo as convenções nativas do framework: migrations, models, seeders, rotas, controllers, templates.
- Atualiza o README do projeto com a URL local, comandos úteis e as credenciais padrão, se houver.
Se a sua ideia corresponder a um app conhecido que tem um instalador do Zeltro (Grafana, Gitea, n8n, Portainer etc.), o agente roda zeltro install <name> primeiro — deixando-o no ar em segundos — e depois aplica as personalizações adicionais do seu prompt. Você nunca precisa escrever um arquivo docker-compose nem saber em que porta o app escuta.
O CLI de IA pode ser na nuvem ou local, conforme a sua configuração. Use zeltro ai-set para escolher qual agente é usado.
Só classificar (para interfaces gráficas e outros front ends)
zeltro create --classify-only "<idea>" # human-readable
zeltro create --classify-only --json-output "<idea>" # machine-readable
Roda só a fase de classificação: descobre a stack, imprime o resultado, sai com 0 e não cria nada. Nunca faz perguntas, então é seguro chamá-lo a partir de uma interface gráfica, de um script ou de um agente.
Isso existe porque o caminho não interativo normal (--one-off,
--json-output) aceita em silêncio a primeira recomendação — ótimo para automação,
mas descarta a escolha que uma pessoa teria feito no menu. Um front end
que queira apresentar essas opções de forma nativa deve classificar primeiro, mostrar os
candidatos e depois chamar zeltro install <app> ou zeltro new <framework> <name>
com o que o usuário escolheu.
O JSON traz project_name (null quando a ideia não sugere um assunto concreto,
então pergunte em vez de preencher), recommended, customization_requested, um
database sugerido com o motivo, e candidates — apps primeiro, framework
por último, no máximo 5. Apps trazem um único database fixo, definido pelo instalador;
frameworks trazem um array databases com os motores que aceitam. Nunca ofereça
escolha de banco de dados para um app. Em caso de falha, ele emite
{"action": "classify", "status": "error", "message": "..."} e sai com código diferente de zero.
🤖 Sessões de agentes de IA#
Depois de definir o seu agente de IA global com zeltro ai-set, você pode enviar um prompt de qualquer diretório de projeto do Zeltro:
cd /path/to/project
zeltro ai "Build a unique homepage hero section."
Por padrão, o zeltro ai envia um prompt de execução única — o agente o recebe, faz o trabalho e sai. O contexto duradouro do projeto fica no AGENTS.md do projeto (o Zeltro o escreve na criação), então cada prompt pode ser independente. Acrescente --interactive (-i) se preferir uma sessão persistente. --one-off ainda é aceito por compatibilidade.
zeltro ai --interactive "Add a health-check endpoint at /ping"
O zeltro ai:
- Lê
AI_AGENT,AI_MODEL,AI_API_KEYeAI_API_BASEde/etc/zeltro-cli/.env, a menos que haja uma substituiçãoZELTRO_AI_*definida. - Roda o agente com o prompt (as partes
[...]só entram quando definidas):- Codex:
codex exec [--model "$AI_MODEL"] "<prompt>"(execução única) /codex [--model ...] "<prompt>"(interativo). Chave viaOPENAI_API_KEY; o endpoint é passado como-c openai_base_url="…", porque o Codex atual ignoraOPENAI_BASE_URL. - Claude:
claude -p [--model "$AI_MODEL"] "<prompt>"(-psó na execução única). Chave viaANTHROPIC_API_KEY, endpoint viaANTHROPIC_BASE_URL. - O Codex e o Claude removeram as flags
--api-key; a chave passa pelo ambiente. O Zeltro confere se a chave parece ser daquele provedor (sk-para Codex,sk-ant-para Claude) e, se não for, a ignora com um aviso e deixa o CLI usar o próprio login — uma chave do provedor errado substituiria uma autenticação que funciona por outra que não tem como funcionar. - Qwen:
qwen --auth-type openai [--model "$AI_MODEL"] --prompt "<prompt>"(execução única) /-i "<prompt>"(interativo). Chave e endpoint viaOPENAI_API_KEY/OPENAI_BASE_URL. - agy (Antigravity CLI):
agy [--model "$AI_MODEL"] --add-dir <projects dir> -p "<prompt>"(execução única) /-i "<prompt>"(interativo). Chave viaGEMINI_API_KEY, com"modelProvider": "gemini"definido em~/.gemini/antigravity-cli/settings.jsonenquanto houver uma chave guardada; sem endpoint personalizado. - Gemini (obsoleto):
gemini [--model "$AI_MODEL"] --include-directories <projects dir> --output-format text --prompt "<prompt>"(execução única) /-i "<prompt>"(interativo). - Aider:
aider --no-check-update --no-pretty --no-auto-commits --subtree-only [--no-git] [--model "$AI_MODEL"] [--api-key <provider>="$AI_API_KEY"] [--openai-api-base "$AI_API_BASE"] --message "<prompt>"(execução única). O--messagedo Aider sai depois da resposta, então as execuções interativas iniciam a sessão com--loade a devolvem para você.--no-gité acrescentado quando o diretório ainda não é um repositório git. - OpenCode:
opencode run [-m "$AI_MODEL"] "<prompt>"(execução única) /opencode [-m ...] --prompt "<prompt>"(interativo). A chave vai para a variável que o provedor do modelo lê; um endpoint vira um provedor compatível com OpenAI chamadozeltroemOPENCODE_CONFIG_CONTENT, com o modelo comozeltro/<model>. A atualização automática fica desligada durante a execução. - Hermes:
hermes chat [--provider <p>] [-m <model>] --oneshot -Q -q "<prompt>"(execução única) /hermes chat [...] -q "<prompt>"(interativo). Um prefixo de modelo (openai/,openrouter/,anthropic/,gemini/) vira--provider; um endpoint usa--provider openaicomOPENAI_BASE_URLeOPENAI_API_KEY.
- Codex:
- Só passa flags que dispensam aprovação quando mandado. Por padrão, se um agente roda sem perguntar fica registrado na configuração do próprio agente (
~/.claude/settings.json,~/.codex/config.toml,~/.gemini/antigravity-cli/settings.json,~/.gemini/settings.json,~/.qwen/settings.json,~/.aider.conf.yml,~/.config/opencode/opencode.json,~/.hermes/config.yaml), definido comzeltro ai-set --allow-unattendedouzeltro ai-unattended. Para uma execução,ZELTRO_AI_UNATTENDED=1acrescenta as flags (o app desktop usa isso no botão de cada projeto;ZELTRO_AI_AUTO_APPROVE=1continua funcionando) eZELTRO_AI_UNATTENDED=0liga os pedidos de aprovação. Com1, ele passa (--dangerously-skip-permissions,--dangerously-bypass-approvals-and-sandbox,--yolo,--dangerously-skip-permissionspara agy,--yolo --skip-trustpara Gemini,--yes-alwayspara Aider,--autopara OpenCode,--yolopara Hermes).
🎯 Opções dos comandos#
Opções globais#
| Opção | Descrição |
|---|---|
--json-output |
Saída JSON limpa (suprime todo texto e cores). Removida pelo despachante, então todos os comandos a recebem |
--no-colors |
Desliga a saída colorida (aceita pela maioria dos comandos). A cor já fica desligada quando a saída não é um terminal |
--debug |
Ativa o log de depuração em /tmp/zeltro-cli-debug.log (aceita por new, clone, setup, remove, status, up, down, start-services, stop-services, configure, uninstall) |
Opções de projeto novo#
zeltro new <framework> <name> — framework e nome são argumentos posicionais obrigatórios. O framework é um destes: laravel, kavera, octobercms, drupal, wordpress, php, fastapi, flask, django, python, express, nestjs, fastify, node, nextjs, nuxt, sveltekit, astro, hono, react, vue.
| Opção | Descrição | Valores |
|---|---|---|
--database <type> |
Tipo de banco de dados | auto (padrão): postgres para django/fastapi/flask/python, sqlite para nextjs/nuxt/sveltekit/astro/hono/react/vue, mysql nos demais. Ou mysql, postgres, mongo (alias mongodb), sqlite. Um motor que o framework não suporta é trocado por um suportado, com um aviso |
--version <ver> |
Versão do framework | Laravel: latest (padrão) ou uma tag de release do laravel/laravel, por exemplo 12.9.1WordPress: latest (padrão) ou uma versão do WordPress. Ignorada pelos outros frameworks |
--db-name <name> |
Nome do banco de dados | Padrão: o nome do projeto com os hífens trocados por sublinhados |
--image <ref> |
Substitui a imagem Docker do projeto | Padrão: a imagem base cbc do framework (canebaycomputers/cbc:nginx-php8 / nginx-python3 / nginx-node) |
--no-migration |
Pula as migrations do banco de dados | As migrations rodam por padrão |
--github |
Cria o repositório no GitHub na sua conta | Exige autenticação no GitHub CLI |
--github-org <org> |
Cria o repositório no GitHub em uma organização | Exige autenticação no GitHub CLI |
--public |
Torna público o novo repositório no GitHub | O padrão é privado quando --github/--github-org é usado |
--private |
Torna privado o novo repositório no GitHub | Comportamento padrão quando nenhuma flag de visibilidade é passada |
--no-storage-symlink |
Não cria o link simbólico public/storage |
(Só Laravel) |
--one-off |
Pula a entrega para a IA no final | Para automação |
Opções de clonagem#
zeltro clone <mode> <repo> [name] — o modo é o primeiro argumento, obrigatório: work-directly (clona e mantém o original como upstream), fork (faz um fork na sua conta do GitHub) ou new-repo (cria um repositório novo no GitHub para ele).
| Opção | Descrição |
|---|---|
--overwrite-docker-compose |
Sobrescreve o docker-compose.yaml existente sem perguntar |
--database <type> |
Tipo de banco de dados (mysql, postgres, mongo, sqlite) |
--db-name <name> |
Nome do banco de dados (padrão: o nome do projeto com os hífens trocados por sublinhados) |
--overwrite-env |
Gera o .env de novo mesmo que o repositório clonado já traga um (padrão: manter o .env existente) |
--no-migration |
Pula as migrations do banco de dados (elas rodam por padrão — um migrate não destrutivo para apps adotados) |
--framework <name> |
Força a detecção do framework (laravel, kavera, wordpress, octobercms, drupal, php, django, flask, fastapi, python, express, nestjs, fastify, node, nextjs, nuxt, sveltekit, astro, hono, react, vue) |
--image <ref> |
Substitui a imagem Docker do projeto (num compose complexo adaptado, substitui a imagem do serviço exposto à web; padrão: a imagem base cbc do framework) |
--no-startup |
Registra e adapta o projeto sem iniciar o contêiner — use para inspecionar o docker-compose adaptado antes de rodar zeltro up |
--fold / --no-fold |
Força, ou pula, o "fold" por IA que adapta o repositório para o Zeltro. Padrão: faz o fold quando há um agente de IA configurado; senão, usa as heurísticas embutidas de framework/compose |
--no-preflight |
Pula a verificação de compatibilidade e configura o repositório de qualquer forma |
--branch <name> |
Faz checkout do branch indicado (repassado ao git clone) |
--single-branch |
Clona só o histórico desse branch (repassado ao git clone) |
--github-org <org> |
No modo new-repo: cria o repositório nesta organização |
--public |
Torna público o novo repositório no GitHub (padrão: privado) |
--private |
Torna privado o novo repositório no GitHub |
--no-storage-symlink |
Não cria o link simbólico public/storage (Laravel) |
--one-off |
Pula a entrega para a IA no final |
Projetos complexos: ao clonar um projeto que traz o próprio docker-compose com vários serviços (banco de dados, cache e workers embutidos), o Zeltro o adapta automaticamente: os serviços de banco de dados e cache embutidos são removidos e as variáveis de ambiente deles passam a apontar para os contêineres compartilhados do Zeltro (
zeltro-postgres,zeltro-mariadb,zeltro-redis,zeltro-mongo). O serviço exposto à web recebe um IP estático na VPC. O tipo de imagem só afeta essa adaptação do compose — as etapas do framework (composer install, configuração do.env, migrations) dependem da detecção do framework e também rodam em projetos adaptados. Passe--no-startuppara revisar o compose adaptado antes de ele subir,--overwrite-envpara apontar as configurações de conexão do.envde um app existente para os serviços compartilhados (preservando oAPP_KEY) e--no-migrationpara pular as migrations.
Opções de setup#
zeltro setup <project> [database] — o segundo argumento, opcional, é o motor de banco de dados (mysql, postgres, mongo, sqlite; padrão mysql).
| Opção | Descrição |
|---|---|
--overwrite-docker-compose |
Sobrescreve o docker-compose.yaml existente sem perguntar |
--framework <type> |
Força a detecção do framework (laravel, kavera, octobercms, drupal, wordpress, php, fastapi, flask, django, python, express, nestjs, fastify, node, nextjs, nuxt, sveltekit, astro, hono, react, vue) |
--db-name <name> |
Nome do banco de dados (padrão: o nome do projeto com os hífens trocados por sublinhados) |
--image <ref> |
Substitui a imagem Docker do projeto (num compose complexo adaptado, substitui a imagem do serviço exposto à web; padrão: a imagem base cbc do framework) |
--overwrite-env |
Gera o .env de novo mesmo que já exista um (padrão: manter o .env existente) |
--no-migration |
Pula as migrations do banco de dados (elas rodam por padrão) |
--no-startup |
Registra e adapta o projeto sem iniciar o contêiner |
--no-storage-symlink |
Não cria o link simbólico public/storage (Laravel) |
Opções do status#
| Opção | Descrição |
|---|---|
--all |
Inclui os projetos parados (padrão: só os projetos em execução) |
--running |
Só os projetos em execução (o padrão) |
Um projeto nomeado (zeltro status my-project) aparece mesmo parado.
Opções de remoção#
Por padrão, os arquivos do projeto vão para a lixeira, e o banco de dados e os volumes Docker do projeto são mantidos.
| Opção | Descrição |
|---|---|
--force-db-delete |
Também apaga os bancos de dados do projeto, os usuários de banco de dados criados pelo instalador e os volumes nomeados. Os nomes vêm dos arquivos compose/.env do projeto e do instalador; os que outro projeto também usa são mantidos |
--preserve-database |
Não apaga nenhum banco de dados (tem prioridade sobre --force-db-delete) |
Opções de renomeação#
O zeltro rename <project> <new-name> se recusa a rodar enquanto houver algo em execução dentro da pasta do projeto (uma sessão de IA, um terminal), então feche essas coisas antes. Para uma pasta adicionada com zeltro add, só o nome do projeto muda; a pasta fica onde está.
| Opção | Descrição |
|---|---|
--github |
Também renomeia o repositório no GitHub por trás do origin (você precisa de permissão de administrador nele) e aponta o origin para o novo nome. O GitHub redireciona a URL antiga |
--dry-run |
Mostra o que mudaria, e se o --github vai funcionar, sem mudar nada |
--force |
Renomeia mesmo com um programa rodando dentro da pasta do projeto |
Opções de desinstalação#
| Opção | Descrição |
|---|---|
--delete-images |
Também remove as imagens Docker (padrão: mantê-las para uma reinstalação mais rápida) |
--json-output |
Devolve respostas em JSON para automação |
Opções do configure#
| Opção | Descrição |
|---|---|
--git-name <name> |
Nome de usuário do git |
--git-email <email> |
E-mail de usuário do git |
--projects-dir <dir> |
Diretório de projetos (padrão: o existente ou ~/zeltro-projects) |
--vpc-subnet <A.B.C> |
Sub-rede personalizada da VPC Docker (padrão: a existente ou uma 10.x.x aleatória) |
--non-interactive, -y |
Nunca pergunta; aceita os padrões para tudo o que não for passado como flag |
Rodar o zeltro configure de novo é seguro — os valores de /etc/zeltro-cli/.env são mantidos como padrão, e as perguntas deixam você alterá-los. O Zeltro não escreve no /etc/hosts.
💡 Exemplos de uso#
Clonando e configurando projetos#
# Clone a Git repository and set it up automatically
zeltro clone work-directly https://github.com/user/my-laravel-app
# Clone with a custom local name
zeltro clone work-directly https://github.com/user/company-project my-local-name
# Manual Git clone into the projects directory, then setup
cd "$(zeltro projects-dir)"
git clone https://github.com/user/company-project
zeltro setup company-project
zeltro up company-project
# Downloaded ZIP file - extract to ~/zeltro-projects/company-project/
zeltro setup company-project
zeltro up company-project
# Copied project folder
cp -r existing-project ~/zeltro-projects/new-project
zeltro setup new-project --overwrite-docker-compose
Desenvolvimento com WordPress#
# Create a WordPress project (MySQL is auto-selected)
zeltro new wordpress wp-site --version latest
# Install and activate plugins
cd ~/zeltro-projects/wp-site
zeltro wp plugin install woocommerce --activate
zeltro wp plugin list --status=active
Saída JSON para automação#
# Get project status as JSON for scripts/GUI
zeltro status --json-output
# Create project with JSON response
zeltro new fastapi my-api --database postgres --json-output
# Check if a shared service is running (keys are container names; status is lowercase)
if [ "$(zeltro status --json-output | jq -r '.shared_services["zeltro-mariadb"].status')" = "running" ]; then
echo "Database is ready"
fi
# Batch project operations (--all so stopped projects are included)
for project in $(zeltro status --all --json-output | jq -r '.projects[].name'); do
zeltro up $project --json-output
done
Lendo os campos de endereço
Cada projeto em zeltro status --json-output traz vários campos de endereço.
Eles significam coisas diferentes, e um deles é fácil de usar errado:
| Campo | Significado |
|---|---|
external_port |
A porta publicada. O único campo portável — uma porta é o mesmo número de onde quer que você pergunte. |
local_url |
O endereço que funciona na máquina que roda o Zeltro: o IP do contêiner (http://10.x.x.219), ou http://localhost:<port> onde o Docker mantém os contêineres em uma VM, como no macOS e no Windows. |
lan_url |
A visão que o host tem de si mesmo: o endereço LAN dele e a porta publicada. |
metadata |
Metadados de exibição do bloco x-metadata do projeto; {} quando não há nenhum. |
O lan_url só faz sentido na própria rede do host. Ele é montado
a partir do endereço que o host vê para si mesmo, então numa VM na nuvem é o endereço
privado — http://172.30.2.182:226 em uma máquina EC2 — que não é roteável de
nenhum outro lugar. Não é um erro no valor; o campo simplesmente não tem como saber
quem está perguntando.
Se você está acessando um projeto a partir de outra máquina, monte a URL com o
endereço que você usou para se conectar a esse host, mais o external_port. Não
mostre o lan_url a um usuário remoto.
Uma porta escutando não é o mesmo que uma porta acessível. O Zeltro informa o que o host consegue ver sobre si mesmo; se os seus pacotes chegam é uma característica da rede entre você e ele — security groups, NAT, VPNs, ou simplesmente se um notebook está acordado. Essa pergunta só pode ser respondida pela máquina que está perguntando, então teste a partir dela em vez de deduzir a acessibilidade pela saída do status.
Gerenciamento de serviços#
# Check Redis status and flush cache
zeltro redis ping
zeltro redis-flush
# Monitor supervised processes (from the project directory)
zeltro supervisor-status
zeltro supervisor restart all
Uso avançado#
Comandos de desenvolvimento no contêiner
Projetos PHP — zeltro composer, zeltro art, zeltro php, zeltro wp e zeltro drush rodam dentro do contêiner do seu projeto, com o ambiente PHP correto:
cd ~/zeltro-projects/my-laravel-app
zeltro composer install # Uses container's PHP 8.3
zeltro art migrate # Runs with container's Laravel setup
zeltro php script.php # Executes with project's PHP configuration
Projetos Node.js — zeltro npm, zeltro npx e zeltro node rodam dentro do contêiner do seu projeto, com o Node 22:
cd ~/zeltro-projects/my-express-app
zeltro npm install # Installs packages inside container
zeltro npx tsc --init # Run any npx command inside container
zeltro node script.js # Execute a script with project's Node environment
Projetos Python (FastAPI, Django, Python puro) — zeltro python e zeltro pip rodam dentro do contêiner do seu projeto:
cd ~/zeltro-projects/my-fastapi-app
zeltro python -c "import sys; print(sys.version)"
zeltro pip install httpx # Install a package inside the container
zeltro pip list # Show installed packages
Projetos Django — use os wrappers zeltro django para as operações do manage.py:
cd ~/zeltro-projects/my-django-app
zeltro django manage migrate # Run migrations
zeltro django manage createsuperuser # Create admin user
zeltro django manage collectstatic # Collect static files
zeltro django manage makemigrations myapp
Shells interativos e REPLs
O zeltro shell abre automaticamente o ambiente interativo certo para o projeto atual:
# Laravel — opens php artisan tinker
cd ~/zeltro-projects/my-laravel-app && zeltro shell
# Django — opens python manage.py shell (Django ORM and apps loaded)
cd ~/zeltro-projects/my-django-app && zeltro shell
# FastAPI / plain Python / Python script — opens python3 REPL
cd ~/zeltro-projects/my-fastapi-app && zeltro shell
# Express / Fastify / plain Node.js — opens node REPL
cd ~/zeltro-projects/my-express-app && zeltro shell
# NestJS — opens node REPL; or the NestJS REPL if src/repl.ts exists
cd ~/zeltro-projects/my-nest-app && zeltro shell
O que ele não conseguir detectar recebe um shell bash. O zeltro tinker continua disponível como alias explícito, só para Laravel.
O REPL do NestJS (src/repl.ts) não é criado por padrão. Crie-o seguindo a documentação do REPL do NestJS, e o zeltro shell passa a usá-lo automaticamente.
🔌 Integração via API JSON#
O Zeltro oferece saída JSON limpa para integração programática, ideal para aplicativos com interface gráfica e scripts de automação:
// Example: Create project via JSON API
const result = await exec('zeltro new laravel myapp --version 12.9.1 --json-output');
const data = JSON.parse(result.stdout);
// Result:
{
"action": "new_project",
"project_name": "myapp",
"framework": "laravel",
"database": "mysql",
"setup_result": { ... },
"status": "success"
}
Comandos com JSON disponível#
✅ Com suporte a JSON:
zeltro status --json-output- Status dos projetos e serviçoszeltro new --json-output- Confirmação da criação do projetozeltro clone --json-output- Confirmação da clonagem do projetozeltro setup --json-output- Confirmação do setup do projetozeltro remove --json-output- Confirmação da remoção do projetozeltro up --json-output- Confirmação da inicialização do projetozeltro down --json-output- Confirmação do desligamento do projetozeltro start-services --json-output- Confirmação do início dos serviçoszeltro stop-services --json-output- Confirmação da parada dos serviçoszeltro enable-service/disable-service --json-output- Resultado da ativação/desativação do serviço (sem nome: lista os serviços opcionais)zeltro configure --json-output- Confirmação da configuraçãozeltro uninstall --json-output- Confirmação da desinstalaçãozeltro ai-set --json-output- Configurações de IA atuais (somente leitura quando usado sozinho)zeltro create --classify-only --json-output- Classificação da stackzeltro peers --json-output/zeltro send --json-output- Sessões de agentes / resultado do enviozeltro get-metadata --json-output- Todas as chaves de x-metadata, inclusive aideacompleta (ostatussó informahas_idea)zeltro set-metadata,zeltro disable,zeltro enable --json-output- Resultadozeltro projects-dir --json-output,zeltro version --json-output
❌ Sem suporte a JSON (comandos no contêiner):
zeltro composer- Roda dentro do contêinerzeltro art- Roda dentro do contêinerzeltro wp- Roda dentro do contêinerzeltro drush- Roda dentro do contêinerzeltro php- Roda dentro do contêinerzeltro npm- Roda dentro do contêinerzeltro npx- Roda dentro do contêinerzeltro node- Roda dentro do contêinerzeltro python- Roda dentro do contêinerzeltro pip- Roda dentro do contêinerzeltro shell- Roda dentro do contêinerzeltro django- Roda dentro do contêinerzeltro exec- Roda dentro do contêinerzeltro exec-root- Roda dentro do contêinerzeltro supervisor- Roda dentro do contêinerzeltro redis- Conexão direta com o serviçozeltro memcache- Conexão direta com o serviço
🏗️ Arquitetura#
Serviços incluídos#
Sempre rodando:
- Redis (
zeltro-redis) - Cache e armazenamento de sessões - Memcached (
zeltro-memcached) - Camada de cache adicional - MailHog (
zeltro-mailhog) - Teste e depuração de e-mails (captura os e-mails enviados)
Opcionais — ativados automaticamente quando um projeto precisa de um, ou com zeltro enable-service:
- MariaDB (
zeltro-mariadb), PostgreSQL (zeltro-postgres), MongoDB (zeltro-mongo) - phpMyAdmin, Adminer, mongo-express, RedisInsight - Interfaces de administração de bancos de dados
- MinIO (armazenamento compatível com S3, servido pelo Silo, o fork mantido do MinIO), Meilisearch (busca de texto completo)
Estrutura de projetos#
~/zeltro-projects/
├── project1/
│ ├── docker-compose.yaml
│ ├── .env
│ └── [project files]
├── project2/
└── ...
Configuração de rede#
Cada projeto recebe:
- Um endereço IP Docker exclusivo (10.x.x.x) na rede
zeltro-cli_vpc - Um nome que é resolvido na rede compartilhada, de dentro de qualquer contêiner
- Uma porta externa mapeada para acesso pela LAN
- URL local: o IP do contêiner, por exemplo
http://10.247.177.219 - URL na LAN:
http://your-ip:port
Desinstalação#
Desinstalação por plataforma#
🐧 Linux e 🍎 macOS
# 1. Remove Zeltro's containers, volumes and networks, and the CLI itself
# (/usr/local/bin/zeltro and /usr/local/share/zeltro-cli)
zeltro uninstall
# 2. Remove configuration directory (optional)
sudo rm -rf /etc/zeltro-cli
Se você instalou o pacote .deb, rode zeltro uninstall e depois sudo apt remove zeltro-cli.
O que é removido#
O zeltro uninstall remove:
- ✅ Todos os contêineres de serviço do Zeltro (mariadb, redis, postgres etc.)
- ✅ Todos os contêineres dos projetos
- ✅ As imagens Docker (opcional, com
--delete-images) - ✅ Os volumes e redes Docker com o prefixo
zeltro-cli_— inclusive os dados dos bancos de dados compartilhados - ✅ O binário e os arquivos-fonte do Zeltro CLI
- ✅ Faz backup dos arquivos docker-compose.yaml dos projetos como
docker-compose.yaml.backup
O que é preservado:
- ✅ O código-fonte e os arquivos dos seus projetos
- ✅ A configuração em
/etc/zeltro-cli(uma reinstalação a aproveita) - ✅ Outros contêineres e imagens Docker que não são do Zeltro
- ✅ O próprio Docker Desktop/Engine
Veja as Opções de desinstalação para as flags.
🔧 Configuração#
Configuração inicial#
# Run the configuration wizard
zeltro configure
O zeltro configure também instala o autocompletar com tab do bash (em /usr/share/bash-completion/completions/zeltro e /etc/bash_completion.d/zeltro, os que existirem). Abra um shell novo e use o tab para completar comandos, nomes de projetos e nomes de instaladores:
zeltro ins<TAB> → install
zeltro install gr<TAB> → grafana gramps-web graylog grist grocy
zeltro up <TAB> → (your project names)
zeltro new <TAB> → laravel wordpress fastapi django ...
zeltro clone <TAB> → work-directly fork new-repo
Variáveis de ambiente#
JSON_OUTPUT=1- O mesmo que--json-outputNO_COLOR- Qualquer valor: o mesmo que--no-colorsFORCE_COLOR=1- Mantém a cor quando a saída é redirecionada ou passa por um pipe (ali ela fica desligada por padrão), por exemplozeltro status | less -RDEBUG_LOG_PATH- Onde o--debugescreve (padrão/tmp/zeltro-cli-debug.log)ZELTRO_AI_AGENT,ZELTRO_AI_MODEL,ZELTRO_AI_API_BASE,ZELTRO_AI_API_KEY,ZELTRO_AI_API_KEY_FILE,ZELTRO_AI_LANGUAGE- substituições de IA por sessão (veja "Substituições de IA por sessão" em Gerenciamento do sistema)ZELTRO_AI_UNATTENDED=1/0- Só nesta execução:1roda o agente sem pedidos de aprovação,0os liga mesmo que a configuração dele diga o contrário (sem definir: a configuração dele decide).ZELTRO_AI_AUTO_APPROVE=1é a forma antiga de1ZELTRO_BUS_DIR- Fila de mensagens dos agentes (padrão~/.zeltro/bus)
O diretório de projetos não é uma variável de ambiente: é o PROJECTS_DIR em /etc/zeltro-cli/.env, definido com zeltro configure --projects-dir.
📝 Observações importantes#
- Diretório exigido: as ferramentas de projeto (
composer,art,wp,drush,php,npm,npx,node,python,pip,shell,django,exec,db-refresh,cache-refresh,supervisor) eai/sendprecisam ser executadas de dentro de um diretório de projeto - Saída JSON: use
--json-outputpara integração programática (interface gráfica, scripts, automação) - Modo não interativo: os comandos recebem argumentos explícitos e nunca mostram menus de escolha.
configureecreatesó perguntam em um terminal; useconfigure --non-interactiveoucreate --one-offem scripts - Criação de bancos de dados: os bancos de dados são criados e configurados automaticamente para cada projeto, e o serviço compartilhado do motor é ativado se ainda não estiver
- Endereçamento: cada projeto recebe um IP de contêiner e uma porta publicada; nada é escrito no
/etc/hosts
🚦 Obtendo ajuda#
# Show comprehensive help
zeltro help
# Show command-specific help
zeltro new --help
zeltro remove --help
🔍 Solução de problemas#
Problemas comuns#
- Serviços não iniciam: verifique se o Docker está rodando e se as portas estão livres
- Erros de permissão: confira se o usuário está no grupo
docker - Conexão com o banco de dados: verifique se o serviço de banco de dados está rodando com
zeltro statuse, se não estiver, ative-o comzeltro enable-service <mysql|postgres|mongo> - Conflitos de porta: cada projeto recebe automaticamente uma porta exclusiva
Comandos de depuração#
# Check service status
zeltro status
# View container logs
docker logs [container-name]
# Check that a shared service resolves from inside the project container
zeltro exec "getent hosts zeltro-redis"
# Enable debug logging
zeltro new laravel my-project --debug
zeltro setup my-project --debug
zeltro configure --debug
# View debug log
cat /tmp/zeltro-cli-debug.log
Modo de depuração#
Os principais comandos de projeto e de serviço aceitam a flag --debug (veja Opções globais), que grava logs detalhados para ajudar a resolver problemas:
- Local do log:
/tmp/zeltro-cli-debug.log - Acompanhamento por sessão: cada comando novo cria uma sessão de depuração nova
- Saída detalhada: mostra o fluxo dos scripts, as chamadas de funções e os códigos de saída
- Acompanhamento entre scripts: a flag de depuração é repassada entre os scripts automaticamente
Exemplo:
# Debug a project creation issue
zeltro new laravel test-project --debug
# Check what happened
tail -f /tmp/zeltro-cli-debug.log
Veja Automação e JSON para saber quais comandos suportam JSON e como escrever scripts com eles.
Achou um erro nesta tradução? Avise a gente no GitHub.