CLI
el and the Python SDK use the same public contracts. Put global connection options before resource commands; business output is JSON, suitable for terminals and scripts.
Connect and submit
After configuring the address and Key:
el job submit --dataset envloop/terminal-bench-2-1-lite
el task submit ./my-task --wait
You can also override the address:
el --api-url http://127.0.0.1:5173/api/ job list --limit 10
The CLI reads the API address from .env.local in the current directory. It reads only the address, not the Key in the file. The SDK does not automatically read this file. See Configuration for precedence.
Capture JSON in scripts
The following requires an available dataset and jq; source installation users should activate their virtual environment first:
source .venv/bin/activate
job_id=$(el job submit --dataset envloop/terminal-bench-2-1-lite | jq -er '.job_id')
el job status "$job_id"
el job result "$job_id"
Successful submission means the platform accepted the request, not that evaluation is complete. Add --wait to submit for synchronous waiting; scripts should check the final status and score.
Local task mode
When the optional EnvPlatform backend is installed, explicitly select local execution:
env -u ENVLOOP_BASE_URL -u ENVPLATFORM_API_URL \
el --work-dir ./runs task submit ./my-task
Clear the address from the shell, then use work-dir to skip address loading from .env.local. Local Tasks do not need a dataset repository; a purely in-memory local CLI cannot query a previous run with the next command. Bind the same repository to read completed results across commands; see Profiles.
Help and exit codes
el --help
el job submit --help
el task submit --help
el profile put --help
Exit 0 means the command succeeded (including successful cancellation); API / execution failures exit 1; argument errors exit 2 and print the command's full help to stderr. Do not interpret exit 0 as verifier reward=1.
See CLI reference for all commands and options.