Skip to content
vmup

For developers who run coding agents over SSH

vmup gives coding agents one folder path on the remote host

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/vmup

Then

vmup init
vmup shot.png notes.pdf

Node 18+ and OpenSSH · First upload

Paste the printed path into the agent. It is already on your clipboard.
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

SSH

Remote host

~/vmup/agents-…/

  • image-01.png
  • file-01.pdf
  • video-01.mov

Coding agent

One SSH upload. One folder on the VM. Paste that path into the 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 ssh and scp you 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

  1. 01

    Collect

    Files as arguments, the native picker, the clipboard loop, or a watched folder.

  2. 02

    Upload

    OpenSSH carries the batch. A spinner reports uploaded bytes against the total.

  3. 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.

MethodCommandBest for

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 is vmup
  • Node 18+ and OpenSSH (ssh / scp) on your PATH
  • Default remote root ~/vmup; batch id agents-<date>-<time>-<uuid>
  • Staged names image-01, video-01, file-01 so 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
  • --json on 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/vmup

Install · First upload · Docs

First uploadWatch a folderProfilesTTL and cleanupvs scp / rsyncCommands

MIT · GitHub · npm · Issues · Security · Changelog