For developers who run coding agents over SSH
Send screenshots, PDFs, recordings, and other local files to the VM your coding agent is running on. One SSH upload. One folder path to paste.
npm i -g @nyxsky404/vmupThen
vmup init
vmup shot.png notes.pdfNode 18+ and OpenSSH · First upload
Uploaded 3 files → default
Agent folder: ~/vmup/agents-20260911-140128-a1b2c3d4/
Prompt:
Please inspect all files in ~/vmup/agents-20260911-140128-a1b2c3d4/Laptop
local files
- shot.png
- notes.pdf
- clip.mov
You
Remote host
~/vmup/agents-…/
- image-01.png
- file-01.pdf
- video-01.mov
Coding agent
The agent inspects a directory. Your laptop is not that directory.
A coding agent on a VM reads files by path. The screenshot, the PDF, and the recording sit on your machine. Until they exist on the host, the agent has nothing to open.
scp moves one file. A morning of screenshots, a notes PDF, and a screen recording is a different job: stage a batch, upload it, hand back one path, delete it when you are done. vmup does that job.
Why vmup
No extra daemon
Files go over
sshandscpyou already have. No browser upload, no agent plugin.The agent only needs a directory
You paste a path. You do not configure Cursor, Claude Code, or anything else.
One path per batch
Screenshots, PDFs, and recordings stay in one listing the agent can inspect.
Expires by default
Remote batches expire. Default TTL is 5 minutes.
How it works
01
Collect
Files as arguments, the native picker, the clipboard loop, or a watched folder.
02
Upload
OpenSSH carries the batch. A spinner reports uploaded bytes against the total.
03
Paste the path
The remote folder lands on your clipboard with Please inspect all files in … Stay in the thread.
Choose how files enter vmup
Every mode ends the same way: one remote folder, one prompt, clipboard already loaded.
Files
vmup shot.png notes.pdf
One-off uploads. A directory sends its immediate files.
Picker
vmup
Native multi-select when the files are already on disk.
Clipboard
vmup --clip
Screenshots and copied files. macOS images need pngpaste.
Watch
vmup watch
Files added after start. Default folder is Desktop on macOS.
Temporary by design
Remote batches expire after 5 minutes. Temporary files should not live forever on the VM. Change the TTL if a run needs longer.
A sweeper at ~/vmup/.cleanup.sh runs every minute and removes expired agents-* directories. It does not wipe the whole remote root. After you change TTL, run vmup check --sweeper so the remote script matches.
vmup prune deletes expired batches from here. --id deletes one. --local also clears leftover staging under ~/.cache/vmup/. Successful uploads already delete that cache unless you pass --keep-local.
Facts
- npm package
@nyxsky404/vmup; the command isvmup - Node 18+ and OpenSSH (
ssh/scp) on yourPATH - Default remote root
~/vmup; batch idagents-<date>-<time>-<uuid> - Staged names
image-01,video-01,file-01so the listing is stable - Default TTL 5 minutes; sweeper cron every minute
- Default max 200 MB per file; all types accepted unless you tighten config
--jsonon stdout for scripts; spinner still on stderr
Install, init, send a file
The package is @nyxsky404/vmup. The binary is vmup.
npm i -g @nyxsky404/vmupInstall · First upload · Docs