cc-pr-tracker: 프롬프트 위에 보이는 Claude Code PR 상태
Claude Code 프롬프트 위에 GitHub PR마다 한 줄씩 표시합니다. 병합 상태, 리뷰, 필수 검사를 보여 주고 바뀌면 알려 줍니다.
권한
- 파일 읽기컴퓨터의 파일을 읽고 디렉터리 목록을 볼 수 있습니다($.fs.read / list / stat / exists).
- 명령어 실행컴퓨터에서 셸 프로그램을 실행할 수 있습니다($.process.run / spawn). 정확히 어떤 프로그램인지는 소스를 확인하세요.
- 도구 호출 가로채기Claude가 하는 모든 도구 호출을 볼 수 있고(tool.call / tool.check), 이를 차단하거나 변경할 수 있습니다.
- 프롬프트 읽기입력한 내용과 대화 기록을 볼 수 있습니다(prompt.* / session.append / session.messages).
- UI 변경Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).
- 명령어/도구 추가사용자나 Claude가 호출할 수 있는 새 슬래시 명령어나 도구를 등록합니다($.command.register / $.tool.register).
- 데이터 저장플러그인 전용 저장소에 세션 간 데이터를 보관합니다($.store.*).
- 테스트 버전
- v2.1.296
- 마지막 테스트
- 필요 버전
- Claude Code ≥ 2.1.287
- 표시 위치
- 프롬프트 위, 토스트
이 모드는 무엇을 하나요?
cc-pr-tracker는 Seza Akgün(sezaakgun)이 만든 커뮤니티 모드로, 작업하는 동안 Claude Code PR 상태를 계속 눈앞에 보여 줍니다. GitHub 풀 리퀘스트 URL을 붙여 넣거나 Claude가 PR을 열게 하면, 그 PR이 프롬프트 위에 한 줄로 표시됩니다. 줄에는 병합 상태, 리뷰 결정, 통과·실패·대기 중인 필수 검사의 개수, 그리고 제목이 들어갑니다. 기본적으로 1분마다 갱신됩니다.
필수 검사가 바뀌거나 병합 상태가 달라지면 토스트, 프롬프트 위에서 1초 동안 깜빡이는 띠, 그리고 macOS에서는 시스템 소리로 알려 줍니다. Claude도 다음 턴에 실패한 검사의 로그 링크가 담긴 짧은 자동 메모를 받습니다. 줄 위에 마우스를 올리면 PR 열기, URL 복사, 음소거, 상세 패널 보기, 지켜보기 중지 버튼이 나타납니다. Claude는 pr_status 도구로 상태를 직접 요청할 수 있고, /prs는 지켜보는 PR을 어디서든 텍스트로 출력합니다.
이 모드는 로컬 브랜치를 보여 주는 Git Branch와 비슷하지만, 작업 트리가 아니라 GitHub를 봅니다. 단순한 "턴 완료" 토스트가 필요하다면 Done Toast를 참고하십시오. 작성자의 README에 따르면 모든 기능을 쓰려면 Claude Code 2.1.289 이상이 필요하며, 그보다 오래된 빌드에서는 목록이 메모리에만 보관됩니다.
데모
녹화 영상에서는 작성자가 직접 만든 대체 gh 스크립트(저장소의 docs/record/gh)를 사용합니다. 이 스크립트는 모드의 GraphQL 호출에 미리 준비된 JSON으로 응답하므로 실제 GitHub 저장소는 조회하지 않습니다. 작은 데모 프로젝트에서 모드를 불러온 채 Claude Code를 시작하고, 두 개의 PR URL acme/api#87과 acme/storefront#418을 프롬프트 하나로 붙여 넣습니다. 모델 턴은 실행되지 않습니다. Claude Code에는 "Prompt dropped by a hook: watching acme/api#87, watching acme/storefront#418"이 표시되고, 프롬프트 위에 두 줄이 나타납니다. 각 줄에는 저장소와 번호, 빨간색 blocked, 초록색 approved, 초록색 통과 검사 수, 노란색 대기 검사 수, 그리고 PR 제목이 표시됩니다.
설치
설치 블록의 방법 중 아무것이나 사용하십시오. 모두 작성자 자신의 마켓플레이스에서 바로 설치합니다. gh도 설치되어 있고 로그인되어 있어야 합니다(gh auth status). 클론한 저장소에서 한 세션만 써 보려면 저장소 안에서 claude --plugin-dir .을 실행하십시오. /plugin을 실행하면 모드가 활성 상태인지 확인할 수 있습니다.
$ install cc-pr-tracker
Claude Code 2.1.287 이상 필요
작성자의 마켓플레이스에서 설치: sezaakgun/cc-pr-tracker
1.Claude Code 안에서 한 줄로
/plugin install cc-pr-tracker --marketplace sezaakgun/cc-pr-tracker실행 중인 세션(v2.1.275 이상)에 붙여 넣으세요. Claude Code가 먼저 마켓플레이스 추가 여부를 묻습니다.
2.셸에서 설치
claude plugin marketplace add sezaakgun/cc-pr-tracker claude plugin install cc-pr-tracker@cc-pr-tracker그런 다음 이미 열려 있는 세션에서 /reload-plugins를 실행하세요.
3.설치하지 않고 사용해 보기
git clone https://github.com/sezaakgun/cc-pr-tracker claude --plugin-dir ./cc-pr-tracker한 세션에서만 모드를 불러옵니다. 설정에는 아무것도 추가되지 않습니다.
작동 방식
플러그인은 훅 모듈 하나로 이루어져 있습니다. prompt.submit은 프롬프트에서 PR URL을 읽고, turn.complete와 Bash에 대한 tool.call 훅은 Claude의 답변과 gh pr create 출력에서 URL을 잡아내며, AbovePrompt에 대한 ui.render가 줄을 그립니다. session.start에서 시작된 타이머가 지켜보는 모든 PR을 gh로 폴링합니다. hooks/register.tsx의 호출 부분은 다음과 같습니다.
const gh = async (args: string[]) => {
const { stdout, stderr, exitCode } = await $.process.run(['gh', ...args], { timeoutMs: 30_000 })
if (exitCode) throw new Error(stderr.trim() || `gh exited ${exitCode}`)
return JSON.parse(stdout)
}각 폴링은 읽기 전용 gh api graphql 쿼리 하나로, PR의 제목, 상태, 병합 상태, 리뷰 결정, 그리고 헤드 커밋의 검사를 GitHub 자체의 isRequired 플래그와 함께 가져옵니다. 각 검사는 가장 최근 실행만 남기며, gh pr checks와 같은 분류를 사용합니다. GitHub가 GraphQL을 거부하면(claude.ai/code처럼) 모드는 폴링마다 REST 호출 4~6회로 전환합니다. 폴링이 실패하면 이전 값을 유지하고 줄에 refresh failed를 표시하므로, 일시적인 네트워크 끊김이 변경으로 보고되지 않습니다. PR을 처음 불러올 때와 일시적인 unknown 병합 상태로 들어가거나 나올 때는 알림이 울리지 않습니다.
사용자 지정
/config를 열고 cc-pr-tracker 행을 찾으십시오. 각 항목은 /config cc-pr-tracker.<field>=<value>로도 설정할 수 있으며 즉시 적용됩니다. 옵션은 열두 가지입니다. Mute all PR alerts(모든 PR 알림 음소거), Alert on(모든 변경, 실패와 병합 준비 완료, 또는 실패만), Tell Claude about changes(변경 사항을 Claude에 알림), Alert sound(알림 소리), Poll every(폴링 간격, 초), Auto-watch PRs(PR 자동 지켜보기), Remember watched PRs(지켜보는 PR 기억: 이 세션 또는 이 프로젝트), Stop watching merged or closed PRs(병합되거나 닫힌 PR 지켜보기 중지), Count all checks(모든 검사 세기), Alert on review changes(리뷰 변경 시 알림), Flash strip(깜빡이는 띠), Show PRs in the transcript(대화 기록에 PR 표시)입니다. 줄의 호버 버튼으로는 PR 하나를 음소거하거나 지켜보기를 중지할 수 있습니다.
권한 및 안전
저희는 플러그인이 불러오는 모든 파일을 읽었습니다. .claude-plugin/plugin.json, hooks/hooks.json, hooks/register.tsx(읽기 쉬운 TypeScript 약 740줄), 타입 선언, 테스트 파일 두 개, 그리고 저장소의 보조 스크립트와 워크플로입니다. package.json, 설치 스크립트, 번들되거나 압축된 코드, 원격 코드, 동적 import()는 없습니다. docs/record/ 스크립트는 README 이미지를 만드는 데만 쓰이며 플러그인이 불러오지 않습니다.
확인한 내용은 모두 README와 일치합니다.
- 네트워크: 모드 자체는 요청을 보내지 않습니다. 지켜보는 PR에 대해
gh api graphql(또는 REST의gh api repos/...)을 실행하므로, 소유자, 저장소, PR 번호가 사용자의gh로그인으로 github.com에 전달됩니다. - 프로세스: 폴링에는
gh, 열기 버튼에는open또는xdg-open, 알림에는 macOS 시스템 소리와 함께afplay를 씁니다. 그리고 cmux 터미널 안에서만, 창을 깜빡이고 알림을 띄우기 위해CMUX_BUNDLED_CLI_PATH에 있는 cmux 자체 CLI를 실행합니다. 인수는 셸 문자열이 아니라 배열로 전달됩니다. - 환경 변수:
CMUX_BUNDLED_CLI_PATH와CMUX_SURFACE_ID만 읽습니다. 환경 변수를 쓰지는 않습니다. - 파일: 파일을 쓰지 않습니다. 지켜보기 목록은 플러그인 자체의
$.store와$.state에 세션 또는 프로젝트별로 보관되며, 30일 동안 폴링되지 않은 목록은 정리됩니다. - 프롬프트 영향: 알림 후에는 대화에 사용자 역할의 메모를 덧붙입니다. 메모에는 사용자가 쓴 것이 아닌 자동 알림이라고 적혀 있으며, GitHub의 검사 이름을 데이터로 인용하되 100자로 제한합니다. GitHub 텍스트의 제어 문자는 표시 전에 제거됩니다. "Tell Claude about changes"로 메모를 끌 수 있습니다. 또한 Claude용
pr_status도구를 등록합니다. - 게이팅 훅: PR URL만으로 이루어진 프롬프트는 버려집니다(모델 턴 없음). 이는 문서화된 동작입니다. 더 긴 프롬프트는 변경 없이 그대로 전달됩니다.
Bash훅은gh pr create출력만 읽습니다. - 데몬 및 원격 측정: 없습니다. 폴링 타이머는 Claude Code 안에서 동작하며 함께 종료됩니다. 분석 데이터 수집도 없습니다.
- 요구 사항: 로그인된
gh. 소리는 macOS에서만 나며, cmux는 선택 사항입니다. - 라이선스: MIT이며 LICENSE 파일이 있습니다.
claude plugin validate는 오류나 경고를 보고하지 않았습니다. 참고 사항으로 .catch가 없는 훅 네 개(config.set, prompt.submit, 두 개의 tool.call 훅)를 나열했으며, 이는 정보 제공용입니다. 작성자의 테스트 70개가 Claude Code 2.1.296에서 모두 통과했습니다.
- 파일 읽기
- 컴퓨터의 파일을 읽고 디렉터리 목록을 볼 수 있습니다($.fs.read / list / stat / exists).
- 명령어 실행
- 컴퓨터에서 셸 프로그램을 실행할 수 있습니다($.process.run / spawn). 정확히 어떤 프로그램인지는 소스를 확인하세요.
- 도구 호출 가로채기
- Claude가 하는 모든 도구 호출을 볼 수 있고(tool.call / tool.check), 이를 차단하거나 변경할 수 있습니다.
- 프롬프트 읽기
- 입력한 내용과 대화 기록을 볼 수 있습니다(prompt.* / session.append / session.messages).
- UI 변경
- Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).
- 명령어/도구 추가
- 사용자나 Claude가 호출할 수 있는 새 슬래시 명령어나 도구를 등록합니다($.command.register / $.tool.register).
- 데이터 저장
- 플러그인 전용 저장소에 세션 간 데이터를 보관합니다($.store.*).
호환성 및 문제 해결
macOS에서 Claude Code 2.1.296으로 확인했습니다(validate, 테스트, 녹화). 무언가 작동하지 않으면 다음을 확인하십시오.
- URL이 모델로 전송됩니다. 모드가 불러와지지 않은 것입니다.
claude --version이 2.1.287 이상인지,/plugin의 활성 모드 목록에 cc-pr-tracker가 있는지 확인하십시오. - 줄에
gh failed: …가 표시됩니다. 터미널에서gh pr view <url>을 실행해 보십시오. 대개gh가 로그인되어 있지 않거나 해당 저장소를 볼 권한이 없는 경우입니다. - 호버 버튼이 없습니다. 터미널이 마우스 입력을 전달하지 않는 것입니다. URL을 다시 붙여 넣어 지켜보기를 중지하거나
/prs를 사용하십시오. - 소리가 나지 않습니다.
/System/Library/Sounds가 있는 macOS에서만 소리가 납니다. github.comURL만 인식하며, GitHub Enterprise 호스트는 인식하지 않습니다.
자주 묻는 질문
- cc-pr-tracker에 GitHub 토큰이나 API 키가 필요한가요?
- GitHub CLI(gh)가 필요하며, 지켜보려는 저장소에 접근할 수 있는 계정으로 로그인되어 있어야 합니다. 모드 자체는 토큰을 보관하지 않습니다. 폴링할 때마다 gh를 실행하므로 무엇을 볼 수 있는지는 gh의 로그인이 결정합니다.
- 얼마나 자주 폴링하나요? 모델 토큰을 쓰나요?
- 기본값은 60초마다이며, PR마다 gh를 통해 GraphQL 호출을 한 번 합니다. 간격은 /config에서 30초부터 3600초까지 정할 수 있습니다. 폴링은 모델을 호출하지 않습니다. 알림이 있을 때만 Claude가 다음 턴에 읽는 짧은 메모가 추가됩니다.
- PR URL을 붙여 넣었더니 프롬프트가 사라졌습니다. 왜 그런가요?
- PR URL만으로 이루어진 프롬프트는 모드가 버리고, 대신 그 PR 지켜보기를 시작(또는 중지)합니다. 모델 턴은 실행되지 않습니다. Claude Code에는 "Prompt dropped by a hook: watching owner/repo#N"이 표시됩니다. 더 긴 프롬프트 안에 든 URL은 지켜보기 목록에 추가되고 프롬프트도 그대로 실행됩니다.
- Claude가 PR 상태를 볼 수 있나요?
- 네. 모드가 pr_status 도구를 등록하므로 Claude는 gh를 호출하는 대신 지켜보는 PR의 상태, 병합 상태, 리뷰, 검사를 요청할 수 있습니다. 알림 후에는 사용자가 쓴 것이 아니라고 표시된 자동 메모도 추가하며, 여기에 실패한 검사의 로그 링크가 담깁니다.
- 알림을 끄려면 어떻게 하나요?
- 줄 위에 마우스를 올리고 음소거를 눌러 PR 하나를 끄거나, /config에서 "Mute all PR alerts"를 켜십시오. 줄은 계속 갱신되지만 토스트, 깜빡임, 소리, Claude 알림은 모두 멈춥니다. "Alert sound", "Flash strip", "Tell Claude about changes"로 개별 요소만 끌 수도 있습니다.
# 관련 모드
추천프롬프트 위 Git 브랜치
Claude Code 프롬프트 위 한 줄 띠에 git 브랜치, 변경된 파일 수, ahead/behind 상태를 표시합니다.
- 프롬프트 위
- 명령어 실행
- 도구 호출 가로채기
- UI 변경
v2.1.310에서 테스트됨
추천완료 토스트
긴 Claude 턴이 끝나면 "Done in 2m 14s" 토스트와 짧은 알림음을 내고, 데스크톱 알림도 선택적으로 보냅니다.
- 토스트
- 명령어 실행
- UI 변경
- 소리 재생
v2.1.310에서 테스트됨
더 보기: Git 및 GitHub, 토스트 및 알림.