Download

NewFetch 2 speaks MCP

Let your agent record the demo.

Fetch is a Mac screen recorder that Claude Code, Codex and Cursor can drive. It records any real window, captions it on this Mac and cuts it by what was said. No key, no token, no upload.

Free and open source. macOS 13 or later.

Claude Code
>
  1. Used FetchFound the terminal
  2. Used FetchRecording that window, nothing else
  3. Used Fetch17 seconds, saved to your Desktop
  4. Used FetchWrote the captions, on this Mac
  5. Used FetchSplit it into moments by what was said
  6. Used FetchZoomed in where 1Password is refused

Done. It is open in Fetch.

The Fetch editor holding the take the agent made: a terminal running the policy test on the Dusk backdrop, the caption 'it is refused, in every mode.' burned in, beats B1 to B4 named from speech, and zoom Z1 on beat B2.

Works with the agent you already pay for.

Fetch is an MCP server on your Mac. Whatever you already use can drive it, and Fetch never sees a model, a key or a token.

  • Claude Code
  • Codex
  • Cursor
  • Windsurf
  • Zed

Or ask Biscuit inside Fetch, on your Claude Code or Codex plan

Connect

No snippet to paste.

Six clients, four config shapes and two file formats. Fetch writes the right one for each and reads it back, so connected means it checked. It even raises Codex’s tool timeout, which would otherwise cut off any recording longer than a minute.

The Connect step in Fetch's onboarding, showing Claude Code and Codex both connected, with the line: You stay on your own plan. No key, no token, nothing leaves this Mac.

It records the real thing.

Whatever window is open on your Mac, an agent can record it. One window on its own, or the whole screen.

  • Native appsXcode, Figma, Notion, the app you are building
  • TerminalsTerminal, iTerm, Ghostty, a test run as it happens
  • EditorsVS Code, Cursor, Zed, with the diff on screen
  • BrowsersChrome, Safari, Arc, or one Playwright opened

The iOS Simulator too. It is just a window. Fetch records, and whatever drives the app, Playwright, simctl or you, stays in charge of it.

Say it in a sentence. The edit happens.

Ask for an edit the way you would ask a person. Fetch labels every clip, zoom and caption, so the agent changes exactly the one you meant, and your timeline shows what it touched.

Beats

Zoom in where it refuses 1Password

The Fetch timeline: beats B1 to B4 named from what was said, B2 'An agent asks to record one' highlighted, and zoom Z1 at 1.8x sitting underneath it.

Finds the moment by what was said, and zooms in right there.

Record

Record my terminal, then caption it

Fetch's home screen: 'What are we recording today?' above a composer reading 'Record my Chrome window, then caption it', with Claude Code selected.

Finds the window and records only that one.

Captions

Caption it and burn them in

The Captions panel: transcribed, burn into video on, caption style controls, and the cue list with timestamps.

Transcribed on your Mac, then burned into the video.

Look

Frame it on Dusk

The Look panel with the Dusk backdrop selected, output shape Auto, and inset and corner sliders.

Set in the edit, ready for export.

Then it exports, and a finished MP4 is on your Desktop. The agent never opened the editor, and you never had to.

See everything it did.

Every recording, transcript, edit and export lands in one log, with the agent that did it and how long it took. A row with no logo was you.

Fetch's Activity log: rows like 'Transcribed a recording, 15 words, 3 cues', 'Changed an edit' and 'Exported a video', each marked with Claude Code or Codex, a duration in milliseconds and a check.

It can’t record what you rule out.

Never records 1Password, Messages, Mail or System Settings. Even when an agent records the whole screen, Fetch leaves those windows out of the frame, so nothing sensitive reaches the disk.

By default every take an agent asks for waits for you. You always see one running: the red border, the floating controls, and Biscuit in the menu bar.

node test/policy.test.js17 passed
ok   human window on a protected appok   agent + 1Password refused (ask)ok   agent + 1Password refused (allowed)ok   agent + 1Password refused (open)ok   refusal names the appok   allowed mode refuses whole displaysok   exclusion picks protected windows only

Enforced in code before a take starts, not asked for in a prompt.

Recording access settings: Ask every time, Allowed apps only, or Anything on screen, and a Never recorded list of 1Password, Bitwarden, Dashlane, LastPass, Proton Pass, Keychain Access, Messages, WhatsApp, Signal, Telegram, Mail, System Settings and System Preferences.

Meet Biscuit.

He is how Fetch tells you what it is doing. And when an agent is driving your Mac, he sits in the menu bar for the whole take. You always see the dog.

  • Nothing is recording

    He naps until there is something to do.

  • A take starts

    Off he goes the moment recording begins.

  • Working on it

    Transcribing and cutting, right on your Mac.

  • Your video is ready

    He brings the finished file back to your Desktop.

And a whole editor, when you want your hands on it.

An agent and a person edit the same document. Drag a clip after the agent is done and nothing fights you.

Cut the dead air

One click finds the silent gaps and removes them, with sound and picture kept in sync.

The Trim panel: range start and end, Select and Cut tools, and a Remove dead air button.

Re-narrate it cleanly

Fix the stumbles in the transcript and a studio voice reads it back over the same footage, through your own ElevenLabs account.

The Voiceover panel: connect an ElevenLabs API key. This is the only part of Fetch that uses the internet. Your script is sent to ElevenLabs to be spoken. Your recording, your audio and your filenames are not.

The one feature that uses the internet, and it says so where you turn it on. Only the script is sent.

  • Crop to 16:9, 9:16, 1:1 or 4:3
  • Text layers you drag on the video
  • Denoise, level and fade the audio
  • Camera, mic and system audio
  • Auto zoom where your cursor settles
  • MP4, MOV, WebM, GIF or audio only

Everything that leaves your Mac, on one receipt.

“Private” means nothing on its own. So here is every request Fetch can make, what is in it, and how to stop it.

No account, no key

Fetch has no server to sign in to and holds no API key. When an agent drives it, that agent is the CLI you already signed in to, on the plan you already pay for.

Three things it can contact

GitHub, to ask whether a newer version exists. A daily count that says one more copy of Fetch exists: a random id, the app version and your macOS version. And ElevenLabs, only if you connect voiceover, and only the script. Never a recording, a filename or anything you typed.

raw.githubusercontent.com · /api/ping · api.elevenlabs.io

Every one has an off switch

Turn off auto-update and it stops asking. Turn off the install count in Settings and Fetch says nothing at all. Voiceover is off until you paste your own key, and the key lives in the macOS Keychain.

Transcription runs on your Mac

Parakeet on the Neural Engine. A two minute recording comes back in about a second and a half on an M5 Pro. You do not have to take a landing page's word for it, because the app says so itself:

A detail of the Fetch captions panel reading "No transcript yet. Transcribe runs on-device, nothing is uploaded."
From the captions panel, unedited.
And you can check all of it

The source is public and GPL-3.0. Every claim above is one grep away, which is the only reason a privacy section is worth reading at all.

github.com/SankrityaT/Fetch

Recordings are just files

They land on your Desktop, or a folder you pick. Delete Fetch tomorrow and they are still sitting there.

~/Desktop

Let your agent roll the tape.

Download for Mac

Free and open source. macOS 13 or later, Apple silicon or Intel.