A library of videos
- Every run belongs to a video: your agent names a new one, or adds a version to one you have. A run that names no video is refused, and so is a new name that matches or comes close to a video already in that repo, until the agent confirms it means a new one. Takes you already have are grouped into videos by name the first time the library is read.
- The Studio lists your videos, each with its versions, its exports and its repo, with rename and delete.
- An export takes its video’s name, so a second version of “New invoice” still saves as
New invoice.mp4. Exported MP4, GIF and PNG files carry their video’s id, so your agent can trace a file in the repo back to the video and version it came from. - Recordings older than 30 days lose their frames and thumbnails. Kept: each video’s current version, versions edited in the Studio, the source of the newest export, and versions with no script.
statusreports the last cleanup. - A secret in
.demoman/secrets.envneedsDEMOMAN_SECRET_<NAME>_ORIGINbeside it, as one in the environment already did, and is typed only into a field whose own frame is on that site. A.demomanfolder that is a link is refused. - Demoman’s browser no longer opens a debugging port, the Studio’s entry link no longer shows in its window’s command line, and
~/.demomanand your takes are readable by you alone. - Every
npxcommand Demoman writes or hands you runs from your home folder, so a repo’s ownnode_modulesor.npmrccannot choose what runs as Demoman. - A mask stays on the frames it was drawn over when you remove a piece before it, and a mask whose first step is removed still covers the frames left.
- The Studio’s preview stays sharp while it plays, and a step taken while the page is moving no longer leaves a brief stall in the video.
- Opening the Studio twice in quick succession no longer reports that the window did not open.
Setup asks first, and connects OpenCode
npx demoman setupasks before it changes anything: which agents to connect, the export quality, and whether pull requests get a demo. Each question starts on what you have now, so run setup again to change them. Without a terminal it asks nothing, as before;--yes,--agents,--qualityand--pull-requestsanswer for a script.- Setup connects OpenCode too: it adds Demoman to
opencode.jsonand copies therecord-demoskill. An older hand-written Demoman entry there is replaced. - MP4s export at High by default: 60 fps at 1440p, about 30 MB for 30 seconds. A video attached to a pull request keeps the smaller Sharing size. Change the default in setup or under Settings → Export quality in the Studio, and pick a quality for one export in the Studio’s Export panel.
- Exporting from the Studio no longer opens a browser window.
- The Studio plays a take back at full sharpness; text no longer reads soft while it plays.
- An export’s Reveal in Finder link opens the file directly, and the Open in Studio and Copy video tabs close themselves once they have worked.
Pull requests default to Ask, splits, and drag
- The pull-request setting now defaults to Ask: when a pull request changes something you can see, your agent offers to record it before attaching the video. Under Ask, a pull request without a video gets nothing added. Attach still adds a
No demo:line saying why. Choose Off, Ask or Attach in the Studio, under Settings → Pull requests. - The Studio edits by splitting. Press ⌘B or click the scissors to cut the clip into pieces, and delete a piece: the video closes up behind it. Drag a piece’s inner edge to trim frames, or to bring back frames removed beside it. A dot marks each join; click it to see what was removed and restore it.
- Retext, text overlays and step deletion are gone from the Studio. A take’s existing cuts open as removed pieces; its replaced text and overlays are dropped, and the Studio names what it dropped.
- Run reports say video and rerecord. The
filmandrefilmkeys are nowvideoandrerecord, and the reasonsnoRunFilm,notInRunFilm,notInRecordingFilm,notInFilm,nothingToRefilmandeditedSinceFilmedare nownoRunVideo,notInRunVideo,notInRecordingVideo,notInVideo,nothingToRerecordandeditedSinceRecorded. A script or tool that reads the old names needs the new ones. - A script can drag: a card across a board, a shape on a canvas. The Studio shows drag steps.
- While zoomed in, the camera follows the pointer, and a run of clicks plays straight through instead of stopping at each one.
- Targets no longer use ids that change on every page load, so a copied target keeps working on the next run.
- A saved sign-in loads even when one of the site’s databases cannot be restored, and a run on one localhost port no longer writes its storage into another port’s sign-in.
Out of release candidates
- The first release after the 0.2.0 release candidates. Everything below ships in it.
- Demoman records in the background by default, with no browser window opening. The video is the same as the one a visible window would record. Pass
--headedto watch it. - A saved export ends with links: Open in Studio, Reveal in Finder and Copy video. Its sentence keeps only what you can act on.
npx demoman setupno longer prints a warning from Playwright while it downloads Chromium.- The Chrome extension is retired. Demoman is the CLI and its Studio.
The camera lets each step finish
- The camera no longer sets off toward the next click while the step before it is still playing out: typing, a panel opening, a page loading or a scroll. Demoman waits a beat instead, so a video can run a little longer, never hurried.
- Motion plays at the moment it happened on the page. Before, the end of each stretch of motion played up to a quarter of a second late.
- A run’s report says how much time Demoman added before a step, so a longer video is explained.
Demoman keeps itself up to date
- Demoman now updates itself in Claude Code, Codex and Cursor, in the background. Run
npx demoman setuponce to turn it on. - The Studio has a new look, with a shortcuts panel, step icons, and each take’s details and export history in its header.
- Typing plays back one key at a time, at a human pace, after a visible click on the field.
- GIFs no longer leave faint ghosts of earlier frames behind moving content.
- In a checkout that is not on GitHub, your agent hands you the video to attach yourself.
Videos sized for sharing, and pull requests
- Exports default to a size that fits where videos get shared: 1920 pixels on the long side, or 720×1280 at 9:16, at 30 fps.
- Ask for the full-quality file, or a size limit; Demoman says what it lowered to meet it.
- Your agent can attach the video to a pull request, or leave a note saying why there is none. Choose Off, Ask or Attach in the Studio.
Codex and Cursor
npx demoman setupconnects Codex and Cursor as well as Claude Code, and pre-approves Demoman’s tools in each.- The README has paste-in blocks for OpenCode, Pi, Kimi Code, Hermes and DeepSeek.
Your library and brand kits
- The Studio lists every take, with rename and delete.
- Brand kits: a logo, colors and background that your agent can name when it records.
The Studio
- Your agent can open a take in the Studio. Trim, cut, mask, retext, set the cursor, background, padding and zoom.
- Export from the Studio, in 16:9 or 9:16.
Secrets belong to a site
- Export a take as a GIF, sized to fit 10 MB, or as stills.
- A secret in the environment must name the site it may be typed on, as
DEMOMAN_SECRET_<NAME>_ORIGIN. Demoman refuses to type it anywhere else.
Apps behind a login
npx demoman signin <url>saves your sign-in for a site, so your agent can record behind it.- Your agent can set up a demo account and sign in as it. Secrets are read from the environment or a git-ignored file, and swept out of the files Demoman writes, its reports and its logs.
- Edited takes can be recorded again.
- An expired sign-in is detected, and a demo account signs in again by itself.
First public release
npx demoman setupinstalls Demoman for Claude Code.- Your agent records a flow in a web app and hands you an MP4.
- demoman.io/sample is a sample app to try it on.