Task spec & data staging

Curated real-world inputs, a hidden reference (the golden artifacts an output is graded against), and a grader that can't be gamed. The input and reference data are what make an ALE task more than a prompt, and keeping the reference out of the agent's reach is also important to keep the benchmark unhackable.

A task is a cua-bench main.py

ALE adopts cua-bench's task spec directly. A task is a single main.py with three functions, each driving the sandbox through the cua-bench DesktopSession, a session the provider opens onto the running sandbox by talking to a control server inside it:

One main.py is one workflow plus one general grading logic. Variants reuse that logic over different concrete inputs; load() returns one entry per variant, and the public release ships only the base variant of each task.

Alongside that code, a task ships the two kinds of data those functions move, collected and validated by domain experts so that the inputs plus the prompt determine a gradeable result:

KindVisible to the agent?Purpose
inputYes, staged before the runThe materials the task starts from.
referenceNo, kept hiddenThe golden artifacts the grader scores against.

Staging the data, hiding the reference

Before the agent can touch anything, the framework injects the task's input onto the sandbox, writing its files to a known place on disk. The reference is injected the same way, but only after the agent has finished, in a separate phase, so while the agent works the answer is never on the machine to find.

Stage input
Input injected onto the sandbox.
Agent runs
Reference absent. The agent works to completion.
Stage reference
Reference injected, only now.
Grade
evaluate() scores output against it.

Where those files come from is set by the environment's task_data_source, which has three implemented modes:

The configuration schema also reserves hf://... for direct Hugging Face staging, but that task-data backend is not implemented yet. The local-container fetch script downloads from Hugging Face on the host, then uses the implemented local: path.

Grading

Once the reference is available, the task's evaluate hook reads the agent's output alongside it and returns a list of scores. Two styles of grader are used:

The grader runs as part of the task slot, host-side, after the agent is gone, so even judge-based scoring never touches the agent's run.

Authoring a task
Two ways to add one. To contribute a task to ALE, go to agents-last-exam.org/submit and refine the design in natural language with our agents until you submit a task description plus raw data; the ALE team turns that into a runnable main.py with valid input and reference data. To build one yourself against the codebase (the task_card.json schema and the load / start / evaluate hooks), see Add a task.