원클릭으로
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 참고)