ワンクリックで
resolve-coderabbit-review
PR에 달린 CodeRabbit 미해결 코멘트를 읽고, 코드에 반영하거나 거절 사유를 대댓글로 남기는 Skill.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
PR에 달린 CodeRabbit 미해결 코멘트를 읽고, 코드에 반영하거나 거절 사유를 대댓글로 남기는 Skill.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | resolve-coderabbit-review |
| description | PR에 달린 CodeRabbit 미해결 코멘트를 읽고, 코드에 반영하거나 거절 사유를 대댓글로 남기는 Skill. |
| argument-hint | [PR번호] [--brief] |
| user-invocable | true |
| disable-model-invocation | true |
| allowed-tools | ["Bash","Read","Edit","Write","Glob","Grep","Task","AskUserQuestion"] |
현재 브랜치의 PR에 달린 CodeRabbit 미해결 코멘트를 수집하고, 각 코멘트를 분석하여 코드를 수정하거나 거절 사유를 댓글로 남긴다.
$ARGUMENTS — PR 번호 (선택). 생략하면 현재 브랜치의 PR을 자동 감지한다.--brief — 최종 요약에서 코드레벨 수정 상세 설명을 생략한다. 기본값은 코드레벨 상세 설명 포함.PR 번호가 인자로 주어지면 그것을 사용하고, 없으면 현재 브랜치의 PR을 자동 감지한다.
# 인자가 없을 때 자동 감지
gh pr view --json number,headRefName,baseRefName,url,isDraft
PR이 없으면 사용자에게 알리고 중단한다.
Draft PR인 경우 (isDraft == true): "Draft PR에는 리뷰 반영을 수행하지 않습니다." 메시지를 출력하고 중단한다.
learned-patterns.md 파일이 존재하면 읽어서, 이전에 반복된 패턴 정보를 4단계 판단에 참고한다. 이전에 일관되게 반영 또는 거절한 패턴이 있다면 같은 방향으로 판단하는 것을 기본으로 한다.
아래 GraphQL 쿼리로 미해결(isResolved=false) 스레드 중 CodeRabbit가 작성한 것만 필터링한다.
gh api graphql -f query='
{
repository(owner: "{OWNER}", name: "{REPO}") {
pullRequest(number: {PR_NUMBER}) {
reviewThreads(first: 100) {
nodes {
id
isResolved
comments(first: 10) {
nodes {
databaseId
author { login }
body
path
line
originalLine
diffHunk
}
}
}
}
}
}
}'
필터 조건:
isResolved == falsecoderabbitai[bot] 또는 coderabbitai✅ Addressed in — 이미 반영됨 (현행 영어 템플릿)✅ + 반영완료 — 이미 반영됨 (구 한글 템플릿, 하위 호환)Thanks for the suggestion. After review, we've decided not to apply this change. — 이미 거절됨 (현행 영어 템플릿)해당 제안은 검토 결과 현재 반영하지 않았습니다 — 이미 거절됨 (구 한글 템플릿, 하위 호환)수집된 코멘트가 없으면 "미해결 CodeRabbit 코멘트가 없습니다." 출력 후 종료한다.
CodeRabbit 코멘트 본문에서 중요도를 판단하여 우선순위순으로 정렬한다:
코멘트 본문에 명시적 심각도 라벨이 있으면 해당 라벨을 우선 사용한다.
코멘트마다 아래 과정을 순차적으로 수행한다:
path): 수정 대상 파일line 또는 originalLine): 수정 대상 위치```suggestion 또는 ```diff 블록 파싱Read 도구로 해당 파일을 읽는다반영하는 경우 (실질적 리스크가 있을 때 우선):
거절하는 경우 (실용적 판단 포함):
Edit 도구 사용)fix: {수정 내용 요약} 또는 refactor: {수정 내용 요약}--no-verify를 사용하지 않는다언어 정책: 이 저장소는 라이브러리 프로젝트로 전세계 사용자가 보기 때문에, 리뷰 응답 대댓글은 영어로 작성한다. 반영 완료 메시지 예시:
gh api repos/{OWNER}/{REPO}/pulls/{PR_NUMBER}/comments \
-f body="✅ Addressed in https://github.com/{OWNER}/{REPO}/commit/{FULL_COMMIT_HASH}" \
-F in_reply_to={FIRST_COMMENT_DATABASE_ID}
gh api graphql -f query='
mutation {
resolveReviewThread(input: {threadId: "{THREAD_ID}"}) {
thread { isResolved }
}
}'
거절은 즉시 처리하지 않는다. 반드시 사용자에게 먼저 확인을 받아야 한다.
## 거절 예정 코멘트 확인 요청
아래 코멘트들을 거절하려고 합니다. 확인 부탁드립니다.
### 1. {파일경로}:{라인번호} ({중요도})
- **코멘트 내용**: {CodeRabbit가 지적한 내용 요약}
- **거절 사유**: {구체적인 거절 이유}
### 2. {파일경로}:{라인번호} ({중요도})
- **코멘트 내용**: {CodeRabbit가 지적한 내용 요약}
- **거절 사유**: {구체적인 거절 이유}
이대로 거절 처리해도 괜찮을까요?
gh api repos/{OWNER}/{REPO}/pulls/{PR_NUMBER}/comments \
-f body="Thanks for the suggestion. After review, we've decided not to apply this change.
**Reason**: {clear, specific reason in English}" \
-F in_reply_to={FIRST_COMMENT_DATABASE_ID}
거절 사유는 반드시:
모든 코멘트 처리가 완료된 후, 이번에 반영한 수정사항 중 PR 본문에 반영할 만한 변경이 있는지 판단한다.
기존 PR 본문을 읽고, 변경사항을 기존 내용에 자연스럽게 반영하여 갱신한다. 기존 구조와 톤을 유지하면서 수정된 부분만 업데이트한다.
# PR 본문 읽기
gh pr view {PR_NUMBER} --json body --jq '.body'
# PR 본문 갱신
gh pr edit {PR_NUMBER} --body "$(cat <<'EOF'
{갱신된 PR 본문}
EOF
)"
모든 코멘트 처리가 완료되면, PR에 일반 코멘트로 처리 요약을 게시한다. 여러 번 실행해도 요약 코멘트가 중복되지 않도록, 기존 코멘트가 있으면 병합하여 갱신한다.
언어 정책: PR 요약 코멘트도 영어로 작성한다 (라이브러리 저장소 — 리뷰 응답 대댓글과 동일한 정책).
PR의 일반 코멘트(issue comment) 중 🤖 CodeRabbit Review Resolution 헤더가 포함된 코멘트를 검색한다.
gh api repos/{OWNER}/{REPO}/issues/{PR_NUMBER}/comments --jq '.[] | select(.body | contains("🤖 CodeRabbit Review Resolution")) | {id, body}'
# 기존 코멘트 삭제
gh api repos/{OWNER}/{REPO}/issues/comments/{COMMENT_ID} -X DELETE
이번 결과만으로 새 코멘트를 게시한다.
gh pr comment {PR_NUMBER} --body "$(cat <<'EOF'
## 🤖 CodeRabbit Review Resolution
**Total unresolved**: {N} | **Applied**: {X} | **Declined**: {Y}
### ✅ Applied
| Severity | File | Comment | Change | Commit |
|:--------:|------|---------|--------|--------|
| {emoji} | `{path}` | {CodeRabbit summary} ([link](https://github.com/{OWNER}/{REPO}/pull/{PR_NUMBER}#discussion_r{COMMENT_DATABASE_ID})) | {change summary} | [{short_hash}](https://github.com/{OWNER}/{REPO}/commit/{full_hash}) |
### ❌ Declined
| Severity | File | Comment | Reason |
|:--------:|------|---------|--------|
| {emoji} | `{path}` | {CodeRabbit comment summary} ([link](https://github.com/{OWNER}/{REPO}/pull/{PR_NUMBER}#discussion_r{COMMENT_DATABASE_ID})) | {decline reason summary} |
EOF
)"
모든 코멘트 처리 후 아래 형식으로 요약을 출력한다.
기본 출력 (코드레벨 상세 포함):
## CodeRabbit 리뷰 반영 결과
- PR: #{PR_NUMBER}
- 전체 미해결 코멘트: {N}개
- 반영: {X}개
- 거절: {Y}개
### 반영 내역
| 중요도 | 파일 | 내용 | 커밋 |
|:------:|------|------|------|
| {emoji} | {path} | {요약} ([링크](https://github.com/{OWNER}/{REPO}/pull/{PR_NUMBER}#discussion_r{COMMENT_DATABASE_ID})) | [{short_hash}](https://github.com/{OWNER}/{REPO}/commit/{full_hash}) |
#### 코드 변경 상세
**{path}** ([{short_hash}](https://github.com/{OWNER}/{REPO}/commit/{full_hash}))
- CodeRabbit 지적: {원래 지적 내용 요약}
- 변경 전: `{변경 전 코드 또는 설명}`
- 변경 후: `{변경 후 코드 또는 설명}`
- 변경 이유: {왜 이렇게 수정했는지 설명}
### 거절 내역
| 중요도 | 파일 | 내용 | 사유 |
|:------:|------|------|------|
| {emoji} | {path} | {요약} ([링크](https://github.com/{OWNER}/{REPO}/pull/{PR_NUMBER}#discussion_r{COMMENT_DATABASE_ID})) | {사유 요약} |
--brief 옵션 사용 시: "코드 변경 상세" 섹션을 생략하고 테이블만 출력한다.
모든 코멘트 처리가 끝난 후, 이번에 처리한 코멘트들이 기존에 반복된 패턴인지 확인한다.
learned-patterns.md 파일을 읽는다.learned-patterns.md를 업데이트한다.코멘트의 구체적인 파일/라인이 아닌, 지적의 본질적 유형으로 분류한다.
예시:
learned-patterns.md 업데이트 후, 반영 또는 거절 패턴의 횟수가 3회 이상인 항목이 있는지 확인한다.
해당 항목이 있으면, 사용자에게 아래와 같이 제안한다:
## 반복 패턴 감지 — SKILL.md 업데이트 제안
아래 패턴이 반복되고 있어, SKILL.md의 판단 기준에 추가하면 향후 처리가 일관될 것으로 보입니다.
### 반영 기준 추가 제안
- "마크다운 코드 블록 언어 지정 누락" (3회 반복, 모두 반영)
→ 4-3 반영 기준에 "마크다운 린트 경고 (MD040 등)" 항목 추가
### 거절 기준 추가 제안
- (해당 없음)
SKILL.md에 반영할까요?
사용자가 승인하면:
learned-patterns.md에서 반영된 패턴 행을 삭제한다 (이미 SKILL.md에 반영되었으므로, 카운트가 새로 쌓이도록 초기화).사용자가 거절하면 learned-patterns.md 업데이트만 수행하고 넘어간다 (패턴 행은 유지).
8단계에서 learned-patterns.md가 변경된 경우, 자동으로 커밋한다.
git add .claude/skills/resolve-coderabbit-review/learned-patterns.md
git commit -m "chore: update learned-patterns.md"
SKILL.md 반영 제안이 승인되어 SKILL.md도 함께 변경된 경우, 하나의 커밋으로 묶는다.
git add .claude/skills/resolve-coderabbit-review/learned-patterns.md \
.claude/skills/resolve-coderabbit-review/SKILL.md
git commit -m "chore: update review patterns and SKILL.md criteria"
Co-Authored-By: Claude 등 Claude/AI 관련 문구 금지, --no-verify 금지 (프로젝트 CLAUDE.md 참고)