Agent Eval Lab has separate stages for collection, normalization, analysis, presentation, and human evaluation.
producer export
|
v
format adapter ----> normalized RunRecord
|
v
deterministic analysis
|
+-----------+-----------+
| |
v v
JSON/Markdown HTML dashboard
| |
+-----------+-----------+
|
v
human evaluation
src/trajectory_facts/adapters.py detects the source format. It converts the source document to a RunRecord.
Each ToolEvent contains available source facts. These facts include the source reference, tool name, arguments, result status, text, timestamp, and duration.
An adapter must not infer a result status from prose. It must use an explicit return code, status field, or error flag.
src/trajectory_facts/models.py defines three record types:
StepRecordcontains a source message or step.ToolEventcontains a tool call and its result.RunRecordcontains one normalized run.
The normalized model contains only common facts. It does not require all producers to use the same native schema.
src/trajectory_facts/analyze.py calculates deterministic facts. These facts include repeated calls, recovery groups, elapsed time, tool categories, and final-response size.
The analyzer does not assign quality, blame, severity, or preference.
src/trajectory_facts/render.py creates Markdown reports. src/trajectory_facts/cli.py creates terminal, JSON, and Markdown output.
src/trajectory_facts/dashboard.py reads Harbor trial directories. It combines trajectory facts with result data, verifier rewards, test output, and patch summaries.
The dashboard is a static HTML file. It does not require a server.
The analyzer treats each trajectory as untrusted input. It does not execute trajectory content. The dashboard escapes source text before it adds the text to HTML.
A report can still contain sensitive source text. Review and redact each report before you publish it.