Deploy from Claude Code, Codex or Cursor
Claude Code, Codex and Cursor can deploy the app they built to Lizard with Lizard Skill and Lizard CLI. The agent reads the installed CLI’s guide, checks the target project, runs the build and checks the live URL. It needs no separate MCP transport. Use the prompt below to deploy local or GitHub source, then check the build, public URL and database connection.
Before you start
Have a working application, permission to deploy it, and a Lizard account on Pro or the 7-day Pro trial (card required). Until the trial starts, lizard add and lizard up return HTTP 402 with a Checkout link; lizard billing start opens it. 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
curl -fsSL https://lizard.build/install.sh | bash
lizard skills get core --json
lizard --help --jsonOn Windows, run irm https://lizard.build/api/cli/install.ps1 | iex in PowerShell, or install from npm with npm install -g @lizard-build/cli.
To make the skill available to every agent on your machine, install it once with npx skills add lizard-build/skill -g; see Coding agents. Lizard 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 to paste into Claude Code, Codex or Cursor 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.
Use an upload for this copied example. For an application already in GitHub, use the next section instead. A failed build exits with code 1; still 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. Managed Postgres stores the row, so it survives the service restart. 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.
To run the agent itself on a separate machine instead of your laptop, see Claude Code in a sandbox.
See scenario test results for checked versions, cloud results and remaining limits.
Updated