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):
| File | What |
|---|---|
trace.zip | Playwright trace — screenshots, DOM snapshots, network, console (npx playwright show-trace trace.zip) |
*.png | Evidence screenshots (captured by the agent or at the end of replay/failure) |
report.md | Verdict + reason + recorded script + evidence |
result.json | Structured result (consumable by automation) |
transcript.md | Agent reasoning (AI runs only) |
demo.mp4 | Paced demo of the verified flow — synthetic cursor + click pulse, baked step labels + verdict card — only with --demo-video |
demo.timeline.json | Step→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
videoSpeedinscout.config.json((0,1], default0.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
ffmpegonPATH(orFFMPEG_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 setSCOUT_VIDEO_FONTto a.ttf. - Enable per-run with
--demo-video, viaSCOUT_RECORD_VIDEO=1, or"recordVideo": truein the config (see the config file reference).--record-videostill 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.