Angular Cop
fmflurry/settings-opencode
Pre-merge code review for Angular + TypeScript pull requests.
Create or update a pull request for the current branch. An agent skill from bikeindex/bike_index.
$ npx skills add bikeindex/bike_index --skill pr -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install bikeindex/bike_index pr --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/pr .claude/skills/pr && 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 "pr" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/pr into .claude/skills/pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr", 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/prType 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 pr -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install bikeindex/bike_index pr --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/pr .agents/skills/pr && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pr" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/pr into .agents/skills/pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr", 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 pr -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install bikeindex/bike_index pr --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/pr .cursor/skills/pr && 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 "pr" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/pr into .cursor/skills/pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr", 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/pr--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 pr -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install bikeindex/bike_index pr --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/pr .gemini/skills/pr && 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 "pr" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/pr into .gemini/skills/pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr", 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 prInstalls 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 pr -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/pr .github/skills/pr && 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 "pr" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/pr into .github/skills/pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr", 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 pr -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 pr --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/pr .opencode/skills/pr && 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 "pr" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/pr into .opencode/skills/pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr", 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.
prCreate or update a pull request for the current branch. An agent skill from bikeindex/bike_index.
PR is an agent skill from bikeindex/bike_index. Create or update a pull request for the current branch. Trigger when the user asks to create/open/make a PR, or to edit/update/rewrite/fix the PR description, body, summary, or title — including bare phrasings like "update pr" or "update the PR" with no other object — for both new PRs and existing ones. Also trigger when the ask is to re-host, recreate, or duplicate an existing PR under this repo (e.g. "close this PR and open a new one of the same changes, not a fork") — that's still creating a PR even with no…
Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/pre-push-cleanup.md` and `references/screenshots.md`).
It sits in Development, covering Pull requests, Linting and formatting and Agent instruction files. The repository describes itself as: All the code for Bike Index, because we love you. The licence is AGPL-3.0.
5 steps, taken from the first numbered list 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 nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitghcurlFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, gh and curl, which can reach the network depending on how they are called.
From 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.
PR loads about 4.3k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 227 tokens; SKILL.md has 2,517 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). 2,517 words, ~4,254 tokens.
.claude/skills/pr/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Five sections, run in this order:
Shell state does not persist between commands. Each command below runs in its own shell, so a BASE=main in one is gone by the next. Substitute the real values into every command — write origin/main, not origin/$BASE — and carry the base branch and PR number in your head, not in the environment. Every origin/main below means "the base branch from Orient".
Run the gh commands as written. The appendix at the bottom covers the one environment that has no gh.
git status (no -uall). Everything below diffs origin/main...HEAD, which only sees committed work, and the merge in Prepare the branch needs a clean tree — so the tree has to be clean before you go further.
The base is the branch the PR goes off of — main by default. The head is always the current branch (HEAD), so the branch that sets the base is a different one the user points at: "a PR off of release-2", "base this on release-2", "onto/target release-2", "stacked on <branch>", or a --base <branch> argument. Naming the branch you're already on only identifies the head — the base stays main. If it's genuinely unclear whether a named branch is meant as the base, ask rather than guess. Never silently retarget an explicitly-named base to main.
When updating an existing PR, leave its base untouched — run gh pr edit without --base. Only retarget when the user explicitly asks.
Skipped in full when the ask is only to reword an existing PR's description — fixing the wording shouldn't rewrite code. Everything else (creating a PR, "get this ready", an update after new commits) runs it.
Bring the branch up to date so the PR reflects the current base and merges without surprises. Follow the merge-conflicts skill: git fetch origin then git merge --no-edit origin/main, merge (never rebase), keep the merge commit to just the merge, and resolve conflicts per that skill.
This has to happen before the cleanup below, which diffs against origin/main.
references/pre-push-cleanup.md has this in full: /simplify, bin/lint scoped to the branch's files, branch-scoped specs, a pass over the changed files against AGENTS.md, its five audits — spec, documentation, churn, comment and backfill — and the cycle-type translation check. The audits are required every run, not just when the diff looks messy. Commit everything it produces before re-dating migrations.
Migrations this branch adds have to be dated within the past 2 days, or the rollback/rename/re-migrate order in references/pre-push-cleanup.md re-dates them. Skip when the branch adds no migrations.
Run in parallel:
git diff origin/main...HEAD --statgit diff origin/main...HEAD --name-onlygit log origin/main..HEAD --onelinegh pr view --json number,url,title,stateDiff against origin/main, not the local base branch — in a Conductor worktree the local base often lags the remote, which would inflate or stale the diff. If you skipped Prepare the branch, git fetch origin first. If the branch has no commits ahead of origin/main, stop and tell the user.
rtk proxy the git log — rtk's hook strips merge commits from git log --oneline, so the merge Prepare the branch just made is absent and the branch reads as though it never merged.
gh pr view exits non-zero with "no pull requests found" when the branch has none — that's the answer to the create-or-update question below, not a broken command, and it's the normal case on a first run.
gh pr view returns MERGED and CLOSED PRs too. Only a PR whose state is OPEN counts as existing — for a merged or closed one, create a new PR rather than editing it. Note the number; the push and Screenshots both need it.
No bin/env eval is needed here — it's only relevant to the screenshot phase, and frontend-screenshots runs its own in preflight. Backend-only PRs never touch it.
The diff is frontend if a changed path matches one of these and renders a page a reviewer could look at:
app/views/** (.erb, .html.erb, .haml — deprecated, but still most of the directory)app/components/** (ViewComponent templates or Ruby)app/javascript/**app/assets/**config/tailwind*, tailwind.config.*, postcss.config.**.scss, *.css, *.coffee, *.js, *.tsExcluded despite matching: mailer views (app/views/*_mailer/**, app/views/user_emails/**) and email components (app/components/emails/**) — capture those only when the user asks, via the mailer preview frontend-screenshots documents. API and JSON views (app/views/api/**, *.json*, *.jbuilder), and build config (app/assets/config/manifest.js, esbuild.config.js). A diff that only changes comments or non-rendering config isn't frontend either.
Markup a reviewer can't see is also excluded — a tw:hidden field, a data- attribute, an aria- or meta change. It renders, so the paths above match it, but before and after are the same image, and the ## Screenshots comment it produces is two identical captures. Ask what the shot would show, not whether a template changed. #4222 and #4262 (the register honeypot, added to each step) are the pattern; neither posted screenshots.
Record this as frontend true/false — it's what Screenshots gates on.
Write the body to a file under the repo's own tmp/; a PreToolUse hook refuses writes outside the checkout. Read the last few merged PRs first — gh pr list --state merged --limit 5 --json title,body — they're the tone to match. The house shape is a short intro paragraph saying what was broken or what this is, then 2–4 bullets each opening with a bolded clause. Title under ~70 chars.
Rules:
#3918, not a branch name: gh pr list --head <branch> --state all --json number --jq '.[0].number'. Name the branch only when it has no PR.gh is missing: create_pull_request and add_issue_comment append one server-side (the tell is the session id in its link), while the update_* calls don't — so read back what you posted and strip it with an update.Backfills:: job, the intro says existing rows need one, and the first bullet names the job with the command that runs it once after deploy — Backfills::…Job.perform_async. #4429 is the pattern.Closes #4103 on its own line. Don't invent a number.If a bullet is turning into an essay, compress it to one sentence naming the kind of change.
git push -u origin HEADDon't report the local branch name differing from the name in the invocation when the branch has no upstream — pushing HEAD creates a matching remote, so it's benign. Only flag a mismatch when the local branch already tracks a differently-named upstream. If the push is rejected as non-fast-forward, go back to Prepare the branch.
A branch already tracking a differently-named upstream — a Conductor -v1 local on origin/<name> — takes git push origin HEAD:<upstream-branch> instead. git push -u origin HEAD creates a second remote branch and leaves the existing PR behind on the first.
Open PR found above: gh pr edit <number> --title "..." --body-file <tmp-body-file>. Refresh the title to match the current diff (that's what "update pr" expects) unless the user gave it a deliberate custom title — if unsure, keep the title and update only the body.
Read the current body before you replace it. A human may have edited it since your last run — added a caveat, a reviewer note, a deploy instruction. Anything you can't account for as your own writing gets carried into the new body, or asked about. Don't overwrite it silently.
Otherwise: gh pr create --draft --base main --title "..." --body-file <tmp-body-file>. Draft by default; only skip --draft if the user asks for ready-for-review. Note the new number for Screenshots.
Always pass the body via --body-file, not inline --body, to preserve formatting.
This workflow posts one kind of comment — the ## Screenshots one — and at most one per PR, edited in place on later runs. Everything else you have to say goes in the body when a reviewer needs it, and in your reply to the user otherwise. Findings, caveats, evidence you gathered, what you decided not to fix: none of those earn a comment of their own, however well they'd read as one. Don't invent a comment type because you have something to say.
The one that talks itself into existence is the "still accurate" update — a later push makes you wonder whether an earlier comment went stale, so you post that it hasn't. Re-run whatever produced it and edit that comment, or say nothing. Never reason your way to "it still holds" in place of re-running; whether a claim is still true is something to tell the user in chat.
Two gates, either of which skips the section outright:
## Screenshots comment already exists: the user asked for those captures, so a commit since the last one that changes what they show stales them even here. Recapture only those pages.gh, with $CLAUDE_CODE_REMOTE unset. Then there is nowhere to host or post the images, so don't capture them and don't post anything in their place. Say so in your summary. The web sandbox is not this case, though it has no gh: $CLAUDE_CODE_REMOTE is true there, and the section runs, because github-pr-images hosts through the PR branch's history — see the appendix.A dev server you believe is down is not a gate. Run curl -fs "$BASE_URL/" now, whatever an earlier check in the session said — the user starts bin/dev whenever, and #4319 went out without screenshots on a stale "isn't running". Only a failing curl this run is a reason to stop and ask.
Otherwise read references/screenshots.md and follow it to capture before/after screenshots and post them as a PR comment. Screenshot tooling never blocks the PR — if it fails, report the failure and carry on to What this run taught you.
Last, before reporting the PR URL. Look back over the whole run and ask whether the repo's own instructions should change:
AGENTS.md (root, or the nested one nearest the code)./simplify or the AGENTS.md pass flag the same thing more than once? A repeated correction is a missing written rule.Most runs turn up nothing — say so and stop.
Two bars before you edit a skill, because a wrong edit here is permanent and costs every future run:
Then make the edit — commit it onto the branch, push, and update the body if it's worth a bullet. Prefer editing to reporting: a change you only describe is one the next run rediscovers.
Then return the PR URL.
ghOnly the Claude Code web sandbox (/home/user/bike_index, where $CLAUDE_CODE_REMOTE is true) lacks the GitHub CLI; everywhere else the sections above run as written, and you shouldn't check. If a gh command comes back "command not found", swap in the GitHub MCP equivalents — the rest of the workflow is unchanged, including git push.
| Where | gh | MCP |
|---|---|---|
| Publish | gh pr view --json …,state | list_pull_requests, state: "open", head: "bikeindex:<branch>" |
| Publish | gh pr list --state merged | list_pull_requests, state: "closed" |
| Publish | gh pr create --draft | create_pull_request, draft: true, head: "<branch>" |
| Publish | gh pr edit <n> --body-file | update_pull_request |
Three traps in that column: head takes owner:branch when listing but a bare branch name when creating; the body is a string parameter, so --body-file has no equivalent; and list_pull_requests reports merged: false even for merged PRs — which is why the branch-state query asks for open PRs rather than filtering all on that field.
Screenshots do run here, though gh doesn't: github-pr-images' references/web-sandbox.md commits the images to the PR's branch, deletes them in a second commit, and posts sha-pinned raw.githubusercontent.com URLs through the MCP tools. Capture as normal and follow that reference for the hosting and posting steps. Those URLs live as long as the branch's objects do, so say in your summary that a merged PR's screenshots aren't archival.
© 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 2 other files (references) in .claude/skills/pr of bikeindex/bike_index.
Open the folder on GitHubat commit ba388d8
PR 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 |
|---|---|---|---|---|---|---|
| PR this skillbikeindex/bike_index | 308 | — | ~4.3k | Automated safety check: Pass | AGPL-3.0 | |
| Angular Copfmflurry/settings-opencode | 171 | — | ~1.4k | Automated safety check: Pass | MIT | |
| Babysit PR To Pass CIsgl-project/sglang | 37k | 2 repos | ~3k | Automated safety check: Pass | Apache-2.0 | |
| Ansible Development Contextansible/ansible | 71k | — | ~427 | Automated safety check: Pass | GPL-3.0 | |
| Changesetbiomejs/biome | 26k | — | ~839 | Automated safety check: Pass | Apache-2.0 | |
| Pre Pipeline Reviewsuperplanehq/superplane | 7.7k | — | ~1.2k | Automated safety check: Pass | Custom licence |
fmflurry/settings-opencode
Pre-merge code review for Angular + TypeScript pull requests.
sgl-project/sglang
Start and persistently pursue a goal to babysit an SGLang pull request until selected GitHub Actions workflows pass on the latest PR head.
ansible/ansible
Load Ansible project development guidelines, testing conventions, PR review processes, and code structure reference into context
biomejs/biome
A skill your agent uses when a Biome change may affect users and you must decide whether it needs a changeset, choose the release level, or create and edit .changeset/.md release-note text.
superplanehq/superplane
Reviews SuperPlane code changes for correctness and reuse, then runs fast Make targets (lint, format, build) that Semaphore CI runs so easy checks do not fail in the pipeline.
Tresjs/tres
Lint local changes, auto-fix, conventional commit, and optionally create PR
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
Embed a local image file into an existing GitHub PR — either in the PR body or as a comment.
bikeindex/bike_index
Add a manufacturer to Bike Index in production through the admin OAuth token (POST /admin/manufacturers).
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…
Categories
Create or update a pull request for the current branch. An agent skill from bikeindex/bike_index. PR is an agent skill from bikeindex/bike_index. Create or update a pull request for the current branch.
PR fits situations like: the user asks to create/open/make a PR; edit/update/rewrite/fix the PR description; title — including bare phrasings like update pr; update the PR with no other object — for both new PRs and existing ones.
Run `npx skills add bikeindex/bike_index --skill pr -a claude-code`. Or copy the skill folder (.claude/skills/pr in bikeindex/bike_index) into .claude/skills/pr in your project. Claude Code loads it when a task matches its description.
Run `npx skills add bikeindex/bike_index --skill pr -a codex`. Or copy the skill folder (.claude/skills/pr in bikeindex/bike_index) into .agents/skills/pr 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 pr -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pr, .gemini/skills/pr, .github/skills/pr and .opencode/skills/pr in your project.
Going by SKILL.md and its folder, PR needs the command-line tools its instructions call (git, gh and curl).
SKILL.md contains no URLs. Its commands use git, gh and curl, which can reach the network depending on how they are called. 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.
PR 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 4.3k tokens (SKILL.md is roughly 17k 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 6.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with PR: Angular Cop (fmflurry/settings-opencode, 171 stars), Babysit PR To Pass CI (sgl-project/sglang, 37k stars), Ansible Development Context (ansible/ansible, 71k stars) and Changeset (biomejs/biome, 26k 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.