Trajectories & artifacts

Every agent logs differently. ALE normalizes them all into one trajectory schema, and writes each run as a fixed set of files you can read without ever opening the agent's native format.

One record for every agent

ALE runs agents end to end, so it can't assume a shared step format. Each harness emits its own transcript. The common record is the trajectory, an ordered list of Steps, each with:

Message and observation content can be multimodal: any image the agent saw is saved to disk and referenced by a relative path in the trajectory, never inlined as base64.

Per-step token, cost, and duration metrics sum into the trajectory's final_metrics totals. Every field is specified in the trajectory schema.

How the normalization happens

Each agent's deployer owns the translation, in parse_artifacts(). claude_code, for instance, reads its stream-JSON transcript.jsonl line by line: assistant events become agent steps carrying their tool calls, tool results become environment observations, and per-message usage is summed (and reconciled against the run's reported total) into the final metrics. A different agent parses a different format, but the output schema is identical.

What a run writes

Each run lands in a timestamped directory under the output root, keyed by agent, model, and task:

.logs/<experiment>/<run_id>/<agent>/<model>/<task>/v<variant>/<timestamp>/ ├── events.jsonl append-only phase log, flushed per line, survives a kill ├── run.json metadata, final score, termination, usage totals ├── trajectory.json the ALE-v1.0 trajectory ├── screenshots/ images the agent saw, referenced by path from the trajectory ├── eval_result.json grader status, score, duration ├── origin_log/ the agent's raw work dir, pulled verbatim from the sandbox └── output/ files the agent produced (when output is collected)
FileWrittenHolds
events.jsonlThroughout the runOne JSON object per phase event. The authoritative trace.
run.jsonOnce, at the endThe run's summary: agent/task identity, status, score, why it ended, usage.
trajectory.jsonOnce, at the endThe normalized step-by-step record.
screenshots/At finalizeImages the agent saw, moved out of the trajectory and referenced by relative path.
eval_result.jsonOnce, at the endThe grader's verdict in isolation.
origin_log/After the agent finishesUnedited native transcripts and scratch files.
output/After the agent finishesThe agent's produced files, when the environment collects them.

Whether output/ is collected, and how, is set by the environment's output_path (see Run and collect results). Set it to local and ALE copies the output into this run directory using the provider's local transport. Point it at a gs:// bucket and a credentialed sandbox uploads the folder directly to Cloud Storage, which is preferable for large batch artifacts.

Next
That is the architecture end to end. To launch a benchmark, start with Run an experiment. For a command-first Google Cloud setup, use the quickstart.