Skip to content

andyhtran/CopyCat

Repository files navigation

CopyCat

CopyCat makes ⌘V work for screenshots in your terminal. It saves the clipboard image to disk and types the file path so CLI tools like Claude Code can read it. The same flow works over SSH — paste a screenshot into a remote terminal as easily as a local one.

macOS 14.0+ Swift 6.0+ License MIT GitHub release Claudex

Getting Started · Features · Configuration

CopyCat screenshot

Claude Code reading a pasted screenshot path

Getting Started

  1. Download CopyCat
  2. Open the DMG and drag the app to your Applications folder
  3. Launch CopyCat (look for the paw icon in the menu bar)
  4. Grant Accessibility permission when prompted — required for ⌘V interception
  5. Copy any image, then press ⌘V in your terminal — the file path is typed for you

To paste into remote terminals over SSH, click the menu bar icon → Settings… → General → Enable SSH paste, then add hosts in the SSH hosts tab. If Tailscale is installed, peers show up for one-click add.

Other install methods

Homebrew

brew tap andyhtran/tap
brew install --cask copycat

To upgrade to the latest release:

brew update && brew install --cask copycat

Build from source

Requires macOS 14+ (Sonoma) and Swift 6+.

git clone https://github.com/andyhtran/CopyCat.git
cd CopyCat
just dev

Features

  • Paste-as-path — copy any image, press ⌘V in a terminal, the file path is typed
  • Works over SSH — push the same screenshot to remote hosts so ⌘V works in a remote shell too
  • Tailscale-aware — if Tailscale is installed, peers show up for one-click add; otherwise add hostnames manually
  • Configurable apps — defaults to common terminals (Ghostty, iTerm2, Terminal, WezTerm, Alacritty, kitty, Warp); add your own
  • Cache pruning — keeps the most recent N screenshots on disk; older ones get pruned automatically
  • On-device — no telemetry; nothing leaves your machine except SSH connections you explicitly configure

Configuration

Everything is configured in the CopyCat menu bar → Settings…:

  • General — launch at login, local paste toggle, SSH toggle, SSH hotkey, cache directory, retention
  • Apps — bundle IDs of apps where paste is intercepted
  • SSH hosts — remote hosts; if Tailscale is installed, peers list with one-click add. Hosts are SSH'd as the current user (ssh hostname) — your ~/.ssh/config and key auth apply.

FAQ

Local paste types /Users/you/.cache/copycat/…, but SSH types ~/.cache/copycat/…. Why the difference?

Local paste uses the absolute path because it works in every paste target — shells, REPLs, GUI dialogs, config files, sudo'd shells, IDE prompts, browsers. Tilde only expands inside a shell.

SSH paste has to use ~/ because the remote home dir is unknown. Your remote user might be a different name, on Linux (/home/you), or in a different layout entirely. Tilde gets expanded by the remote shell to whatever's correct on that host.

What happens with multiple SSH hosts?

Each screenshot is sent to every enabled host you've configured. With one host it's just SSH paste; with multiple it broadcasts (fans out) to all of them. Toggle individual hosts on/off in the menu bar to control which ones receive a given screenshot.

What's the simplest setup?

Leave SSH off. CopyCat then only intercepts ⌘V locally — no SSH, no remote hosts, no Tailscale needed. Turn SSH on when you want to paste into a remote shell.

Uninstall

pkill -x CopyCat
rm -rf "/Applications/CopyCat.app" "/Applications/CopyCat Dev.app"
defaults delete com.copycat.macos.app   # or your COPYCAT_BUNDLE_ID
# Then in System Settings → Privacy → Accessibility, remove the entry.

License

MIT

About

Press ⌘V to paste screenshots into your terminal — CopyCat saves the image and types the file path so Claude Code or Codex CLI can read it. Works locally and over SSH.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors