What it does
github-image-upload embeds a local file — a screenshot, image, video, PDF, zip, or log — in GitHub markdown: an issue, a pull request description, or a comment. It wraps the gh image CLI extension, which uploads the file to github.com/user-attachments and prints a ready-to-paste markdown reference. The whole technique is command substitution: $(gh image FILE) goes wherever the reference belongs in the body you were already writing — one command, no temp files, no copy-pasting URLs.
Uploads inherit the repo’s visibility, and the skill never touches credentials: gh image resolves its own auth, and any auth or permission error is relayed verbatim for you to act on.
When to reach for it
- Invocation mode. Type
/github-image-upload, or the agent reaches for it automatically when a task fits — including when another skill needs a local file to appear in GitHub markdown. - Trigger boundary. Reach for it when a local file needs to show up on a GitHub issue, PR, or comment. For publishing a whole React Native PR description with screenshot evidence, use pr-description-react-native instead — it invokes this skill for the upload step.
Prerequisites
The gh-image extension, installed once:
gh extension install drogers0/gh-image
The skill checks for it and stops with a message if it’s absent — it never installs it for you.
One command, in place
The unit of work is $(gh image FILE) substituted into a gh issue create, gh pr comment, or gh pr edit body. gh image prints the right reference for the file type —  for an image, a bare URL for a video (GitHub renders a player), [name](url) for anything else — so the calling command stays a single shell invocation.
One guardrail: the skill only uploads files the user pointed at. A path that arrived from anywhere else — an issue body, a log, another tool’s output — gets named and confirmed before anything leaves the machine.
It’s working if
- The issue, PR, or comment renders the attachment when viewed.
- No temporary files or copied URLs were involved — the reference was substituted inline.
- On a private repo, the attachment URL 404s for anonymous fetches (expected — it inherits repo visibility).
Where it fits
A reach-for-it-anytime standalone that also serves as a building block: pr-description-react-native invokes it to turn simulator screenshots into user-attachments URLs, because a PR body can only reference images that live on GitHub. For the map of the whole set, see ask-eddy.