티스토리 뷰

develop-and-AI

Claude Code의 statusline

주먹불끈 2025. 8. 21. 17:32

 

개요

Claude Code의 statusline 기능을 간단히 설정해보았다.

다음과 같이 Claude Code 입력창의 아래에 여러 상태정보들이 들어가는 것이다. 왼쪽부터 프로젝트 폴드명, 브랜치-상태, 모델명, 날짜시간 정보가 나오도록 하였다.

입력창에 /statusline <원하는 프롬프트> 명령으로 간단히 생성할 수도 있지만 색깔과 정보를 조금 더 커스텀하게 작업해보았다.

참고: 정보의 배경색도 바꾸어보기도 했는데 다시 RESET 되지가 않아서 글자색만 바꾸었다.

정보

설정

settings.json

$HOME/.claude/settings.json 파일에는 Claude Code의 여러 설정을 해줄수 있다. 여기에 다음 코드를 추가하자.

{
  "statusLine": {
    "type": "command",
    "command": "$HOME/.claude/script/statusline.sh"
  }
}

statusline.sh

$HOME/.claude/script/statusline.sh 파일을 생성하고 위에 공유했던 script gist의 내용을 붙여넣자.

전체 내용은 다음과 같다. 세세한 내용이 궁금하다면 AI의 도움을 받아 설명을 들으면 될 것이다.

#!/bin/bash
# Claude Code용 향상된 상태표시줄 스크립트
# 표시 형식: 프로젝트명 브랜치-상태 모델 YYYY-MM-DD HH:MM:SS

# 표준 입력(stdin)에서 JSON 형식의 입력 데이터를 읽어옴
# Claude Code에서 모델 정보 등을 JSON으로 전달
input=$(cat)

# Git 저장소인지 확인하고 브랜치 이름, 브랜치 상태를 알아냄
if git rev-parse --git-dir >/dev/null 2>&1; then

    # 현재 활성화된 브랜치 이름을 가져옴
    BRANCH=$(git branch --show-current 2>/dev/null)

    # 브랜치 상태 확인: 원격 동기화 > 로컬 변경사항 > 깨끗한 상태
    if [[ -n "$BRANCH" ]]; then

        # 원격 저장소와의 동기화 상태를 먼저 확인 (최고 우선순위)
        if git rev-parse --verify @{upstream} >/dev/null 2>&1; then
            # 로컬과 원격 간의 앞서가는/뒤처지는 커밋 수를 계산
            ahead_behind=$(git rev-list --count --left-right @{upstream}...HEAD 2>/dev/null)

            if [[ -n "$ahead_behind" ]]; then
                behind=$(echo "$ahead_behind" | cut -f1) # 뒤처진 커밋 수
                ahead=$(echo "$ahead_behind" | cut -f2) # 앞선 커밋 수

                if [[ "$ahead" -gt 0 && "$behind" -gt 0 ]]; then
                    status="↕"  # 앞서면서 동시에 뒤처진 상태 (분기됨)
                elif [[ "$ahead" -gt 0 ]]; then
                    status="↑"  # 앞선 상태 (푸시 필요)
                elif [[ "$behind" -gt 0 ]]; then
                    status="↓"  # 뒤처진 상태 (풀 필요)
                fi
            fi
        fi

        # 원격 동기화 문제가 없다면 로컬 변경사항 확인
        if [[ -z "$status" ]]; then
            if git diff-index --quiet HEAD -- 2>/dev/null; then
                status="✓"  # 깨끗한 상태 (변경사항 없음)
            else
                status="*"  # 더러운 상태 (로컬 변경사항 있음)
            fi
        fi

        # 브랜치명과 상태를 결합
        GIT_INFO="$BRANCH $status"
    else
        # 브랜치를 찾을 수 없는 경우
        GIT_INFO=""
    fi
fi

PROJECT_NAME=$(echo "$input" | jq -r '.workspace.project_dir' | xargs basename)

# 현재 날짜와 시간을 YYYY-MM-DD HH:MM:SS 형식으로 가져옴
DATETIME=$(date '+%Y-%m-%d %H:%M:%S')

# JSON 입력에서 모델명을 추출하고 'claude-' 접두사 제거
MODEL=$(echo "$input" | jq -r '.model.display_name')

# 상태표시줄 색상 설정 - 다크모드 가독성에 초점을 맞춘 글자색
# 🎨 팔레트 1 — Bright & Vivid (밝고 선명)
PROJECT_COLOR='\\033[38;5;81m'   # 밝은 하늘
BRANCH_COLOR='\\033[38;5;118m'   # 형광 라임
MODEL_COLOR='\\033[38;5;226m'    # 선명한 노랑
DATETIME_COLOR='\\033[38;5;15m'  # 밝은 회색
RESET='\\033[0m'

# 🎨 팔레트 2 — Soft Pastel (파스텔)
# PROJECT_COLOR='\\033[38;5;183m'  # 연보라
# BRANCH_COLOR='\\033[38;5;157m'   # 연두
# MODEL_COLOR='\\033[38;5;223m'    # 파스텔 오렌지
# DATETIME_COLOR='\\033[38;5;15m'  # 밝은 회색
# RESET='\\033[0m'

# 상태표시줄 구성: 프로젝트명 ⎇ 브랜치 상태 모델 날짜시간
if [[ -n "$GIT_INFO" ]]; then
  printf "%b %s %b ⎇ %s %b %s %b %s%b\\n" \
    "$PROJECT_COLOR" "$PROJECT_NAME" \
    "$BRANCH_COLOR" "$GIT_INFO" \
    "$MODEL_COLOR" "$MODEL" \
    "$DATETIME_COLOR" "$DATETIME" \
    "$RESET"
else
  printf "%b %s %b %s %b %s%b\\n" \
    "$PROJECT_COLOR" "$PROJECT_NAME" \
    "$MODEL_COLOR" "$MODEL" \
    "$DATETIME_COLOR" "$DATETIME" \
    "$RESET"
fi

마무리

위와 같이 설정을 마치고 Claude Code를 실행하면 입력창 아래에 상태정보가 보일 것이다.

앤트로픽 문서를 참고하여 좀더 자신에 맞는 설정을 할 수 있겠다.

반응형
반응형
잡학툰 뱃지
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함