Claude Code가 대화를 요약하면서 앞 내용을 잊는 건 컨텍스트가 꽉 찼을 때입니다. 얼마나 찼는지 늘 보이면 그 전에 정리하고 새로 시작할 수 있습니다. 상태 줄(status line)이 그 자리입니다.
상태 줄이 하는 일
상태 줄은 Claude Code 화면 맨 아래에 늘 떠 있는 줄입니다. 내가 정한 셸 스크립트를 실행하고, 그 스크립트가 찍은 글자를 그대로 보여 줍니다. Claude Code는 세션 정보를 JSON으로 스크립트의 표준 입력에 넘깁니다. 스크립트는 필요한 값만 골라 찍으면 됩니다. 내 컴퓨터에서 돌기 때문에 API 토큰을 쓰지 않습니다.
자주 쓰는 값은 이렇습니다.
| 필드 | 뜻 |
|---|---|
model.display_name | 모델 이름 |
workspace.current_dir | 지금 폴더 |
context_window.used_percentage | 컨텍스트 사용률(%) |
cost.total_cost_usd | 세션 예상 비용(정가 기준이라 실제 청구와 다를 수 있음) |
rate_limits.five_hour.used_percentage | 5시간 사용 한도 소진율 |
직접 만들어 본 스크립트
jq로 값을 꺼내 두 줄로 찍습니다. 첫 줄은 모델·폴더·브랜치, 둘째 줄은 10칸 막대와 사용률·비용입니다.
#!/bin/bash
# ~/.claude/statusline.sh
input=$(cat)
model=$(echo "$input" | jq -r '.model.display_name')
dir=$(echo "$input" | jq -r '.workspace.current_dir' | xargs basename)
pct=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
cost=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
branch=$(git -C "$(echo "$input" | jq -r '.workspace.current_dir')" branch --show-current 2>/dev/null)
filled=$((pct / 10)); bar=""
for i in $(seq 1 10); do [ $i -le $filled ] && bar="${bar}█" || bar="${bar}░"; done
echo "[$model] $dir | $branch"
printf '%s %s%% | $%.2f\n' "$bar" "$pct" "$cost"
예시 세션 값을 넣어 돌린 결과입니다.
$ ./statusline.sh < session.json
[Opus 5.5] bunhine_web | main
██████░░░░ 63% | $1.27
$ ./statusline.sh < later.json
[Opus 5.5] bunhine_web | main
█████████░ 91% | $3.84
막대가 거의 찼다면 /compact로 줄이거나, 할 일을 정리해 새 세션으로 넘어갈 때입니다.
설정에 연결
chmod +x ~/.claude/statusline.sh 로 실행 권한을 주고 ~/.claude/settings.json에 넣습니다.
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh"
}
}
스크립트는 세션이 시작할 때, 새 답이 올 때, /compact가 끝날 때 같은 순간에 다시 돕니다.
직접 짜기 귀찮다면
/statusline 을 치면 Claude Code가 스크립트를 만들어 설정까지 해 줍니다. 원하는 모양을 말로 덧붙이면 됩니다. 예: /statusline 컨텍스트 막대와 비용을 보여 줘.
참고
- Customize your status line (2026-11-09 확인)