CLI Reference

Complete reference for every ezkeel command, with usage, flags, and examples.

ezkeel up

Deploy any repository to your server in one command. Auto-detects the framework, generates a Dockerfile if needed, builds the image, and deploys with zero-downtime.

usage
ezkeel up [repo-url] [flags]
FlagDefaultDescription
--serverdefault serverTarget server name (from ezkeel server add)
--nameauto-detectedOverride the app name
--plainfalseDisable TUI output, print plain text
--dry-runfalseShow detection results without deploying
--memory512mContainer memory limit (e.g. 512m, 1g)
--cpusnoneContainer CPU limit (e.g. 1.0, 0.5)
--templatenoneDeploy a curated template by slug (e.g. todo-list, url-shortener, static-portfolio). Overrides any positional repo URL.

Supported frameworks: Next.js, Vite, Express, Hono, Fastify, Remix, Nuxt, Astro, FastAPI, Django, Flask, Go, Rust, Rails, and static HTML. If a Dockerfile is present, it takes priority.

Database detection: Automatically detects PostgreSQL, MySQL, or SQLite via Prisma, Drizzle, package.json deps, Python deps, or .env.example DATABASE_URL.

Examples:

terminal
# Deploy from a GitHub repo $ ezkeel up github.com/user/my-app ✓ detected nextjs ✓ generated Dockerfile.ezkeel ✓ built my-app:latest https://my-app.deploy.mysite.com # Redeploy from current directory $ ezkeel up ✓ detected go ✓ built my-project:latest https://my-project.deploy.mysite.com # Deploy a curated template in one shot $ ezkeel up --template todo-list ✓ resolved template todo-list ✓ detected express https://todo-list.deploy.mysite.com

ezkeel server

Manage deployment servers. Add a VPS, list configured servers, or SSH into one.

server add

Register a new server for deployments. The server will be bootstrapped with Docker, Caddy, and the ezkeel agent.

usage
ezkeel server add [flags]
FlagDefaultDescription
--hostrequired*Server IP or hostname (*not needed with --hetzner)
--domainrequiredWildcard domain for apps (e.g. deploy.mysite.com)
--nameauto from hostServer name (e.g. vps01)
--userrootSSH user
--keynonePath to SSH private key
--bootstrapfalseSet up Docker networking on the server
--ssh-aliasnoneSSH config alias (uses your SSH config for proxy/key)
--hetznerfalseAuto-provision a Hetzner Cloud VPS
--hetzner-tokenor HETZNER_TOKEN envHetzner Cloud API token
--hetzner-typecpx22Server type — current shared-vCPU line: cpx22 (2vCPU/4GB), cpx32 (4vCPU/8GB), cpx42 (8vCPU/16GB)
--hetzner-locationfsn1Datacenter — fsn1, nbg1, hel1, sin (the four with shared cpx22+ in capacity)
--hetzner-ssh-keyrequired with --hetznerName of SSH key in Hetzner Cloud console

Example:

terminal
$ ezkeel server add \ --host 168.119.1.1 \ --domain deploy.mysite.com \ --name vps01 Server "vps01" saved.

server list

List all configured servers:

terminal
$ ezkeel server list NAME HOST USER DOMAIN vps01 168.119.1.1 root deploy.mysite.com

server ssh

SSH into a configured server:

terminal
$ ezkeel server ssh vps01

ezkeel apps

List all deployed apps with their framework, status, and domain.

terminal
$ ezkeel apps ⟩_ ezkeel NAME FRAMEWORK DOMAIN 🟢 my-app nextjs my-app.deploy.mysite.com 🟢 api-backend fastapi api-backend.deploy.mysite.com

ezkeel logs

Show recent logs from a deployed app via the ezkeel agent.

usage
ezkeel logs <app-name> [flags]
FlagDefaultDescription
--lines100Number of log lines to show

ezkeel down

Stop and remove a deployed app, including its containers.

usage
ezkeel down <app-name>

ezkeel env

Manage environment variables for deployed apps. Variables are stored in the app manifest and applied on the next ezkeel up.

env set

terminal
$ ezkeel env set my-app STRIPE_KEY=sk_live_xxx DATABASE_URL=postgres://... Set STRIPE_KEY Set DATABASE_URL Run 'ezkeel up' to apply changes.

env list

terminal
$ ezkeel env list my-app STRIPE_KEY = sk_live_*** DATABASE_URL = postgres://...

ezkeel backup

Backup the PostgreSQL database for a deployed app. Runs pg_dump on the server via the ezkeel agent and saves the SQL dump locally.

usage
ezkeel backup <app-name> [flags]
FlagDefaultDescription
--output.Directory to save the backup file

Example:

terminal
$ ezkeel backup my-app Backing up database "my_app"... Backup saved to my_app-20260404-181500.sql (backup of my_app (45678 bytes))

ezkeel rollback

Roll back an app to its previous deployment. Before each deploy, the agent automatically tags the running image. Rollback swaps back to that previous image.

usage
ezkeel rollback <app-name>
terminal
$ ezkeel rollback my-app Rolling back my-app to previous version... ✓ my-app rolled back successfully

ezkeel doctor

Run diagnostic checks on your local machine and remote server. Checks: local Docker, SSH connectivity, remote Docker, agent version, DNS wildcard resolution, and disk space.

usage
ezkeel doctor [--server <name>]
terminal
$ ezkeel doctor ✓ Local Docker v27.1.0 ✓ SSH to vps01 168.119.x.x ✓ Remote Docker v27.1.0 ✓ Agent ezkeel-agent v0.5.0 ✓ DNS (*.deploy.example.com) resolves to 168.119.x.x ✓ Disk Space 33% used

ezkeel domain

Manage custom domains for deployed apps. Add your own domain, and Caddy will auto-provision the SSL certificate. You need to point the domain to your server IP with a DNS A record.

usage
ezkeel domain add <app> <domain> ezkeel domain remove <app> <domain> ezkeel domain list <app>
terminal
$ ezkeel domain add my-app app.example.com ✓ Domain "app.example.com" added to my-app Point app.example.com to your server IP with a DNS A record. Caddy will auto-provision the SSL certificate.

ezkeel init

Initialize a new EZKeel project. Scaffolds the directory structure, creates a workspace.yaml, sets up Dev Container and AI persona configuration, and optionally creates a Forgejo repository.

usage
ezkeel init <project-name> [flags]
FlagDefaultDescription
--forgejo-urlnoneForgejo instance URL (e.g. https://git.ezkeel.com)
--forgejo-tokennoneForgejo API token for creating the repository
--infisical-urlnoneInfisical instance URL (e.g. https://secrets.ezkeel.com)
--infisical-client-idnoneInfisical machine identity client ID
--infisical-client-secretnoneInfisical machine identity client secret
--infisical-orgnoneInfisical organization ID to create the project in

Example:

terminal
$ ezkeel init my-saas \ --forgejo-url https://git.example.com \ --forgejo-token $FORGEJO_TOKEN \ --infisical-url https://secrets.example.com \ --infisical-client-id $CLIENT_ID \ --infisical-client-secret $CLIENT_SECRET \ --infisical-org $ORG_ID Created repository: https://git.example.com/org/my-saas.git Created Infisical project: my-saas (ID: abc-123) created workspace.yaml created CLAUDE.md created AGENTS.md created .devcontainer/devcontainer.json created .github/workflows/ci.yaml created .gitignore Project "my-saas" initialized at /home/dev/my-saas

ezkeel clone

Clone an EZKeel project and set it up locally. Clones the Git repo, injects secrets for the specified environment, and scaffolds the AI config.

usage
ezkeel clone <project-name> [flags]
FlagDefaultDescription
--forgejo-urlnoneForgejo instance base URL (e.g. https://git.ezkeel.com)
--forgejo-tokennoneForgejo API token (for cloning private repos)
--envdevEnvironment to inject secrets for

Example:

terminal
$ ezkeel clone org/my-saas \ --forgejo-url https://git.example.com \ --forgejo-token $FORGEJO_TOKEN Cloning https://***@git.example.com/org/my-saas... Secrets injected for environment "dev" Project "my-saas" cloned and configured.

ezkeel secrets inject

Export secrets for the given environment as shell export statements. Reads the Infisical project from workspace.yaml and outputs key-value pairs to stdout.

usage
ezkeel secrets inject <environment>

Example:

terminal
# Print export statements $ ezkeel secrets inject dev export ANTHROPIC_API_KEY="sk-ant-..." export DATABASE_URL="postgres://..." # Load them into your current shell $ eval $(ezkeel secrets inject dev)

ezkeel ai

Run an AI tool with automatically injected secrets. Resolves model names from workspace.yaml, injects the required API key from Infisical, and launches the tool with your prompt.

usage
ezkeel ai <tool> <prompt...> [flags]
FlagDefaultDescription
--envdevEnvironment to inject secrets for

The <tool> argument maps to known AI tools:

Examples:

terminal
$ ezkeel ai claude "refactor the auth module" $ ezkeel ai codex "write tests for the API layer" $ ezkeel ai local "explain this function"

ezkeel sync push / pull

Synchronize the AI persona configuration (.claude/ directory) between your local machine and a dedicated ezkeel/persona Git branch. This keeps your AI configuration portable across machines.

usage
ezkeel sync push # push .claude/ to origin/ezkeel/persona ezkeel sync pull # pull .claude/ from origin/ezkeel/persona

Push stashes your current work, checks out the ezkeel/persona branch, commits the .claude/ directory, force-pushes, then returns you to your previous branch.

Pull fetches the remote branch and checks out just the .claude/ subtree into your working directory.

ezkeel plan new / diff

Manage project planning documents in the plans/ directory.

plan new

Create a new dated plan document and open it in $EDITOR:

terminal
$ ezkeel plan new auth-redesign Created plans/2025-01-15-auth-redesign.md

plan diff

Show the diff of plan changes since the last Git tag:

terminal
$ ezkeel plan diff Plans changed since v0.2.0: + ## New: auth redesign proposal ~ Updated success criteria for API plan

ezkeel platform install

Install the full EZKeel platform (Forgejo, Infisical, PostgreSQL, Redis, Caddy, Runner) on a server using Docker Compose. Generates secrets, writes config files, and starts all services.

usage
ezkeel platform install [flags]
FlagDefaultDescription
--dir/opt/ezkeelDirectory to install the platform into
--forgejo-domaingit.ezkeel.comDomain for the Forgejo instance
--infisical-domainsecrets.ezkeel.comDomain for the Infisical instance

See Installation and Platform Setup for detailed deployment instructions.

ezkeel environment

Manage the project's dev container. Build the container image, start it, or execute commands inside it. Aliased as ezkeel env.

environment build

Build the dev container image defined in .devcontainer/devcontainer.json.

terminal
$ ezkeel environment build Building dev container for /home/dev/my-saas...

environment start

Start the dev container (runs devcontainer up).

terminal
$ ezkeel environment start Starting dev container for /home/dev/my-saas...

environment exec

Execute a command inside the running dev container.

terminal
$ ezkeel env exec -- go test ./...
FlagDefaultDescription
--dircurrent directoryProject directory containing .devcontainer/

Prerequisite: Requires the Dev Containers CLI. Install with npm install -g @devcontainers/cli.

ezkeel platform setup

Print a step-by-step guide for creating admin accounts after ezkeel platform install. Reads credentials from the platform's .env file.

usage
ezkeel platform setup [flags]
FlagDefaultDescription
--dir/opt/ezkeelPlatform install directory containing .env

This guide is also printed automatically at the end of ezkeel platform install.

ezkeel ci status

Show recent CI workflow runs for a repository. Queries the Forgejo Actions API and prints a summary of the latest runs with their status.

usage
ezkeel ci status [flags]
FlagDefaultDescription
--forgejo-urlnoneForgejo instance URL (e.g. https://git.ezkeel.com)
--forgejo-tokennoneForgejo API token
--ownernoneRepository owner (user or org)
--repononeRepository name

Example:

terminal
$ ezkeel ci status \ --forgejo-url https://git.example.com \ --forgejo-token $FORGEJO_TOKEN \ --owner myorg \ --repo my-saas Recent workflow runs for myorg/my-saas: #42 ci.yaml success 2026-04-04 10:12 #41 ci.yaml failure 2026-04-04 09:55 #40 ci.yaml success 2026-04-03 18:30

ezkeel ci setup

Generate a CI workflow file for automating deploys or mirroring on push to main. Without flags, creates .forgejo/workflows/deploy.yaml for Forgejo Actions. With --github, creates .github/workflows/mirror.yaml for GitHub Actions instead.

FlagDefaultDescription
--githubfalseGenerate a GitHub Actions mirror workflow (.github/workflows/mirror.yaml) instead of a Forgejo deploy workflow
terminal
# Generate Forgejo Actions deploy workflow (default) $ ezkeel ci setup Created .forgejo/workflows/deploy.yaml Next steps: 1. Add your SSH private key as a Forgejo secret named SSH_PRIVATE_KEY 2. Add DEPLOY_HOST and DEPLOY_DOMAIN as repository variables 3. Commit and push to trigger the first deploy # Generate GitHub Actions mirror workflow $ ezkeel ci setup --github Created .github/workflows/mirror.yaml Next steps: 1. Commit and push to trigger the first mirror run 2. For cross-org mirroring, store a PAT as MIRROR_TOKEN and update the workflow

ezkeel pages deploy

Deploy a static site to the EZKeel platform. Uses rsync over SSH to copy built files to the server, where Caddy serves them under the configured pages domain.

usage
ezkeel pages deploy [flags]
FlagDefaultDescription
--hostrequiredSSH host of the platform server (e.g. user@vps.example.com)
--platform-dir/opt/ezkeelPlatform installation directory on the server

Example:

terminal
$ ezkeel pages deploy \ --host deploy@vps.example.com \ --platform-dir /opt/ezkeel Deploying static site to deploy@vps.example.com... Pages deployed successfully.

ezkeel deploy

Build a Docker image, push it to the Forgejo container registry, and deploy it to the production server via SSH. Reads the project name and registry URL from workspace.yaml.

usage
ezkeel deploy [flags]
FlagDefaultDescription
--hostrequiredSSH host for the deployment server (e.g. user@vps.example.com)
--forgejo-urlrequiredForgejo instance URL (used as the container registry host)
--ownerrequiredRepository owner (used to namespace the Docker image)
--envprodTarget environment (used to select secrets and compose file)

Example:

terminal
$ ezkeel deploy \ --host deploy@vps.example.com \ --forgejo-url https://git.example.com \ --owner myorg \ --env prod Building Docker image git.example.com/myorg/my-saas:latest... Pushing image to registry... Deploying to deploy@vps.example.com... Deployment complete.

ezkeel agent

Interact with AI agents. EZKeel includes 3 built-in agents (app-builder, code-reviewer, devops) and supports custom agents.

ezkeel agent list

List all available agents (built-in and custom).

Terminal
$ ezkeel agent list app-builder Build and deploy web apps from natural language code-reviewer Review code for bugs, security issues, improvements devops Monitor, debug, manage deployed apps

ezkeel agent run <name> <prompt>

Execute a one-shot agent task. The agent runs the prompt and returns the result.

Terminal
$ ezkeel agent run code-reviewer "Review the auth.js file in todo-app" Reviewing todo-app/auth.js... Found 2 issues: 1. JWT secret should not fall back to a hardcoded value 2. Missing rate limiting on login endpoint

ezkeel agent chat <name>

Start an interactive WebSocket chat session with an agent. Type messages and get streaming responses.

Terminal
$ ezkeel agent chat devops Connected to devops agent. Type a message or Ctrl+C to exit. you: check disk space on my server Running: df -h /dev/sda1 39G 12G 25G 33% / Disk usage is healthy at 33%.