🎚️
うちのClaude Codeのstatuslineモエス見てつーか見ろ♪
Claude Codeのプロンプト部分には、statuslineとして情報を表示することができます。
手元のstatuslineの設定が概ね固まったので公開します。
claudeの設定に以下のように記述してスクリプトを呼び出します。このスクリプトの標準出力(の1行目)がstatuslineとして描画されます。
CLAUDE_CONFIG_DIR/settings.json
{
"statusLine": {
"type": "command",
"command": "CLAUDE_CONFIG_DIR/statusline.sh"
},
// その他は略…
}
statusline.shを以下の内容で作成し、 chmod +x statusline.sh
で実行権限をつけます。実行にはjqが必要です。
CLAUDE_CONFIG_DIR/statusline.sh
#!/usr/bin/env bash
# Read JSON input from stdin
input=$(cat)
MODEL_DISPLAY=$(echo "$input" | jq -r '.model.display_name')
CURRENT_DIR=$(echo "$input" | jq -r '.workspace.current_dir')
TRANSCRIPT_PATH=$(echo "$input" | jq -r '.transcript_path')
# Get git branch information
GIT_BRANCH=""
if git rev-parse &>/dev/null; then
BRANCH=$(git branch --show-current)
if [ -n "$BRANCH" ]; then
GIT_BRANCH=" | $BRANCH"
else
COMMIT_HASH=$(git rev-parse --short HEAD 2>/dev/null)
if [ -n "$COMMIT_HASH" ]; then
GIT_BRANCH=" | HEAD ($COMMIT_HASH)"
fi
fi
fi
# Get token summary
if [ -z "$TRANSCRIPT_PATH" ] || [ ! -f "$TRANSCRIPT_PATH" ]; then
TOKEN_COUNT="_ tkns. (_%)"
else
# Get last assistant message with usage data using jq
total_tokens=$(tail -n 100 "$TRANSCRIPT_PATH" 2>/dev/null | \
jq -s 'map(select(.type == "assistant" and .message.usage)) |
last |
.message.usage |
(.input_tokens // 0) +
(.output_tokens // 0) +
(.cache_creation_input_tokens // 0) +
(.cache_read_input_tokens // 0)' 2>/dev/null)
# Default to 0 if no valid result
total_tokens=${total_tokens:-0}
# max token count: 200k
# compaction threshold: 80% (160k)
COMPACTION_THRESHOLD=160000
# Calculate percentage
percentage=$((total_tokens * 100 / COMPACTION_THRESHOLD))
# Format token display
if [ "$total_tokens" -ge 1000 ]; then
thousands=$(echo "scale=1; $total_tokens/1000" | bc)
token_display=$(printf "%.1fK" "$thousands")
else
token_display="$total_tokens"
fi
# Color coding for percentage
if [ "$percentage" -ge 90 ]; then
color="\033[31m" # Red
elif [ "$percentage" -ge 70 ]; then
color="\033[33m" # Yellow
else
color="\033[32m" # Green
fi
# Format: "123 tkns. (10%)"
TOKEN_COUNT=$(echo -e "${token_display} tkns. (${color}${percentage}%\033[0m)")
fi
echo " ${MODEL_DISPLAY} | ${CURRENT_DIR##*/}${GIT_BRANCH} | ${TOKEN_COUNT}"
表示部にはNerd fontsを使用しているのでZennのコードブロックでは表示されていませんが、コピペはできるはずです。フォントが適切に設定されていれば、ターミナルでは以下のように描画されます。
うはwwwテラモエス オレ天才wうぇwww
このスクリプトには引数としてjsonが渡されます。
モデル、ディレクトリ、gitブランチは簡単に取得できますが、トークン数はちょっと処理が必要です。
渡されるjsonのtranscript_path
にあるファイルに会話(というか通信)の各回の情報が記録されているので、それをパースし、トークン数を合計する必要があります。
この辺はシェルスクリプトだと面倒だと思ったのですが、AIさんに聞いたらjqで一気にやる方法を提案してくれて助かりました。
ちなみに、ブランチでなくHEADも表示できるようにしているのは、筆者がdetached headにいることがよくあるためです。詳細は以下の記事にて。
参考
以下の記事をめっちゃ参考にしました。大感謝。
タイトルと途中の画像のキャプションの元ネタはこちらのページに乗っていた漫画。Claude Codeとは関係ないです。
Discussion