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:
- a source:
user,agent, orenvironment; - a message and optional reasoning;
- tool calls the agent made, and the observation (tool results) that came back;
- metrics: tokens, cost, and duration for that step.
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:
| File | Written | Holds |
|---|---|---|
events.jsonl | Throughout the run | One JSON object per phase event. The authoritative trace. |
run.json | Once, at the end | The run's summary: agent/task identity, status, score, why it ended, usage. |
trajectory.json | Once, at the end | The normalized step-by-step record. |
screenshots/ | At finalize | Images the agent saw, moved out of the trajectory and referenced by relative path. |
eval_result.json | Once, at the end | The grader's verdict in isolation. |
origin_log/ | After the agent finishes | Unedited native transcripts and scratch files. |
output/ | After the agent finishes | The 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.