Screen Beaver live demo builder
The user wants to sit idle while you drive their product (smooth cursor + clicks + real typing) and build a Screen Beaver video. Prefer native capture (no Windows share picker). Edits apply in auto mode (one recipe). They click Export themselves.
Hard rules
- Use screen-beaver MCP only. Prefer
record_and_build(includes demo automation). Use atomicdemo_*tools orrun_demofor custom click paths. - If
screen-beaveris missing from this session’s MCP tool list, stop. Tell the user to enable it under Customize → MCPs, runnpm run mcp:installonce, then reload Cursor / start a new chat. Do not fall back to raw HTTP, curl, fetch, or Shell against127.0.0.1:17355. - Never write or execute
.ps1,.bat,.cmd, or other shell scripts to talk to Screen Beaver. - Never create JSON demo/recipe files on disk as a workaround — pass steps/payloads in MCP tool arguments.
- Do not call
export_mp4unless the user explicitly says to export. - Keep Screen Beaver desktop open (
npm run desktop:devor the installed app). Bridge:http://127.0.0.1:17355(used by the MCP server only). Ifping_studiofails, tell them to open the app — do not hang. - Never ask them to click the OS screen-share picker — use
start_capture/record_and_build(native window select). - Never idle-record a blank page and only sprinkle captions. Always drive the UI during capture.
- Keep takes as short as the script needs. Stop as soon as the last click/type finishes (
durationSecpad ≤ ~0.4s). Do not add long trailing waits. - Use
demo_type/{ op: "type", text }for typing — key-by-key, never clipboard paste. - Narrate briefly in chat so they watch the Screen Beaver window.
- Coords: call
get_window_layout(or usecontentNx/contentNy) — never trust Cursor’s embedded browser size. Page-relativecontentNx/contentNymap through browser chrome automatically. - Auto mode: let the studio derive zooms + typing SFX from real clicks/keystrokes. Do not hand-place agent zooms/sounds that fight Auto.
record_and_buildcaptions only +regenerateAutoZooms. - Voiceover: after captions, call
generate_voiceover(default English). If the user asks for another language, passtargetLang(e.g.hi-IN) — captions are translated first, then Edge TTS. Preferrecord_and_build({ voiceover: true, voiceoverLang })which does this automatically. - Background music: use Openverse via MCP (
pick_background_music/record_and_buildwithbackgroundMusic: true). No Pixabay /.envkeys. Glare / clear effects play the bundled shimmer SFX (Shining.mp3).
Workflow A — full hands-off (opens Screen Beaver UI first)
record_and_build now:
- focus_studio — brings Screen Beaver to front
- open_record_picker — opens the same “Start a new recording” / share options UI
- Opens
productUrl/ app - start_capture — selects the window natively (Application), shows Recording…
- Runs
demoSteps - Stops immediately + auto zooms/captions from the take
- generate_voiceover — English by default; translate+TTS when
voiceoverLangis set - pick_background_music — Openverse CC bed (soft corporate instrumental)
ping_studio
→ record_and_build({
productName, productUrl, titleContains: "Edge",
voiceover: true,
voiceoverLang: "en-US", // or "hi-IN" / "es-ES" etc.
backgroundMusic: true,
musicQuery: "upbeat corporate instrumental",
demoSteps: [ ... ],
introCaption: "...",
features: [{ title: "Sign in", atSeconds: 3 }]
})
→ Tell user: click Export when ready
Or on an existing take:
generate_voiceover({ targetLang: "en-US" })
pick_background_music({ query: "calm tech ambient instrumental" })
generate_voiceover({ speakLang: "en-US", targetLang: "hi-IN" })
Demo steps
| op | meaning |
|---|---|
wait | { ms } — keep short; no long end pads |
move / click | prefer { contentNx, contentNy } 0..1 in webpage; or { nx, ny } outer window |
type | { text, delayMs? } key-by-key (emits typing SFX) |
scroll / focus / right_click | as before |
Limits
- Native capture + input automation are Windows desktop only.
- Demo mouse/keyboard input only works while capture is running.
- The OS Share dialog is never shown to agents — Screen Beaver flashes the in-app share options, then captures the window natively.