Skip to content

Viewing in a Browser

evolve view serves the committed results as an interactive web report. Where evolve report renders a fixed Markdown rollup, the viewer is for exploring: filter by provider, model, plugin, skill, type, and pass/fail; sort any column; toggle between a per-case table and a per-model rollup; and save a self-contained HTML snapshot of exactly what you are looking at.

The server is read-only and binds to localhost — it reads the same results.<ext> files the report does and never launches runs or mutates anything.

evolve view                      # build the report, serve it, open a browser
evolve view --no-open            # serve without opening a browser
evolve view --port 8099          # bind a fixed port (default: a free one)
evolve view --out report.html    # write a self-contained snapshot and exit (no server)
Flag Description
--out Write a self-contained HTML snapshot to this path and exit, without serving.
--port Localhost port to serve on (default: pick a free port).
--no-open Do not open the report in a browser.

The interface

A column of filters runs down the left: one always-visible group per facet — Provider, Model, Plugin, Skill, Type, Status — each listing every value with a live count. Selections multi-select (checkboxes, no dropdowns): values within a facet are ORed, facets are ANDed, and each count reflects what selecting it would yield given the other facets' current state.

The table fills the rest. Click any column header to sort ascending, again for descending. A Cases / Rollup toggle switches granularity:

  • Cases — one row per trigger query or eval case, with its own pass/fail status and metrics. This is the finest view; the Status filter operates at this level.
  • Rollup — one row per (plugin, skill, model, tier) with pass/fail/error tallies, pass rate, average run time, and total cost. Click a group to expand its member cases.

Missing figures render as , matching the Markdown report.

Live updates

While evolve view runs it watches the results files on disk. Any process that rewrites them — a concurrent evolve run, a teammate's commit you just pulled, a CI artifact — pushes a refresh to the open browser over Server-Sent Events, so the table stays current without a manual reload. The watch is decoupled from the engine: it works regardless of how the results were produced.

Snapshots

The Snapshot button (and evolve view --out) writes a single self-contained HTML file: the whole dataset and the current filters/sort are inlined, so it opens offline over file:// with your view pre-applied — and the recipient can still re-filter it freely. It is the shareable, frozen counterpart to the live server.

Snapshots need the bundled UI

The viewer's web assets are embedded into the binary at build time. Release binaries (and a local make build) carry them; a bare go install build does not, and evolve view there reports that the UI is not bundled. Use a release binary to browse and snapshot.