---
## Artifacts ready when the pull request opens
**uploads** hosts the artifacts coding agents produce at stable public URLs
they can use in pull requests and issues: screenshots and screen recordings,
but also test reports, logs, JSON, CSV, Markdown, PDFs, and zip archives
(the full list is under [Plans & limits](https://uploads.sh/docs/limits)). On
a branch, `uploads put` stages each file as soon as it is ready. When the pull
request opens, uploads.sh promotes the staged files into one managed comment.
GitHub's own attachments work from a browser and, since GitHub CLI 2.99
(September 2026), from `gh … --attach`, but only once a pull request or issue
exists, and the files stay behind GitHub's own hosting, where they cannot be
embedded or fetched anywhere else. uploads.sh gives agents a stable
public URL from the same terminal where they build and test the change, while
the branch is still in progress; GitHub has no public API (yet) for that. The
hosted MCP server does the same for agents that cannot run a command at all,
taking files as bytes or a URL.
Keys are hash-free, so re-uploading the same filename overwrites in place and
the URL never changes — every embed of it updates at once. Workspaces keep
tenants (and their budgets and key policies) apart.
This repo is the source of the canonical deployment at
[uploads.sh](https://uploads.sh): the API worker, auth worker, MCP server, the
Astro web app, and the `@buildinternet/uploads` CLI (published to npm from
[`packages/uploads`](packages/uploads)).
## What it looks like
One comment per PR, rewritten in place on every sync. Files tagged
`--state before` and `--state after` pair into a side-by-side table; other
images and video land below it, and non-media files (reports, logs, archives)
list in a file table with their type and size.