CLI reference
The executable is el. Business results are output as JSON; help and argument errors use argparse command help. Global options must precede resource subcommands.
el [GLOBAL_OPTIONS] {task,job,profile} COMMAND
Global options
| Option | Default / behavior |
|---|---|
--api-url URL | Platform address; see Configuration for precedence |
--workspace-id ID | Optional; the platform selects a default authorized workspace if omitted |
--repository-root PATH | Explicit local repository top level |
--repository-commit COMMIT | Fixed local commit; usually optional, defaults to local main |
--work-dir PATH | Local execution and artifact directory |
--help | Print help and exit 0 |
A remote address cannot be combined with local repository / work-dir options or Profile management. The Key is read only from ENVLOOP_API_KEY; there is no --api-key option.
Task commands
| Command | Behavior |
|---|---|
el task submit PATH | Submit a two-file directory; compatibility alias el submit task PATH |
el task submit --runner NAME --dataset NAME --task-id ID | Submit one Dataset Task from the APIServer catalog; do not pass PATH |
el task status TRIAL_ID | Query run status |
el task result TRIAL_ID | Get stdout, stderr, and outputs without automatically waiting |
el task snapshot TRIAL_ID | Get the frozen input snapshot |
el task stop TRIAL_ID | Request stopping; backend support determines availability |
Task submit options
| Option | Meaning |
|---|---|
--runner NAME[@VERSION] / --dataset NAME[@VERSION] | Platform resolves runner and Dataset; mutually exclusive with a local directory |
--task-id ID | Required for runner submission; selects one Task in the Dataset |
--namespace / --config / --split / --revision | Dataset selection for the runner |
--profile-id ID | Immutable platform Profile ID; mutually exclusive with --profile |
--job-id ID / --tag TEXT | Job ownership and run tag |
--queue-id ID / --priority INT | Defaults default / 0; higher priority dispatches waiting tasks sooner |
--profile NAME[@VERSION] | Named Profile; omitting version requires an explicit default |
--profile-sha256 SHA256 | Check the normalized ProfileSpec hash |
--request-id ID | Idempotent request identifier; generated if omitted |
--seed INT | Run seed override; must be used by the Task itself |
--timeout-sec INT | Task execution deadline override |
--command SCRIPT | Override the Runner's default shell script, preserving multiline text; at most 65536 UTF-8 bytes, nonempty, no NUL |
--executor {local,docker,sandbox} | Execution backend selection, depending on platform capabilities |
--provider {e2b,e2b-local} | Sandbox provider selection |
--wait | Explicitly wait for HTTP completion; local submission always waits |
Normal runs do not need --command. A Runner can declare an optional default script in execution.command; otherwise, the platform infers bash main.sh / python main.py from execution.entrypoint. Precedence is submission override > Runner default script > inferred entrypoint. The platform freezes the effective command; the client preserves an omitted parameter.
There are no task logs/cancel/wait subcommands. The client wait deadline differs from the execution deadline set by --timeout-sec.
Job commands
| Command | Behavior |
|---|---|
el job submit --dataset NAME[@VERSION] | Submit a Dataset Job; positional form is also supported, but use only one form |
el job status JOB_ID | Job status details |
el job result JOB_ID | Aggregate results without automatically waiting |
el job stop JOB_ID | Request cancellation of member executions |
el job list [--limit INT] [--cursor CURSOR] | Pagination; default limit 25 |
Job submit options
| Option | Default / meaning |
|---|---|
--dataset NAME[@VERSION] | Logical dataset name, optionally including an exact author version |
--runner NAME[@VERSION] | APIServer catalog runner; omitted versions are resolved and frozen by the platform |
--profile-id ID | Immutable platform Profile ID; mutually exclusive with --profile |
--job-id ID | Optional caller-specified Job ID |
--tag TEXT | Optional run tag |
--queue-id ID / --priority INT | Defaults default / 0; higher values dispatch waiting tasks sooner without preempting running tasks |
--namespace NAME | Complete a short name with a namespace |
--config NAME | Use the specified subset; uses the declared default if omitted |
--split NAME | One complete split; uses all groups in the config if omitted |
--revision REF | Git branch/tag/commit; must match the platform's bound snapshot |
--attempts INT | Attempts per member, default 1 |
--request-id ID | Retries preserve the first frozen selection |
--profile NAME[@VERSION] | Named Profile |
--seed INT | Seed override |
--timeout-sec INT | Execution deadline override |
--command SCRIPT | Same shell script override for all members; same validation as Task |
--executor {local,docker,sandbox} | Platform execution backend |
--provider {e2b,e2b-local} | Sandbox provider |
--wait | Wait for the HTTP Job's terminal state; local submission always waits |
Job submit has no --profile-sha256; this option exists only for Task submit. The platform fixes Dataset default selection; it does not guess latest or support split slicing expressions.
Named runner requests require an APIServer with catalog support. LocalServer / JobMaster explicitly rejects requests when no catalog is available; the client does not automatically download contents or execute runners.
Profile commands
Local registry management only; requires EnvPlatform and repository-root.
| Command | Options / behavior |
|---|---|
el --repository-root PATH profile init | Explicitly initialize the registry without initializing Git for the user |
... profile put NAME VERSION --file FILE | Import complete ProfileSpec JSON; name/version must match |
... profile get NAME [--version VERSION] | Get the specified version or explicit default |
... profile list | --name, --include-archived, --limit (default 50), --cursor |
... profile set-default NAME VERSION | Optional --expected-version for concurrency checks |
... profile archive NAME VERSION | Archive a version |
... profile export NAME VERSION | Output ProfileSpec JSON, which can be redirected to a file |
Here, ... means el --repository-root PATH. There is no CLI profile import subcommand; use put to import a file.
Exit codes
| code | Meaning |
|---|---|
| 0 | Command success, including successful cancellation; does not mean verifier reward=1 |
| 1 | API / execution error or wait failure |
| 2 | Argument error; stderr includes the corresponding full help |
The CLI exits 1 when the response status is failed, including failed states returned by queries or waiting. HTTP only waits for acceptance by default; query status to confirm later execution failures. Task submit --wait outputs the result dictionary, as does local Task submission.