Now agents can show their work on pull requests, too.
GitHub doesn't have first-class uploads for agents. The uploads CLI gives them one command: uploads attach puts screenshots and recordings on the PR, hosted at stable URLs with tagged metadata, in one tidy comment.
$ uploads attach ./before.png ./after.png
└─▶ which lands on your pull request as:
📎 Attachments
# what else it does
one managed comment
attach keeps a single attachments comment per PR or issue. Run it again and the same comment updates — no comment spam.
stable, hash-free urls
Keys like gh/you/app/pull/123/shot.webp never change. Re-upload the same filename and every embed shows the new image in about a minute.
images optimized, video passed through
Images are re-encoded to WebP with EXIF stripped. MP4, WebM, GIFs, and other files upload as-is.
device frames
--frame phone, browser, or iphone-16-pro puts a raw screenshot inside device chrome.
queryable metadata
Tag any upload with --meta path=/settings and query it back with uploads find. attach stamps gh.repo and PR context automatically.
one-command screenshots
uploads screenshot <url> captures and hosts in one step — your local browser if you have one, remote render if you don't.
shareable galleries
Group uploads into a public gallery page at uploads.sh/g/… — one link for a whole set of media (via the API).
workspaces
Each workspace gets its own tokens, storage caps, upload limits, and retention rules. Nothing is shared between them.
$ uploads attach ./settings.png --meta path=/settings --meta app=web
>> uploading ./settings.png
>> optimized 402.3 KB → 91.7 KB (settings.webp)
>> attachments comment updated
>> find these later: uploads find gh.ref=pull/123
$ uploads find path=/settings
gh/you/app/pull/123/settings.webp app=web gh.number=123 gh.repo=you/app path=/settings
▸ Setting up an agent to do this end to end? Read the guide: how to get agents to upload screenshots & video to GitHub.