
The missing upload command for coding agents
uploads.sh is a CLI tool that solves the problem of coding agents not being able to easily show their work in GitHub pull requests. It automatically captures and stages screenshots on the current branch, so when a PR is opened, a single comment with all attachments appears without extra commands. Designed for AI coding agents and developers, it integrates with GitHub and works via npm install.
Running uploads put on a branch stages screenshots automatically — no --branch flag or PR needed yet.
Use uploads staged to see what's queued and whether it will auto-attach; re-running updates the same comment instead of adding a new one.
When you create a PR via gh pr create or GitHub UI, staged files promote automatically into a single attachments comment.
Use uploads attach to immediately attach screenshots to an already open pull request or issue.
Tag uploads with --meta key=value (e.g. --meta path=/settings) and later retrieve them with uploads find.
uploads screenshot <url> captures a page and hosts it in one step, supporting both local and remote browsers.
Wrap a raw screenshot in device chrome (phone, browser, specific iPhone) using the --frame option.
Group uploads into a gallery that can span multiple PRs, providing one link for the whole set with linked issues and pull requests.
The page states it is 'free to start in the cloud' and 'open source to self-host', indicating a free tier is available.
When you run uploads put on a branch, the file is staged. When you later open a PR using gh pr create or the GitHub UI, the staged files promote automatically into a single attachments comment.
No, the CLI works without the GitHub App. The App is optional and allows comments to post as the uploads-sh bot and staged screenshots to promote themselves when the PR opens.
Yes, use the uploads attach command to target an already open PR or issue immediately.
Tag your uploads with --meta key=value when uploading. Later, use uploads find with the key/value to retrieve them.
Yes, the uploads screenshot command accepts a URL and captures it in one step, supporting both local and remote browsers.