Tekrar merhaba yazılımperver dostlarım. Bir önceki yazımda bahsettiğim gibi, kişisel olarak bir süredir Claude’yi yaızlım geliştirme işlerine kullanıyorum. Açıkçası şu ana kadar gerek gemine gerekse chatgpt ve diğer açık kaynak LLM’lere göre bana göre oldukça önde. Bu sebeple de, pro paketini temin ederek kullanmaya başladım. Claude Code kullanımı, beş saatlik ve haftalık kullanımlar üzerinden takip ediyor. Aşağıda, örnek bir kullanım durumu mevcut.

Her ne kadar, VSCode ile kullansam da, ağırlıklı olarak claude code’u komut satırı üzerinden de kullanıyorum. Buradan da, ne kadar kullanımın kaldığını takip etmek zor olabiliyor. Bunu görüntülemeye yönelik de ne yapılabileceğini araştırdığımda, Claude Code’a bu yönde eklemeler yapabildiğinizi gördüm (“statusline”). Claude bu konuda bir çok uyarlamalara imkan sağlıyor, ben de burada en çok işimi göreni sizler ile paylaşacağım, sizlere de faydalı olacağına inanıyorum. Bunu hem windows hem de linux için kullanabilirsiniz.
Peki nedir statusline?
~/.claude/settings.json dosyasındaki statusLine alanıyla yapılandırılıyor. Temelde bir komut çağrılıyor ve çıktılar derlenerek komut satırında gösteriliyor.
Benim paylaşacağım statusline’da, aktif model adı (mor), çalışma dizini (turuncu), context penceresi kullanımı (kullanım miktarına göre renklendiriliyor) ve (Claude.ai aboneleri için) rate limit bilgisi(mavi) gösterilmekte. Gelelim bunu nasıl ayarlayacağınıza.
Öncelike, claude kullanıcı dizinine gidiyoruz (windows için ‘C:\Users\kullaniciadi\.claude‘, linux için ‘~/.claude‘).
Windows için aşağıdaki içeriği, ilgili dizin içerisinde statusline.ps1 olarak kaydediyoruz:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
$e = [char]27 $j = $input | ConvertFrom-Json $m = $j.model.display_name $d = Split-Path $j.cwd -Leaf # Context (Token) Kullanımı — current_usage oturum başında null olabilir $cu = $j.context_window.current_usage $total = $j.context_window.context_window_size $used = 0 if ($null -ne $cu) { $used = [int]$cu.input_tokens + [int]$cu.output_tokens + [int]$cu.cache_creation_input_tokens + [int]$cu.cache_read_input_tokens } $pct = if ($total -gt 0) { [math]::Round(100 - ($used / $total * 100)) } else { 100 } # Rate Limit (Claude.ai aboneleri için — API key kullananlarda gelmez) $rl5h = $null $rl7d = $null if ($null -ne $j.rate_limits) { $rl5h = $j.rate_limits.five_hour $rl7d = $j.rate_limits.seven_day } # Git Bilgisi $git = '' try { $b = git -C $j.cwd branch --show-current 2>$null if ($b) { $dirty = '' $status = git -C $j.cwd status --porcelain 2>$null if ($status) { $dirty = '*' } $git = " ($b$dirty)" } } catch {} # Renk Mantığı (Context Yüzdesine Göre) $c = if ($pct -gt 50) { '32' } elseif ($pct -gt 20) { '33' } else { '31' } # Formatlama $usedK = [math]::Round($used / 1000) $totalK = [math]::Round($total / 1000) # Çıktı Satırı $statusLine = "$e[35m$m$e[0m | $e[33m$d$e[36m$git$e[0m | $e[$c`mCTX: $pct% (${usedK}k/${totalK}k)$e[0m" # 5 saatlik rate limit if ($null -ne $rl5h -and $null -ne $rl5h.used_percentage) { $used5h = [math]::Round([double]$rl5h.used_percentage) $rem5h = 100 - $used5h $rc = if ($rem5h -gt 50) { '32' } elseif ($rem5h -gt 20) { '33' } else { '31' } $resetTime = '' if ($rl5h.resets_at) { $resetDt = [DateTimeOffset]::FromUnixTimeSeconds([long]$rl5h.resets_at).ToLocalTime() $resetTime = " @$($resetDt.ToString('HH:mm'))" } $statusLine += " | $e[$rc`mUSAGE: $rem5h% rem (5h$resetTime)$e[0m" } # 7 günlük rate limit if ($null -ne $rl7d -and $null -ne $rl7d.used_percentage) { $rem7d = 100 - [math]::Round([double]$rl7d.used_percentage) $statusLine += " | $e[34mWEEKLY: $rem7d% rem$e[0m" } [Console]::WriteLine($statusLine) |
sonra yine aynı dizin içerisinde yoksa settings.json dosyasını oluşturuyoruz ve aşağıdaki gibi “statusLine” kalemini ekliyoruz:
|
1 2 3 4 5 6 7 |
{ "statusLine": { "type": "command", "command": "powershell -NoProfile -ExecutionPolicy Bypass -File ~/.claude/statusline.ps1" }, "model": "opus" } |
Aynı mantıkla linux için de aşağıdaki betiği, statusline.sh, oluşturup kullanabilirsiniz:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
#!/usr/bin/env bash json=$(cat) e='\033' model=$(echo "$json" | jq -r '.model.display_name // "unknown"') cwd=$(echo "$json" | jq -r '.cwd // "."') dir=$(basename "$cwd") # Context hesabı input_t=$(echo "$json" | jq -r '.context_window.current_usage.input_tokens // 0') output_t=$(echo "$json" | jq -r '.context_window.current_usage.output_tokens // 0') cache_c=$(echo "$json" | jq -r '.context_window.current_usage.cache_creation_input_tokens // 0') cache_r=$(echo "$json" | jq -r '.context_window.current_usage.cache_read_input_tokens // 0') total=$(echo "$json" | jq -r '.context_window.context_window_size // 0') used=$(( input_t + output_t + cache_c + cache_r )) if [ "$total" -gt 0 ]; then pct=$(( 100 - used * 100 / total )) else pct=100 fi used_k=$(( used / 1000 )) total_k=$(( total / 1000 )) # Context rengi if [ "$pct" -gt 50 ]; then ctx_color="32" elif [ "$pct" -gt 20 ]; then ctx_color="33" else ctx_color="31" fi # Git branch git_info="" if branch=$(git -C "$cwd" branch --show-current 2>/dev/null) && [ -n "$branch" ]; then dirty="" [ -n "$(git -C "$cwd" status --porcelain 2>/dev/null)" ] && dirty="*" git_info=" (${branch}${dirty})" fi line="${e}[35m${model}${e}[0m | ${e}[33m${dir}${e}[36m${git_info}${e}[0m | ${e}[${ctx_color}mCTX: ${pct}% (${used_k}k/${total_k}k)${e}[0m" # Rate limit (opsiyonel) rem5h=$(echo "$json" | jq -r 'if .rate_limits.five_hour.used_percentage != null then (100 - (.rate_limits.five_hour.used_percentage | round)) | tostring else "" end') if [ -n "$rem5h" ] && [ "$rem5h" != "null" ]; then if [ "$rem5h" -gt 50 ]; then rl_color="32" elif [ "$rem5h" -gt 20 ]; then rl_color="33" else rl_color="31" fi resets_at=$(echo "$json" | jq -r '.rate_limits.five_hour.resets_at // 0') reset_time="" if [ "$resets_at" -gt 0 ] 2>/dev/null; then reset_time=" @$(date -d "@${resets_at}" '+%H:%M' 2>/dev/null || date -r "${resets_at}" '+%H:%M' 2>/dev/null)" fi line+=" | ${e}[${rl_color}mUSAGE: ${rem5h}% rem (5h${reset_time})${e}[0m" fi rem7d=$(echo "$json" | jq -r 'if .rate_limits.seven_day.used_percentage != null then (100 - (.rate_limits.seven_day.used_percentage | round)) | tostring else "" end') if [ -n "$rem7d" ] && [ "$rem7d" != "null" ]; then line+=" | ${e}[34mWEEKLY: ${rem7d}% rem${e}[0m" fi echo -e "$line" |
settings.json:
|
1 2 3 4 5 6 |
{ "statusLine": { "type": "command", "command": "bash ~/.claude/statusline.sh" } } |
İlgili betikleri, istek ve ihtiyaçlarını doğrultusunda düzenleyebilir, internetten ya da çeto/claude’tan farklı önerileri de alabilirisniz.
İlgili betiklere ve kısa açıklamalara aşağıdaki repodan da ulaşabilirsiniz. Bir sonraki yazımda görüşmek dileğiyle, kendinize çok iyi bakın.
