The missing upload command for coding agents.

Now Claude Code and Codex can add screenshots to pull requests

Agents take screenshots long before a pull request exists, and GitHub's own attachments only work inside GitHub. Uploads hosts each file at a stable public URL the moment it's captured. When the pull request opens, all screenshots appear in one tidy comment that updates automatically on each revision.

installnpm install -g @buildinternet/uploads

Or have your agent set it up

# capture as you work — no PR yet

$uploads put ./after.png

└─▶ your PR opens with screenshots already attached:

uploads-shbotcommented just now
App header with a Follow button overlapping the page title — the before shot
before.webp
The same header with the overlap fixed and the layout clean — the after shot
after.webp

The bot adds new files automatically, and replaces outdated versions with the latest revision (with GitHub App installed).

“Which page was that?”

Attach a path (or anything else) with --meta, then uploads find brings it back.

# tag it on the way up (source URL, app, etc)

$uploads put ./settings.png --meta path=/account/settings

MARKDOWN: ![settings.webp](https://storage.uploads.sh/gh/you/app/pull/123/settings.webp)

# find it again later ("Do we have any recent screenshots of settings?")

$uploads find path=/settings

gh/you/app/pull/123/settings.webp path=/account/settings

gh/you/app/pull/456/redesign.webp path=/settings

More than file-hosting

Capture and host

uploads screenshot <url> captures and hosts in one step, with local and remote browser support and optional device chrome via --frame.

Point at the change

Bake hand-drawn boxes, arrows, labels, and solid redactions into a capture with screenshot --annotate or uploads annotate — so reviewers see what changed without hunting.

Upload over MCP

The hosted MCP server at agents.uploads.sh takes files as bytes or a URL and posts them to the PR, so agents with no shell, no gh, and no filesystem can still attach. GitHub has no public API (yet) for that.

Group into a gallery

Group uploads into a gallery that can live across multiple PRs — one link for the whole set that shows linked issues and pull requests.

More file types

PDFs, logs, JSON, and zips alongside images and video, so test reports and build output get the same stable URLs.

Bring your own bucket

Connect your own bucket to unlock custom domains and unmetered storage — hosted storage works out of the box, your bucket is there when you want it.

Get set up

clinpm install -g @buildinternet/uploads && uploads login
agentsuploads install # skills + mcp
promptSet up with your agent

paste the prompt into your coding agent — or read the full guide.

Sign in with GitHubfree to start in the cloud · open source to self-host