본문 바로가기
개발 일지/기타 작업

Claude Code - 커스텀 status line 설정하기

by 가리봉맨 2026. 1. 13.

앱 개발에 여러 LLM을 쓰고 있지만 구현 단계에 해당하는 코딩 작업은 Claude Code가 차지하는 비중이 거의 100%다. 조금 과장해서 쓰자면 Claude Code를 얼마나 잘 쓰느냐에 따라 가리봉랩스의 성패가 결정된다고 할 수 있다.

https://bongman.tistory.com/1221

 

가리봉랩스의 탄생, 개인 사업자 등록 완료

App Store Connect의 비즈니스 메뉴로 들어가면 이런 배너가 떠 있다.대한민국 세금 양식을 채워야 한다 해서 클릭해서 들어갔더니..필수적으로 사업자등록번호를 기재해야 한다. 예전(대략 10년 전..

bongman.tistory.com

(방금 한 말을 바로 뒤집는 것 같지만) agent나 skill도 안 쓰고 기본 기능만 사용 중이지만 크게 불편함이 없다. 아직 기능이 간단한 앱만 개발하고 있어서 그런 것 같다. 다만 동시에 여러 개의 터미널에 claude code를 실행시켜서 작업하는데, 내가 지금 어느 프로젝트의 어느 브랜치(git branch)에서 작업하고 있는지 헷갈릴 때가 있다. 참고로 이미 두 개의 iOS앱(가리봉클립, 가리봉 라디오)이 스토어에 릴리즈 됐고 '독서 잔디'라는 새로운 앱을 개발 중이다.

https://youtube.com/shorts/1oLIsWs5vqc?si=zlvkzxvI1cqX-ad3

그냥 실수하지 않게 집중해야지 별 수 있나 하고 불편을 감수하고 있었다. 그런데 우연히 위의 유튜브 영상을 통해 Claude Code의 status line을 커스텀하게 설정할 수 있다는 사실을 알게 됐다. 'status line'은 간단히 말해서  입력 커서 아래에 표시되는 정보 표시 줄이다.

위 이미지는 status line을 설정하기 전의 모습이다. 커서 아래에 아무 정보도 표시되지 않고 있다. 유튜브 영상에서는 너무 많은 정보를 이모지까지 써서 알록달록하게 추가한다. 나는 심플한 게 좋고 현재 브랜치 정보만 표시하고 싶어서 아래와 같이 프롬프트를 날렸다.

/statusline show git branch/status

관련 설정(~/.claude/settings.json 파일의 변경점 참고)은 완료됐지만 권한 문제가 있는지 나한테 직접 스크립트 파일을 생성하라고 한다. 시키는 대로 터미널 창을 새로 열고, claude가 건네준 아래 코드를 그대로 긁어서 실행했다.

반응형
cat > ~/.claude/statusline-command.sh << 'EOF'                                                                     
  #!/bin/bash                                                                                                        
  input=$(cat)                                                                                                       
  cwd=$(echo "$input" | jq -r '.workspace.current_dir')                                                              
  cd "$cwd" 2>/dev/null || exit 0                                                                                    
  if ! git rev-parse --git-dir > /dev/null 2>&1; then                                                                
    printf "$(basename "$cwd")"                                                                                      
    exit 0                                                                                                           
  fi                                                                                                                 
  branch=$(git branch --show-current 2>/dev/null || echo "detached")                                                 
  status_output=$(git status --porcelain 2>/dev/null)                                                                
  modified=0; added=0; deleted=0; untracked=0                                                                        
  while IFS= read -r line; do                                                                                        
    [[ -z "$line" ]] && continue                                                                                     
    case "${line:0:2}" in                                                                                            
      M*|*M) ((modified++)) ;; A*|*A) ((added++)) ;;                                                                 
      D*|*D) ((deleted++)) ;; \?\?) ((untracked++)) ;;                                                               
    esac                                                                                                             
  done <<< "$status_output"                                                                                          
  status_indicators=""                                                                                               
  [ $modified -gt 0 ] && status_indicators="${status_indicators}~${modified}"                                        
  [ $added -gt 0 ] && status_indicators="${status_indicators}+${added}"                                              
  [ $deleted -gt 0 ] && status_indicators="${status_indicators}-${deleted}"                                          
  [ $untracked -gt 0 ] && status_indicators="${status_indicators}?${untracked}"                                      
  if [ -n "$status_indicators" ]; then                                                                               
    printf "$(basename "$cwd") | %s [%s]" "$branch" "$status_indicators"                                             
  else                                                                                                               
    printf "$(basename "$cwd") | %s" "$branch"                                                                       
  fi                                                                                                                 
  EOF                                                                                                                
  chmod +x ~/.claude/statusline-command.sh

~/.claude 디렉터리에 statusline-command.sh 파일이 생성됐다.

다시 새로운 터미널을 열고 작업 디렉터리로 이동한 뒤, claude code를 실행했다. 입력 커서 밑에 디렉터리 이름과 브랜치 정보가 표시되는 것을 볼 수 있다.

테스트 삼아 작업 브랜치를 생성하고 아무 파일이나 하나 수정해봤다.

새로 생성한 브랜치 이름과 파일이 하나 수정됐다고(~1) 표시된다. 참고로 위에서 잠깐 언급한 status line 설정은 '~/.claude/settings.json' 파일에 아래 구문이 추가된 것이다. claude가 알아서 추가했고 내가 따로 한 건 없다.

status line 설정에 대한 더 자세한 정보는 (나도 아직 안 읽어봤지만) 아래 공식 claude code 문서를 참고하기 바란다.

https://code.claude.com/docs/en/statusline

 

Status line configuration - Claude Code Docs

Create a custom status line for Claude Code to display contextual information

code.claude.com

https://code.claude.com/docs/ko/statusline

 

상태 라인 구성 - Claude Code Docs

Claude Code에 대한 사용자 정의 상태 라인을 만들어 상황별 정보를 표시합니다

code.claude.com

끝.

사업자 정보 표시
가리봉랩스(Garibong Labs) | 함동기 | 87, Jukjeon-ro | 사업자 등록번호 : 604-05-36402 | TEL : 010-5130-6483 | Mail : hamjoon@gmail.com | 통신판매신고번호 : 2026-용인수지-0037호 | 사이버몰의 이용약관 바로가기