From mella
Triage a review bot's comments on a GitHub PR. Re-reviews each comment against the actual code, applies valid fixes, dismisses false positives, and posts a summary comment on the PR. Use when asked to "handle the bot review", "triage bot comments", "check the bot's feedback", or "review the bot review on PR #N".
How this skill is triggered — by the user, by Claude, or both
Slash command
/mella:review-botThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Triage review bot comments on a GitHub PR. For each comment: re-review the flagged code, apply valid fixes (or a better fix), and dismiss false positives. Post a structured summary comment on the PR when done.
Triage review bot comments on a GitHub PR. For each comment: re-review the flagged code, apply valid fixes (or a better fix), and dismiss false positives. Post a structured summary comment on the PR when done.
If you are currently in plan mode, stop immediately. Tell the user:
"/review-bot requires Edit and Write access to apply fixes. You're in plan mode. Please exit plan mode first, then re-run
/review-bot."
Do not proceed.
Parse $ARGUMENTS for:
123)--bot <name> (optional, a GitHub username to treat as the target bot)If no PR number was provided, auto-detect from the current branch:
gh pr view --json number,url,title,headRefName
If this fails (no PR for the current branch), tell the user and stop.
Store the PR number, URL, title, and the repo owner/name (extract from gh repo view --json nameWithOwner -q '.nameWithOwner').
Fetch line-level review comments from the PR:
gh api repos/{owner}/{repo}/pulls/<PR_NUMBER>/comments --paginate
Each comment object includes:
id — unique comment IDbody — the comment textpath — file path the comment is online (or original_line) — line number in the diffdiff_hunk — surrounding diff contextuser.login — author usernameuser.type — "Bot" or "User"in_reply_to_id — parent comment ID if this is a thread replyhtml_url — link to the comment on GitHub--bot <name> was provided: keep only comments where user.login matches (case-insensitive).user.type == "Bot".github-actions[bot] (CI status, not code review).If no bot comments are found, tell the user "No bot review comments found on PR #N" and stop.
Group comments by thread using in_reply_to_id:
in_reply_to_id are root comments (one finding each).in_reply_to_id points to another bot comment in the set belong to that root's thread.Present a brief summary:
Found N bot comments (M threads) from @botname on PR #X.
Proceed immediately — do not wait for confirmation.
Process each thread/comment sequentially.
Read the file at path. Use line and diff_hunk to locate the exact code. Read at least 30 lines above and below for context.
If the file does not exist (deleted or renamed since the review), mark the comment as outdated and skip to the next.
Parse the comment body to extract:
suggestion blocks)Determine whether the feedback is valid:
Classify each comment:
| Verdict | Meaning |
|---|---|
fix | Valid issue. Apply the bot's suggestion. |
fix-alt | Valid issue, but apply a better fix than the bot suggested. |
dismiss | False positive or not applicable. |
outdated | File/code no longer exists. |
flag | Uncertain — needs user decision. |
Assign confidence: high (>= 90%), medium (70–89%), low (< 70%).
If confidence is low, do not auto-fix — classify as flag instead.
For comments with verdict fix or fix-alt and confidence high or medium:
suggestion block, use it as a starting point but verify correctness before applying.fix-alt, implement the better approach rather than the bot's literal suggestion.Do not apply fixes that conflict with each other. If two bot comments suggest contradictory changes to the same code region, classify both as flag and let the user decide.
After processing all comments, present a summary:
### Review Bot Triage — PR #N
**Bot**: @botname | **Comments**: X | **Fixed**: Y | **Dismissed**: Z | **Flagged**: W
| # | File | Bot says | Verdict | Confidence | Action taken |
|---|------|----------|---------|------------|--------------|
| 1 | src/Foo.php:42 | Missing null check | fix | high | Added null check on `$user` |
| 2 | src/Bar.php:15 | Unused import | fix | high | Removed unused import |
| 3 | src/Baz.php:88 | Possible N+1 query | dismiss | high | Already eager-loaded on line 72 |
| 4 | src/Qux.php:30 | Type mismatch | fix-alt | medium | Used stricter type instead of bot's suggestion |
| 5 | src/Old.php:10 | Missing return type | outdated | — | File was deleted |
| 6 | src/Edge.php:55 | Complex refactor | flag | low | Needs manual review |
If any items are marked flag, present the details and use AskUserQuestion:
The tool adds an "Other" option automatically — use that for specific inputs like "fix 6, skip 7".
Handle the response:
Compose a single comment on the PR:
gh pr comment <PR_NUMBER> --body "<comment body>"
Use a HEREDOC for the body to preserve formatting. The comment structure:
## Review Bot Triage
Reviewed **N** comments from @botname.
### Applied fixes (Y)
| Comment | File | Issue | Fix applied |
|---------|------|-------|-------------|
| [Link](url) | `src/Foo.php:42` | Missing null check | Added null check |
### Dismissed (Z)
| Comment | File | Issue | Reason |
|---------|------|-------|--------|
| [Link](url) | `src/Baz.php:88` | Possible N+1 | Already eager-loaded at line 72 |
### Skipped — outdated
- [Link](url) — `src/Old.php:10` — File no longer exists
Omit any section that has zero items. If nothing was dismissed, omit the "Dismissed" section entirely. Same for "Applied fixes", "Skipped", etc.
After posting the comment, tell the user:
Posted triage summary on PR #N. Applied X fixes, dismissed Y comments, flagged Z for review.
If fixes were applied, remind the user:
Changes have been applied but not committed. Run
/mella:commitor stage and commit when ready.
npx claudepluginhub cjmellor/mella-marketplace --plugin mellaFetches and resolves PR review bot findings (Copilot, CodeRabbit, etc.) by fixing real bugs, dismissing false positives, and replying to comments until bots go quiet.
Triages unresolved GitHub PR review comments from bots/humans, deduplicates issues, produces severity-ordered fix plan, resolves ignored threads, and fixes others with subagents before merge.
Triages PR review comments by filtering false positives (outdated, misread, wrong context, style preference), validating against current diff, and fixing actionable ones with per-fix confirmation.