Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Iterate on a PR until CI passes. Use when you need to fix CI failures, address review feedback, or continuously push fixes until all checks are green. Automates the feedback-fix-push-wait cycle.
.claude/skills/davila7-iterate-pr/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 99% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -32% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 89% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -8% | 0% |
Continuously iterate on the current branch until all CI checks pass and review feedback is addressed.
Requires: GitHub CLI (gh) authenticated and available.
bashgh pr view --json number,url,headRefName,baseRefName
If no PR exists for the current branch, stop and inform the user.
Always check CI/GitHub Actions status before looking at review feedback:
bashgh pr checks --json name,state,bucket,link,workflow
The bucket field categorizes state into: pass, fail, pending, skipping, or cancel.
Important: If any of these checks are still pending, wait before proceeding:
sentry / sentry-iocodecovcursor / bugbot / seerThese bots may post additional feedback comments once their checks complete. Waiting avoids duplicate work.
Once CI checks have completed (or at least the bot-related checks), gather human and bot feedback:
Review Comments and Status:
bashgh pr view --json reviews,comments,reviewDecision
Inline Code Review Comments:
bashgh api repos/{owner}/{repo}/pulls/{pr_number}/comments
PR Conversation Comments (includes bot comments):
bashgh api repos/{owner}/{repo}/issues/{pr_number}/comments
Look for bot comments from: Sentry, Codecov, Cursor, Bugbot, Seer, and other automated tools.
For each CI failure, get the actual logs:
bash# List recent runs for this branch gh run list --branch $(git branch --show-current) --limit 5 --json databaseId,name,status,conclusion # View failed logs for a specific run gh run view <run-id> --log-failed
Do NOT assume what failed based on the check name alone. Always read the actual logs.
For each piece of feedback (CI failure or review comment):
Make minimal, targeted code changes. Only fix what is actually broken.
bashgit add -A git commit -m "fix: <descriptive message of what was fixed>" git push
Use the built-in watch functionality:
bashgh pr checks --watch --interval 30
This waits until all checks complete. Exit code 0 means all passed, exit code 1 means failures.
Alternatively, poll manually if you need more control:
bashgh pr checks --json name,state,bucket | jq '.[] | select(.bucket != "pass")'
Return to Step 2 if:
Continue until all checks pass and no unaddressed feedback remains.
Success:
bucket: pass)Ask for Help:
Stop Immediately:
gh pr checks --required to focus only on required checksgh run view <run-id> --verbose to see all job steps, not just failureslink field in checks JSON provides the URL to investigate| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | fail→fail | 2,829 | 4,497 | +59% | 1 | 1 | 0% | 367 | 1,136 | +210% | 0 | 0 | — |
case-01 | fail→fail | 9,467 | 4,319 | -54% | 1 | 1 | 0% | 1,336 | 1,090 | -18% | 0 | 0 | — |
case-02 | fail→fail | 5,947 | 4,620 | -22% | 1 | 1 | 0% | 135 | 1,094 | +710% | 0 | 0 | — |
case-03 | fail→fail | 5,540 | 4,161 | -25% | 1 | 1 | 0% | 173 | 1,088 | +529% | 0 | 0 | — |
case-05 | fail→pass | 8,471 | 2,742 | -68% | 1 | 1 | 0% | 1,254 | 1,365 | +9% | 0 | 0 | — |
case-06 | pass→pass | 8,148 | 2,567 | -68% | 1 | 1 | 0% | 1,346 | 1,288 | -4% | 0 | 0 | — |
case-07 | pass→pass | 5,464 | 1,635 | -70% | 1 | 1 | 0% | 959 | 1,172 | +22% | 0 | 0 | — |
case-08 | pass→pass | 4,942 | 2,135 | -57% | 1 | 1 | 0% | 819 | 1,272 | +55% | 0 | 0 | — |
case-17 | fail→pass | 4,015 | 2,464 | -39% | 1 | 1 | 0% | 655 | 1,302 | +99% | 0 | 0 | — |
case-09 | pass→pass | 10,743 | 3,383 | -69% | 1 | 1 | 0% | 1,656 | 1,406 | -15% | 0 | 0 | — |
case-10 | fail→pass | 17,534 | 3,875 | -78% | 1 | 1 | 0% | 2,192 | 1,490 | -32% | 0 | 0 | — |
case-11 | pass→pass | 13,100 | 2,901 | -78% | 1 | 1 | 0% | 1,145 | 1,299 | +13% | 0 | 0 | — |
case-12 | fail→pass | 6,048 | 3,572 | -41% | 1 | 1 | 0% | 733 | 1,389 | +89% | 0 | 0 | — |
case-13 | fail→pass | 12,369 | 4,251 | -66% | 1 | 1 | 0% | 1,753 | 1,613 | -8% | 0 | 0 | — |
case-14 | pass→pass | 11,712 | 2,908 | -75% | 1 | 1 | 0% | 1,669 | 1,330 | -20% | 0 | 0 | — |
case-15 | pass→pass | 8,045 | 2,303 | -71% | 1 | 1 | 0% | 1,365 | 1,304 | -4% | 0 | 0 | — |
case-16 | pass→pass | 4,562 | 2,349 | -49% | 1 | 1 | 0% | 733 | 1,212 | +65% | 0 | 0 | — |
case-18 | pass→pass | 8,047 | 2,904 | -64% | 1 | 1 | 0% | 1,369 | 1,315 | -4% | 0 | 0 | — |
case-19 | pass→pass | 11,866 | 2,779 | -77% | 1 | 1 | 0% | 1,669 | 1,440 | -14% | 0 | 0 | — |
case-20 | fail→fail | 4,446 | 6,541 | +47% | 1 | 1 | 0% | 373 | 1,240 | +232% | 0 | 0 | — |
case-21 | pass→fail | 2,204 | 5,843 | +165% | 1 | 1 | 0% | 351 | 1,115 | +218% | 0 | 0 | — |
case-22 | pass→pass | 9,157 | 5,474 | -40% | 1 | 1 | 0% | 1,739 | 1,960 | +13% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 16 counted toward the lift figure. The other 6 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +18 percentage points is the difference between those two pass rates over the 16 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.