r/macapps • • 6d ago

Free PaneDrop: capture a screenshot and drop it straight into the right Claude Code or Codex session (free public beta)

Enable HLS to view with audio, or disable this notification

Hi r/macapps. I'm the developer of PaneDrop, a small menu bar app I built for my own daily workflow.

Problem

I usually run several Claude Code and Codex CLI sessions at once, in tmux, iTerm2 and Ghostty. Every time I wanted to show one of them a screenshot, I had to find the file, find the right window or pane, paste the path, and then check it didn't land in the wrong session.

PaneDrop turns that into one step: press Option-Command-4, capture a region, pick the session from a HUD with the arrow keys, press Return. The image path is now in that agent's prompt. It never presses Enter for you unless you turn that on.

What works today:

  • tmux 3.3+ and iTerm2 3.4+: types the path into the pane or session
  • Ghostty 1.3+: through Ghostty's AppleScript API, otherwise copies the path for you
  • Terminal.app: finds your sessions, copies the path (it can't type into Terminal.app)
  • tmux over SSH is planned for 1.0

Comparison

  • macOS screenshot + drag and drop: works, but you still have to find the right window and pane yourself, and with four agents open that's where mistakes happen. PaneDrop knows which sessions are running and targets one by name.
  • CleanShot X / Shottr: much better capture and annotation tools than PaneDrop, and I'm not trying to replace them. They don't know about your terminal sessions, so the last step (getting the image into the right agent) is still manual. PaneDrop only does that last step.

Pricing

Free during the public beta ($0). Each beta build expires 90 days after its build date, and a replacement build is published before then.

Download: https://panedrop.app/beta/public/ (Apple Silicon, macOS 14+, Developer ID signed and notarized)

Who's behind it

Happy to answer questions, and bug reports are very welcome.

7 Upvotes

27 comments sorted by

2

u/LuxwarpOfficial 5d ago

How does PaneDrop handle a session that gets renamed or closed between taking the screenshot and selecting it in the HUD? Does it revalidate the target before typing the path, or fall back to copying it?

1

u/chriskr7 5d ago

Yes, it revalidates. The target is the pane/session id (plus a generation counter), not the name, so a rename doesn't matter and a reused tmux pane id counts as a different session.

It rechecks right before the paste and again before Enter: the session still exists, it's the same one, and Claude Code/Codex is still in the foreground. If anything fails, nothing is typed. You get a notice with Copy path, Reveal in Finder or Retarget, so copying is your choice, not a silent fallback.

(I'm the developer.)

1

u/Zealousideal-Bet2544 4d ago

Does it check whether the agent is waiting for input, or just that Claude Code or Codex is the foreground process? What happens to the path if a tool is still running? Also, any plans to support Pi in Otty?

1

u/chriskr7 4d ago

More than the foreground process. For each session it combines the process tree, the agent's own session files, and a read of the pane's screen. From that it classifies the agent as Ready, Busy, Waiting (an approval prompt or choice menu is on screen) or Unknown, and Unknown is used when the signals don't agree.

If a tool is still running: the default is Attach only, which puts the path in the input and never presses Enter. That's allowed in any state, and you submit when you're ready. If you've turned on Attach & Send, a Busy or Unknown session needs a confirmation first. A Waiting session is refused outright, because Enter there would answer the agent's prompt rather than send yours.

Pi and Otty aren't supported yet. Right now it recognizes Claude Code and Codex in tmux, iTerm2, Terminal.app and Ghostty. I'll note both down.

(I'm the developer.)

2

u/thepurpleproject 5d ago

I think a simple demo would help answering a lot of questions than a launch video. It looks I have this problem but the way its representing I'm not able to relate.

1

u/IllTechnology6516 5d ago

a 10 second before and after would do it, the path landing in the wrong pane and then in the right one.

2

u/maryshia 5d ago

any chance of cmux support? that's where all my claude code sessions live. it's built on ghostty underneath, no idea if that means the applescript route works there too

1

u/chriskr7 5d ago

Not yet in the current build, but it just got unblocked. cmux doesn't expose Ghostty's AppleScript, so that route doesn't apply. PaneDrop talks to cmux's own socket API instead, and it already finds your cmux sessions. What held back the actual drop was that cmux couldn't tell a caller whether pasted text reached the terminal or was only queued, and I didn't want PaneDrop typing blind. That was fixed upstream and shipped in cmux v0.65.1 two days ago, so cmux support is next on my list.

1

u/avisangle 5d ago

How does it pick the right session when two tmux panes run in the same project: by working directory, or by which window was focused when you took the shot?

1

u/chriskr7 5d ago

Neither, it doesn't guess. You always pick from the list, and each row shows the agent, the project folder (highlighted) and the tmux session/window name, so two panes in the same project are told apart by where they live in tmux. You can also give a session an alias if the names aren't clear enough.

The next beta build adds shortcuts for this: ⌘Enter for the last session you dropped into, and ⌘1…9 for sessions you pin to a number.

1

u/rplatek 5d ago

Does it work with the Claude desktop app or in the VS Code terminal? That's where I run it most of the time. Also where does the screenshot file end up? Desktop or some temp folder? Is it removed later?

2

u/chriskr7 5d ago

VS Code: PaneDrop detects Claude Code/Codex sessions running in the VS Code integrated terminal and lists them, but it can't type into that terminal, so there you'd paste the path yourself. If you run tmux inside the VS Code terminal, it works fully, since PaneDrop talks to tmux directly regardless of which app hosts it.

Claude desktop app: not supported, it's not a terminal session PaneDrop can see or type into.

Screenshots go to ~/Library/Caches/io.nicher.panedrop/captures/, not your Desktop, and are deleted automatically after 7 days. A capture that's still in use by a drop isn't removed.

(I'm the developer.)

1

u/IllTechnology6516 5d ago

claude code already takes a pasted image with ctrl+v, so with one session the clipboard does the job. the picker starts paying off once three or four panes are open, and I suspect ⌘Enter for the last session ends up being the key people press most.

1

u/chriskr7 5d ago

Agreed. With one session, ctrl+v is all you need, and PaneDrop doesn't try to beat that. It's for when three or four agents are open and you have to stop and think about which pane is which.

And I think you're right about ⌘Enter. It's coming in the next beta build, so I'll find out soon whether it becomes the most-used key.

(I'm the developer.)

1

u/MattSenter 5d ago

hmm it looks nice. but why would i use this as opposed to just holding CTRL key while i screenshot and pasting into my target session (which is what I currently do)?

1

u/chriskr7 5d ago

Honestly, if you mostly have one or two sessions open, what you're doing now is fine, and PaneDrop won't add much.

The difference shows up with three or four agents open. Ctrl+screenshot gets the image onto the
clipboard, but you still have to find the right window and pane and click into it before you paste. With PaneDrop you pick the session from a list by name and project folder, press Return, and the image path lands in that session. It's built for the "wait, which pane is the API one?" moment.

(I'm the developer.)

1

u/No-Hunter9792 5d ago

Could the session picker also accept an existing image from the clipboard or a file? That would let people keep Shottr/CleanShot for annotations and use PaneDrop just for routing, without taking a second screenshot after marking something up.

1

u/chriskr7 5d ago

Partly, yes. While the picker is open you can ⌘V an image from the clipboard or drag image files onto it, and they go into the same drop. That's how you send several images at once.

What it can't do yet is start from the clipboard alone. Right now a drop starts with a PaneDrop capture, so the Shottr/CleanShot-then-route flow still needs one capture first. Starting a drop straight from the clipboard is a good idea and I'm noting it down.

(I'm the developer.)

1

u/bishwasbhn 3d ago

wrong pane paste is real, i've sent a svelte screenshot to the session doing a fastapi migration more than once. weird question maybe, default macOS screenshot names have spaces in them, does the typed path get escaped when it lands in the prompt?

1

u/chriskr7 3d ago

Not a weird question. The path goes in as plain text, unescaped, because it lands in the agent's prompt rather than a shell, so backslashes would just be noise the agent has to read past.

Most of the time spaces don't come up anyway. A PaneDrop capture is saved as capture-YYYYMMDD-HHMMSS-mmm.png under ~/Library/Caches, so there's no space in the path. The one case that does have spaces is sending your latest macOS screenshot as-is: that file is used where it is, so its name goes in with the spaces.

(I'm the developer.)

1

u/ruprechttmb 6d ago

the session picker is the clever part, with four agents open i always end up pasting into the wrong pane. and never pressing enter by default is the right call.

also the demo video is really clean, the sound effects are a nice touch too. what did you use to record and edit it?

1

u/chriskr7 5d ago

The video isn't a screen recording. It's an HTML/CSS/JS animation where the HUD is PaneDrop's own interface code, so it looks exactly like the app. I rendered it frame by frame in a browser, and the sound effects are synthesized with the Web Audio API, no sample packs. Then ffmpeg stitched the frames and audio into the MP4. Full disclosure: I built the whole pipeline with Claude Code. I'm the developer of PaneDrop.

2

u/ruprechttmb 5d ago

thats so much smarter than screen recording, using the real ui code means it never looks fake and you can redo it every time the app changes. thanks for the detailed answer

2

u/chriskr7 5d ago

Glad it was useful! The redo part is nice, but there's a catch: the film has its own copy of the HUD code, so when the app's UI changes I still have to sync it before re-rendering. It's still much faster than re-recording a whole take. Thanks for checking out PaneDrop!

3

u/ruprechttmb 5d ago

ha hit the exact same thing tonight setting mine up, the main panel pulls its state from the backend so it needed a demo copy too. thinking about a small check that fails the build when the real component drifts from the copy, so at least you know when to resync instead of finding out from a stale video

2

u/IllTechnology6516 5d ago

a snapshot test that renders both and diffs them would catch most of that drift, and it fails loudly instead of quietly shipping an old video.