Every frame of your app, even on a CI runner.
An open-source CLI: your coding agent writes the Playwright script. shipcut renders every real frame on a virtual clock and draws the pointer, zoom and labels on top. A re-render on every deploy from CI is coming.
- Switch to yearly
- Add two seats
- Upgrade
step("Switch to yearly")A video shipcut made
booking.ts
A guest books a table in Heystol, Roman's own app. shipcut recorded it from this script on a 4-vCPU server with no GPU.
What shipcut does
- 118119120121122
Every frame, on a virtual clock
The page's clock moves 1/30 s per frame and Chromium draws each one when asked, so a 4-vCPU runner with no GPU records every frame of every animation, none repeated. Linux, as CI is.
- Upgrade
Looks edited by hand
The pointer, click waves, step labels, zoom and frame are drawn after capture, from the run's event log. Change the flags, not the recording.
step("Add two seats"); await page.getByRole( "button", { name: "+" } ).click();Your agent writes the script
A Playwright file in your repo, written by Claude Code or another agent from our skill. You review it like any PR, and the next run picks up the new UI.