Capture here.
Let your agents use it there.

dotshot sends a screenshot or recording from your Mac straight to the machine where your agent is working, then copies the remote path to your clipboard. No save dialog, no upload, no hunting for files.

Free and open source · Notarized by Apple · macOS 14+ · Apple silicon & Intel

80-second intro · sound on

See the whole loop.

A training-loss spike to Claude on the Spark cluster, a profiler table to Codex on the ROCm cluster, a flaky-login recording to the Dev Mac, and eval results to the NAS.

How it works

The screenshot is usually on the wrong computer.

You code across a laptop, a desktop, build boxes, a GPU workstation. Your agent runs on one of them; your eyes are on another. dotshot turns what you see into a path the agent can read.

Capture

Press ⌃⌥⌘S and drag, or ⌃⌥⌘V to record. Offline OCR gives the file a useful name.

Deliver

dotshot copies it over your existing SSH or Tailscale connection with the system scp. A local copy stays in ~/Shots.

Use

The absolute remote path lands on your clipboard. Paste it into Claude Code, Codex, or any terminal agent.

Features

Small nub. Whole fleet.

dotshot idles as a 42px camera nub in the corner of your screen. Hover to reveal capture controls, destinations, accents, and recent captures.

Region shots, smart names

On-device Apple Vision OCR names files after what is on screen, like payment-form-test-failed-…png.

Recordings

Record a full display or a selected region, then send as-is, trim it, or shrink it to 720p.

Many destinations

Name each machine — work, gpu, nas — and switch from the pill. Drag any file onto the nub to send it.

Global shortcuts

⌃⌥⌘S for a screenshot, ⌃⌥⌘V for a recording. No Accessibility permission required.

Automation URLs

Trigger captures from Shortcuts, Raycast, BetterTouchTool, or scripts with dotshot:// links.

No cloud

No account, server, inbox, API key, or telemetry. Just your Mac, your keys, and your machines.

The dotshot camera nub next to the expanded pill with Shot and Vid buttons, accent colors, and recent capture thumbnails
Idle nub and hover pill
Four colored drop targets named work, gpu, nas, and ci, with a file being dragged onto gpu
Drag a file onto a destination
Recording picker offering the built-in display, an external display, or a selected portion
Choose what to record
Setup window listing destinations with name, SSH address, destination folder, and a Test button for each
Destinations with one-click connection tests

How it compares

Other tools do part of this.

Several good projects get a clipboard image to a remote agent, and some handle several hosts. If screenshots are all you need, one of them may suit you. dotshot adds recordings, any file, readable names, and a native app, and installs nothing on your machines.

dotshotClipboard-upload tools
Several machinesNamed destinations, switch from the pillMost support several hosts
Screen recordingsDisplay or region, trim or resizeImages
Any fileDrag onto the nub, drop on a machineClipboard or screenshot folder
File namesFrom on-screen text, offlineTimestamps
SetupTests host, key, and folder per machineInstall script or CLI config
Paste with Ctrl+V inside the agentNo, you paste a pathSome do (clipbridge)
Runs on the destinationNothing, just scpVaries: nothing, or a receiver (clipbridge)

Worth a look: clipbridge, clipssh, clipport, and claude-screenshot-uploader.

Get set up in 5 minutes

From download to your first delivered path.

dotshot's guided setup walks through each of these steps. Here they are in advance, so you know what to expect. For every screen, see the full walkthrough.

  1. Install dotshot

    Run brew install --cask mejohnc-ft/tap/dotshot, or download the latest .dmg from GitHub Releases, open it, and drag dotshot into Applications. Requires macOS 14 Sonoma or newer.

    Releases are signed with a Developer ID and notarized by Apple, so dotshot opens like any other downloaded app. Checksums are in SHA256SUMS.txt on the release page.

  2. Allow Screen Recording

    Click Request Permission in setup, then enable dotshot under Privacy & Security → Screen & System Audio Recording. Quit and reopen dotshot if the status doesn’t change.

  3. Turn on SSH at the destination

    • Mac: System Settings → General → Sharing → Remote Login.
    • Linux: install and enable OpenSSH, e.g. sudo apt install openssh-server.
  4. Authorize this Mac’s key

    No key yet? Create one on your Mac:

    ssh-keygen -t ed25519

    Then install it on the destination once (it asks for that machine’s password this one time):

    ssh-copy-id you@mac-studio.local

    Setup’s SSH Access step can copy both commands for you.

  5. Add a destination and press Test

    Give it a short name, an SSH address, and a folder:

    work    you@mac-studio.local    ~/inbound

    Test checks the host, key, and folder separately, creates the folder, and turns ~/inbound into an absolute path. Tailscale MagicDNS names, 100.x addresses, and ~/.ssh/config aliases all work.

  6. Take your first capture

    Press ⌃⌥⌘S, drag over part of the screen, and wait for Sent to work. The remote path is now on your clipboard.

  7. Hand it to your agent

    > Fix the overflow in /Users/you/inbound/network-settings-proxy-host-20260916-101400.png

    If a transfer fails, dotshot keeps the file in ~/Shots and copies the local path instead.

dotshot setup welcome step explaining Capture, Deliver, and Use
Guided setup opens on first launch
SSH Access setup step with steps to enable SSH, prepare a key, and authorize it, plus Copy Public Key and Open Terminal buttons
SSH help, without needing an alias

Automation

Trigger captures from anything.

Open these URLs from Shortcuts, Raycast, BetterTouchTool, a Stream Deck, or open in a terminal. Leave out dest to use the destination selected in the pill.

ActionURL
Screenshot to the current destinationdotshot://image
Screenshot to a named destinationdotshot://image?dest=work
Choose what to recorddotshot://video?dest=work
Record display 2 directlydotshot://video?dest=work&screen=2
Record a selected regiondotshot://video?dest=work&screen=region
Open destination settingsdotshot://settings
open 'dotshot://image?dest=gpu'

Privacy

Your screen stays between your machines.

dotshot can read the screen only after you approve it in macOS, and it sends files only to destinations you configure.

  • No account, cloud inbox, or receiving service
  • No analytics, telemetry, or automatic update pings
  • Transfers use the system ssh/scp and your existing keys
  • Never stores passwords or reads private keys
  • Strict host-key checking; no password prompts
  • Private files on both ends, never overwritten
  • Secret-looking words kept out of file names
  • Links that would start a recording ask first
  • Open source under the MIT License

FAQ

Questions

Do I need Tailscale?

No. Any address your Mac can reach over SSH works: user@host.local on your network, a public hostname, or an alias from ~/.ssh/config. With Tailscale, use the machine’s MagicDNS name or 100.x address; regular SSH and Tailscale SSH both work.

Can destinations run Linux?

Yes. Destinations only need an SSH server and a folder the account can write to. dotshot itself runs on macOS.

Which Macs are supported?

macOS 14 Sonoma or newer, on Apple silicon or Intel. The release is a universal app.

Does anything get installed on the destination?

No. dotshot copies files with scp into the folder you choose. There is no daemon, agent, or receiving service.

I used Shot Pill. Do I need to set things up again?

No. dotshot is Shot Pill’s new name. On first launch it imports your destinations and preferences and quits the old app. macOS will ask for Screen Recording permission again, and shotpill:// links become dotshot://. Remove the old app afterwards.

Where are captures and settings stored?

Captures and a log live in ~/Shots. Destinations live in ~/Library/Application Support/dotshot/destinations.tsv.

What if a transfer fails?

dotshot keeps the file in ~/Shots, copies the local path instead, and shows a notification. Details are in ~/Shots/.dotshot.log.