@olegkoval/agent-skills 1.20.0 → 1.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/.claude-plugin/plugin.json +3 -2
  2. package/.cursor-plugin/index.json +5 -0
  3. package/.grok-plugin/index.json +5 -0
  4. package/.kiro/steering/coderabbitloop.md +109 -0
  5. package/.windsurf/rules/coderabbitloop.md +108 -0
  6. package/README.md +2 -1
  7. package/catalog/skills.json +24 -0
  8. package/package.json +1 -1
  9. package/packages/software-development/coderabbitloop/SKILL.md +117 -0
  10. package/packages/software-development/coderabbitloop/adapters/claude/plugin.json +5 -0
  11. package/packages/software-development/coderabbitloop/adapters/claude/skills/coderabbitloop/SKILL.md +118 -0
  12. package/packages/software-development/coderabbitloop/adapters/claude/skills/coderabbitloop/references/graphql-queries.md +101 -0
  13. package/packages/software-development/coderabbitloop/adapters/codex/README.md +20 -0
  14. package/packages/software-development/coderabbitloop/adapters/cursor/plugin.json +6 -0
  15. package/packages/software-development/coderabbitloop/adapters/cursor/skills/coderabbitloop/SKILL.md +119 -0
  16. package/packages/software-development/coderabbitloop/adapters/cursor/skills/coderabbitloop/references/graphql-queries.md +101 -0
  17. package/packages/software-development/coderabbitloop/adapters/grok/plugin.json +6 -0
  18. package/packages/software-development/coderabbitloop/adapters/grok/skills/coderabbitloop/SKILL.md +118 -0
  19. package/packages/software-development/coderabbitloop/adapters/grok/skills/coderabbitloop/references/graphql-queries.md +101 -0
  20. package/packages/software-development/coderabbitloop/adapters/kiro/steering/coderabbitloop.md +109 -0
  21. package/packages/software-development/coderabbitloop/adapters/windsurf/rules/coderabbitloop.md +108 -0
  22. package/packages/software-development/coderabbitloop/references/graphql-queries.md +101 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "olko-agent-skills",
3
3
  "description": "Agent-agnostic skill catalog for Codex, Claude, Cursor, Grok, Copilot, Windsurf, Kiro, and other skill-aware tools.",
4
- "version": "1.19.1",
4
+ "version": "1.20.0",
5
5
  "author": {
6
6
  "name": "Oleg Koval"
7
7
  },
@@ -33,6 +33,7 @@
33
33
  "./packages/software-development/skill-budget-audit",
34
34
  "./packages/software-development/crash-course",
35
35
  "./packages/software-development/qodoloop",
36
- "./packages/wearables/garmin-watchface"
36
+ "./packages/wearables/garmin-watchface",
37
+ "./packages/software-development/coderabbitloop"
37
38
  ]
38
39
  }
@@ -115,6 +115,11 @@
115
115
  "name": "olko:garmin-watchface",
116
116
  "source": "./packages/wearables/garmin-watchface/adapters/cursor",
117
117
  "description": "Build, test, screenshot and publish Garmin Connect IQ watch faces in Monkey C."
118
+ },
119
+ {
120
+ "name": "olko:coderabbitloop",
121
+ "source": "./packages/software-development/coderabbitloop/adapters/cursor",
122
+ "description": "Iteratively drives a GitHub PR to zero unresolved CodeRabbit findings — reads each inline comment's own Prompt for AI Agents block, applies the fix, replies to the thread, resolves it, pushes, and re-triggers CodeRabbit."
118
123
  }
119
124
  ]
120
125
  }
@@ -125,6 +125,11 @@
125
125
  "name": "olko:garmin-watchface",
126
126
  "source": "./packages/wearables/garmin-watchface/adapters/grok",
127
127
  "description": "Build, test, screenshot and publish Garmin Connect IQ watch faces in Monkey C."
128
+ },
129
+ {
130
+ "name": "olko:coderabbitloop",
131
+ "source": "./packages/software-development/coderabbitloop/adapters/grok",
132
+ "description": "Iteratively drives a GitHub PR to zero unresolved CodeRabbit findings — reads each inline comment's own Prompt for AI Agents block, applies the fix, replies to the thread, resolves it, pushes, and re-triggers CodeRabbit."
128
133
  }
129
134
  ]
130
135
  }
@@ -0,0 +1,109 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ inclusion: manual
5
+ description: "Iteratively drives a GitHub PR to zero unresolved CodeRabbit findings — reads each inline comment's own Prompt for AI Agents block, applies the fix, replies to the thread, resolves it, pushes, and re-triggers CodeRabbit."
6
+ ---
7
+
8
+ # Coderabbitloop
9
+
10
+ Fix every actionable CodeRabbit finding on a PR, answer each thread, resolve it, and keep going until CodeRabbit has nothing left to say (or a finding needs a human call).
11
+
12
+ ## Inputs
13
+
14
+ - **PR number** (optional): detect from the current branch if not given.
15
+
16
+ ## How CodeRabbit actually posts (verified against docs.coderabbit.ai and a live install — don't assume otherwise)
17
+
18
+ CodeRabbit runs as `coderabbitai[bot]` and posts **two independent things**, not one:
19
+
20
+ 1. An auto-generated **walkthrough/summary issue comment** — body starts with the HTML marker `<!-- This is an auto-generated comment: summarize by coderabbit.ai -->`. This is a description, not a review — use it for context only, never as a source of fixable findings.
21
+ 2. A **formal PR review** carrying one **inline review comment per finding**, each a real, resolvable GitHub review thread at the finding's file/line. Each one contains a `<details><summary>🤖 Prompt for AI Agents</summary>` block: a ready-made fix spec, CodeRabbit's own words, meant to be handed straight to an agent.
22
+
23
+ **Use the inline threads as the source of truth**, exactly like Greptile/Qodo — fetch via GraphQL `reviewThreads`, which carries native `isResolved` state (see `references/graphql-queries.md`, shared with `qodoloop`; only the bot login and the prompt-heading text differ).
24
+
25
+ CodeRabbit has slash commands (official, `docs.coderabbit.ai/reference/review-commands`) — the ones this loop actually uses:
26
+ - `@coderabbitai review` — incremental review of new changes (use this to re-trigger after a push, if automatic review-on-push is off for this repo).
27
+ - `@coderabbitai resolve` — marks **all** CodeRabbit threads resolved in one shot. This is a bulk escape hatch, not the default path: this loop resolves threads one at a time, right after replying to each, so the reply-then-resolve record stays intact per finding.
28
+ - CodeRabbit also has its own built-in `@coderabbitai autofix`, which commits fixes directly without a model in the loop. Mention it to the user as an alternative if they'd rather skip the loop entirely, but this skill's whole point is the Claude-orchestrated version — don't default to autofix instead of doing the work.
29
+
30
+ **Rate limit is a real terminal state, not a bug.** A comment reading "you've reached your PR review limit" (confirmed live wording) means CodeRabbit will not review again this cycle — stop and report it, don't loop waiting for something that isn't coming.
31
+
32
+ ## Instructions
33
+
34
+ ### 1. Identify the PR
35
+
36
+ ```bash
37
+ gh pr view --json number,headRefName,headRefOid -q '{number, branch: .headRefName, sha: .headRefOid}'
38
+ ```
39
+
40
+ Check out the branch if not already on it.
41
+
42
+ ### 2. Loop (max 5 iterations)
43
+
44
+ #### A. Push and wait
45
+
46
+ ```bash
47
+ git push
48
+ ```
49
+
50
+ If this repo doesn't auto-review on push, nudge it:
51
+
52
+ ```bash
53
+ gh pr comment <PR_NUMBER> --body "@coderabbitai review"
54
+ ```
55
+
56
+ Poll (every ~10s, timeout ~5min) for CodeRabbit's next formal review to land — a new entry in `gh api repos/{owner}/{repo}/pulls/<PR_NUMBER>/reviews` from `coderabbitai[bot]` created after this push. If you instead see a rate-limit comment ("review limit"), **stop the loop now** and go to Report with `blocked: rate-limited`.
57
+
58
+ #### B. Fetch unresolved findings
59
+
60
+ Run the `unresolvedQodoThreads`-shaped query in `references/graphql-queries.md` (filter `author.login == "coderabbitai[bot]"` instead of Qodo's login). For each unresolved thread, parse the finding text and the **Prompt for AI Agents** block (heading text is `🤖 Prompt for AI Agents`, not `Agent Prompt` — match case/emoji-insensitively).
61
+
62
+ #### C. Check exit conditions
63
+
64
+ Stop if there are zero unresolved CodeRabbit threads, or max iterations reached.
65
+
66
+ #### D. Fix each finding
67
+
68
+ For each thread, in order: read the Prompt for AI Agents block in full — it names the issue and the fix. Apply it, staying inside its stated scope. If the suggestion is wrong, unsafe, or needs a product decision, don't force it — note that in step E instead.
69
+
70
+ #### E. Answer and resolve
71
+
72
+ **Reply to the thread first, then resolve it** — the "answer to the comments" half of the job:
73
+
74
+ ```bash
75
+ gh api graphql -f query='mutation { addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: "<THREAD_ID>", body: "<REPLY>"}) { comment { id } } }'
76
+ ```
77
+
78
+ Reply body: one or two sentences — what you changed and why, or exactly why you didn't fix it. Then resolve (`resolveReviewThread`). A finding you deliberately skip still gets a reply and gets resolved.
79
+
80
+ #### F. Commit and push
81
+
82
+ ```bash
83
+ git add -A
84
+ git commit -m "address CodeRabbit review feedback (coderabbitloop iteration N)"
85
+ git push
86
+ ```
87
+
88
+ Go back to step A.
89
+
90
+ ### 3. Report
91
+
92
+ | Field | Value |
93
+ |--------------------|-------|
94
+ | Iterations | N |
95
+ | Findings resolved | N |
96
+ | Findings skipped | N (with reasons) |
97
+ | Remaining | N (if any) |
98
+ | Blocked | rate-limited / max-iterations / none |
99
+
100
+ ```
101
+ Coderabbitloop complete.
102
+ Iterations: 2
103
+ Resolved: 4 (3 fixed, 1 false-positive, replied + resolved)
104
+ Remaining: 0
105
+ ```
106
+
107
+ ## References
108
+
109
+ - `references/graphql-queries.md` — shared with `qodoloop`: the exact `reviewThreads` query and the `resolveReviewThread` / `addPullRequestReviewThreadReply` mutations. Swap the author-login filter to `coderabbitai[bot]` and the prompt-heading match to `Prompt for AI Agents`.
@@ -0,0 +1,108 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ description: "Iteratively drives a GitHub PR to zero unresolved CodeRabbit findings — reads each inline comment's own Prompt for AI Agents block, applies the fix, replies to the thread, resolves it, pushes, and re-triggers CodeRabbit."
5
+ ---
6
+
7
+ # Coderabbitloop
8
+
9
+ Fix every actionable CodeRabbit finding on a PR, answer each thread, resolve it, and keep going until CodeRabbit has nothing left to say (or a finding needs a human call).
10
+
11
+ ## Inputs
12
+
13
+ - **PR number** (optional): detect from the current branch if not given.
14
+
15
+ ## How CodeRabbit actually posts (verified against docs.coderabbit.ai and a live install — don't assume otherwise)
16
+
17
+ CodeRabbit runs as `coderabbitai[bot]` and posts **two independent things**, not one:
18
+
19
+ 1. An auto-generated **walkthrough/summary issue comment** — body starts with the HTML marker `<!-- This is an auto-generated comment: summarize by coderabbit.ai -->`. This is a description, not a review — use it for context only, never as a source of fixable findings.
20
+ 2. A **formal PR review** carrying one **inline review comment per finding**, each a real, resolvable GitHub review thread at the finding's file/line. Each one contains a `<details><summary>🤖 Prompt for AI Agents</summary>` block: a ready-made fix spec, CodeRabbit's own words, meant to be handed straight to an agent.
21
+
22
+ **Use the inline threads as the source of truth**, exactly like Greptile/Qodo — fetch via GraphQL `reviewThreads`, which carries native `isResolved` state (see `references/graphql-queries.md`, shared with `qodoloop`; only the bot login and the prompt-heading text differ).
23
+
24
+ CodeRabbit has slash commands (official, `docs.coderabbit.ai/reference/review-commands`) — the ones this loop actually uses:
25
+ - `@coderabbitai review` — incremental review of new changes (use this to re-trigger after a push, if automatic review-on-push is off for this repo).
26
+ - `@coderabbitai resolve` — marks **all** CodeRabbit threads resolved in one shot. This is a bulk escape hatch, not the default path: this loop resolves threads one at a time, right after replying to each, so the reply-then-resolve record stays intact per finding.
27
+ - CodeRabbit also has its own built-in `@coderabbitai autofix`, which commits fixes directly without a model in the loop. Mention it to the user as an alternative if they'd rather skip the loop entirely, but this skill's whole point is the Claude-orchestrated version — don't default to autofix instead of doing the work.
28
+
29
+ **Rate limit is a real terminal state, not a bug.** A comment reading "you've reached your PR review limit" (confirmed live wording) means CodeRabbit will not review again this cycle — stop and report it, don't loop waiting for something that isn't coming.
30
+
31
+ ## Instructions
32
+
33
+ ### 1. Identify the PR
34
+
35
+ ```bash
36
+ gh pr view --json number,headRefName,headRefOid -q '{number, branch: .headRefName, sha: .headRefOid}'
37
+ ```
38
+
39
+ Check out the branch if not already on it.
40
+
41
+ ### 2. Loop (max 5 iterations)
42
+
43
+ #### A. Push and wait
44
+
45
+ ```bash
46
+ git push
47
+ ```
48
+
49
+ If this repo doesn't auto-review on push, nudge it:
50
+
51
+ ```bash
52
+ gh pr comment <PR_NUMBER> --body "@coderabbitai review"
53
+ ```
54
+
55
+ Poll (every ~10s, timeout ~5min) for CodeRabbit's next formal review to land — a new entry in `gh api repos/{owner}/{repo}/pulls/<PR_NUMBER>/reviews` from `coderabbitai[bot]` created after this push. If you instead see a rate-limit comment ("review limit"), **stop the loop now** and go to Report with `blocked: rate-limited`.
56
+
57
+ #### B. Fetch unresolved findings
58
+
59
+ Run the `unresolvedQodoThreads`-shaped query in `references/graphql-queries.md` (filter `author.login == "coderabbitai[bot]"` instead of Qodo's login). For each unresolved thread, parse the finding text and the **Prompt for AI Agents** block (heading text is `🤖 Prompt for AI Agents`, not `Agent Prompt` — match case/emoji-insensitively).
60
+
61
+ #### C. Check exit conditions
62
+
63
+ Stop if there are zero unresolved CodeRabbit threads, or max iterations reached.
64
+
65
+ #### D. Fix each finding
66
+
67
+ For each thread, in order: read the Prompt for AI Agents block in full — it names the issue and the fix. Apply it, staying inside its stated scope. If the suggestion is wrong, unsafe, or needs a product decision, don't force it — note that in step E instead.
68
+
69
+ #### E. Answer and resolve
70
+
71
+ **Reply to the thread first, then resolve it** — the "answer to the comments" half of the job:
72
+
73
+ ```bash
74
+ gh api graphql -f query='mutation { addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: "<THREAD_ID>", body: "<REPLY>"}) { comment { id } } }'
75
+ ```
76
+
77
+ Reply body: one or two sentences — what you changed and why, or exactly why you didn't fix it. Then resolve (`resolveReviewThread`). A finding you deliberately skip still gets a reply and gets resolved.
78
+
79
+ #### F. Commit and push
80
+
81
+ ```bash
82
+ git add -A
83
+ git commit -m "address CodeRabbit review feedback (coderabbitloop iteration N)"
84
+ git push
85
+ ```
86
+
87
+ Go back to step A.
88
+
89
+ ### 3. Report
90
+
91
+ | Field | Value |
92
+ |--------------------|-------|
93
+ | Iterations | N |
94
+ | Findings resolved | N |
95
+ | Findings skipped | N (with reasons) |
96
+ | Remaining | N (if any) |
97
+ | Blocked | rate-limited / max-iterations / none |
98
+
99
+ ```
100
+ Coderabbitloop complete.
101
+ Iterations: 2
102
+ Resolved: 4 (3 fixed, 1 false-positive, replied + resolved)
103
+ Remaining: 0
104
+ ```
105
+
106
+ ## References
107
+
108
+ - `references/graphql-queries.md` — shared with `qodoloop`: the exact `reviewThreads` query and the `resolveReviewThread` / `addPullRequestReviewThreadReply` mutations. Swap the author-login filter to `coderabbitai[bot]` and the prompt-heading match to `Prompt for AI Agents`.
package/README.md CHANGED
@@ -136,7 +136,7 @@ packages/{category}/{skill}/SKILL.md
136
136
 
137
137
  </details>
138
138
 
139
- ## All 25 Skills
139
+ ## All 26 Skills
140
140
 
141
141
  Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup name in a new agent session.
142
142
 
@@ -149,6 +149,7 @@ Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup n
149
149
  | [apple-store-submit](packages/software-development/apple-store-submit/SKILL.md) | Handles App Store rejection emails end-to-end — parses rejection reasons, creates a fix plan, implements code changes, and prepares resubmission | Responding to App Store rejections for privacy strings, entitlements, or guideline violations |
150
150
  | [changelog-generator](packages/software-development/changelog-generator/SKILL.md) | Transforms git commits into polished user-facing changelogs by categorising changes and rewriting technical commit messages | Preparing release notes, app store update descriptions, or a public changelog |
151
151
  | [cloudflare-block-countries](packages/software-development/cloudflare-block-countries/SKILL.md) | Blocks specific countries via Cloudflare WAF Custom Rules using the API | Geo-blocking traffic or setting up WAF country rules across single or multiple zones |
152
+ | [coderabbitloop](packages/software-development/coderabbitloop/SKILL.md) | Iteratively drives a GitHub PR to zero unresolved CodeRabbit findings, reading each inline comment's own Prompt for AI Agents block, replying to the thread, and resolving it | Fully addressing a PR against CodeRabbit's review before merging |
152
153
  | [crash-course](packages/software-development/crash-course/SKILL.md) | Expert tutor for rapid, source-grounded learning of any topic: a timed 4-hour sprint plus cheat-sheet, learning-ladder, quiz-me, Feynman, and resource-curation modes | Ramping up on an unfamiliar codebase, project, or concept under time pressure |
153
154
  | [docs-index-keeper](packages/software-development/docs-index-keeper/SKILL.md) | Keeps a Markdown docs index in sync through pre-commit, CI, or one-off maintenance flows | A repo has `docs/` and needs `docs/README.md` updated automatically |
154
155
  | [gh-cli](packages/software-development/gh-cli/SKILL.md) | Guides GitHub CLI usage for repos, PRs, Actions, releases, issues, and all related GitHub operations | Working with GitHub from the command line and needing reliable `gh` commands |
@@ -580,6 +580,30 @@
580
580
  "kiro",
581
581
  "grok"
582
582
  ]
583
+ },
584
+ {
585
+ "name": "coderabbitloop",
586
+ "lookupName": "olko:coderabbitloop",
587
+ "category": "software-development",
588
+ "path": "packages/software-development/coderabbitloop",
589
+ "description": "Iteratively drives a GitHub PR to zero unresolved CodeRabbit findings \u2014 reads each inline comment's own Prompt for AI Agents block, applies the fix, replies to the thread, resolves it, pushes, and re-triggers CodeRabbit.",
590
+ "tags": [
591
+ "code-review",
592
+ "coderabbit",
593
+ "github",
594
+ "pull-requests",
595
+ "automation",
596
+ "agents"
597
+ ],
598
+ "adapters": [
599
+ "claude",
600
+ "codex",
601
+ "cursor",
602
+ "copilot",
603
+ "grok",
604
+ "windsurf",
605
+ "kiro"
606
+ ]
583
607
  }
584
608
  ]
585
609
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@olegkoval/agent-skills",
3
- "version": "1.20.0",
3
+ "version": "1.21.0",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: coderabbitloop
3
+ description: >
4
+ Iteratively drives a GitHub PR to zero unresolved CodeRabbit (coderabbitai[bot]) findings. Reads
5
+ each inline comment's own "Prompt for AI Agents" block (CodeRabbit's ready-made fix spec per
6
+ issue), applies the fix, replies to the thread explaining what was done, resolves it, pushes, and
7
+ re-triggers CodeRabbit. Repeats until clean or a real blocker needs a human. Use when the user
8
+ wants a PR fully addressed against CodeRabbit's review, or says "run coderabbitloop" / "satisfy
9
+ CodeRabbit" / "resolve CodeRabbit comments".
10
+ compatibility: Requires git and gh (GitHub CLI) authenticated, with the CodeRabbit GitHub App installed on the repo.
11
+ metadata:
12
+ version: "1.0"
13
+ allowed-tools: Bash(gh:*) Bash(git:*)
14
+ ---
15
+
16
+ # Coderabbitloop
17
+
18
+ Fix every actionable CodeRabbit finding on a PR, answer each thread, resolve it, and keep going until CodeRabbit has nothing left to say (or a finding needs a human call).
19
+
20
+ ## Inputs
21
+
22
+ - **PR number** (optional): detect from the current branch if not given.
23
+
24
+ ## How CodeRabbit actually posts (verified against docs.coderabbit.ai and a live install — don't assume otherwise)
25
+
26
+ CodeRabbit runs as `coderabbitai[bot]` and posts **two independent things**, not one:
27
+
28
+ 1. An auto-generated **walkthrough/summary issue comment** — body starts with the HTML marker `<!-- This is an auto-generated comment: summarize by coderabbit.ai -->`. This is a description, not a review — use it for context only, never as a source of fixable findings.
29
+ 2. A **formal PR review** carrying one **inline review comment per finding**, each a real, resolvable GitHub review thread at the finding's file/line. Each one contains a `<details><summary>🤖 Prompt for AI Agents</summary>` block: a ready-made fix spec, CodeRabbit's own words, meant to be handed straight to an agent.
30
+
31
+ **Use the inline threads as the source of truth**, exactly like Greptile/Qodo — fetch via GraphQL `reviewThreads`, which carries native `isResolved` state (see `references/graphql-queries.md`, shared with `qodoloop`; only the bot login and the prompt-heading text differ).
32
+
33
+ CodeRabbit has slash commands (official, `docs.coderabbit.ai/reference/review-commands`) — the ones this loop actually uses:
34
+ - `@coderabbitai review` — incremental review of new changes (use this to re-trigger after a push, if automatic review-on-push is off for this repo).
35
+ - `@coderabbitai resolve` — marks **all** CodeRabbit threads resolved in one shot. This is a bulk escape hatch, not the default path: this loop resolves threads one at a time, right after replying to each, so the reply-then-resolve record stays intact per finding.
36
+ - CodeRabbit also has its own built-in `@coderabbitai autofix`, which commits fixes directly without a model in the loop. Mention it to the user as an alternative if they'd rather skip the loop entirely, but this skill's whole point is the Claude-orchestrated version — don't default to autofix instead of doing the work.
37
+
38
+ **Rate limit is a real terminal state, not a bug.** A comment reading "you've reached your PR review limit" (confirmed live wording) means CodeRabbit will not review again this cycle — stop and report it, don't loop waiting for something that isn't coming.
39
+
40
+ ## Instructions
41
+
42
+ ### 1. Identify the PR
43
+
44
+ ```bash
45
+ gh pr view --json number,headRefName,headRefOid -q '{number, branch: .headRefName, sha: .headRefOid}'
46
+ ```
47
+
48
+ Check out the branch if not already on it.
49
+
50
+ ### 2. Loop (max 5 iterations)
51
+
52
+ #### A. Push and wait
53
+
54
+ ```bash
55
+ git push
56
+ ```
57
+
58
+ If this repo doesn't auto-review on push, nudge it:
59
+
60
+ ```bash
61
+ gh pr comment <PR_NUMBER> --body "@coderabbitai review"
62
+ ```
63
+
64
+ Poll (every ~10s, timeout ~5min) for CodeRabbit's next formal review to land — a new entry in `gh api repos/{owner}/{repo}/pulls/<PR_NUMBER>/reviews` from `coderabbitai[bot]` created after this push. If you instead see a rate-limit comment ("review limit"), **stop the loop now** and go to Report with `blocked: rate-limited`.
65
+
66
+ #### B. Fetch unresolved findings
67
+
68
+ Run the `unresolvedQodoThreads`-shaped query in `references/graphql-queries.md` (filter `author.login == "coderabbitai[bot]"` instead of Qodo's login). For each unresolved thread, parse the finding text and the **Prompt for AI Agents** block (heading text is `🤖 Prompt for AI Agents`, not `Agent Prompt` — match case/emoji-insensitively).
69
+
70
+ #### C. Check exit conditions
71
+
72
+ Stop if there are zero unresolved CodeRabbit threads, or max iterations reached.
73
+
74
+ #### D. Fix each finding
75
+
76
+ For each thread, in order: read the Prompt for AI Agents block in full — it names the issue and the fix. Apply it, staying inside its stated scope. If the suggestion is wrong, unsafe, or needs a product decision, don't force it — note that in step E instead.
77
+
78
+ #### E. Answer and resolve
79
+
80
+ **Reply to the thread first, then resolve it** — the "answer to the comments" half of the job:
81
+
82
+ ```bash
83
+ gh api graphql -f query='mutation { addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: "<THREAD_ID>", body: "<REPLY>"}) { comment { id } } }'
84
+ ```
85
+
86
+ Reply body: one or two sentences — what you changed and why, or exactly why you didn't fix it. Then resolve (`resolveReviewThread`). A finding you deliberately skip still gets a reply and gets resolved.
87
+
88
+ #### F. Commit and push
89
+
90
+ ```bash
91
+ git add -A
92
+ git commit -m "address CodeRabbit review feedback (coderabbitloop iteration N)"
93
+ git push
94
+ ```
95
+
96
+ Go back to step A.
97
+
98
+ ### 3. Report
99
+
100
+ | Field | Value |
101
+ |--------------------|-------|
102
+ | Iterations | N |
103
+ | Findings resolved | N |
104
+ | Findings skipped | N (with reasons) |
105
+ | Remaining | N (if any) |
106
+ | Blocked | rate-limited / max-iterations / none |
107
+
108
+ ```
109
+ Coderabbitloop complete.
110
+ Iterations: 2
111
+ Resolved: 4 (3 fixed, 1 false-positive, replied + resolved)
112
+ Remaining: 0
113
+ ```
114
+
115
+ ## References
116
+
117
+ - `references/graphql-queries.md` — shared with `qodoloop`: the exact `reviewThreads` query and the `resolveReviewThread` / `addPullRequestReviewThreadReply` mutations. Swap the author-login filter to `coderabbitai[bot]` and the prompt-heading match to `Prompt for AI Agents`.
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "olko-coderabbitloop",
3
+ "description": "Iteratively drives a GitHub PR to zero unresolved CodeRabbit findings — reads each inline comment's own Prompt for AI Agents block, applies the fix, replies to the thread, resolves it, pushes, and re-triggers CodeRabbit.",
4
+ "skills": "./skills"
5
+ }
@@ -0,0 +1,118 @@
1
+ ---
2
+ name: coderabbitloop
3
+ description: >
4
+ Iteratively drives a GitHub PR to zero unresolved CodeRabbit (coderabbitai[bot]) findings. Reads
5
+ each inline comment's own "Prompt for AI Agents" block (CodeRabbit's ready-made fix spec per
6
+ issue), applies the fix, replies to the thread explaining what was done, resolves it, pushes, and
7
+ re-triggers CodeRabbit. Repeats until clean or a real blocker needs a human. Use when the user
8
+ wants a PR fully addressed against CodeRabbit's review, or says "run coderabbitloop" / "satisfy
9
+ CodeRabbit" / "resolve CodeRabbit comments".
10
+ compatibility: Requires git and gh (GitHub CLI) authenticated, with the CodeRabbit GitHub App installed on the repo.
11
+ metadata:
12
+ version: "1.0"
13
+ allowed-tools: Bash(gh:*) Bash(git:*)
14
+ ---
15
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
16
+
17
+ # Coderabbitloop
18
+
19
+ Fix every actionable CodeRabbit finding on a PR, answer each thread, resolve it, and keep going until CodeRabbit has nothing left to say (or a finding needs a human call).
20
+
21
+ ## Inputs
22
+
23
+ - **PR number** (optional): detect from the current branch if not given.
24
+
25
+ ## How CodeRabbit actually posts (verified against docs.coderabbit.ai and a live install — don't assume otherwise)
26
+
27
+ CodeRabbit runs as `coderabbitai[bot]` and posts **two independent things**, not one:
28
+
29
+ 1. An auto-generated **walkthrough/summary issue comment** — body starts with the HTML marker `<!-- This is an auto-generated comment: summarize by coderabbit.ai -->`. This is a description, not a review — use it for context only, never as a source of fixable findings.
30
+ 2. A **formal PR review** carrying one **inline review comment per finding**, each a real, resolvable GitHub review thread at the finding's file/line. Each one contains a `<details><summary>🤖 Prompt for AI Agents</summary>` block: a ready-made fix spec, CodeRabbit's own words, meant to be handed straight to an agent.
31
+
32
+ **Use the inline threads as the source of truth**, exactly like Greptile/Qodo — fetch via GraphQL `reviewThreads`, which carries native `isResolved` state (see `references/graphql-queries.md`, shared with `qodoloop`; only the bot login and the prompt-heading text differ).
33
+
34
+ CodeRabbit has slash commands (official, `docs.coderabbit.ai/reference/review-commands`) — the ones this loop actually uses:
35
+ - `@coderabbitai review` — incremental review of new changes (use this to re-trigger after a push, if automatic review-on-push is off for this repo).
36
+ - `@coderabbitai resolve` — marks **all** CodeRabbit threads resolved in one shot. This is a bulk escape hatch, not the default path: this loop resolves threads one at a time, right after replying to each, so the reply-then-resolve record stays intact per finding.
37
+ - CodeRabbit also has its own built-in `@coderabbitai autofix`, which commits fixes directly without a model in the loop. Mention it to the user as an alternative if they'd rather skip the loop entirely, but this skill's whole point is the Claude-orchestrated version — don't default to autofix instead of doing the work.
38
+
39
+ **Rate limit is a real terminal state, not a bug.** A comment reading "you've reached your PR review limit" (confirmed live wording) means CodeRabbit will not review again this cycle — stop and report it, don't loop waiting for something that isn't coming.
40
+
41
+ ## Instructions
42
+
43
+ ### 1. Identify the PR
44
+
45
+ ```bash
46
+ gh pr view --json number,headRefName,headRefOid -q '{number, branch: .headRefName, sha: .headRefOid}'
47
+ ```
48
+
49
+ Check out the branch if not already on it.
50
+
51
+ ### 2. Loop (max 5 iterations)
52
+
53
+ #### A. Push and wait
54
+
55
+ ```bash
56
+ git push
57
+ ```
58
+
59
+ If this repo doesn't auto-review on push, nudge it:
60
+
61
+ ```bash
62
+ gh pr comment <PR_NUMBER> --body "@coderabbitai review"
63
+ ```
64
+
65
+ Poll (every ~10s, timeout ~5min) for CodeRabbit's next formal review to land — a new entry in `gh api repos/{owner}/{repo}/pulls/<PR_NUMBER>/reviews` from `coderabbitai[bot]` created after this push. If you instead see a rate-limit comment ("review limit"), **stop the loop now** and go to Report with `blocked: rate-limited`.
66
+
67
+ #### B. Fetch unresolved findings
68
+
69
+ Run the `unresolvedQodoThreads`-shaped query in `references/graphql-queries.md` (filter `author.login == "coderabbitai[bot]"` instead of Qodo's login). For each unresolved thread, parse the finding text and the **Prompt for AI Agents** block (heading text is `🤖 Prompt for AI Agents`, not `Agent Prompt` — match case/emoji-insensitively).
70
+
71
+ #### C. Check exit conditions
72
+
73
+ Stop if there are zero unresolved CodeRabbit threads, or max iterations reached.
74
+
75
+ #### D. Fix each finding
76
+
77
+ For each thread, in order: read the Prompt for AI Agents block in full — it names the issue and the fix. Apply it, staying inside its stated scope. If the suggestion is wrong, unsafe, or needs a product decision, don't force it — note that in step E instead.
78
+
79
+ #### E. Answer and resolve
80
+
81
+ **Reply to the thread first, then resolve it** — the "answer to the comments" half of the job:
82
+
83
+ ```bash
84
+ gh api graphql -f query='mutation { addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: "<THREAD_ID>", body: "<REPLY>"}) { comment { id } } }'
85
+ ```
86
+
87
+ Reply body: one or two sentences — what you changed and why, or exactly why you didn't fix it. Then resolve (`resolveReviewThread`). A finding you deliberately skip still gets a reply and gets resolved.
88
+
89
+ #### F. Commit and push
90
+
91
+ ```bash
92
+ git add -A
93
+ git commit -m "address CodeRabbit review feedback (coderabbitloop iteration N)"
94
+ git push
95
+ ```
96
+
97
+ Go back to step A.
98
+
99
+ ### 3. Report
100
+
101
+ | Field | Value |
102
+ |--------------------|-------|
103
+ | Iterations | N |
104
+ | Findings resolved | N |
105
+ | Findings skipped | N (with reasons) |
106
+ | Remaining | N (if any) |
107
+ | Blocked | rate-limited / max-iterations / none |
108
+
109
+ ```
110
+ Coderabbitloop complete.
111
+ Iterations: 2
112
+ Resolved: 4 (3 fixed, 1 false-positive, replied + resolved)
113
+ Remaining: 0
114
+ ```
115
+
116
+ ## References
117
+
118
+ - `references/graphql-queries.md` — shared with `qodoloop`: the exact `reviewThreads` query and the `resolveReviewThread` / `addPullRequestReviewThreadReply` mutations. Swap the author-login filter to `coderabbitai[bot]` and the prompt-heading match to `Prompt for AI Agents`.