Configure an experiment
An experiment combines agent presets, one environment profile, and a task list. The experiment YAML holds run-level controls; provider and agent details stay in reusable config files.
Start from the example
cp example_exp.yaml my_experiment.yaml
name: my_experiment
secret_file: secret/.env
agents:
- configs/agents/claude_code.yaml
environment: configs/environments/environment_gcloud.yaml
tasks: selected_tasks/hello_both.txt
output:
root: .logs/ale
concurrency: 1
wall_time_s: 7200
cleanup_mode: delete
Relative paths resolve from the experiment file's directory. Keep the file in the repository root when using the shipped paths unchanged.
Experiment fields
| Field | Meaning |
|---|---|
name | Names the experiment directory and defines the scope searched by --resume. |
secret_file | Loads KEY=value entries before referenced YAML files are parsed. |
agents | One or more agent preset paths. ALE runs the Cartesian product of agents and tasks. |
environment | Exactly one environment profile, which routes task snapshots to providers. |
tasks | A text or YAML task list, or an inline list of task entries. |
output.root | The host directory for run records. This is separate from the environment's task-output destination. |
concurrency | Maximum run units active at once. |
wall_time_s | Optional experiment-wide agent time limit. When omitted, each task card supplies its own timeout. |
cleanup_mode | delete, stop, or keep for provider-managed sandboxes. |
prompt_suffix | Optional text appended to every task instruction and recorded in the trajectory. |
Choose an environment profile
| Profile | Provider routing | Compatible list |
|---|---|---|
configs/environments/environment_gcloud.yaml | Google Cloud VMs for all published snapshots | unlicensed.txt, or full.txt with licensed software activated |
configs/environments/environment_aws.yaml | AWS EC2 for the CPU snapshots (no GPU) | cpu_unlicensed.txt |
configs/environments/environment_aliyun.yaml | Alibaba Cloud ECS for the CPU snapshots (no GPU) | cpu_unlicensed.txt |
configs/environments/docker.yaml | Local containers for cpu-free-ubuntu | docker_support.txt |
configs/environments/qemu.yaml | QEMU/KVM VMs for CPU-compatible Ubuntu and Windows snapshots | cpu_unlicensed.txt |
| Your own static profile | Existing sandbox for every selected task | A narrow list matching that machine |
A task card requests a logical snapshot. Common values are:
| Snapshot | Environment requirement |
|---|---|
cpu-free-ubuntu | Ubuntu, no licensed software, no required GPU |
cpu-free | Windows, no licensed software, no required GPU |
gpu-free | Windows task that requires GPU execution — runs on Google Cloud only. |
cpu-license | Windows with user-activated licensed software |
gpu-license | Windows with GPU and user-activated licensed software |
Task cards normally supply a GCE machineType. The schema also
accepts explicit vcpus and memory_gb values.
Providers translate that shape to GCE, Docker limits, or QEMU guest
resources. Environment-level overrides can cap local providers.
Choose a task list
| List | Units before agent multiplication | Purpose |
|---|---|---|
hello_both.txt | 2 | Ubuntu and Windows smoke test |
docker_support.txt | 99 | Current local-container allowlist |
ale_cli.txt | 105 | All published cpu-free-ubuntu tasks |
cpu_unlicensed.txt | 140 | Public CPU-runnable set — shared by QEMU, Alibaba Cloud, and AWS |
unlicensed.txt | 145 | All public tasks that do not require licensed software |
full.txt | 152 | The complete public release, including seven licensed tasks |
Difficulty-specific lists live under selected_tasks/unlicensed/
and selected_tasks/full/. A text list contains one task path
per line. A YAML list can select explicit variant indices.
Choose agent presets
Agent presets live under configs/agents/. Each file selects a
harness, model, optional executor, and harness-specific configuration:
harness: claude_code
model: <model-id>
executor: sandbox
config:
provider: openrouter
max_turns: -1
The provider inside an agent's config is the LLM
API provider. It is unrelated to the sandbox provider selected by the
environment profile.
List multiple presets under agents: to run the same task list
for each agent. Set an explicit agent id inside a preset when
two configurations use the same harness and need separate result folders.
Configure credentials
secret/.env normally holds agent API keys and any variables
referenced as ${env:NAME} by the selected environment:
OPENROUTER_API_KEY=...
ALE_REFERENCE_ARCHIVE_PASSWORD=rdi-ucberkeley-Gov8EV7wGHYAc7XQBzhd
GCP_PROJECT=...
GCP_SA_KEY=secret/gcp_key.json
ALE_REFERENCE_ARCHIVE_PASSWORD is required when the selected
environment uses task_data_source: baked_in_sandbox. It is a
public benchmark-wide archive key, not a private credential. ALE reads it
on the host after agent execution and intentionally does not forward it
into the agent sandbox environment or embed it in runtime source copied
there.
Start by copying secret/.env.example to
secret/.env, then fill in the API and provider credentials
needed by your run. GCP variables are required only by the Google Cloud
profile. Local profiles still need whichever API key their agent preset
uses. Judge-based tasks can also require evaluator keys under
secret/eval_time/.
Configure task data and output
These fields live in the environment profile because their implementation depends on the sandbox substrate:
task_data_source: baked_in_sandbox
output_path: local
# Required when the sandbox reads from or writes to GCS:
# gcs_sa_key: secret/gcp_key.json
baked_in_sandboxuses encrypted references already stored in the image.gs://...stages data inside the sandbox withgsutil.local:...is currently implemented for the direct Docker provider.hf://...is accepted by configuration but task-data staging is not implemented yet.
Output behavior is covered in Run and collect results.