Skip to main content

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​

OptionDefault / behavior
--api-url URLPlatform address; see Configuration for precedence
--workspace-id IDOptional; the platform selects a default authorized workspace if omitted
--repository-root PATHExplicit local repository top level
--repository-commit COMMITFixed local commit; usually optional, defaults to local main
--work-dir PATHLocal execution and artifact directory
--helpPrint 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​

CommandBehavior
el task submit PATHSubmit a two-file directory; compatibility alias el submit task PATH
el task submit --runner NAME --dataset NAME --task-id IDSubmit one Dataset Task from the APIServer catalog; do not pass PATH
el task status TRIAL_IDQuery run status
el task result TRIAL_IDGet stdout, stderr, and outputs without automatically waiting
el task snapshot TRIAL_IDGet the frozen input snapshot
el task stop TRIAL_IDRequest stopping; backend support determines availability

Task submit options​

OptionMeaning
--runner NAME[@VERSION] / --dataset NAME[@VERSION]Platform resolves runner and Dataset; mutually exclusive with a local directory
--task-id IDRequired for runner submission; selects one Task in the Dataset
--namespace / --config / --split / --revisionDataset selection for the runner
--profile-id IDImmutable platform Profile ID; mutually exclusive with --profile
--job-id ID / --tag TEXTJob ownership and run tag
--queue-id ID / --priority INTDefaults default / 0; higher priority dispatches waiting tasks sooner
--profile NAME[@VERSION]Named Profile; omitting version requires an explicit default
--profile-sha256 SHA256Check the normalized ProfileSpec hash
--request-id IDIdempotent request identifier; generated if omitted
--seed INTRun seed override; must be used by the Task itself
--timeout-sec INTTask execution deadline override
--command SCRIPTOverride 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
--waitExplicitly 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​

CommandBehavior
el job submit --dataset NAME[@VERSION]Submit a Dataset Job; positional form is also supported, but use only one form
el job status JOB_IDJob status details
el job result JOB_IDAggregate results without automatically waiting
el job stop JOB_IDRequest cancellation of member executions
el job list [--limit INT] [--cursor CURSOR]Pagination; default limit 25

Job submit options​

OptionDefault / 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 IDImmutable platform Profile ID; mutually exclusive with --profile
--job-id IDOptional caller-specified Job ID
--tag TEXTOptional run tag
--queue-id ID / --priority INTDefaults default / 0; higher values dispatch waiting tasks sooner without preempting running tasks
--namespace NAMEComplete a short name with a namespace
--config NAMEUse the specified subset; uses the declared default if omitted
--split NAMEOne complete split; uses all groups in the config if omitted
--revision REFGit branch/tag/commit; must match the platform's bound snapshot
--attempts INTAttempts per member, default 1
--request-id IDRetries preserve the first frozen selection
--profile NAME[@VERSION]Named Profile
--seed INTSeed override
--timeout-sec INTExecution deadline override
--command SCRIPTSame shell script override for all members; same validation as Task
--executor {local,docker,sandbox}Platform execution backend
--provider {e2b,e2b-local}Sandbox provider
--waitWait 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.

CommandOptions / behavior
el --repository-root PATH profile initExplicitly initialize the registry without initializing Git for the user
... profile put NAME VERSION --file FILEImport 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 VERSIONOptional --expected-version for concurrency checks
... profile archive NAME VERSIONArchive a version
... profile export NAME VERSIONOutput 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​

codeMeaning
0Command success, including successful cancellation; does not mean verifier reward=1
1API / execution error or wait failure
2Argument 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.