Deploy from a coding agent
A coding agent can use Lizard Skill and Lizard CLI to deploy the app it has built. The agent reads the installed CLI’s guide, checks the target project, runs the build, and inspects the result. This does not require a separate MCP transport.
Before you start
Have a working application, permission to deploy it, and an account on Lizard. The application must listen on 0.0.0.0 and the configured port. Run its local checks before starting a cloud build.
Give the agent the current guide
npm install -g @lizard-build/cli
lizard skills get core --json
lizard --help --jsonLizard Skill loads instructions that match the installed CLI. For a specific command, read its schema rather than guessing flags:
lizard up --help --json
lizard service set --help --jsonA useful prompt is:
Deploy this app with Lizard. Read the installed CLI guide, check the linked project and service, run the app’s checks, and show the build result and a working URL. Ask before changing an existing production service or deleting data.
Deploy local source
For a complete test, use the agent-app example. It uses Node.js 22 and pg 8.16.3, listens on port 3000 and reads one row from Managed Postgres. Its startup creates the demo table and row if they do not exist. For a larger application, use your own migration process.
Copy the example into its own directory and run its local checks:
npm ci
npm run check
lizard status --jsonThis checks JavaScript syntax. The database and public HTTP checks come after deployment. If this directory is already linked, check that it is the intended project. For a new test project:
lizard init --name agent-example --json
lizard add --service api --json
lizard add postgres --json
lizard secrets set DATABASE_URL='${{postgres.DATABASE_URL}}' --service api --json
lizard up --service api --port 3000 --jsonUse the database’s actual name if it is not postgres. Keep the reference quoted so the local shell does not expand it. Configure it before the first deployment. Sign in with lizard login only if a command reports that authentication is required.
The upload path is intentional for this copied example. For an application already in GitHub, use the next section instead. On macOS with Lizard CLI 0.3.92, run COPYFILE_DISABLE=1 lizard up --service api --port 3000 --json to exclude AppleDouble metadata. In that CLI version a failed build may still exit with code 0: inspect the terminal failed/deployed event and verify the application. See known issues.
Deploy from GitHub
Use this path when the application has a GitHub repository. Check the remote first:
git remote get-url origin
lizard status --json
lizard ps --jsonUse a linked test project or create one with lizard init --name YOUR_PROJECT_NAME. Attach the repository without starting a build so there is time to configure its environment:
lizard add --repo YOUR_ORG/YOUR_REPO --name api-git --no-deploy --json
lizard secrets set DATABASE_URL='${{postgres.DATABASE_URL}}' --service api-git --jsonProvision Managed Postgres first if this project does not have it. This sequence uses the same Node.js example as above. For a repository with that app in a subdirectory or on another branch, configure it before deployment:
lizard service set api-git --set branch=YOUR_BRANCH --set rootDirectory=YOUR_APP_DIRECTORY --set containerPort=3000 --json
lizard redeploy --service api-git --jsonFor an app at the repository root on main, omit the service set command. Set the correct port if your application uses another one. If the repository is not available to Lizard, connect the GitHub app; do not silently replace this path with an upload.
For later updates to an existing GitHub service, use lizard redeploy --service api-git or push to its tracked branch when auto-deploy is enabled. lizard up switches a service to upload source. Changing build settings on an already running service can trigger its own build; inspect events before requesting another.
Verify the result
Read build and runtime logs separately:
lizard logs --build --service api --json
lizard logs --service api --json
lizard ps --jsonUse api-git instead of api for the GitHub path. Set APP_URL to the HTTPS URL reported by the CLI, then run:
curl --fail "$APP_URL/health"
curl --fail "$APP_URL/data"The first response is App ready. The second is {"value":"database-connected"}. A build alone does not prove the database reference resolved. The example exposes only this fixed demo row, not a database administration API.
For this test service, verify a runtime restart:
lizard restart --service api --jsonWait for the service to return to running in lizard ps --json and repeat both HTTP requests. A runtime log tail can be empty; the HTTP response is the application check. The row is stored in Managed Postgres; the service process does not store it. To check reuse of existing data, update the demo row to a distinct value in the database editor before the restart and confirm /data returns that value afterward.
logs --json returns a log tail and exits. Read storage and recovery before changing real application data.
When deployment fails
Use the exit code and JSON error from the failed command. A compile error, a process that exits, and an unreachable port require different fixes. See JSON and automation and service never healthy. redeploy is a new build, not a rollback to an older version.
Limits and cost
An agent can create billable resources through the same CLI as a person. Check limits and pricing, and scope credentials to the project and services it needs.
See scenario test results for checked versions, cloud results and remaining limits.
Updated