본문으로 건너뛰기
claudemods

Claude Code git 브랜치 모드: 프롬프트 위에 브랜치와 변경 사항 표시

Claude Code 프롬프트 위 한 줄 띠에 git 브랜치, 변경된 파일 수, ahead/behind 상태를 표시합니다.

권한

  • 명령어 실행컴퓨터에서 셸 프로그램을 실행할 수 있습니다($.process.run / spawn). 정확히 어떤 프로그램인지는 소스를 확인하세요.
  • 도구 호출 가로채기Claude가 하는 모든 도구 호출을 볼 수 있고(tool.call / tool.check), 이를 차단하거나 변경할 수 있습니다.
  • UI 변경Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).
테스트 버전
v2.1.291
마지막 테스트
필요 버전
Claude Code ≥ 2.1.287
표시 위치
프롬프트 위

Claude Code 안에서 설치:

/plugin install cm-git-branch --marketplace rotbit/claudemods-marketplace
모든 설치 방법 ↓

이 모드는 무엇을 하나요?

Claude Code git 브랜치 모드는 입력창 위에 한 줄을 띄워 git에서 현재 어디에 있는지 알려 줍니다: ⎇ main · 3 changed · ↑1 ↓0. 브랜치 이름, git status가 변경되었다고 보고하는 경로 수, 그리고 브랜치가 업스트림보다 얼마나 앞서고(ahead) 뒤처져(behind) 있는지를 볼 수 있습니다. HEAD가 분리된 상태라면 대신 짧은 커밋 해시를 보여 줍니다. git 저장소 밖에서는 이 줄이 아예 나타나지 않습니다.

이 모드는 Claude가 사용자를 대신해 파일을 편집할 때 가장 유용합니다. 세션이 기능 브랜치가 아닌 main에서 시작되었다면 바로 알아챌 수 있고, Claude가 편집할수록 변경 수가 올라가므로 언제 검토하고 커밋해야 할지 알 수 있습니다. Claude Code 2.1.287 이상이 필요합니다.

데모

녹화 영상에서는 작은 데모 프로젝트에서 모드를 불러온 채 Claude Code를 시작합니다. 첫 프롬프트를 입력하기 전부터 입력창 위 띠에 브랜치와 변경된 파일 수가 표시됩니다. 이어서 Claude에게 src의 파일 목록을 요청하면, 턴이 진행되는 동안 띠는 그 자리에 머물러 있다가 턴이 끝나면 갱신됩니다.

설치

설치 블록의 세 가지 방법 중 아무것이나 사용하십시오. 한 줄 방식은 실행 중인 세션 안에서 작동하며, 셸 방식은 이미 열려 있는 세션에서 /reload-plugins가 필요합니다.

$ install cm-git-branch

Claude Code 2.1.287 이상 필요

  1. 1.Claude Code 안에서 한 줄로

    /plugin install cm-git-branch --marketplace rotbit/claudemods-marketplace

    실행 중인 세션(v2.1.275 이상)에 붙여 넣으세요. Claude Code가 먼저 마켓플레이스 추가 여부를 묻습니다.

  2. 2.셸에서 설치

    claude plugin marketplace add rotbit/claudemods-marketplace
    claude plugin install cm-git-branch@claudemods

    그런 다음 이미 열려 있는 세션에서 /reload-plugins를 실행하세요.

  3. 3.설치하지 않고 사용해 보기

    git clone https://github.com/rotbit/claudemods-marketplace
    claude --plugin-dir ./claudemods-marketplace/cm-git-branch

    한 세션에서만 모드를 불러옵니다. 설정에는 아무것도 추가되지 않습니다.

작동 방식

모드는 최신 git 상태를 $.state 아톰에 보관하고 AbovePrompt 렌더 사이트에 그립니다. hooks/register.tsx의 훅은 다음과 같습니다.

on('session.start', async ($, e, next) => {
  const started = await next(e)
  await refresh($)
  $.clock.every(intervalMs, () => {
    refresh($).catch(() => undefined)
  })
  return started
})

on('turn.complete', async ($, e, next) => {
  const result = await next(e)
  if (e.agentId === undefined) await refresh($)
  return result
})

on('tool.call', { tool: 'Bash' }, async ($, e, next) => {
  const ran = await next(e)
  if (mentionsGit(e.command)) await refresh($)
  return ran
}).catch(($, e, next) => next(e))

갱신 시점은 세 가지입니다. session.start는 첫 번째 상태를 읽고, Claude Code 밖에서 일어난 변경을 잡기 위한 타이머를 시작합니다. turn.complete는 메인 루프의 각 턴이 끝난 뒤 갱신하며, 서브에이전트 턴(agentId가 있는 턴)은 건너뜁니다. Bash에 대한 tool.call 훅은 await next(e)로 명령을 먼저 실행한 다음, 명령에 git이나 gh pr checkout/merge가 들어 있을 때만 갱신합니다. 이 훅의 .catch는 호출을 그대로 통과시키므로, 모드에 오류가 나도 명령이 막히는 일은 없습니다.

refresh는 $.session.cwd()에서 git status --porcelain=v1 -b를 한 번만 실행합니다. 이 명령 하나로 브랜치, 업스트림, ahead/behind, 변경 목록을 모두 얻을 수 있으므로 rev-parse나 rev-list를 따로 호출할 필요가 없습니다. hooks/git.ts의 순수 함수 parseStatus는 커밋이 없는 새 저장소와 분리된 HEAD도 처리합니다. git이 없거나 느리면 오래된 데이터를 보여 주지 않고 띠를 숨깁니다.

사용자 지정

다음 옵션은 /config에서 모드 이름 아래에 있으며, 값을 바꾸면 모드가 새 값으로 다시 로드됩니다. 타이머의 기본값은 register 맨 위의 Math.max(2_000, ... 15_000)에서 정해지며, 이 코드가 2초 하한도 강제합니다. 띠의 모양을 바꾸려면 ui.render 훅의 Text 요소를 수정하십시오. 브랜치는 cyan 색의 bold로, 세부 정보는 dimColor로 그려집니다.

설정유형기본값설명
intervalMsnumber15000Refresh interval (ms). How often to re-read git status between turns, in milliseconds (at least 2000).
showAheadBehindbooleantrueShow ahead/behind. Show commits ahead of and behind the upstream branch (↑1 ↓0).
hideWhenCleanbooleanfalseHide when clean. Hide the band while the work tree is clean and in sync with its upstream.

Claude Code에서 /config로 변경하세요. 모드가 즉시 다시 로드됩니다.

권한 및 안전

명령어 실행은 모드가 $.process.run을 호출하기 때문에 표시됩니다. 모드는 정확히 두 프로그램만 실행합니다. 하나는 git status --porcelain=v1 -b이고, 다른 하나는 HEAD가 분리된 상태일 때만 실행되는 git rev-parse --short HEAD입니다. 둘 다 읽기 전용이며, 셸 없이 argv 배열을 사용하고, 10초 시간 제한이 있습니다.

도구 호출 가로채기는 Bash의 tool.call을 훅하기 때문에 표시됩니다. 모드는 관찰만 할 뿐 명령을 바꾸거나 거부하지 않으며, 명령이 끝난 뒤에 갱신합니다. UI 변경은 띠 표시에 해당합니다.

파일 내용을 읽거나 네트워크를 사용하거나 모델을 호출하지 않습니다. 영구적으로 끄려면 /plugin disable cm-git-branch를 실행하고, 모든 모드를 끈 채 세션을 한 번 시작하려면 claude --safe-mode를 사용하십시오.

명령어 실행
컴퓨터에서 셸 프로그램을 실행할 수 있습니다($.process.run / spawn). 정확히 어떤 프로그램인지는 소스를 확인하세요.
도구 호출 가로채기
Claude가 하는 모든 도구 호출을 볼 수 있고(tool.call / tool.check), 이를 차단하거나 변경할 수 있습니다.
UI 변경
Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).

호환성 및 문제 해결

macOS 터미널에서 Claude Code 2.1.291로 테스트했습니다. 띠가 나타나지 않는다면 다음을 순서대로 확인하십시오.

  • claude --version이 2.1.287 이상인지 확인하십시오.
  • 세션을 git 저장소 안에서 시작했는지 확인하십시오. 같은 폴더에서 git status가 작동해야 합니다.
  • 모드가 활성화되어 있는지 확인하십시오. /plugin 메뉴의 Installed 탭에 "mod active" 줄과 함께 표시되어야 합니다.
  • 이미 열린 세션에 셸로 설치했다면 /reload-plugins를 실행하십시오.
  • 입력창 위에 설문이나 다른 프롬프트가 열려 있을 수 있습니다. 그것이 보이는 동안 띠는 비켜 있다가 닫히면 다시 나타납니다.

아주 큰 저장소에서는 intervalMs를 늘려 git status가 덜 자주 실행되도록 하십시오.

자주 묻는 질문

Claude Code git 브랜치 모드가 저장소를 변경하나요?
아닙니다. git status --porcelain=v1 -b만 실행하고, HEAD가 분리된(detached) 상태일 때만 git rev-parse --short HEAD를 추가로 실행합니다. 둘 다 읽기 전용이며 셸 없이 실행되고 10초 후 시간 초과됩니다.
띠가 나타나지 않는 이유는 무엇인가요?
가장 흔한 원인은 세션 폴더가 git 저장소가 아니거나, Claude Code가 2.1.287보다 오래되었거나, /plugin에서 모드가 비활성화되어 있거나, 설문이 프롬프트 위 공간을 쓰고 있는 경우입니다. 셸에서 설치했다면 /reload-plugins를 실행하십시오.
다른 터미널에서 체크아웃한 것도 반영되나요?
네. 한 번의 갱신 주기(기본값 15초) 안에 반영됩니다. 더 빨리 반영되길 원하면 /config에서 intervalMs를 낮추십시오. 최소 2초까지 가능합니다.
데스크톱 앱에서도 작동하나요?
네. AbovePrompt 띠는 터미널과 데스크톱 앱의 Code 탭에 그려집니다. claude -p와 VS Code 확장의 채팅 패널에서는 모드가 실행되지만 아무것도 그리지 않으므로 띠가 보이지 않습니다.
알릴 내용이 없을 때 띠를 숨길 수 있나요?
hideWhenClean을 켜십시오. 그러면 작업 트리가 깨끗하고 업스트림과 동기화되어 있는 동안 띠가 사라집니다.
Claude Code에서 실행 중인 컨텍스트 미터

컨텍스트 미터

컨텍스트 창 사용률, 5시간·7일 요금제 사용량, 세션 비용을 상태 표시줄에 보여 주고 한도에 가까워지면 경고합니다.

  • 상태 표시줄
  • 토스트
  • UI 변경

v2.1.291에서 테스트됨

Claude Code에서 실행 중인 위험한 명령 차단

위험한 명령 차단

rm -rf /, main 브랜치 강제 푸시, DROP TABLE, curl | sh 같은 파괴적인 Bash 명령을 실행 전에 거부합니다.

  • 토스트
  • 도구 호출 가로채기
  • UI 변경

v2.1.291에서 테스트됨

Claude Code에서 실행 중인 도구 호출 카운터

도구 호출 카운터

Claude의 도구 호출을 턴별·세션별로 세어 스피너 옆에 표시하고, 상세 내역을 보는 /tally 명령을 추가합니다.

  • 스피너
  • 대화 기록
  • 상태 표시줄
  • 도구 호출 가로채기
  • UI 변경
  • 명령어/도구 추가

v2.1.291에서 테스트됨

더 보기: Git 및 GitHub, 상태 표시줄 및 프롬프트 바.