Profiles
A Profile stores task parameters whose actual values are frozen on submission. An inline Profile is a dictionary in an SDK submission; a named Profile is a parameter template with a name and version in the platform's local registry. A Profile is not a Trial and does not store credentials.
Inline parameters
from envloop import Client
with Client.remote() as client:
trial = client.tasks.submit("./my-task", profile={"seed": 42})
print(trial["trial_id"])
The Task entrypoint reads JSON from ENVLOOP_TASK_PROFILE:
import json
import os
profile = json.loads(os.environ.get("ENVLOOP_TASK_PROFILE", "{}"))
print(profile.get("seed"))
The Task interprets parameters; passing a seed does not automatically make scripts, models, or environments deterministic. A profile dictionary differs from a complete ProfileSpec.
Local named profiles
EnvPlatform must be installed. Run the following at the top level of your dataset Git repository; the example assumes el is installed in the current shell and the repository has a local main branch. Prepare a Git repository first if necessary; avoid accidentally creating a data registry in the SDK installation directory.
unset ENVLOOP_BASE_URL ENVPLATFORM_API_URL
el --repository-root . profile init
cat > spec.json <<'JSON'
{
"schema_version": "envplatform.profile/v1",
"name": "examples/local",
"version": "1",
"params": {"seed": 42, "execution": {"timeout_sec": 60}}
}
JSON
el --repository-root . profile put examples/local 1 --file spec.json
el --repository-root . profile get examples/local --version 1
el --repository-root . task submit ./my-task --profile examples/local@1
my-task contains only the task's two files; keep spec.json outside that directory. Profile management does not read the address from .env.local and has no HTTP write endpoint. When a remote submission references a named Profile, that Profile must already exist in the server registry, not a local client file.
Defaults and snapshots
el --repository-root . profile set-default examples/local 1
el --repository-root . profile list --name examples/local
el --repository-root . profile export examples/local 1 > exported-profile.json
Omitting the version requires an explicit default; latest is not guessed. If a default already exists, use --expected-version OLD_VERSION for concurrency checks. --profile-sha256 checks the normalized ProfileSpec hash; --seed can override the run seed.
When commit is omitted, the repository binds a fixed snapshot of local main, not the current working branch HEAD, and does not automatically fetch the remote. If main is absent or a different snapshot is needed, explicitly pass the full commit:
el --repository-root . --repository-commit "$(git rev-parse HEAD)" \
task submit ./my-task --profile examples/local@1
A new Client bound to the same repository can read completed receipts; running tasks do not recover across processes. See Reference for SDK methods.