claude/skills/upload-pr-images/SKILL.md
Upload images to a GitHub PR description or comment using a shared gist as image hosting. Use when the user wants to add plots, screenshots, or other images to a PR.
npx skillsauth add tbroadley/dotfiles upload-pr-imagesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
GitHub's API doesn't support direct image uploads to PR descriptions. This skill uses a shared gist as persistent image hosting.
Use the existing gist for all image uploads:
a7a894454779b8c3a27906f0e8d026fbtbroadleyhttps://gist.github.com/a7a894454779b8c3a27906f0e8d026fb.gitGIST_ID="a7a894454779b8c3a27906f0e8d026fb"
GIST_DIR="/tmp/gist-images/${GIST_ID}"
if [ -d "$GIST_DIR" ]; then
cd "$GIST_DIR" && git pull
else
mkdir -p /tmp/gist-images
gh gist clone "$GIST_ID" "$GIST_DIR"
cd "$GIST_DIR"
fi
Use descriptive filenames. If updating existing files, make them writable first (gist files from gh gist clone may be read-only):
chmod u+w "$GIST_DIR"/*.png 2>/dev/null
cp /path/to/image.png "$GIST_DIR/descriptive_name.png"
cd "$GIST_DIR"
git add -A
git commit -m "Add images for PR #<number>"
git push
GitHub caches gist raw URLs aggressively. Pin URLs to a specific commit to ensure updated images are shown:
COMMIT=$(cd "$GIST_DIR" && git rev-parse HEAD)
https://gist.githubusercontent.com/tbroadley/a7a894454779b8c3a27906f0e8d026fb/raw/<COMMIT>/<filename>.png
BASE="https://gist.githubusercontent.com/tbroadley/${GIST_ID}/raw/${COMMIT}"
gh api repos/{owner}/{repo}/pulls/{number} -X PATCH -f body="$(cat <<EOF
## Plots

EOF
)"
Use gh api instead of gh pr edit to avoid "Projects (classic) deprecation" errors.
git rev-parse HEAD). Short hashes (e.g., 4f295cd) return 404 on gist.githubusercontent.com.chmod u+w before overwriting files — gist clones may have read-only permissions.gh gist create directly — the git clone/push approach is required.! escaping: Never build the PR body in a double-quoted bash variable — ! in  gets escaped to \! by bash history expansion, breaking image markdown. Always use a heredoc (<<EOF) to pass the body to gh api, as shown in step 6.tools
Add words to the Wispr Flow dictionary. Use when the user wants to add a word, phrase, or snippet to Wispr Flow for voice dictation.
testing
Manage tasks, projects, and productivity in Todoist. View tasks, add new items, check completed work, and organize projects.
data-ai
Use when working with stacked diffs (branch B based on branch A, which is based on main).
development
Read and analyze Inspect AI evaluation log files using the Python API. Extract samples, messages, events, and metrics from .eval files.