From openshift-developer
Fetch and address all PR review comments — categorize by priority, make code changes, post replies, and push. Use when the user wants to address, respond to, or work through PR review feedback.
How this skill is triggered — by the user, by Claude, or both
Slash command
/openshift-developer:address-review-prThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
openshift-developer:address-review-pr
openshift-developer:address-review-pr
/openshift-developer:address-review-pr [PR number] [--preview]
Automates addressing PR review comments by fetching all comments from a pull request, categorizing them by priority (blocking, change requests, questions, suggestions), and systematically addressing each one. Intelligently filters out outdated comments, bot-generated content, and oversized responses to optimize context usage. Handles code changes, posts replies to reviewers, and maintains a clean git history by amending relevant commits rather than creating unnecessary new ones.
$1 if provided, otherwise gh pr list --head <current-branch>gh pr checkout <PR_NUMBER> if not already on the branch, then git pullgit status. If uncommitted changes exist, ask user how to proceedFetch PR metadata with selective filtering:
a. First pass - Get metadata only (IDs, authors, lengths, URLs):
# Get issue comments (general PR comments - main conversation)
gh pr view <PR_NUMBER> --json comments --jq '.comments | map({
id,
author: .author.login,
length: (.body | length),
url,
createdAt,
type: "issue_comment"
})'
# Get reviews (need REST API for numeric IDs)
# IMPORTANT: Use --paginate to fetch ALL pages (default page size is 30;
# PRs with many bot/CI reviews easily exceed this, silently dropping recent human reviews)
gh api repos/{owner}/{repo}/pulls/<PR_NUMBER>/reviews --paginate --jq 'map({
id,
author: .user.login,
length: (.body | length),
state,
submitted_at,
type: "review"
})'
# Get review comments (inline code comments)
# IMPORTANT: Use --paginate — same pagination issue as reviews above
gh api repos/{owner}/{repo}/pulls/<PR_NUMBER>/comments --paginate --jq 'map({
id,
author: .user.login,
length: (.body | length),
path,
line,
original_line,
created_at,
type: "review_comment"
})'
b. Apply filtering logic (DO NOT fetch full body yet):
line == null AND original_line == null (truly orphaned review comments). Keep comments where line == null but original_line != null — these are valid comments on a stale diff hunk that still need attention.length > 5000author in ["openshift-ci-robot", "openshift-ci"] (keep coderabbitai for code review insights)c. Second pass - Fetch ONLY essential fields for kept items:
# For issue comments:
gh api repos/{owner}/{repo}/issues/comments/<comment_id> --jq '{id, body, user: .user.login, created_at, url}'
# For reviews:
gh api repos/{owner}/{repo}/pulls/<PR_NUMBER>/reviews/<review_id> --jq '{id, body, user: .user.login, state, submitted_at}'
# For review comments:
gh api repos/{owner}/{repo}/pulls/comments/<comment_id> --jq '{id, body, user: .user.login, path, line, original_line, position, diff_hunk, created_at}'
d. Log filtering results:
Fetched N/M comments (filtered out K large/bot comments saving ~X chars)
Fetch commit messages: gh pr view <PR_NUMBER> --json commits -q '.commits[] | "\(.messageHeadline)\n\n\(.messageBody)"'
Store ONLY the kept (filtered) comments for analysis
Additional filtering (for remaining fetched comments):
Categorize:
Group by context: Group by file, then by proximity (within 10 lines)
Prioritize: ACTION_INSTRUCTION > BLOCKING > CHANGE_REQUEST > QUESTION > SUGGESTION
Present summary: Show counts by category and file groupings, ask user to confirm
--preview)When --preview is passed, preview each comment before acting:
Process ACTION_INSTRUCTION items first, before any code changes:
BASE_BRANCH=$(gh pr view <PR_NUMBER> --json baseRefName -q '.baseRefName')
BASE_REMOTE=$(git remote | grep -m1 '^upstream$')
if [ -z "$BASE_REMOTE" ]; then
BASE_REMOTE=$(git remote | grep -m1 '^origin$')
fi
BASE_REMOTE=${BASE_REMOTE:-origin}
git fetch "$BASE_REMOTE" && git rebase "$BASE_REMOTE/$BASE_BRANCH"
When multiple comments relate to the same concern/fix:
a. Validate: Analyze if the change is valid. Don't be afraid to reject it if it doesn't make sense.
b. If valid:
c. If declining: Prepare technical explanation (3-5 sentences) with file:line references
d. If unsure: Ask user for clarification
Detect verification commands (first match):
Makefile with verify target -> make verifyMakefile with lint target -> make lintgo.mod exists -> go build ./... and go vet ./...package.json with lint script -> npm run lintRun verification (15-minute timeout). Maximum 3 retry attempts. Do NOT push code that fails verification.
Done. [1-line what changed]. [Optional 1-line why]gh api repos/{owner}/{repo}/pulls/<PR_NUMBER>/comments/<comment_id>/replies -f body="<reply>"
---\n*AI-assisted response via Claude Code*git push
git log -1 --format='%H' matches git ls-remote origin <branch>Show: total comments found, filtered out, addressed with code changes, replied to, requiring user input.
Address reviews on current branch's PR:
/openshift-developer:address-review-pr
Address reviews on a specific PR:
/openshift-developer:address-review-pr 1234
Preview mode:
/openshift-developer:address-review-pr 1234 --preview
$1: PR number (optional — uses current branch if omitted)--preview: Preview each comment's proposed action and reply before proceedingBefore posting ANY reply, verify you haven't already responded:
python3 ${CLAUDE_SKILL_DIR}/scripts/check_replied.py <owner> <repo> <pr_number> <comment_id> --type <type>
Where <type> is one of: issue_comment, review_thread, or review_comment
Exit code 1: Skip — already replied. Exit code 2: Check failed — do NOT post a reply.
npx claudepluginhub fsgreco/openshift--ai-helpers --plugin openshift-developerGuides collaborative design exploration before implementation: explores context, asks clarifying questions, proposes approaches, and writes a design doc for user approval.
Creates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.
Synthesizes the current conversation into a structured spec (PRD) and publishes it to the project issue tracker with a ready-for-agent label, without interviewing the user.