geoengine <command> [options]. Run any command with --help to see its usage inline.
Global Options
These options are accepted by most GeoEngine commands unless a command documents more specific behavior.
For
geoengine test, use the command-specific long flag geoengine test --verbose to show container logs for every case.
Authentication
geoengine auth login
Sign in to GeoEngine with your Nika account. Credentials are stored securely on your machine and persist across sessions. Required before worker build, run, registry, and cloud commands. Setup, lint, patch, update, uninstall, and auth commands can run without an active login.
geoengine auth logout
Sign out and remove stored credentials.
geoengine auth status
Reads logged in user’s details.
Worker Setup
geoengine init
Create a new geoengine.yaml and pixi.toml template in the current directory. It also creates geoengine.lock, ensures .dockerignore exists, and can scaffold tests/ and README.md. Normal Python/R workers get their generated Dockerfile during geoengine apply; CUDA init may write a CUDA runtime marker Dockerfile earlier.
geoengine apply
Register the worker, save the current config, reconcile the Dockerfile, build the Docker image, and refresh GIS plugin discovery state.
What apply does:
- Runs the same semantic checks as
geoengine lint - Reconciles
pixi.tomland the Dockerfile with the current runtime image - Builds the Docker image (skipped automatically if config and image are unchanged)
- Registers the worker if new
- Saves the current config snapshot and updates
latest - For production applies, records the selected
local_tagso it can be run, tested, deleted, or pushed later
geoengine lint
Validate the current directory’s geoengine.yaml before applying.
geoengine apply runs this check internally and rejects lint errors. Running geoengine lint first gives you the full error list up front. Warnings, such as deprecated fields, do not block apply.
Running Workers
geoengine run
Execute a worker in a Docker container. File and folder inputs are auto-mounted, and local run history is recorded by default.
Recommended actor values include
CLI, QGIS, ArcGIS Pro, NIKA, or a properly capitalized agent/app name such as Codex or Field Review App. Agents and app wrappers should invoke runs as --actor "<Agent Name>" using proper capitalization.
fileinputs are mounted at/inputs/<key>/<filename>folderinputs are mounted at/mnt/input_<key>/- Non-path values are passed through as plain string arguments
--json):
record.json— structured metadata for the runlogs.ndjson.gz— compressed streamed stdout/stderr log events
record.json stores the job ID, worker ID/name, actor, local/requested tag, image tag, start/end time, duration, status, exit code, error, command, inputs, extra args, output files, and log stats. Older records created before actor stamping may show actor as Unknown.
GeoEngine keeps the latest 200 runs per worker and keeps total local history under 1 GiB by default. The current run is always preserved even if it exceeds the cap. History write and prune failures are warnings; they do not fail the worker run.
Frontend Wrapper Integration
To run a worker from a frontend wrapper, invoke the CLI with a clear actor label and JSON output:job_id; use it to fetch run details or logs later.
To show recent runs:
Publishing Workers
geoengine push
Publish a previously-applied production worker image to the cloud registry, making it available for team members to run via the QGIS or ArcGIS Pro plugin without a local setup.
Requires a prior production
geoengine apply (without --dev). See Cloud Push for the full workflow.
Inspecting Workers
geoengine workers
List all registered workers.
Output columns (default):
ID, NAME, LATEST TAG, LAST APPLIED
- LATEST TAG — most recently applied local tag plus the total number of applied tags, e.g.
claude-1.0.0 (3) - LAST APPLIED — relative time since last apply (e.g.
3 min 42 s ago)
--all, the column header changes to TAG — expanding each worker with sub-rows for every applied tag.
geoengine describe
Show detailed information about a specific worker.
geoengine worker runs
List, inspect, stream, and prune local run history. Running geoengine worker runs without a subcommand lists recent runs.
Existing
geoengine workers and geoengine describe remain unchanged for now, though they may later move under geoengine worker list and geoengine worker describe.
geoengine diff
Check which tracked files have changed since the last apply.
geoengine.yaml, the Dockerfile, and build-relevant worker directory files against the last apply.
Managing Workers
geoengine delete
Delete a worker or a specific local tag.
Running without
--tag shows a confirmation prompt before deleting the worker’s registration, all saved configs, and all state.
Image Management
geoengine image list
List all GeoEngine-managed Docker images.
geoengine image import
Import a Docker image from a tarball (useful for air-gapped environments).
geoengine image remove
Remove a Docker image and its associated version entry and config snapshot.
Environment Variables
Global environment variables are injected into every worker container at runtime.geoengine env set
Set one or more global environment variables.
geoengine env unset
Remove one or more global environment variables.
geoengine env list
List all currently set global environment variables.
geoengine env show
Show the value of a single global environment variable.
Worker Tests
geoengine test
Run declarative tests from tests/geoengine.test.yaml.
Read-only fixture paths are resolved relative to
tests/. Output file/folder inputs are resolved inside .geoengine-test/<case>/. See Designing Worker Tests for the manifest schema and examples.
Maintenance & Updates
geoengine setup
Initial installation for GeoEngine add-ons. Includes skills and GIS plugins.
geoengine patch
Validate all GeoEngine artifacts and repair anything that is broken or out of date. Safe to run at any time; exits with a non-zero status if issues are found.
geoengine patch --init remains as a deprecated compatibility alias for geoengine setup skills.
geoengine update
Update GeoEngine to the latest version using the original install method (Homebrew, curl, or PowerShell), then automatically run geoengine patch.