Scout

Run artifacts

What each run records — trace, screenshots, report, structured result, transcript — and the opt-in demo video that turns a verified flow into a GitHub-playable clip, with a synthetic cursor + click pulse, for PR review or a landing page.

Each run records in .scout/runs/<timestamp>-<slug>/ (gitignored):

FileWhat
trace.zipPlaywright trace — screenshots, DOM snapshots, network, console (npx playwright show-trace trace.zip)
*.pngEvidence screenshots (captured by the agent or at the end of replay/failure)
report.mdVerdict + reason + recorded script + evidence
result.jsonStructured result (consumable by automation)
transcript.mdAgent reasoning (AI runs only)
demo.mp4Paced demo of the verified flow — synthetic cursor + click pulse, baked step labels + verdict card — only with --demo-video
demo.timeline.jsonStep→timestamp (and cursor x/y) map the overlays are burned from

Demo video (--demo-video)

Opt-in, off by default (zero overhead otherwise). When enabled, a verified scenario gets one extra, deterministic replay — recorded, paced for human viewing, and rendered by ffmpeg into a GitHub-playable MP4 with the scenario title, per-step captions, and a green/red verdict card burned in. It’s meant as a polished demo artifact: drop it in a PR or on a landing page and the viewer sees the feature working, no tooling required.

A synthetic cursor is injected into the page and moves to each target before acting, with a click pulse at the point of action — so the viewer sees what drives each change, session-replay style (think Microsoft Clarity / Sentry), instead of the UI mutating on its own. The cursor is a pointer-events:none overlay captured natively by the recording; it can never intercept the real click.

  • Always sourced from the clean deterministic replay — never the exploratory AI run.
  • Pacing via videoSpeed in scout.config.json ((0,1], default 0.35 = slower; 1 = natural speed), plus a cursor-travel dwell so the eye can follow cursor → target → click.
  • A verified scenario never yields zero video: if the paced replay trips on timing the authoritative run handled fine, Scout records a non-paced fallback clip instead. The verdict is never affected.
  • Requires ffmpeg on PATH (or FFMPEG_PATH). Missing it isn’t fatal — Scout keeps the raw .webm (cursor already baked in) and warns with an install hint. Font is autodetected, or set SCOUT_VIDEO_FONT to a .ttf.
  • Enable per-run with --demo-video, via SCOUT_RECORD_VIDEO=1, or "recordVideo": true in the config (see the config file reference). --record-video still works as a deprecated alias.

Known limitation: new tabs

Playwright records one video per page, and Scout films the first tab for the whole run. If a step opens a new tab (e.g. a switchTab after a link that targets _blank), the demo keeps showing the original tab — the new tab’s content is recorded as a separate .webm that Scout doesn’t render. There’s no way to merge them into one continuous clip (the recordings overlap in time), so for now a single-tab flow makes the cleanest demo. Multi-tab demos are tracked as a future improvement.

Trace vs demo

Playwright’s trace.zip is the deep-debug artifact (per-action screenshots, DOM, network, console). The opt-in demo video is a different job: a low-friction, GitHub-playable clip a reviewer watches in the PR — or a loop on a landing page — to see the feature working, with a visible cursor and click pulse, sourced from the clean replay and paced + annotated so it’s worth watching.