Agent skill

PR Iterate

by jonathanpeppers in jonathanpeppers/dotnes

Iterate on a GitHub pull request from a coding agent (like Copilot coding agent) until it's ready for human review.

MITAuto-check passedDevelopment

Install PR Iterate

skills CLI
$ npx skills add jonathanpeppers/dotnes --skill pr-iterate -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jonathanpeppers/dotnes pr-iterate --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jonathanpeppers/dotnes.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/pr-iterate .claude/skills/pr-iterate && rm -rf skills-src

Use ~/.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/

Facts

Skill name
pr-iterate
GitHub stars
780
Token cost
~2.4k tokens
SKILL.md length
931 words
Files
1
Skills in repo
4
Repo updated
First seen
Licence
MIT

At a glance

Iterate on a GitHub pull request from a coding agent (like Copilot coding agent) until it's ready for human review.

  • Works in 9 steps: Assess the PR → Review the Code → Leave a Review → …
  • The user asks to complete a PR
  • SKILL.md covers Bot Prefix Rule, Workflow and Important Rules
  • Calls gh, git and dotnet

What it does

PR Iterate is an agent skill from jonathanpeppers/dotnes. Iterate on a GitHub pull request from a coding agent (like Copilot coding agent) until it's ready for human review. Use this skill whenever the user asks to complete a PR, finish a PR, iterate on a PR, review and fix a PR, ship a PR, get a PR green, land a PR, or monitor a coding agent's PR. Also triggers when the user mentions PR numbers (e.g. "108"), links to github.com pull requests, or says things like "when copilot is done", "clean up that PR", "make it green", or "iterate until CI passes". This skill…

Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Pull requests. It works with GitHub. The repository describes itself as: .NET for the NES game console. The licence is MIT.

When your agent uses it

  • The user asks to complete a PR
  • Iterate on a PR
  • Review and fix a PR
  • Monitor a coding agents PR

Example prompts

  • “s PR. Also triggers when the user mentions PR numbers (e.g.”
  • “), links to github.com pull requests, or says things like”
  • “clean up that PR”
  • “/pr-iterate”

Workflow steps

9 steps, taken from the step headings in SKILL.md.

  1. Assess the PR
  2. Review the Code
  3. Leave a Review
  4. Ship It (Mark Ready)
  5. Resolve Merge Conflicts
  6. Get CI Green
  7. Fix Failures
  8. Address Review Feedback
  9. Iterate

What it can do on your machine

Read from SKILL.md and the folder at commit 42ca23d. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • git
    • dotnet

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use gh and git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

PR Iterate loads about 2.4k tokens when it runs. Until then it costs about 166 tokens; SKILL.md has 931 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~166
When it runs · the whole SKILL.md, loaded when a task matches
~2.4k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from jonathanpeppers/dotnes at commit 42ca23d, republished under its MIT licence (© jonathanpeppers). 931 words, ~2,405 tokens.

Download SKILL.mdSave it as .claude/skills/pr-iterate/SKILL.md (or your agent's skills folder).
name
pr-iterate
description
Iterate on a GitHub pull request from a coding agent (like Copilot coding agent) until it's ready for human review. Use this skill whenever the user asks to complete a PR, finish a PR, iterate on a PR, review and fix a PR, ship a PR, get a PR green, land a PR, or monitor a coding agent's PR. Also triggers when the user mentions PR numbers (e.g. "#108"), links to github.com pull requests, or says things like "when copilot is done", "clean up that PR", "make it green", or "iterate until CI passes". This skill handles the full lifecycle: code review, CI approval, test fixing, and repeated iteration until the PR is green and ready for human merge.

PR Iterate

Take over a pull request from a coding agent and iterate on it until it's green and ready for human review. The human will review and merge — never merge yourself.

Bot Prefix Rule

Every comment, review body, or PR description edit you post must start with the 🤖 emoji so humans can instantly tell it came from automation. This applies to:

  • PR review bodies (gh pr review --body-file ... — always use --body-file, see Step 3)
  • PR comments (gh pr comment --body-file ...)
  • Commit messages do NOT need the emoji (they already have the Co-authored-by trailer)

Workflow

1. Assess the PR
bash
gh pr view <number> --repo <owner>/<repo>
gh pr diff <number> --repo <owner>/<repo>
gh pr checks <number> --repo <owner>/<repo>
  • Read the PR description to understand the intent and checklist
  • Read the full diff to understand what changed
  • Check mergeability: gh api repos/<owner>/<repo>/pulls/<number> --jq '{mergeable, mergeable_state}'
  • Check if the coding agent is still working (look for recent commits, pending workflow runs from the Copilot bot). If it's still active, wait before touching anything.
2. Review the Code

Checkout the branch locally and do a thorough review:

  • Correctness: Does the algorithm/logic work? Trace through edge cases.
  • Consistency: Does it follow existing patterns in the codebase? Check similar handlers, tests, and naming conventions.
  • State management: For this codebase specifically, check that flags like _runtimeValueInA, _savedRuntimeToTemp, _ushortInAX are properly set/cleared.
  • Tests: Are the new tests meaningful? Do they follow the existing test style?

Run the full test suite locally to verify:

powershell
$p = Start-Process dotnet -ArgumentList 'test','--nologo','-v','q' `
  -NoNewWindow -PassThru -RedirectStandardOutput test_out.txt -RedirectStandardError test_err.txt
$p.WaitForExit(300000)
Get-Content test_out.txt -Tail 30
3. Leave a Review

Submit a review on the PR. Always prefix the body with 🤖.

Formatting rule: Write the review body to a temp file and use --body-file to avoid shell escaping issues with backticks and special characters:

powershell
$body = @'
🤖 Your review here. Use `backticks` freely — no escaping needed.
'@
$tempFile = New-TemporaryFile
try {
    $body | Set-Content -Path $tempFile.FullName -Encoding utf8
    gh pr review <number> --repo <owner>/<repo> --approve --body-file $tempFile.FullName
}
finally {
    Remove-Item $tempFile -ErrorAction SilentlyContinue
}

Never pass review bodies with backticks directly via --body — PowerShell and the gh CLI mangle them into backslash-escaped garbage.

Use --comment for feedback that needs changes, --approve when it looks good. Be specific about what you checked and any concerns.

4. Ship It (Mark Ready)

Once the code review passes:

  1. Remove draft status: gh pr ready <number> --repo <owner>/<repo>
  2. Update title (drop [WIP]): gh pr edit <number> --repo <owner>/<repo> --title "<clean title>"
5. Resolve Merge Conflicts

Before monitoring CI, check if the PR has merge conflicts:

bash
gh api repos/<owner>/<repo>/pulls/<number> --jq '{mergeable, mergeable_state}'

If mergeable is false and mergeable_state is "dirty":

  1. Fetch and merge main locally:
    bash
    git fetch origin main
    git merge origin/main
  2. Resolve conflicts — understand both sides of each conflict. If main implemented a feature that the PR was throwing an error for, keep main's implementation. If the PR improved code that main also touched, merge the intent of both changes.
  3. Run tests to verify the resolution is correct
  4. Commit the merge (use git commit --no-edit to keep the default merge message)
  5. Push and continue to step 6
6. Get CI Green

Monitor the workflow run:

bash
gh run list --repo <owner>/<repo> --branch <branch> --limit 3
gh run watch <run-id> --repo <owner>/<repo> --exit-status

If CI needs approval (shows "action_required"):

bash
gh api repos/<owner>/<repo>/actions/runs/<run-id>/approve -X POST

If approval via API fails (403), the run may have auto-started on a subsequent attempt. Check with gh run list for a newer in-progress run.

7. Fix Failures

If CI fails:

  1. Read the logs: gh run view <run-id> --repo <owner>/<repo> --log-failed
  2. Reproduce locally: Run dotnet test and verify the failure
  3. Fix the code: Make the minimal fix needed
  4. Commit and push:
    bash
    git add -A
    git commit -m "Fix: <description>
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>"
    git push origin <branch>
  5. Monitor the new CI run: Go back to step 6
Show full SKILL.md (517 more words)Show less
8. Address Review Feedback

After posting your review or after CI goes green, check for review comments from humans or other bots:

bash
gh pr view <number> --repo <owner>/<repo> --comments
gh api repos/<owner>/<repo>/pulls/<number>/reviews
gh api repos/<owner>/<repo>/pulls/<number>/comments

For each unresolved review comment:

  1. Understand the feedback — read the comment in context of the code it references
  2. Fix the code if the feedback is actionable
  3. ⚠️ Reply to EACH comment individually explaining what you did:
    bash
    # Get comment IDs
    gh api repos/<owner>/<repo>/pulls/<number>/comments --jq '.[].id'
    # Reply to each one
    gh api repos/<owner>/<repo>/pulls/<number>/comments/<comment-id>/replies \
      -f body="Fixed in <sha> — <what you changed and why>"
    This is mandatory. Every review comment must get its own reply describing the specific fix. Do not batch replies or skip this step.
  4. Commit and push the fix (with Co-authored-by trailer)
  5. File follow-up issues for valid feedback that is out of scope for this PR. Reply to the comment acknowledging the point and linking the new issue:
    bash
    gh issue create --repo <owner>/<repo> \
      --title "<concise title>" \
      --body "Follow-up from PR #<number> review. <description>"
    gh api repos/<owner>/<repo>/pulls/<number>/comments \
      -f body="🤖 Valid point — filed #<issue> as a follow-up." \
      -F in_reply_to=<comment-id>

If a review requests changes, address all comments before re-requesting review. After pushing fixes, go back to step 6 to monitor CI.

9. Iterate

Repeat steps 5-8 until CI is fully green, merge conflicts are resolved, and all review comments are addressed (either fixed or filed as follow-ups). Then verify:

bash
gh pr checks <number> --repo <owner>/<repo>

Once all checks pass:

  1. Re-request a review from @copilot so the Copilot code review bot validates the final state of the PR:

    bash
    gh pr edit <number> --repo <owner>/<repo> --add-reviewer "@copilot"

    Wait for the Copilot review to appear (poll with gh api repos/<owner>/<repo>/pulls/<number>/reviews). If Copilot leaves suggestions or requests changes, address them the same way as human review feedback (step 8) and re-request once fixed.

  2. Capture a screenshot or GIF if the PR adds or modifies a sample. Build the solution first (dotnet build from the repo root), then use the screenshot or record script:

    powershell
    # Screenshot (PNG)
    dotnet run scripts/screenshot-nes.cs -- samples/<name>/bin/Debug/net10.0/<name>.nes 4000 samples/<name>/<name>.png
    
    # Animated GIF (better for samples with movement)
    dotnet run scripts/record-nes.cs -- samples/<name>/bin/Debug/net10.0/<name>.nes --gif --output samples/<name>/<name>.gif

    Upload the image to the PR comment so reviewers can see the result without running it locally.

  3. Post a final comment with the screenshot/GIF attached:

    powershell
    # Upload the image and include it in the comment
    gh pr comment <number> --repo <owner>/<repo> --body "🤖 CI is green. Ready for human review.
    
    ![<name> sample](samples/<name>/<name>.png)"

    If the PR does NOT involve a sample (e.g., analyzer changes, build fixes), just post the text comment without a screenshot.

Important Rules

  • Never commit or push directly to main — all changes go through PRs, no exceptions
  • Never merge — the human reviews and merges
  • Never force-push — always push incremental commits
  • Always reply to each review comment individually — use the /replies API endpoint for each comment ID. Never skip this even if you addressed all feedback in a single commit.
  • Always use dotnet test without --no-build — the test project requires fresh builds
  • Use Start-Process with redirected output for dotnet test — it hangs in interactive PowerShell due to MSBuild terminal output
  • Prefix all GitHub comments/reviews with 🤖
  • Include the Co-authored-by trailer in all commits

© jonathanpeppers, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .github/skills/pr-iterate of jonathanpeppers/dotnes.

Open the folder on GitHubat commit 42ca23d

Compare with similar skills

PR Iterate 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.

PR Iterate compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
PR Iterate this skilljonathanpeppers/dotnes780—~2.4kAutomated safety check: PassMIT
PR Babysitteropeninterpreter/openinterpreter69k3 repos~4.2kAutomated safety check: PassApache-2.0
Check PRonyx-dot-app/onyx32k2 repos~2.3kAutomated safety check: PassMIT
Contributor-First PR MergeHKUDS/OpenHarness16k1 repos~847Automated safety check: PassMIT
Create Pull Requestcline/cline70k1 repos~1.6kAutomated safety check: PassApache-2.0
Pull Request Title and Body Writeropeninterpreter/openinterpreter69k2 repos~1.1kAutomated safety check: PassApache-2.0

Similar skills

  • 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.

    69k GitHub starsUsed in 3 repos~4.2k tokens
    DevelopmentAuto-check passed
  • Check PR

    onyx-dot-app/onyx

    Checks a GitHub, GitLab, or Perforce (p4) pull request (or merge request, or shelved changelist) for unresolved review comments, failing status checks, and incomplete PR descriptions.

    32k GitHub starsUsed in 2 repos~2.3k tokens
    DevelopmentAuto-check passed
  • Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.

    16k GitHub starsUsed in 1 repo~847 tokens
    DevelopmentAuto-check passed
  • Opens a GitHub pull request from your current branch with the gh CLI, after reviewing the commits and diff and gathering the details the PR needs.

    70k GitHub starsUsed in 1 repo~1.6k tokens
    DevelopmentAuto-check passed
  • Pull Request Title and Body Writer

    openinterpreter/openinterpreter

    Rewrites the title and body of one or more pull requests with gh, leading with why the change was made, then what changed, and describing only the net result.

    69k GitHub starsUsed in 2 repos~1.1k tokens
    DevelopmentAuto-check passed
  • Official

    Runs a loop on a GitHub pull request: fetch review state, triage comments into actions, implement them and resolve threads, repeating until nothing actionable is left.

    48k GitHub stars~2.2k tokensUpdated today
    DevelopmentAuto-check passed

More from jonathanpeppers/dotnes

  • Code Review

    jonathanpeppers/dotnes

    Review dotnes pull requests against established repository rules.

    780 GitHub stars~2.1k tokensUpdated 14 days ago
    Auto-check passed
  • Nes Decompile

    jonathanpeppers/dotnes

    Decompile NES ROM files (.nes) into C projects that can be rebuilt with dotnes.

    780 GitHub stars~1.6k tokensUpdated 14 days ago
    Auto-check passed
  • Nes Rom Debug

    jonathanpeppers/dotnes

    Disassemble and debug NES ROM files (.nes) produced by the dotnes transpiler.

    780 GitHub stars~1.5k tokensUpdated 14 days ago
    Auto-check passed

Works with

Categories

Questions about PR Iterate

What does PR Iterate do?

Iterate on a GitHub pull request from a coding agent (like Copilot coding agent) until it's ready for human review. PR Iterate is an agent skill from jonathanpeppers/dotnes. Iterate on a GitHub pull request from a coding agent (like Copilot coding agent) until it's ready for human review.

When should I use PR Iterate?

PR Iterate fits situations like: the user asks to complete a PR; iterate on a PR; review and fix a PR; monitor a coding agents PR.

How do I install PR Iterate in Claude Code?

Run `npx skills add jonathanpeppers/dotnes --skill pr-iterate -a claude-code`. Or copy the skill folder (.github/skills/pr-iterate in jonathanpeppers/dotnes) into .claude/skills/pr-iterate in your project. Claude Code loads it when a task matches its description.

How do I install PR Iterate in Codex?

Run `npx skills add jonathanpeppers/dotnes --skill pr-iterate -a codex`. Or copy the skill folder (.github/skills/pr-iterate in jonathanpeppers/dotnes) into .agents/skills/pr-iterate in your project. Codex loads it when a task matches its description.

Can I use PR Iterate in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jonathanpeppers/dotnes --skill pr-iterate -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-iterate, .gemini/skills/pr-iterate, .github/skills/pr-iterate and .opencode/skills/pr-iterate in your project.

What does PR Iterate need to run?

Going by SKILL.md and its folder, PR Iterate needs the command-line tools its instructions call (gh, git and dotnet).

Does PR Iterate access the network?

SKILL.md contains no URLs. Its commands use gh and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is PR Iterate safe to install?

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.

What licence does PR Iterate use?

PR Iterate is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does PR Iterate use?

About 2.4k tokens (SKILL.md is roughly 9.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to PR Iterate?

Skills that share tags, products or a category with PR Iterate: PR Babysitter (openinterpreter/openinterpreter, 69k stars), Check PR (onyx-dot-app/onyx, 32k stars), Contributor-First PR Merge (HKUDS/OpenHarness, 16k stars) and Create Pull Request (cline/cline, 70k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains PR Iterate?

jonathanpeppers (a GitHub user) maintains it in jonathanpeppers/dotnes, which has 780 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on September 23, 2026.

Source: jonathanpeppers/dotnes on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.