什么是 Claude statusline
statusline 从字面意思理解就是【状态栏】,Claude 官方解释如下
状态行是 Claude Code 底部的可自定义栏,可以运行你配置的任何 shell 脚本。它通过 stdin 接收 JSON 会话数据,并显示你的脚本打印的任何内容,为你提供一个持久的、一目了然的上下文使用情况、成本、git 状态或任何其他你想跟踪的内容的视图。
有那些作用
- 你想在工作时监控上下文窗口使用情况
- 你需要跟踪会话成本
- 你在多个会话中工作,需要区分它们
- 你希望 git 分支和状态始终可见
- 强迫症患者福音
有哪些样式
比如下面的多行状态栏
显示的信息都是基于当前会话


第一行:模型名称 | 工作路径 | git 分支/状态 (如果有)
第二行:上下文使用百分比 | 会话成本(美元) | 整个会话总共输入、输出token统计 | 花费总时间
如果百分比在你的环境下显示异常,可以自己替换成如 [####====]40% 这种简易的显示方式
如何实现
把以下内容保存在你磁盘上任意路径,推荐保存在 ~/.claude/statusline.sh
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
DIR=$(echo "$input" | jq -r '.workspace.current_dir')
COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0')
INPUT_TOKENS=$(echo "$input" | jq -r '.context_window.total_input_tokens // 0')
OUTPUT_TOKENS=$(echo "$input" | jq -r '.context_window.total_output_tokens // 0')
format_tokens() {
local tokens="${1:-0}"
awk -v n="$tokens" 'BEGIN {
if (n >= 1000000) {
value = n / 1000000
unit = "m"
} else if (n >= 1000) {
value = n / 1000
unit = "k"
} else {
printf "%d", n
exit
}
if (value >= 100) {
printf "%.0f%s", value, unit
} else if (value >= 10) {
printf "%.1f%s", value, unit
} else {
printf "%.2f%s", value, unit
}
}'
}
INPUTKOEN="Σin:$(format_tokens "$INPUT_TOKENS")"
OUTKOEN="Σout:$(format_tokens "$OUTPUT_TOKENS")"
CYAN='\033[36m'; GREEN='\033[32m'; YELLOW='\033[33m'; RED='\033[31m'; RESET='\033[0m'
# Pick bar color based on context usage
if [ "$PCT" -ge 90 ]; then BAR_COLOR="$RED"
elif [ "$PCT" -ge 70 ]; then BAR_COLOR="$YELLOW"
else BAR_COLOR="$GREEN"; fi
FILLED=$((PCT / 10)); EMPTY=$((10 - FILLED))
printf -v FILL "%${FILLED}s"; printf -v PAD "%${EMPTY}s"
BAR="${FILL// /█}${PAD// /░}"
TOTAL_SECS=$((DURATION_MS / 1000))
DAYS=$((TOTAL_SECS / 86400))
HOURS=$(((TOTAL_SECS % 86400) / 3600))
MINS=$(((TOTAL_SECS % 3600) / 60))
SECS=$((TOTAL_SECS % 60))
if [ "$TOTAL_SECS" -ge 86400 ]; then
DURATION_FMT="${DAYS}d ${HOURS}h ${MINS}m ${SECS}s"
elif [ "$TOTAL_SECS" -ge 3600 ]; then
TOTAL_HOURS=$((TOTAL_SECS / 3600))
DURATION_FMT="${TOTAL_HOURS}h ${MINS}m ${SECS}s"
elif [ "$TOTAL_SECS" -ge 60 ]; then
DURATION_FMT="${MINS}m ${SECS}s"
else
DURATION_FMT="${SECS}s"
fi
BRANCH=""
git rev-parse --git-dir > /dev/null 2>&1 && BRANCH=" | ? $(git branch --show-current 2>/dev/null)"
echo -e "${CYAN}[$MODEL]${RESET} ? ${DIR##*/}$BRANCH"
COST_FMT=$(printf '$%.2f' "$COST")
echo -e "${BAR_COLOR}${BAR}${RESET} ${PCT}% | ${YELLOW}${COST_FMT}${RESET} | ${INPUTKOEN} ${OUTKOEN} | ⏱️ ${DURATION_FMT}"
然后设置执行权限 chmod + x ~/.claude/statusline.sh ,最后在 Claude 的 ~/.claude/settings.json 配置如下内容
"statusLine": {
"command": "~/.claude/statusline.sh",
"type": "command"
}
然后刷新会话或者重启 Claude 即可显示状态栏。
更多支持的字段和说明参考 Claude 官网说明部分: https://code.claude.com/docs/zh-CN/statusline





