| name | gh-image |
| description | Upload local images to GitHub and get canonical user-attachments embed URLs; use when asked to attach a screenshot to a PR, issue, or comment, or to embed before/after images in a README. |
| category | developer-tools |
| risk | critical |
| source | community |
| source_type | community |
| source_repo | drogers0/gh-image |
| date_added | 2026-06-25 |
| author | drogers0 |
| license | MIT |
| license_source | https://github.com/drogers0/gh-image/blob/main/LICENSE |
| tags | ["github","images","screenshots","gh-extension","cli"] |
| tools | ["claude-code","codex-cli","cursor","gemini-cli"] |
| plugin | {"targets":{"codex":"blocked","claude":"blocked"},"setup":{"type":"manual","summary":"Installs and runs a third-party gh extension that needs a GitHub user_session cookie or GH_SESSION_TOKEN.","docs":"SKILL.md"}} |
Upload images to GitHub (gh-image)
GitHub has no public API for image uploads — the web UI uses an internal
endpoint that mints user-attachments URLs scoped to the repo's visibility.
gh-image (MIT, © drogers0) replicates
that flow as a gh CLI extension, so an agent can upload a local image from the
terminal and get a ready-to-embed Markdown image line back.
Overview
This skill drives gh-image to turn a local image file into a hosted GitHub
user-attachments URL, then embeds that URL into a pull request, issue, or
comment. It is the missing "attach a screenshot" capability for terminal agents.
When to Use This Skill
Use this skill when asked to:
- "Attach a screenshot to the PR" or "add an image to the PR description"
- "Put this image in the issue" / "comment with these screenshots"
- "Show the test results / before-and-after in the PR"
- Embed any local image into GitHub Markdown without leaving the terminal
How It Works
Step 1: Verify prerequisites
gh auth status
gh extension list | grep -q 'drogers0/gh-image' \
|| gh extension install drogers0/gh-image
gh-image does not use the gh token for the upload (that endpoint rejects
tokens). It needs a GitHub user_session cookie, resolved in this order:
--token <value> flag → GH_SESSION_TOKEN env var (use in CI/headless) → a
logged-in browser's cookie store (default for local use).
Step 2: Upload
gh image "/abs/path/screenshot.png" --repo <owner>/<repo>
gh image prints Markdown to stdout, one line per image:

Capture that output — it is the embeddable reference.
Step 3: Embed into the PR / issue / comment
MD=""
BODY=
\
| gh edit <> --repo owner/repo --body-file -