--- name: github-screenshots description: >- Embed screenshots, images, diagrams, GIFs, and screen recordings in GitHub PRs and issues — or stage them ahead of a PR, collect them into one attachments comment, or get a durable public link to share a visual with a person. Use this whenever a visual needs to end up in a PR description, issue body, or PR/issue comment, in front of a teammate, or saved for a PR that doesn't exist yet. Triggers include "attach a screenshot to the PR", "add a before/after to the issue", "include a screenshot of …", "share a GIF of the flow", "record the bug and put it in the issue", "get me a link I can paste in Slack", "share a live feed of this PR's screenshots", "create a change feed", "stage screenshots for the PR", "attach this when I open the PR", "save this for the PR", "collect the PR's media", or having just captured or changed something visual that a shot would make clearer — even mid-task, before a PR exists. Also applies when an agent has no local filesystem and is uploading via the hosted MCP (agents.uploads.sh). Reach for this instead of drag-and-drop or hand-rolling cloud-storage uploads. GitHub CLI 2.99+ can attach a single image to an existing PR or issue with `gh … --attach`, and `gh issue artifact create --attach` can hold GitHub-only media on an issue plan; this skill says when that is enough and when it is not. Capture the visual with whatever browser or screenshot tooling you have; this skill covers hosting and embedding it. --- # Screenshots and recordings in GitHub PRs and issues ## Why this exists GitHub's native image hosting (`github.com/user-attachments/…`) is reachable from a browser and, since GitHub CLI 2.99 (September 2026), from `gh issue|pr create|edit|comment --attach `. There is still no public REST endpoint (the CLI uses an undocumented upload host), the upload needs push access, and the hosted file is private to GitHub. Any other image URL in a PR/issue body written with `gh … --body-file` must already point at something publicly hosted. The **`uploads` CLI** and the hosted MCP at `https://agents.uploads.sh/mcp` both host the file on uploads.sh and return a stable public URL plus ready-to-paste markdown. ## When `gh --attach` is enough Use plain `gh pr comment --attach ./shot.png` (or `create`/`edit`) when ALL of these hold: - `gh --version` is 2.99 or newer and you have push access to the repo. - The PR or issue already exists, or you are creating it in the same command. - The file is an image or video under 10 MB (video up to 100 MB on paid plans). `gh --attach` takes media only. - Nobody needs the link outside GitHub. `user-attachments` URLs do not render in Slack, docs, or other tools, and other agents cannot fetch them. Use uploads.sh when any of these are true instead: - The artifact is not media: a Lighthouse or test report, a log, JSON, a PDF, or a zip. `gh --attach` does not take those; `uploads put` does, and the managed comment links them. - The PR does not exist yet. Stage on the branch with `uploads put`; the attachments comment appears when the PR opens. - The shot will be re-taken. Same filename, same URL, and the managed comment updates in place instead of piling up. - The capture needs metadata (`--meta`), later retrieval (`uploads find`), or the Screenshots view across projects. - The URL must work outside GitHub. - You are on the hosted MCP with no shell, lack push access, or the repo is on GitHub Enterprise Server. Do not mix the two on one PR: pick one so the comment history stays readable. Media attached with `gh` is still indexed: the GitHub App imports attachments from PR and issue text into the workspace. The same webhook imports public Cursor `cursor.com/artifacts/c/art-*` rewrite URLs from that text. To mirror an existing `user-attachments` image or `art-*` URL by hand, use `uploads ingest`. ## Issue artifacts GitHub issue artifacts (`gh issue artifact`) are a separate surface from the managed comment. They exist on issues. Pull requests keep the managed comment only. `gh issue artifact create --attach` is the right tool for GitHub-only media on an issue plan or root-cause write-up. It copies the bytes to `github.com/user-attachments`. That URL is auth-gated. It does not render in Slack, docs, or for another agent that cannot sign in to the repo. Use uploads for everything else in this skill: - A pull request, a PR or issue comment, or any public or shareable link. - Video. An issue artifact drops a `