PR Babysitter
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
Embed a local image file into an existing GitHub PR — either in the PR body or as a comment.
$ npx skills add bikeindex/bike_index --skill github-pr-images -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install bikeindex/bike_index github-pr-images --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/bikeindex/bike_index.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/github-pr-images .claude/skills/github-pr-images && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "github-pr-images" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/github-pr-images into .claude/skills/github-pr-images/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "github-pr-images", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/bikeindex/bike_index/tree/main/.claude/skills/github-pr-imagesType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add bikeindex/bike_index --skill github-pr-images -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install bikeindex/bike_index github-pr-images --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bikeindex/bike_index.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/github-pr-images .agents/skills/github-pr-images && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "github-pr-images" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/github-pr-images into .agents/skills/github-pr-images/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "github-pr-images", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add bikeindex/bike_index --skill github-pr-images -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install bikeindex/bike_index github-pr-images --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bikeindex/bike_index.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/github-pr-images .cursor/skills/github-pr-images && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "github-pr-images" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/github-pr-images into .cursor/skills/github-pr-images/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "github-pr-images", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/bikeindex/bike_index.git --path .claude/skills/github-pr-images--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add bikeindex/bike_index --skill github-pr-images -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install bikeindex/bike_index github-pr-images --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bikeindex/bike_index.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/github-pr-images .gemini/skills/github-pr-images && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "github-pr-images" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/github-pr-images into .gemini/skills/github-pr-images/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "github-pr-images", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install bikeindex/bike_index github-pr-imagesInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add bikeindex/bike_index --skill github-pr-images -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/bikeindex/bike_index.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/github-pr-images .github/skills/github-pr-images && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "github-pr-images" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/github-pr-images into .github/skills/github-pr-images/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "github-pr-images", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add bikeindex/bike_index --skill github-pr-images -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install bikeindex/bike_index github-pr-images --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bikeindex/bike_index.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/github-pr-images .opencode/skills/github-pr-images && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "github-pr-images" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/github-pr-images into .opencode/skills/github-pr-images/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "github-pr-images", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
github-pr-imagesEmbed a local image file into an existing GitHub PR — either in the PR body or as a comment.
GitHub PR Images is an agent skill from bikeindex/bike_index. Embed a local image file into an existing GitHub PR — either in the PR body or as a comment. Trigger when a request pairs a local image (screenshot, .png/.jpg, CleanShot capture, before/after) with an existing PR (by number, URL, branch name, or "the open PR"), regardless of verb — attach, embed, add, put, post, drop, show, document. Also covers visually documenting test runs, bug repros, UI states, or CI failures on an existing PR. Uploads through gh's --attach flag — except in the Claude Code web sandbox, which…
Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files and assets (for example `assets/commit_images.sh` and `references/web-sandbox.md`).
It sits in Development, covering Pull requests and Failing and flaky tests. It works with GitHub. The repository describes itself as: All the code for Bike Index, because we love you. The licence is AGPL-3.0.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit ba388d8. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
Bash(gh:*)Bash(rtk proxy gh:*)Bash(ruby .claude/skills/github-pr-images/assets/inline_attachments.rb:*)Bash(brew upgrade gh)Bash(cp:*)Bash(bash .claude/skills/github-pr-images/assets/commit_images.sh:*)Bash(curl -sI https://raw.githubusercontent.com/:*)ReadWritemcp__github__list_pull_requests…and 4 more on the same allowed-tools line.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Shell and Ruby), which the agent can run.
Shell commands in SKILL.md call:
ghbrewrubyFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
GitHub PR Images loads about 1.8k tokens when it runs, and up to ~2.7k if it reads all its reference files. Until then it costs about 210 tokens; SKILL.md has 763 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from bikeindex/bike_index at commit ba388d8, republished under its AGPL-3.0 licence (© bikeindex). 763 words, ~1,807 tokens.
.claude/skills/github-pr-images/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.gh pr comment, gh pr edit and gh pr create take --attach '<file>#<alt text>', up to 50 per command. A markdown  reference to an attached path is rewritten in place to the uploaded user-attachments/assets/ URL. An <img src="tmp/x.png"> isn't — it keeps its path, and the upload is appended to the end as , as is any attached file the body doesn't reference.
There's no upload-only call: assets upload as part of posting, so callers hand over a body that references local paths, never URLs they need back first.
$CLAUDE_CODE_REMOTE decides which, before anything else here.
true — the web sandbox, which has no gh and follows references/web-sandbox.md for the whole flow.
Unset — make sure gh has --attach:
gh help pr comment | grep -q -- --attach || brew upgrade ghgh help pr comment, not gh pr comment --help — the rtk hook swallows the latter's output. Still missing after the upgrade, or no gh at all → stop and say so, posting nothing.
If the user didn't specify a PR number or URL, auto-detect it:
gh pr view --json number,url -q '"\(.number) \(.url)"'Reference each image by its path from the repo root, the same in the body as in --attach. A path with special characters (Unicode narrow spaces from CleanShot X) goes through the project's tmp/ first:
cp /path/to/CleanShot*keyword*.png tmp/screenshot.pngA caller's body is posted verbatim — don't recompose it. Composing it yourself:
## Screenshots
<img src="tmp/screenshot.png" width="500">Images in table cells want <img … width=…>; elsewhere  is fine. Don't give an <img>'s file a #alt on --attach — step 3's script finds its upload by the basename gh uses as the default alt.
This skill owns the ## Screenshots comment: one per PR, authored by you, body starting ## Screenshots even when what's under it isn't screenshots — retitle it and the next run can't find it.
ME=$(gh api user --jq .login)
gh api --paginate "repos/{owner}/{repo}/issues/$PR_NUMBER/comments" \
--jq ".[] | select(.user.login == \"$ME\") | {id, body: .body[:14]}"The comment whose body starts ## Screenshots is $SCREENSHOT_COMMENT_ID. --paginate matters — on a busy PR it often isn't on the first page.
A caller updating one page of a multi-page comment needs the current body to edit — hand it back on request: gh api repos/{owner}/{repo}/issues/comments/$SCREENSHOT_COMMENT_ID --jq .body.
Write the body to a file. With images to upload, attach one --attach per image the body references, and update $SCREENSHOT_COMMENT_ID in place rather than replacing it — a re-capture never posts a second comment. Which command depends on whether it's your last comment on the PR:
gh api --paginate "repos/{owner}/{repo}/issues/$PR_NUMBER/comments" --jq ".[] | select(.user.login == \"$ME\") | .id" | tail -1$SCREENSHOT_COMMENT_ID yet — post it: rtk proxy gh pr comment $PR_NUMBER --body-file <file> --attach tmp/a.png --attach tmp/b.png.--edit-last takes --attach, so the same command with --edit-last edits it in place and keeps its id.--edit-last would hit that later one. Upload through a stand-in: post the body as a new comment with its --attaches, run the script below on it, write its body to a file (gh api …/issues/comments/<stand-in-id> --jq .body), PATCH that into $SCREENSHOT_COMMENT_ID as under With nothing to upload, then gh api -X DELETE the stand-in.Then, on the comment the uploads landed on:
ruby .claude/skills/github-pr-images/assets/inline_attachments.rb {owner}/{repo} <comment-id>rtk proxy because the hook reduces the output to "ok commented", and the comment URL it prints carries the id. The script moves each appended upload into its <img src> and PATCHes the comment; it stops without patching if a local src has no upload to take. An image already uploaded stays in the body as its asset URL — attach only what was recaptured.
With nothing to upload, edit in place: gh api -X PATCH repos/{owner}/{repo}/issues/comments/$SCREENSHOT_COMMENT_ID -F body=@<absolute-path> --jq .html_url. -F reads a file from @; -f would post the literal @<file>. The path is absolute because gh resolves @ against the shell's cwd.
Only edit the PR description when the user explicitly asks: gh pr edit $PR_NUMBER --body-file <file> --attach …, referencing images as  — the script patches comments only — with the existing body plus a ## Screenshots section — replace that section if it's already there rather than adding a second. The pr-guardrails hook denies gh pr edit until the pr skill is loaded.
Read the posted body back:
gh api repos/{owner}/{repo}/issues/comments/<id> --jq .bodyPass: no tmp/ path left, an https://github.com/user-attachments/assets/ URL in place of each attached file, and still one ## Screenshots comment on the PR — rerun Step 3's listing. Don't curl those URLs — they 302 to a session-signed S3 URL that 403s unauthenticated.
| Issue | Solution |
|---|---|
unknown flag: --attach | brew upgrade gh |
no upload matched: <path> | The <img>'s file wasn't attached, or its --attach gave a #alt — the script matches on the default alt, the basename |
| File path with special characters (e.g., Unicode narrow spaces from CleanShot) | cp /path/CleanShot*keyword*.png tmp/screenshot.png |
| Upload refused | --attach needs push access to the repo, and takes images and video only |
© bikeindex, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files (references, assets) in .claude/skills/github-pr-images of bikeindex/bike_index.
Open the folder on GitHubat commit ba388d8
GitHub PR Images next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| GitHub PR Images this skillbikeindex/bike_index | 308 | — | ~1.8k | Automated safety check: Pass | AGPL-3.0 | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| IterateOpenHands/extensions | 158 | — | ~3.8k | Automated safety check: Pass | MIT | |
| Exposed Bug Fix WorkflowJetBrains/Exposed | 9.3k | — | ~3.8k | Automated safety check: Pass | Apache-2.0 | |
| Debug Os Failure On GitHubstrands-agents/box | 110 | — | ~1.3k | Automated safety check: Notes | Apache-2.0 | |
| Has Review Workopenshift-eng/ai-helpers | 120 | — | ~1.9k | Automated safety check: Pass | Apache-2.0 |
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
OpenHands/extensions
Iterate on a GitHub pull request — drive it through CI, code review, and QA until it is merge-ready.
JetBrains/Exposed
Takes a GitHub or YouTrack issue for the Exposed project through reproduction, a failing test, a fix, validation and a pull request.
strands-agents/box
Debug a CI failure on an OS you are not on (you are on Linux, it fails on macos-latest, or the reverse) without opening a pull request per attempt.
openshift-eng/ai-helpers
Decide whether a GitHub PR has unanswered authorized review comments or new required CI failures worth a follow-up agent.
tech-leads-club/agent-skills
Address review and issue comments on the open GitHub PR for the current branch using gh CLI.
bikeindex/bike_index
Read live production data from Bike Index through the admin OAuth token — Sidekiq and PgHero status, and the user-submitted bug reports — the same data as the cookie-gated dashboards, but…
bikeindex/bike_index
Add a manufacturer to Bike Index in production through the admin OAuth token (POST /admin/manufacturers).
bikeindex/bike_index
Create or update a pull request for the current branch. An agent skill from bikeindex/bike_index.
bikeindex/bike_index
How to fix a test that fails intermittently in Bike Index — one that passes locally but fails on CI, fails on one shard, passes on re-run, or is already tagged :flaky.
bikeindex/bike_index
Investigate and fix a specific Honeybadger exception in the Bike Index app — pull the fault, read its backtrace, find the offending code, write the fix.
bikeindex/bike_index
How to bring a branch up to date and resolve git merge conflicts the way this repo expects — merge (never rebase or force-push), understand each side's intent before choosing, ask when a resolution…
Works with
Categories
Embed a local image file into an existing GitHub PR — either in the PR body or as a comment. GitHub PR Images is an agent skill from bikeindex/bike_index. Embed a local image file into an existing GitHub PR — either in the PR body or as a comment.
GitHub PR Images fits situations like: A request pairs a local image (screenshot; cleanShot capture; before/after) with an existing PR (by number; regardless of verb — attach.
Run `npx skills add bikeindex/bike_index --skill github-pr-images -a claude-code`. Or copy the skill folder (.claude/skills/github-pr-images in bikeindex/bike_index) into .claude/skills/github-pr-images in your project. Claude Code loads it when a task matches its description.
Run `npx skills add bikeindex/bike_index --skill github-pr-images -a codex`. Or copy the skill folder (.claude/skills/github-pr-images in bikeindex/bike_index) into .agents/skills/github-pr-images in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add bikeindex/bike_index --skill github-pr-images -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/github-pr-images, .gemini/skills/github-pr-images, .github/skills/github-pr-images and .opencode/skills/github-pr-images in your project.
Going by SKILL.md and its folder, GitHub PR Images needs a shell and Ruby for the scripts in its folder and the command-line tools its instructions call (gh, brew and ruby). Our summary lists: A Bash shell. Its frontmatter pre-approves these tools: Bash(gh:*), Bash(rtk proxy gh:*), Bash(ruby .claude/skills/github-pr-images/assets/inline_attachments.rb:*), Bash(brew upgrade gh), Bash(cp:*), Bash(bash .claude/skills/github-pr-images/assets/commit_images.sh:*), Bash(curl -sI https://raw.githubusercontent.com/:*), Read, Write, mcp__github__list_pull_requests, mcp__github__get_me, mcp__github__issue_read, mcp__github__add_issue_comment, mcp__github__update_issue_comment.
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
GitHub PR Images is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.8k tokens (SKILL.md is roughly 7.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 889 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with GitHub PR Images: PR Babysitter (openinterpreter/openinterpreter, 69k stars), Iterate (OpenHands/extensions, 158 stars), Exposed Bug Fix Workflow (JetBrains/Exposed, 9.3k stars) and Debug Os Failure On GitHub (strands-agents/box, 110 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
bikeindex (a GitHub organization) maintains it in bikeindex/bike_index, which has 308 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on October 8, 2026.
Source: bikeindex/bike_index on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.