Agent skill

Reviewloop

by ankitvgupta in ankitvgupta/exo

Iteratively improves a PR until all review bots (Greptile, Devin, and others) are satisfied with zero unresolved comments, then fixes any CI failures.

MITAuto-check passedDevelopment

Install Reviewloop

skills CLI
$ npx skills add ankitvgupta/exo --skill reviewloop -a claude-code

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

GitHub CLI
$ gh skill install ankitvgupta/exo reviewloop --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/ankitvgupta/exo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/reviewloop .claude/skills/reviewloop && 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
reviewloop
GitHub stars
496
Token cost
~2.3k tokens
SKILL.md length
907 words
Files
2 (incl. references)
Skills in repo
6
Repo updated
First seen
Licence
MIT

At a glance

Iteratively improves a PR until all review bots (Greptile, Devin, and others) are satisfied with zero unresolved comments, then fixes any CI failures.

  • Works in 5 steps: Identify the PR → Discover active review bots → Review bot loop → …
  • Fixes all actionable comments
  • SKILL.md covers Inputs, Known review bots, Instructions and Output format
  • Calls gh and git

What it does

Reviewloop is an agent skill from ankitvgupta/exo. Iteratively improves a PR until all review bots (Greptile, Devin, and others) are satisfied with zero unresolved comments, then fixes any CI failures. Triggers reviews, fixes all actionable comments, pushes, re-triggers, and repeats. Use when the user wants to fully optimize a PR against all automated code review feedback.

Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/graphql-queries.md`). Compatibility notes: Requires git, gh (GitHub CLI) authenticated, and at least one review bot installed on the repo.

It sits in Development, covering Failing and flaky tests. The repository describes itself as: Claude Code for your Inbox. The licence is MIT.

When your agent uses it

  • Fixes all actionable comments
  • The user wants to fully optimize a PR against all automated code review feedback

Example prompts

  • “/reviewloop”

Requirements

  • Compatibility (from SKILL.md): Requires git, gh (GitHub CLI) authenticated, and at least one review bot installed on the repo.
  • Pre-approved tools (allowed-tools): Bash(gh:*), Bash(git:*), Bash(sleep:*)

Workflow steps

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

  1. Identify the PR
  2. Discover active review bots
  3. Review bot loop
  4. Final CI check
  5. Report

What it can do on your machine

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

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash(gh:*)
    • Bash(git:*)
    • Bash(sleep:*)

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • git

    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.

  • Compatibility

    Requires git, gh (GitHub CLI) authenticated, and at least one review bot installed on the repo.

    From compatibility in the SKILL.md frontmatter.

Context cost

Reviewloop loads about 2.3k tokens when it runs, and up to ~2.6k if it reads all its reference files. Until then it costs about 84 tokens; SKILL.md has 907 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~84
When it runs · the whole SKILL.md, loaded when a task matches
~2.3k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~2.6k

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 ankitvgupta/exo at commit 04da760, republished under its MIT licence (© ankitvgupta). 907 words, ~2,295 tokens.

Download SKILL.mdSave it as .claude/skills/reviewloop/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
reviewloop
description
Iteratively improves a PR until all review bots (Greptile, Devin, and others) are satisfied with zero unresolved comments, then fixes any CI failures. Triggers reviews, fixes all actionable comments, pushes, re-triggers, and repeats. Use when the user wants to fully optimize a PR against all automated code review feedback.
allowed-tools
Bash(gh:*), Bash(git:*), Bash(sleep:*)
compatibility
Requires git, gh (GitHub CLI) authenticated, and at least one review bot installed on the repo.
license
MIT
metadata.author
ankitvgupta
metadata.version
2.0

Reviewloop

Iteratively fix a PR until all review bots give clean feedback and CI passes.

CI strategy: On the first iteration, wait for both CI and review bots together, fixing any CI issues alongside bot feedback. On subsequent iterations, only wait for review bots (skipping CI) to keep the loop fast. After all review bots are satisfied, do one final CI check.

Inputs

  • PR number (optional): If not provided, detect the PR for the current branch.

Known review bots

Detect and handle reviews from any of these (and any others that appear):

Bot login patternNameNotes
greptile-apps[bot], greptile-apps-staging[bot]Greptile
devin-ai-integration[bot], devin-ai[bot]Devin
coderabbitai[bot]CodeRabbit
sourcery-ai[bot]Sourcery
ellipsis-dev[bot]Ellipsis
github-actions[bot]ExcludedPowers too many non-review workflows (labeling, stale issues, deployments) — creates false positives
Any other login ending in [bot] with diff-attached review commentsOther bots

The loop should handle all bots it discovers, not just the ones listed above. A [bot] author counts as a review bot only if it has left diff-attached inline comments (comments with a path and line). General PR-level comments without a diff position are not treated as review feedback.

Instructions

1. Identify the PR
bash
gh pr view --json number,headRefName -q '{number: .number, branch: .headRefName}'

Switch to the PR branch if not already on it.

2. Discover active review bots

Fetch all reviews and review comments to identify which bots are active on this PR:

bash
gh api repos/{owner}/{repo}/pulls/<PR_NUMBER>/reviews
gh api repos/{owner}/{repo}/pulls/<PR_NUMBER>/comments

Build a set of active bot logins (any author whose login ends in [bot]). These are the bots whose feedback we need to satisfy.

3. Review bot loop

Repeat the following cycle. Max 5 iterations to avoid runaway loops.

A. Push and wait for reviews

Push the latest changes (if any):

bash
git push

First iteration only: Wait for both review bots AND CI checks to complete — poll them concurrently. Poll CI every 30 seconds for up to 15 minutes:

bash
gh pr checks <PR_NUMBER>

If CI failures are found on this first iteration, fix them alongside the review bot feedback in step D (treat them like any other actionable issue). This avoids a separate CI fix cycle later for issues caught early.

Subsequent iterations: Only wait for review bot responses — do NOT wait for CI checks. This keeps the loop fast since CI runs are slow relative to review bots.

For review bot polling (all iterations): use exponential backoff — check at 15s, 30s, 60s, 90s, then 120s. On each poll, count the total bot reviews on the PR — if the count increased since the push, bots have responded and you can proceed to step B. If no new reviews appear after 120s, proceed anyway (some bots may not re-review small changes).

B. Fetch all bot review results

Get all reviews:

bash
gh api repos/{owner}/{repo}/pulls/<PR_NUMBER>/reviews --paginate

For each active bot, find its most recent review. Parse for:

  • Greptile: confidence score (e.g. 3/5 or 5/5) in the review body, plus inline comments
  • Devin / other bots: review state (APPROVED, CHANGES_REQUESTED, COMMENTED), plus inline comments

Fetch all unresolved inline comments:

bash
gh api repos/{owner}/{repo}/pulls/<PR_NUMBER>/comments --paginate

Filter to comments from bot authors that are on the latest commit or still unresolved.

Also fetch unresolved review threads via GraphQL (see GraphQL reference):

Loop with cursor-based pagination to fetch all review threads:

bash
# First page (no cursor)
gh api graphql -f query='
{
  repository(owner: "OWNER", name: "REPO") {
    pullRequest(number: PR_NUMBER) {
      reviewThreads(first: 100) {
        pageInfo { hasNextPage endCursor }
        nodes {
          id
          isResolved
          comments(first: 5) {
            nodes { body path line author { login } createdAt }
          }
        }
      }
    }
  }
}'

# If pageInfo.hasNextPage is true, fetch next page:
gh api graphql -f query='
query($cursor: String!) {
  repository(owner: "OWNER", name: "REPO") {
    pullRequest(number: PR_NUMBER) {
      reviewThreads(first: 100, after: $cursor) {
        pageInfo { hasNextPage endCursor }
        nodes {
          id
          isResolved
          comments(first: 5) {
            nodes { body path line author { login } createdAt }
          }
        }
      }
    }
  }
}' -F cursor="<endCursor from previous page>"

Continue until hasNextPage is false. Collect all nodes across pages before processing.

Show full SKILL.md (407 more words)Show less
C. Check exit conditions

Stop the review bot loop if all of these are true:

  • Greptile (if active): confidence is 5/5 AND zero unresolved Greptile comments
  • All other bots (Devin, CodeRabbit, etc.): zero unresolved inline comments from the bot

Do not use GitHub review state (APPROVED, CHANGES_REQUESTED, COMMENTED) as a satisfaction signal for any bot. Bots like Devin use COMMENTED even when leaving substantive feedback, and CHANGES_REQUESTED may persist after all inline comments are resolved. The only reliable signal is: zero unresolved inline comments from that bot.

Also stop if max iterations reached (report current state).

D. Fix actionable comments

For each unresolved bot comment (process by bot, prioritizing bots with the most comments first):

  1. Read the file and understand the comment in context.
  2. Determine if it's actionable (code change needed) or informational/false-positive.
  3. If actionable, make the fix.
  4. If informational or a false positive, note it but still resolve the thread.

When multiple bots flag the same file/region, address all comments together to avoid redundant changes.

E. Resolve threads

Fetch unresolved review threads and resolve all that have been addressed (see GraphQL reference):

bash
gh api graphql -f query='
mutation {
  t1: resolveReviewThread(input: {threadId: "ID1"}) { thread { isResolved } }
  t2: resolveReviewThread(input: {threadId: "ID2"}) { thread { isResolved } }
}'
F. Commit and push
bash
git add -A
git commit -m "address review bot feedback (reviewloop iteration N)"
git push

Then go back to step A.

4. Final CI check

After review bots are satisfied (or max iterations reached), do a final CI check. Since CI was only waited on during the first iteration, subsequent review-only iterations may have introduced new CI failures.

Wait for CI checks to complete:

bash
gh pr checks <PR_NUMBER>

Poll every 30 seconds for up to 15 minutes until all CI checks have finished.

If CI is passing, proceed to step 5.

If there are CI failures:

  1. Identify failing checks and fetch their logs:
    bash
    gh run view <RUN_ID> --log-failed
  2. Fix the failures.
  3. Commit and push:
    bash
    git add -A
    git commit -m "fix CI failures (reviewloop)"
    git push
  4. Go back to step 1 — the CI fix push may trigger new review bot feedback, so re-run the full process (discover bots, review bot loop, final CI check). This counts as a new top-level cycle.

Max 3 top-level CI-fix cycles to avoid infinite loops. If CI is still failing after 3 cycles, stop and report.

5. Report

After exiting all loops, summarize:

FieldValue
Review iterationsN
CI fix attemptsN
Bots satisfiedlist of bot names
Bots with remaining issueslist (if any)
CI statuspassing / failing
Total comments resolvedN
Remaining commentsN (if any)

Output format

Reviewloop complete.
  Review iterations: 2
  CI fix attempts:   1
  Bots satisfied:    Greptile (5/5), Devin (0 unresolved)
  CI status:         passing
  Resolved:          12 comments
  Remaining:         0

If not fully resolved:

Reviewloop stopped after 5 review iterations + 3 CI attempts.
  Bots satisfied:    Greptile (5/5)
  Bots unsatisfied:  Devin (2 unresolved comments)
  CI status:         failing (lint)
  Resolved:          10 comments
  Remaining:         2

Remaining issues:
  - [Devin] src/auth.ts:45 — "Consider rate limiting this endpoint"
  - [Devin] src/db.ts:112 — "Missing index on user_id column"
  - [CI] lint: unused import in src/utils.ts:3

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

Files

SKILL.md and 1 other file (references) in .claude/skills/reviewloop of ankitvgupta/exo.

  • SKILL.md
  • references/graphql-queries.md

Open the folder on GitHubat commit 04da760

Compare with similar skills

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

Reviewloop compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Reviewloop this skillankitvgupta/exo496—~2.3kAutomated safety check: PassMIT
PR Babysitteropeninterpreter/openinterpreter69k3 repos~4.2kAutomated safety check: PassApache-2.0
Iterate PRmeshery/meshery-operator1517 repos~2.2kAutomated safety check: PassApache-2.0
React Router Bug Fix Workflowremix-run/react-router57k—~1.3kAutomated safety check: PassMIT
Bug InvestigatorMageByte-Zero/spec-superflow8391 repos~1.6kAutomated safety check: PassMIT
PlotJuggler Ship CheckPlotJuggler/PlotJuggler6.2k—~1.3kAutomated safety check: PassMPL-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
  • Iterate PR

    meshery/meshery-operator

    Iterate on a PR until CI passes. An agent skill from meshery/meshery-operator.

    151 GitHub starsUsed in 7 repos~2.2k tokens
    DevelopmentAuto-check passed
  • React Router Bug Fix Workflow

    remix-run/react-router

    Fixes a React Router bug reported in a GitHub issue end to end: fetching the issue, validating the reproduction, writing a failing test and implementing the fix on a new branch.

    57k GitHub stars~1.3k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Bug Investigator

    MageByte-Zero/spec-superflow

    A skill your agent uses when encountering any bug, test failure, or unexpected behavior during spec-superflow execution, before proposing fixes.

    839 GitHub starsUsed in 1 repo~1.6k tokens
    DevelopmentAuto-check passed
  • PlotJuggler Ship Check

    PlotJuggler/PlotJuggler

    Runs a gated finish-line checklist before committing a PlotJuggler PJ4 change: build proof, red-test triage, hooks, docs freshness and a diff self-review.

    6.2k GitHub stars~1.3k tokensUpdated 6 days ago
    DevelopmentAuto-check passed
  • PR Review

    wysaid/android-gpuimage-plus

    Address review comments and CI failures for the current branch's PR

    1.9k GitHub stars~1.4k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed

More from ankitvgupta/exo

  • Clear Caches

    ankitvgupta/exo

    Clear extension caches, analysis data, and drafts from the database.

    496 GitHub stars~512 tokensUpdated 1 mo ago
    Auto-check passed
  • Test the Electron app interactively using Chrome DevTools Protocol.

    496 GitHub stars~2.4k tokensUpdated 1 mo ago
    Auto-check passed
  • Take Screenshots

    ankitvgupta/exo

    Capture screenshots of the Exo Electron app workflows using Playwright in demo mode.

    496 GitHub stars~1.2k tokensUpdated 1 mo ago
    Auto-check passed
  • Review Code

    ankitvgupta/exo

    Pre-commit code review for production-critical issues. An agent skill from ankitvgupta/exo.

    496 GitHub stars~5.8k tokensUpdated 1 mo ago
    Auto-check: notes
  • Gh Local

    ankitvgupta/exo

    Run GitHub Actions CI workflows locally using nektos/act in Docker.

    496 GitHub stars~581 tokensUpdated 1 mo ago
    Auto-check passed

Questions about Reviewloop

What does Reviewloop do?

Iteratively improves a PR until all review bots (Greptile, Devin, and others) are satisfied with zero unresolved comments, then fixes any CI failures. Reviewloop is an agent skill from ankitvgupta/exo. Iteratively improves a PR until all review bots (Greptile, Devin, and others) are satisfied with zero unresolved comments, then fixes any CI failures.

When should I use Reviewloop?

Reviewloop fits situations like: fixes all actionable comments; the user wants to fully optimize a PR against all automated code review feedback.

How do I install Reviewloop in Claude Code?

Run `npx skills add ankitvgupta/exo --skill reviewloop -a claude-code`. Or copy the skill folder (.claude/skills/reviewloop in ankitvgupta/exo) into .claude/skills/reviewloop in your project. Claude Code loads it when a task matches its description.

How do I install Reviewloop in Codex?

Run `npx skills add ankitvgupta/exo --skill reviewloop -a codex`. Or copy the skill folder (.claude/skills/reviewloop in ankitvgupta/exo) into .agents/skills/reviewloop in your project. Codex loads it when a task matches its description.

Can I use Reviewloop 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 ankitvgupta/exo --skill reviewloop -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/reviewloop, .gemini/skills/reviewloop, .github/skills/reviewloop and .opencode/skills/reviewloop in your project.

What does Reviewloop need to run?

Going by SKILL.md and its folder, Reviewloop needs the command-line tools its instructions call (gh and git). Its frontmatter pre-approves these tools: Bash(gh:*), Bash(git:*), Bash(sleep:*). Compatibility (from SKILL.md): Requires git, gh (GitHub CLI) authenticated, and at least one review bot installed on the repo..

Does Reviewloop 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 Reviewloop 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 Reviewloop use?

Reviewloop is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Reviewloop use?

About 2.3k tokens (SKILL.md is roughly 9.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 333 tokens, read only when the agent opens those files.

What are the alternatives to Reviewloop?

Skills that share tags, products or a category with Reviewloop: PR Babysitter (openinterpreter/openinterpreter, 69k stars), Iterate PR (meshery/meshery-operator, 151 stars), React Router Bug Fix Workflow (remix-run/react-router, 57k stars) and Bug Investigator (MageByte-Zero/spec-superflow, 839 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Reviewloop?

ankitvgupta (a GitHub user) maintains it in ankitvgupta/exo, which has 496 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on September 5, 2026.

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