Install
$ agentstack add skill-buildinternet-uploads-github-screenshots ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Screenshots and recordings in GitHub PRs and issues
Why this exists
GitHub's native image hosting (github.com/user-attachments/…) only works from an authenticated browser session — there is no gh CLI or REST endpoint for it. Any image URL in a PR/issue body written with gh … --body-file must already point at something publicly hosted. The uploads CLI provides that: it hosts the file on uploads.sh and returns a stable public URL plus ready-to-paste markdown.
Step 1 — Get the visual (any tool)
Capture is tool-agnostic. Use whatever this environment has and save a local file:
- The agent harness's own browser tools (screenshot the preview pane).
- A Playwright/browser MCP,
agent-browser, or similar automation. - An OS screenshot or screen recording the user already made.
- Any existing image, GIF, or diagram file.
GIFs and video upload as-is — the client-side optimizer only rewrites still images (PNG/JPEG → WebP). No special flags needed for motion.
Step 2 — Host and embed
For the common case — files attached to the current branch's PR — use uploads attach. It infers the PR, uploads under stable keys in parallel, and maintains a single managed "attachments" comment. Multi-file runs keep going if one path fails (failures in --json; exit 1 when any failed):
uploads attach ./before.png ./after.png
uploads attach ./flow.gif --issue 45 --repo myorg/myapp
uploads attach ./shot.png --no-comment # stable URLs only, no comment
For a URL you'll hard-code in a PR/issue body (re-uploads overwrite in place, URL never changes):
uploads put ./after.png --pr 123 --alt "Dashboard after" --width 700
For a durable public link to share anywhere (Slack, docs, a teammate):
uploads put ./demo.gif --format url
Always embed the returned markdown (or embedUrl) in GitHub — it uses the no-cache host so overwrites propagate. Don't hand-build storage URLs.
Step 3 — Embed well
- Meaningful alt text, always (
--alt). - Constrain width on large shots with
--width(emits sized ``). - Before/after reads best side by side:
``markdown | Before | After | | ------------------------------------ | ----------------------------------- | | | | ``
- Motion: GitHub markdown won't autoplay MP4 URLs — prefer a GIF, or a
still image that links to the video URL.
- Write bodies to a file and use
gh pr edit --body-file/ `gh issue comment
--body-file` rather than inline HEREDOCs.
Setup and escalation
- CLI missing?
npm install --global @buildinternet/uploads - Not authenticated?
uploads login(one-time, opens a browser), then
uploads doctor to verify.
- Everything deeper — flags, key layouts, metadata and search, galleries,
config defaults, output formats, exit codes — lives in the uploads-cli skill and uploads --help.
Cautions
- Uploads are public and effectively permanent until deleted. GitHub repo
visibility is not an access control, and gh///pull//… keys are predictable. Never upload secrets, tokens, or customer PII — crop/redact first.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: buildinternet
- Source: buildinternet/uploads
- License: MIT
- Homepage: https://uploads.sh
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.