feat: add config/claude/statusline-command.sh

This commit is contained in:
Harald Hoyer 2026-05-16 13:41:09 +02:00
parent 492362fa31
commit b0fc627d0a

View file

@ -0,0 +1,64 @@
#!/usr/bin/env bash
# Claude Code statusline: token usage display
# Receives JSON via stdin from Claude Code
input=$(cat)
# Model info
model=$(echo "$input" | jq -r '.model.display_name // empty')
# Working directory (basename)
cwd=$(echo "$input" | jq -r '.workspace.current_dir // .cwd // empty')
dir=$(basename "$cwd")
# Context window usage
ctx_size=$(echo "$input" | jq -r '.context_window.context_window_size // empty')
used_pct=$(echo "$input" | jq -r '.context_window.used_percentage // empty')
# Compute current context tokens as ctx_size * used_pct / 100
ctx_used=""
if [ -n "$ctx_size" ] && [ -n "$used_pct" ]; then
ctx_used=$(awk -v s="$ctx_size" -v p="$used_pct" 'BEGIN { printf "%d", s * p / 100 }')
fi
# Output tokens from the most recent assistant turn
output_tokens=$(echo "$input" | jq -r '.context_window.current_usage.output_tokens // empty')
# Format integer tokens: nk if >= 1000, otherwise raw int. Pure bash, no bc.
fmt_k() {
local n=$1
if [ "$n" -ge 1000 ]; then
printf "%dk" "$(( (n + 500) / 1000 ))"
else
printf "%d" "$n"
fi
}
parts=()
[ -n "$dir" ] && parts+=("$dir")
[ -n "$model" ] && parts+=("$model")
if [ -n "$ctx_used" ] && [ -n "$ctx_size" ]; then
parts+=("ctx:$(fmt_k "$ctx_used")/$(fmt_k "$ctx_size")")
fi
if [ -n "$used_pct" ]; then
parts+=("${used_pct}% used")
fi
if [ -n "$output_tokens" ] && [ "$output_tokens" -gt 0 ]; then
parts+=("out:$(fmt_k "$output_tokens")")
fi
# Join with " | "
result=""
for i in "${!parts[@]}"; do
if [ "$i" -eq 0 ]; then
result="${parts[$i]}"
else
result="$result | ${parts[$i]}"
fi
done
echo "$result"