Agent skill

Repo PR Reviews

by netdata in netdata/netdata

Inspect selected PR comments or perform complete PR review triage; address verified findings when authorized.

GPL-3.0Auto-check: notesDevelopment

Install Repo PR Reviews

skills CLI
$ npx skills add netdata/netdata --skill repo-pr-reviews -a claude-code

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

GitHub CLI
$ gh skill install netdata/netdata repo-pr-reviews --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/netdata/netdata.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/repo-pr-reviews .claude/skills/repo-pr-reviews && 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
repo-pr-reviews
GitHub stars
81k
Token cost
~8.1k tokens
SKILL.md length
4,263 words
Files
12 (incl. scripts)
Skills in repo
27
Repo updated
First seen
Licence
GPL-3.0

At a glance

Inspect selected PR comments or perform complete PR review triage; address verified findings when authorized.

  • Works in 6 steps: List open threads (and Sonar findings) → For each open thread, ONE AT A TIME → Push, then re-trigger reviewers → …
  • Tasks that involve Pull requests
  • SKILL.md covers Your role on a PR, MANDATORY rules, Author classes -- different… and Setup, plus 8 more sections
  • Runs Shell scripts from its folder; calls bash and gh; needs SONAR_TOKEN

What it does

Repo PR Reviews is an agent skill from netdata/netdata. Inspect selected PR comments or perform complete PR review triage; address verified findings when authorized. Covers GitHub review threads, bot feedback, SonarCloud findings and CI. Ordinary code review without PR-comment handling uses the relevant domain skills.

Its SKILL.md is about 8.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 12 other files, including scripts (for example `scripts/_lib.sh`, `scripts/ci-status.sh` and `scripts/fetch-all.sh`).

It sits in Development, covering Pull requests. It works with GitHub. The repository describes itself as: The fastest path to AI-powered full stack observability, even for lean teams. The licence is GPL-3.0.

When your agent uses it

  • Tasks that involve Pull requests

Example prompts

  • “/repo-pr-reviews”

Requirements

  • A Bash shell
  • A credential in SONAR_TOKEN

Workflow steps

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

  1. List open threads (and Sonar findings)
  2. For each open thread, ONE AT A TIME
  3. Push, then re-trigger reviewers
  4. Wait for new activity
  5. Loop
  6. Final report

What it can do on your machine

Read from SKILL.md and the folder at commit 567162f. 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

    Ships 11 files in scripts/ (Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • bash
    • gh

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

  • Network

    No URLs in SKILL.md. Its commands use gh, 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 these keys or tokens, usually read from environment variables:

    • SONAR_TOKEN

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

Context cost

Repo PR Reviews loads about 8.1k tokens when it runs. Until then it costs about 70 tokens; SKILL.md has 4,263 words of instructions outside code blocks.

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

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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:189
    Requires the same `.env` config the `triage-sonarqube` skill uses
  • NoteMentions a .env fileSKILL.md:190
    `SONAR_HOST_URL`, `SONAR_PROJECT`). If `.env` is missing,

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); the scripts in this folder are not scanned.

SKILL.md

The full file from netdata/netdata at commit 567162f, republished under its GPL-3.0 licence (© netdata). 4,263 words, ~8,106 tokens.

Download SKILL.mdSave it as .claude/skills/repo-pr-reviews/SKILL.md (or your agent's skills folder). This skill also uses 11 other files; get the full folder from GitHub.
name
repo-pr-reviews
description
Inspect selected PR comments or perform complete PR review triage; address verified findings when authorized. Covers GitHub review threads, bot feedback, SonarCloud findings and CI. Ordinary code review without PR-comment handling uses the relevant domain skills.

PR review handler skill

This skill gathers and verifies PR findings, then applies the authorized handling path below.

Your role on a PR

Authorization and read-only scope are owned by AGENTS.md#when-a-sow-is-required; Git operations by AGENTS.md#git-and-pr-workflow; finding classification, review repetition and stopping by AGENTS.md#review.

  • Inspect/report: requests such as "look at the reviews" gather and verify findings using steps 1-2, then report them under step 8. Do not fix source, post replies, resolve threads, mark Sonar findings, or trigger reviewers.
  • Address: when fixes are authorized, solve the original PR problem and handle verified findings within approved scope. Posting replies, resolving threads, changing remote triage state and triggering bots require user authorization for those actions; permission to fix code alone does not grant it. Preserve already-granted approval. Prepare proposed replies or triage decisions for the user when remote actions are not authorized.
  • Focused inspection: gather the requested comments, reviewer or finding source and enough surrounding thread/code context to verify the claim. Paginate the selected source completely when the request needs its full results; a specific comment lookup does not require fetching unrelated Sonar findings or setting up their credentials. State the inspected scope and unexamined sources; do not claim complete PR triage or merge readiness.
  • Complete PR triage: fetch every configured finding source below, including Sonar and CI. An unavailable source is a coverage gap, not an empty result. Broad addressing/iteration requests use this path unless the user limits scope.
  • Mutation steps apply only to authorized actions. Human-comment handling retains the direction requirement under "Author classes"; use already-granted direction without asking again.

Sources of findings, in priority order:

  1. Human review comments -- maintainers / devs / community.
  2. AI bot review comments -- cubic-dev-ai, coderabbitai, etc.
  3. SonarCloud PR findings -- new code-smell / vulnerability / security-hotspot issues introduced by this PR. Some security findings are mirrored into GitHub inline comments by github-advanced-security. Fetch the SonarCloud API explicitly for the complete finding set; GitHub comments and the QualityGate summary are not a complete inventory.
  4. CI failures relevant to this PR -- shellcheck, codeql, build / test failures caused by the PR's changes.
  5. Anything else this repo configures (Codacy, custom workflows, ...).

A finding is "relevant to this PR" if its existence (or its line location) is plausibly caused by the PR's diff. CI failures unrelated to this PR (a flaky test on an unrelated module, an infra outage) are NOT in scope -- note them, surface to the user at the end, do not fix them here.

The bar is the project's performance, stability, and long-term maintainability. Don't dismiss findings because they look minor.

MANDATORY rules

These are non-negotiable. Skipping any of them will cost the user time.

  1. Pagination paranoia for selected result sets. Do not stop at round numbers. If a fetch returns exactly 100 / 200 / 300 items, verify completion: these helpers request 100 items per page, so a round multiple may hide a missed next page. Always re-probe with an explicit page=N+1 request. fetch-all.sh does this automatically.
  2. Triage every in-scope comment. Verify it and classify it under AGENTS.md#review. Handle non-blocking findings under AGENTS.md#scope-discipline-at-every-step and AGENTS.md#followup-discipline; do not silently discard them or promote them to shipping blockers merely because a reviewer requested them.
  3. Verify every comment properly. No shortcuts. Read the code, follow the trace, confirm the claim. AI bots produce false positives -- judge each one on its merits.
  4. When replies are authorized, reply per-thread, one by one. No bulk replies. No mechanical "fixed" answers. Each thread gets a substantive reply that explains what you did or why the comment doesn't apply.
  5. Assess materiality, not phrasing. Optional improvements receive an explicit disposition; they do not independently extend the review cycle (AGENTS.md#review).
  6. Explain false positives with evidence. During authorized fixes, add a source comment only when it clarifies otherwise ambiguous intent. Bot confusion alone does not justify changing correct code.
  7. Check CI BEFORE every push, but never WAIT for CI between iterations. Waiting for CI between bot-review cycles destroys throughput -- a CI run can take 30+ minutes, and during that time the AI reviewers are idle. The right cadence is:
    • Before each push: run ci-status.sh. If there are PR-caused failures, fix them and bundle into the same push. If checks are still running, that's fine -- ignore them and push anyway. The next push triggers fresh CI on the new code, which is what we actually care about.
    • After a push: if another round is warranted under AGENTS.md#review and trigger comments are authorized, re-trigger the selected bots, then use wait-for-activity.sh for their feedback.
    • If wait-for-activity.sh times out (30 min, no new comments): re-check ci-status.sh. If checks are still running, that's normal, surface to the user. Treat PR-caused failures as blockers; report unrelated failures without fixing them.
  8. Re-trigger selected reviewers when another round is warranted. Use AGENTS.md#review to decide whether to repeat a round; do not re-trigger solely to obtain an approval phrase. Trigger comments require authorization.
    • cubic-dev-ai: post a new top-level comment mentioning it (trigger-cubic.sh).
    • coderabbitai: post a new top-level comment with a command (trigger-coderabbit.sh; @coderabbitai review is incremental, full review re-reads the whole PR).
    • Copilot: NOT re-triggered. Its billing model means the org normally has no credits for it, so a re-request produces nothing and only adds latency. trigger-copilot.sh is kept for the case where credits exist, but it is not part of the loop and Copilot never blocks the exit condition. Address any comments it does post like any other AI bot.
  9. Don't loop forever on silent bots. Some assistants stop responding. That's fine. Use wait-for-activity.sh with the 30-min timeout and move on if nothing changes.
  10. Check for the same root cause in related code. Trace where the defective pattern can recur within the selected scope and relevant dependencies. Broaden the search across the PR when the cause is shared; a local finding does not automatically require a full-PR re-audit. Reuse a completed same-cause search unless new evidence invalidates it. Review strategy and follow-up scope follow AGENTS.md#review.
  11. Don't trust linters alone -- smoke-test every fix. Static analyzers (shellcheck, etc.) verify a property of the code; they don't verify behavior. A "correct per the linter" fix can change runtime behavior in subtle ways (e.g. a printf format-string fix that stops escape-sequence interpretation, breaking colored output that the linter never knew about). After every fix, run the affected script (or the smallest invocation that exercises the change) and verify the output looks right. "Linter green" is not the same as "still works."
  12. Check review and validation coverage before pushing. Step 4a applies AGENTS.md#review; a push alone does not require another review when the current change already has adequate coverage.
  13. Before every authorized push, refresh the selected finding sources. Step 4-pre verifies and dispositions newly arrived feedback against the current HEAD; do not leave findings unassessed or assume the fetch prevents later arrivals.

Author classes -- different handling per class

  • AI bots (cubic-dev-ai[bot], coderabbitai[bot], copilot[bot] and variants): handle within the authorized path above. Verify every finding; fix, reply and resolve only when those actions are authorized. Inspection alone ends with a report.
  • Code-scanning authors (github-advanced-security): verify findings against the originating analyzer and current source. Use the same authorized thread workflow; mirrored Sonar issues also need their Sonar disposition under step 3b.
  • Informational bots (sonarqubecloud[bot], github-actions[bot], netdata-bot[bot]): read for signal (e.g. quality gate status). They don't usually require a reply.
  • Humans (developers, maintainers, community): consult the user. Maintainer comments matter most -- in this project, we are usually contributors, they are the project owners. Do not respond on the user's behalf without their direction. Surface human comments to the user with a recommendation, then act per their instruction.

Setup

For live GitHub fetching, use gh authenticated for the repo. Sonar fetching additionally needs its configured authentication below. Reading supplied comments or reviewing this skill needs neither setup.

The skill reads upstream (or origin) from git remotes to derive the repo slug. Override with PR_REPO_SLUG=owner/repo if working cross-repo.

State for each PR is cached under <repo-root>/.local/audits/pr-reviews/pr-<N>/:

  • pr.json -- top-level PR metadata
  • issue-comments.json -- top-level PR comments (REST)
  • review-comments.json -- inline review comments (REST)
  • reviews.json -- review submissions with body (REST)
  • review-threads.json -- per-thread, with isResolved (GraphQL)
  • summary.txt -- human-readable triage summary
  • FETCH-INCOMPLETE -- present only while a fetch is running or after one aborted; the snapshot is partial, re-run fetch-all.sh before reading anything else here

Workflow

For supplied-comment-only inspection, skip the commands in steps 1-2, verify the supplied findings directly, then report under step 8. For other inspections, use the selected sources in steps 1-2, verify the findings, then report under step 8. For complete triage, all sources apply. For authorized addressing, apply steps 3-4, perform only authorized remote actions, and use AGENTS.md#review to decide whether steps 5-7 are needed.

1a. Fetch all comments (paranoid)

Run when the selected scope requires fetching GitHub comments. For supplied-comment-only inspection, use the supplied evidence directly and skip this step.

bash .agents/skills/repo-pr-reviews/scripts/fetch-all.sh <PR_NUMBER>

Tail-prints a summary.txt that shows the per-author count and the list of open review threads. Use this as the input to the rest of the cycle.

1b. Fetch SonarCloud PR findings

Run only when Sonar findings belong to the selected scope and need fetching. Supplied Sonar evidence can be inspected without this fetch or credential setup; a comment-only scope skips this step.

bash .agents/skills/repo-pr-reviews/scripts/fetch-sonar-findings.sh <PR_NUMBER>

This script fetches the full SonarCloud finding set, including findings absent from GitHub inline comments:

  • .local/audits/pr-reviews/pr-<N>/sonar-issues.json
  • .local/audits/pr-reviews/pr-<N>/sonar-hotspots.json
  • a brief summary to stdout (counts by rule and severity).

Requires the same .env config the triage-sonarqube skill uses (SONAR_TOKEN, SONAR_HOST_URL, SONAR_PROJECT). If .env is missing, the script prints what's needed and exits.

An empty issue/hotspot list does not prove the quality gate passed. Inspect /api/qualitygates/project_status?projectKey=<project>&pullRequest=<PR> for failed metric conditions. For duplication, use /api/duplications/show?key=<file-component-key>&pullRequest=<PR>: each duplications[].blocks[] identifies from, size, and _ref; files resolves those references. Preserve test cases when sharing duplicated setup.

1c. Note the CI signal as a third source

For complete triage, or when CI belongs to the selected inspection scope, run bash .agents/skills/repo-pr-reviews/scripts/ci-status.sh <PR> once early to capture which checks are failing right now. You're looking for failures caused by the current PR (typo in a YAML file you added, a script that doesn't pass shellcheck, a build that breaks because of the diff). DO NOT fix CI yet -- just note the failures as input alongside review comments and Sonar findings. They all get addressed in the same iteration so a single push covers them.

2. List open threads (and Sonar findings)

These commands read a completed fetch-all.sh cache and apply only when fetched GitHub threads are selected evidence. For supplied-comment-only inspection, assistants MUST skip both commands even if a cache exists and verify the supplied evidence directly.

bash .agents/skills/repo-pr-reviews/scripts/list-open-threads.sh <PR_NUMBER>          # full bodies
bash .agents/skills/repo-pr-reviews/scripts/list-open-threads.sh <PR_NUMBER> --short  # one line per thread

The "short" output is a table: thread-id | path:line | author. The full form prints every comment in each thread.

3. For each open thread, ONE AT A TIME

This is per-thread, not batched. Do not prepare a list of replies and fire them in a loop. Do not post all replies first and resolve all later. Walk one thread at a time:

For thread N:

  1. Read the comment carefully. What is the bot/dev claiming?
  2. Open the file at the line and verify. Does the claim hold against the current code? Is it valid in context?
  3. Check related code for the same root cause under rule #10. Reuse a completed search for subsequent findings of that cause; broaden it when new evidence changes the affected scope.
  4. Decide:
    • If valid -> classify under AGENTS.md#review; fix blockers and approved improvements, including similar in-scope instances. Record dispositions for non-blocking items under the root scope and follow-up rules.
    • If invalid -> record the evidence; clarify source intent only when warranted under rule 6.
  5. Reply in the thread.
    bash .agents/skills/repo-pr-reviews/scripts/reply-thread.sh <PR> <comment-id> "<reply>"
    <comment-id> is the databaseId of the FIRST comment in the thread (from review-threads.json -> .[].comments.nodes[0].databaseId).
  6. Resolve the thread immediately after the reply succeeds. "Succeeds" means you saw posted reply id=.... Resolving a thread whose reply failed hides it from the needs-attention view with nothing written in it, which reads to a human as a silently dismissed review.
    bash .agents/skills/repo-pr-reviews/scripts/resolve-thread.sh <thread-id>
    <thread-id> is the GraphQL node id (review-threads.json -> .[].id, starts with PRRT_). Resolving immediately after replying takes the thread out of the "needs attention" view; leaving threads open without resolution accumulates noise.

Then move to thread N+1. Reply-and-resolve, reply-and-resolve. Never queue them up.

The reason: the order makes intent visible to humans watching the PR -- they see "agent posted reply, agent resolved" as one motion per thread, not "agent dumped 14 replies, then dumped 14 resolves". Bulk operations look mechanical and erode trust in the address pass.

3b. Address each Sonar finding

Skip this step when Sonar findings are outside the selected scope. Use supplied evidence or the selected fetch from step 1b; an unrelated cached Sonar file does not add it to scope.

For each issue in sonar-issues.json and each hotspot in sonar-hotspots.json:

  1. Read the rule and the message. What is Sonar claiming?
  2. Open the file at the line and verify. Does the claim hold against the current code?
  3. Check related code for the same root cause under rule #10. A shared rule ID alone does not prove every matching construct is defective; use the actual trigger and contract to choose the search and review scope.
  4. Decide:
    • If valid -> classify under AGENTS.md#review; fix blockers and approved improvements, including similar in-scope instances. Disposition other findings under the root scope and follow-up rules.
    • If invalid -> record the evidence. When remote triage is authorized, triage-sonarqube provides sonar-mark.sh fp <KEY> "<reason>" to mark it False Positive in SonarCloud. Comments are ASCII-only (Cloudflare).
  5. Account for every finding. An open issue count alone is not the stopping condition; use AGENTS.md#review and report unmet required quality gates explicitly.

When a Sonar finding is mirrored into a GitHub thread, handle that thread under step 3 as well as the Sonar classification above. Replying to or resolving the GitHub thread does not change the Sonar issue state; a Sonar transition does not replace an explanation in the GitHub thread. Both actions require their existing authorization.

4-pre. Before pushing -- refresh and triage findings

Reviewers run in parallel. Multiple bots and humans can be appending findings WHILE you're addressing the current batch. If you push the moment your queue is empty, the findings that arrived during this iteration get attributed to your fresh commit instead of the previous one -- and on the next round you end up "fixing" findings that no longer apply because you addressed them implicitly with the next push. The result: chronic desync, where your commit and the reviewers' findings are always one round apart.

Before an authorized push for complete triage, re-fetch all sources (comments, Sonar, CI). For explicitly scoped handling, refresh the selected finding sources and check CI; report the scope limit. Triage new findings against HEAD. Resolve verified blockers before pushing; handle non-blocking items under the root scope/follow-up rules. This reduces stale work but is not an atomic barrier: new feedback can arrive after the fetch.

bash
# Complete-triage example. Scoped handling refreshes only its selected finding sources.
# Both paths check CI before an authorized push.
bash .agents/skills/repo-pr-reviews/scripts/fetch-all.sh <PR_NUMBER>
bash .agents/skills/repo-pr-reviews/scripts/fetch-sonar-findings.sh <PR_NUMBER>
bash .agents/skills/repo-pr-reviews/scripts/ci-status.sh <PR_NUMBER>

The ci-status.sh line is the third source: a CI failure that is CAUSED by this PR's changes (added a script that doesn't pass shellcheck, broke a YAML parse, etc.) is in scope and must be folded in. CI failures unrelated to this PR are noted, surfaced to the user at the end, but not fixed here.

If the fresh snapshot contains an unassessed finding, verify and disposition it before pushing. Additional fixes require relevant validation; repeat review only under AGENTS.md#review, not merely because another comment arrived.

Show full SKILL.md (1,706 more words)Show less
4a. Before pushing -- verify review and validation coverage

Assess whether the current change has adequate review and validation under AGENTS.md#review. The main agent owns that assessment; independent review of the entire PR is not a prerequisite for every push. Reuse earlier evidence that still holds, assess new fixes and their interactions, and widen coverage when changes invalidate earlier assumptions. Do not launch a reviewer merely because a push is next or claim readiness for unassessed work.

When independent review is useful, adapt the scope and lenses to the unresolved question:

Review <decision/change/fix and affected interactions> on branch <X>, against <base or reviewed state>. Read AGENTS.md and the active SOW <filename, if any>. Assess <relevant risks/questions> using <owner/validation evidence>. Trace dependencies needed for this scope and report material gaps beyond it. Classify each finding under AGENTS.md Review, with file/line evidence, trigger, consequence and a suggested fix. This is read-only: do not edit files, mutate remote or Git state, stop processes, or launch other agents.

Verify reviewer findings before acting. Handle blockers and optional improvements under the root review, scope and follow-up rules. A reviewer returning no suggestions is not required before proceeding.

4b. Before pushing -- check CI for FAILURES (don't wait)
bash .agents/skills/repo-pr-reviews/scripts/ci-status.sh <PR_NUMBER>

Exit codes:

  • 0 -- no observed failed or running checks; this also covers an empty rollup and is not proof of required coverage
  • 2 -- runs in progress; this need not delay an already-authorized fix push. Waiting for CI between iterations destroys throughput. The new push triggers fresh CI on the new code, which is what matters.
  • 3 -- runs failing -- fix the failures and bundle them into the push.

CI failures unrelated to this PR (a flaky test on a different module, an infra outage) are NOT in scope for this PR -- note them, surface to the user, move on. Do not make drive-by fixes here.

5. Push, then re-trigger reviewers

When a further review round is warranted under AGENTS.md#review, and posting trigger comments is authorized, run the selected reviewers after the fix commits have been pushed:

bash .agents/skills/repo-pr-reviews/scripts/trigger-cubic.sh      <PR_NUMBER>
bash .agents/skills/repo-pr-reviews/scripts/trigger-coderabbit.sh <PR_NUMBER>

cubic and coderabbit re-review when mentioned in a new top-level PR comment. Copilot is deliberately absent: see rule 8. If a new reviewer is selected for repeated review, document its re-trigger mechanism here; recognizing its comments does not by itself require repeatedly invoking it.

6. Wait for new activity
bash .agents/skills/repo-pr-reviews/scripts/wait-for-activity.sh <PR_NUMBER>

Default timeout 30 min, poll every 30 s. Returns 0 on new activity, 124 on timeout. Use it when awaiting a warranted review round; a bot's "no new findings" comment is evidence to assess, not a required exit phrase.

What counts as "new activity":

  • New issue comment / review comment / review on the PR.
  • New commit pushed to the PR head.
  • A review thread getting resolved or unresolved (often by a bot saying "addressed; resolving" -- without this signal we'd miss thread state flips and time out spuriously).
7. Loop

Iteration and completion follow AGENTS.md#review. Re-fetch and assess new findings when another round is warranted; do not repeat merely to reach zero open threads, zero optional suggestions, or a particular bot verdict.

  • Before concluding, account for findings from every in-scope source and report their verified disposition. Required CI, quality gates, human decisions and actual merge requirements remain prerequisites for claiming merge readiness.
  • A silent reviewer or a wait timeout is not approval. Re-check CI and available feedback, then report any remaining coverage or validation limitation; do not loop solely to make the bot respond.
  • If required checks are running or human input is pending, report that waiting state without claiming readiness. If a required check fails because of this PR, treat it as a blocker. Unrelated failures are reported, not fixed here.
8. Final report

When the inspection or authorized handling ends, summarize for the user:

  • Requested scope, inspected sources and any unavailable or unexamined sources.
  • Findings addressed (count by source: review threads, Sonar, CI).
  • Any unrelated CI failures observed but not fixed (with check name + URL).
  • Any human comments that need their attention.
  • Current PR state when inspected (mergeable / blocked / awaiting validation or input, decision, head SHA); otherwise state that it is unassessed. Supplied-comment inspection does not require a live metadata lookup.
  • Proposed but unperformed replies or remote actions, remaining optional findings and their dispositions, and any review/validation coverage limits.

Commit message hygiene

Commit messages on the address-the-comments cycle should describe the change, not the reviewer or the cycle:

  • BAD: "address copilot comments"
  • BAD: "fix bot review feedback"
  • GOOD: "scripts: fix dry-run env var name and printf format-string usage"

Follow AGENTS.md#git-and-pr-workflow for attribution. Describe the technical change without reviewer credit; a tool name needed to explain changed integration behavior is valid technical context.

(Comments on the PR are an exception when they're operational mentions required by the bot itself: @cubic-dev-ai please review again is a direct trigger for that bot, and the trigger script enforces it. Outside operational triggers, the same rule applies to comments.)

Replying to bots -- tone

Be substantive but brief. The bot's prompt-text is verbose; your reply doesn't have to be. Examples:

  • For a valid fix: "Fixed in <sha-or-paragraph>: <one-sentence what changed>."
  • For a false positive: "False positive -- <one-sentence why>: <evidence citation>." Add a code comment if it'll help future reviewers.
  • For a partial fix: "Partial -- fixed the immediate case at <line>, but the related <other-line> is intentional because <reason>."

Replying to humans -- consult the user

Maintainer / dev / community comments go to the user FIRST. Your message should:

  1. Quote the relevant part of their comment.
  2. State your read of what they're asking for.
  3. Propose 1-3 options if it's a design call, or one option if obvious.
  4. Wait for the user's decision.

Then act per their direction. Do not respond to humans on the user's behalf without explicit direction. Existing explicit direction for the response remains valid; do not request it again. A request to review a human comment does not itself authorize a reply.

Bot directory

BotRoleRe-trigger
cubic-dev-ai[bot]Line-level code reviewNew PR comment mentioning @cubic-dev-ai
coderabbitai[bot]Line-level code reviewtrigger-coderabbit.sh (@coderabbitai review) -- NEVER @coderabbit, that is a different, unrelated GitHub user
copilot[bot]Line-level code reviewNot re-triggered -- no credits (see rule 8)
sonarqubecloud[bot]Quality-gate statusAuto, on each scan run -- read its issue comment
github-advanced-securityMirrored code-scanning findingsAuto, on each scan upload; inspect the originating analyzer
github-actions[bot]CI status / labelsAuto, on each workflow run
netdata-bot[bot]Repo automation (labels, etc.)Auto

If a new AI reviewer appears in the project, classify it by adding to PR_AI_BOT_RE in _lib.sh so the skill recognizes it.

Reviewer-specific notes

  • The mention is @coderabbitai, never @coderabbit. @coderabbit is a real, unrelated GitHub user; mentioning it pings a stranger on every iteration and never reaches the bot. trigger-coderabbit.sh hardcodes the correct handle -- do not hand-write the mention. The same care applies to @cubic-dev-ai. Before posting any comment containing an @, check the handle against the bot directory above.

  • coderabbitai[bot] posts line-level findings, not just summaries. It was originally classified here as informational; it is an AI reviewer and its threads need the same verify-reply-resolve treatment as cubic's.

  • coderabbit cites external URLs (learn.netdata.cloud, upstream GitHub) as evidence. Those citations are often directionally right but not authoritative for the branch under review -- verify against the source in the checkout before acting. Example: it correctly flagged that a Function needs a signed-in identity, but the proof is the HTTP_ACCESS_* flags in the producer, not the doc page it linked.

  • Both reviewers will flag a generated page's content when the real defect is in the generator or the shared template. Fix the producer, regenerate, and say so in the reply -- otherwise the same finding returns on the next vendor page.

Failure modes -- quick diagnosis

SymptomLikely cause
fetch-all.sh returns suspiciously round countsPagination missed pages. Re-run; fetch-all auto-probes when count is a multiple of 100.
fetch-all.sh aborts with page N probe FAILED and leaves FETCH-INCOMPLETE in the state dirgh auth or rate limit; the cache is incomplete. Fix gh auth status, re-run; do not read the partial dump.
A GraphQL helper script fails with cursor_args[@]: unbound variablemacOS Bash 3.2 plus set -u treats empty array expansion as unbound. Keep gh api argument arrays non-empty before expansion or branch the first-page GraphQL call. This affected both fetch-all.sh and wait-for-activity.sh.
reply-thread.sh -> 404Wrong comment id (use databaseId from review-threads.json, not the GraphQL node id).
reply-thread.sh -> line N: 2: usage, yet the thread ends up resolvedThe comment id expanded to empty AND the resolve ran anyway. Never chain reply and resolve so that resolve can run after reply fails: run reply-thread.sh, confirm it printed posted reply id=..., THEN resolve. See the bash-vs-zsh note below.
An associative-array lookup (${MAP[key]}) is empty in a helper loopThe interactive shell here is zsh, not bash. declare -A plus ${MAP[key]} does not behave the same, so ids silently expand to nothing. Pass literal ids, or drive the loop from python3 output one line at a time, rather than building a shell map.
resolve-thread.sh -> "thread not found"Used REST id instead of GraphQL node id.
trigger-copilot.sh succeeds but no new reviewExpected. The org has no Copilot review credits, which is why it is not in the loop. Do not wait on it.
trigger-cubic.sh succeeds but no new reviewcubic ignores comments without an explicit @cubic-dev-ai mention. The script always prepends it.
ci-status.sh exits 3 (failing)Fix PR-caused failures before pushing; report unrelated failures. Exit 3 wins over 2 when checks are also running.
ci-status.sh exits 2 (running)CI hasn't finished. Push anyway -- waiting on CI between iterations destroys throughput. The next push triggers a fresh CI run on the new code, which is what matters. (See Step 4b.)
Bot keeps re-flagging the same line after a fix pushThe bot didn't see the new commit because it wasn't re-triggered.
wait-for-activity.sh 124 timeoutCheck available feedback and CI; use AGENTS.md#review and report coverage gaps. Silence or resolved threads alone do not establish readiness.

MANDATORY -- keep this skill alive

For capture timing and authorization, follow AGENTS.md#knowledge-capture.

Examples of things to capture:

  • A new AI reviewer bot that appears in the project (add to the directory + PR_AI_BOT_RE)
  • A new common false-positive pattern that warrants a clarifying source comment
  • A new GitHub API quirk (rate limits, undocumented response shapes, pagination edge cases)
  • A retrigger mechanism that changed (e.g. copilot's re-request behavior)

© netdata, GPL-3.0. 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 11 other files (scripts) in .agents/skills/repo-pr-reviews of netdata/netdata.

  • SKILL.md
  • scripts/_lib.sh
  • scripts/ci-status.sh
  • scripts/fetch-all.sh
  • scripts/fetch-sonar-findings.sh
  • scripts/list-open-threads.sh
  • scripts/reply-thread.sh
  • scripts/resolve-thread.sh
  • scripts/trigger-coderabbit.sh
  • scripts/trigger-copilot.sh
  • scripts/trigger-cubic.sh
  • scripts/wait-for-activity.sh

Open the folder on GitHubat commit 567162f

Compare with similar skills

Repo PR Reviews 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.

Repo PR Reviews compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Repo PR Reviews this skillnetdata/netdata81k—~8.1kAutomated safety check: NotesGPL-3.0
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 yesterday
    DevelopmentAuto-check passed

More from netdata/netdata

All 27 skills in this repo
  • Docs Learn PR Preview

    netdata/netdata

    Use only when the user explicitly asks to build, run, preview, inspect, or validate learn.netdata.cloud locally using the contents of a PR or documentation branch before merge.

    81k GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Repo Mirror Sources

    netdata/netdata

    Inspect Netdata-org source checkouts under NETDATAREPOSDIR, or set up and synchronize that mirror when requested.

    81k GitHub stars~1.2k tokensUpdated today
    Auto-check: notes
  • Triage Agent Events

    netdata/netdata

    Investigate Netdata crashes, panics and fatals from agent-events captures or authorized fleet queries.

    81k GitHub stars~2.4k tokensUpdated today
    Auto-check: notes
  • Triage Codacy

    netdata/netdata

    Inspect, analyze, troubleshoot, or review Codacy findings and local analyzer/API helpers.

    81k GitHub stars~2.2k tokensUpdated today
    Auto-check: notes
  • Triage Coverity

    netdata/netdata

    Inspect or review Coverity Scan defects and saved CID bundles; fetch live findings or apply verified triage decisions when requested.

    81k GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Triage Sonarqube

    netdata/netdata

    Inspect, review, or apply authorized triage decisions to SonarCloud issues and security hotspots; also review the Sonar helpers.

    81k GitHub stars~2.8k tokensUpdated today
    Auto-check: notes

Works with

Categories

Questions about Repo PR Reviews

What does Repo PR Reviews do?

Inspect selected PR comments or perform complete PR review triage; address verified findings when authorized. Repo PR Reviews is an agent skill from netdata/netdata. Inspect selected PR comments or perform complete PR review triage; address verified findings when authorized.

When should I use Repo PR Reviews?

Repo PR Reviews fits situations like: tasks that involve Pull requests.

How do I install Repo PR Reviews in Claude Code?

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

How do I install Repo PR Reviews in Codex?

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

Can I use Repo PR Reviews 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 netdata/netdata --skill repo-pr-reviews -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/repo-pr-reviews, .gemini/skills/repo-pr-reviews, .github/skills/repo-pr-reviews and .opencode/skills/repo-pr-reviews in your project.

What does Repo PR Reviews need to run?

Going by SKILL.md and its folder, Repo PR Reviews needs a shell for the scripts in its folder, the command-line tools its instructions call (bash and gh) and credentials named SONAR_TOKEN. Our summary lists: A Bash shell; A credential in SONAR_TOKEN.

Does Repo PR Reviews access the network?

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

Is Repo PR Reviews safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Repo PR Reviews use?

Repo PR Reviews is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Repo PR Reviews use?

About 8.1k tokens (SKILL.md is roughly 32k 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 Repo PR Reviews?

Skills that share tags, products or a category with Repo PR Reviews: 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 Repo PR Reviews?

netdata (a GitHub organization) maintains it in netdata/netdata, which has 80,878 GitHub stars. The repository holds 27 skills in this directory. The repository was last updated on October 11, 2026.

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