REC 00:00:00;00
screencast-mcp Workflows Connect GitHub ↗

SCREENCAST-MCP / WORKFLOWS / REC 01

Bug-repro clip for a PR

A reviewer understands a bug faster from five seconds of video than from five paragraphs. The agent records the repro, finds and covers anything secret on screen, cuts it to the moment that matters, points at the problem, and hands back a GIF that fits GitHub's 10 MB limit.

00:00THE PROMPT

Record the Demo Settings window while I click Save. Then hide the API key, trim it to the save, put a box on the Save button saying it hangs, and give me a GIF for the PR.

00:05THE CALLS IT MAKES

start_recording → find_text → redact_region → trim → callout → export_gif. Paths are shortened; every value is from a real run.

  1. start_recording { "target": "window:Demo Settings", "fps": 15 }Matches the window by title and records just its frame.{ "sessionId": "rec-…", "matchKind": "exact", "region": { "width": 602, "height": 352 } }
  2. stop_recording { "sessionId": "rec-…" }Quits ffmpeg cleanly so the mp4 is finalized.{ "durationSec": 7.07, "finalizedGracefully": true }
  3. find_text { "input": "rec-….mp4", "timestamp": 0.5, "query": "sk-[\\w-]+", "regex": true, "redact": true }Windows OCR reads the frame and returns a padded rectangle for each match. Match on a prefix: OCR read this key's live as 1ive.{ "matchCount": 1, "redactRegions": [{ "x": 152, "y": 121, "width": 196, "height": 22 }] }
  4. redact_region { "input": "rec-….mp4", "regions": [{ "x": 152, "y": 121, "width": 196, "height": 22 }] }Covers the rectangle for the whole clip (a solid box by default; style can be blur or pixelate).{ "outputPath": "redact-….mp4", "regions": 1 }
  5. find_text { "input": "redact-….mp4", "timestamp": 0.5, "query": "sk-" }Check the redaction worked before anything leaves the machine.{ "matchCount": 0 }
  6. trim { "input": "redact-….mp4", "start": 0.5, "end": 5 }{ "outputPath": "trim-….mp4" }
  7. callout { "input": "trim-….mp4", "items": [
      { "type": "box", "x": 28, "y": 178, "width": 128, "height": 50, "from": 0.3, "to": 2.6, "color": "red" },
      { "type": "text", "x": 170, "y": 188, "text": "Save hangs for 2.5 s", "size": 22, "color": "red", "from": 0.3, "to": 2.6 } ] }
    Timed annotations, drawn only while the bug is on screen.{ "outputPath": "callout-….mp4", "callouts": 2 }
  8. export_gif { "input": "callout-….mp4", "width": 480, "fps": 10, "maxBytes": 2000000 }Steps fps, width, and colors down until the file fits the budget.{ "sizeBytes": 71206, "withinBudget": true, "settings": { "fps": 10, "width": 480, "colors": 256 } }
00:30THE OUTPUT
A settings window with the API key covered by a black box. A red box and the label 'Save hangs for 2.5 s' point at the Save button until a progress bar fills and a green Saved banner appears.
bug-repro.gif · 480 × 281 · 70 KB · the real output of the calls above

Drop the GIF into the PR description. find_text is best-effort: OCR can miss small or stylised text, so look at a frame before you share. If you know where a secret sits, pass the rectangle to redact_region yourself.