Skip to main content
All commands work relative to the current directory unless a directory argument is given.

keel init

Creates a starter keel.yaml (one sample deployment named production) and deploy/Dockerfile (Alpine with bash, curl, git) in dir (default .). Existing files are never overwritten; the command says which files it created or kept.

keel validate

Parses and validates the configuration in dir. On success prints each deployment with its step and variable counts and exits 0. On failure lists every problem with its path and exits 1. The rules are on the validation page.

keel dev

Runs the local Keel UI for the repository in dir. If there is no keel.yaml, the starter files are created first. On start, Keel checks that Docker is reachable and warns if not; the UI works, but deploys fail until Docker is running. Ctrl+C shuts down gracefully. State goes to .keel/ in the repository (see below).

keel deploy

Runs a deployment headlessly: builds the environment image, executes the steps, streams the log to the terminal, prints outputs on success. Requires Docker. Precedence, lowest to highest: defaults, target values, var file, --var. Values for undeclared variables are ignored. Missing or invalid values are listed and the command exits 1 before anything runs; the same happens if Docker is unreachable or the configuration is invalid. Ctrl+C cancels the run. Exit status is 0 only when every step succeeded. Without --target, KEEL_TARGET inside the run is cli.

keel manifest

Generates the variable manifest. See the manifest reference for the flags.

keel skills

Installs the Keel agent skills — SKILL.md documents that teach AI coding agents how to write keel.yaml, environment images, and use the CLI — into the agents’ skill directories. See Use Keel with AI coding agents. install replaces skill directories Keel wrote (re-run it after upgrading), never touches other directories without --force, and prints each directory with the agents that read it. uninstall removes only directories Keel wrote. list prints the shipped skills with their descriptions and files. agents prints every supported agent with its key, project and user-wide directories, and whether it was detected.

keel update

Downloads the latest release from GitHub, verifies the archive’s SHA-256 against the release’s checksums.txt, and replaces the running executable in place — the same procedure as the install script, without re-running it. Afterwards it runs the new binary’s --version to confirm it works. When the executable’s directory is not writable, the command says so — re-run it with elevated permissions (sudo keel update) or use the install script. On Windows the old executable is renamed to keel.exe.old next to the new one, because a running program cannot be overwritten; delete it at any time.

Background update check

Every command checks for a newer release at most once a day. The request runs while the command does; a command that finishes first waits at most two seconds for the answer, and on every other day the saved answer is used with no request at all. When a newer release is known, a note is printed on standard error after the command finishes:
The check contacts https://github.com/UcGeorge/keel/releases/latest and sends nothing but the request. It is skipped for development builds, when KEEL_NO_UPDATE_CHECK is set to any value, or when CI is set. The last answer is kept in update-check.json under the user config directory (next to dev.key, see below).

State on disk

Deleting dev.key makes every saved value on the machine unreadable; copy it to move a .keel/dev.db to another machine.

Exit codes