common/claude/.claude/statusline.sh
33 lines · 911 bytes · executable
1#!/bin/sh
2# Claude Code status line: model, directory, git branch, context usage.
3# Session JSON arrives on stdin; see
4# https://code.claude.com/docs/en/statusline#available-data
5
6tab=$(printf '\t')
7IFS="$tab" read -r model dir pct <<EOF
8$(jq -r '[.model.display_name,
9 .workspace.current_dir,
10 (.context_window.used_percentage // 0 | floor)] | @tsv' 2>/dev/null)
11EOF
12pct=${pct:-0}
13
14branch=''
15if [ -n "$dir" ] && cd "$dir" 2>/dev/null; then
16 branch=$(git branch --show-current 2>/dev/null)
17 if [ -n "$branch" ] && [ -n "$(git status --porcelain 2>/dev/null)" ]; then
18 branch="$branch*"
19 fi
20fi
21
22if [ "$pct" -ge 80 ]; then
23 ctx=31
24elif [ "$pct" -ge 50 ]; then
25 ctx=33
26else
27 ctx=32
28fi
29
30sep='\033[2m·\033[0m'
31printf "\033[35m%s\033[0m $sep \033[36m%s\033[0m" "$model" "${dir##*/}"
32[ -n "$branch" ] && printf " $sep \033[33m%s\033[0m" "$branch"
33printf " $sep \033[%dm%d%%\033[0m\n" "$ctx" "$pct"