The missing upload command for coding agents.
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.
# capture as you work — no PR yet
$uploads put ./after.png
└─▶ your PR opens with screenshots already attached:


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: 
# 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
▸ paste the prompt into your coding agent — or read the full guide.