Artifacts & previews

Reviewable deliverables: screenshots and documents the agent publishes, and live previews served from the sandbox.


Diffs aren't always the best evidence. A design task wants screenshots; a scaffolded app wants to be clicked. Peractor has a lane for each: artifacts (files the agent publishes for review) and previews (the running result, served live).

Artifacts

The agent renders deliverables itself — Peractor never screenshots anything — and lists them in a manifest at .peractor/artifacts.json in the workspace:

{"artifacts": [
  {"path": "shots/dashboard.png", "title": "Dashboard — desktop",
   "caption": "After the redesign"}
]}

Images (PNG, JPEG, WebP, GIF, SVG), HTML, and Markdown are supported, up to 20 artifacts of 32 MB each per phase; a malformed manifest logs a warning and never fails the run. Two ways to produce them:

  • A dedicated publish step whose prompt says how to render ("screenshot each page with a headless browser") and where to deliver: the tracker issue, the pr, and/or your notify channels. Trackers that host attachments (Linear, Jira, GitLab, Slack) show the images inline; GitHub gets links.
  • Any ordinary prompt step — agents are invited to publish a self-contained deliverable (report, chart, HTML widget) when there is one worth showing.

Artifacts appear in the transcript under the step that made them; click one and the extension opens it as a real editor tab (rendered HTML/images, syntax-colored text), the dashboard shows it inline, and the phones open a full-screen swipeable viewer. HTML artifacts render inside a sandboxed frame with no network access, so an agent-authored widget can run scripts without reaching anything.

Previews

A preview step parks the run with the built result served at a per-run URL, straight from the live sandbox — WebSockets and hot reload included. Reviewers click Open preview, try the real thing, then Continue or Request changes with a note that re-runs the phase. Previews hold the sandbox open, with a 30-minute ceiling (a timeout counts as continue).