Baris status adalah bilah yang dapat disesuaikan di bagian bawah Claude Code yang menjalankan skrip shell apa pun yang Anda konfigurasikan. Skrip menerima data sesi JSON di stdin dan menampilkan apa pun yang dicetak skrip Anda, memberikan Anda tampilan yang persisten dan sekilas dari penggunaan konteks, biaya, status git, atau apa pun yang ingin Anda lacak. Baris status berguna ketika Anda:Documentation Index
Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
- Ingin memantau penggunaan jendela konteks saat bekerja
- Perlu melacak biaya sesi
- Bekerja di berbagai sesi dan perlu membedakannya
- Ingin cabang git dan status selalu terlihat

Atur baris status
Gunakan perintah/statusline untuk membuat Claude Code menghasilkan skrip untuk Anda, atau buat skrip secara manual dan tambahkan ke pengaturan Anda.
Gunakan perintah /statusline
Perintah/statusline menerima instruksi bahasa alami yang menjelaskan apa yang ingin Anda tampilkan. Claude Code menghasilkan file skrip di ~/.claude/ dan memperbarui pengaturan Anda secara otomatis:
Konfigurasikan baris status secara manual
Tambahkan bidangstatusLine ke pengaturan pengguna Anda (~/.claude/settings.json, di mana ~ adalah direktori home Anda) atau pengaturan proyek. Atur type ke "command" dan arahkan command ke jalur skrip atau perintah shell inline. Untuk panduan lengkap membuat skrip, lihat Bangun baris status langkah demi langkah.
command berjalan di shell, jadi Anda juga dapat menggunakan perintah inline alih-alih file skrip. Contoh ini menggunakan jq untuk mengurai input JSON dan menampilkan nama model dan persentase konteks:
padding opsional menambahkan spasi horizontal ekstra (dalam karakter) ke konten baris status. Default ke 0. Padding ini selain spasi bawaan antarmuka, jadi mengontrol indentasi relatif daripada jarak absolut dari tepi terminal.
Bidang refreshInterval opsional menjalankan kembali perintah Anda setiap N detik selain pembaruan berbasis peristiwa. Minimum adalah 1. Atur ini ketika baris status Anda menampilkan data berbasis waktu seperti jam, atau ketika subagen latar belakang mengubah keadaan git sementara sesi utama menganggur. Biarkan tidak diatur untuk hanya berjalan pada peristiwa.
Bidang hideVimModeIndicator opsional menekan teks -- INSERT -- bawaan di bawah prompt. Atur ini ke true ketika skrip Anda merender vim.mode itu sendiri, sehingga mode tidak ditampilkan dua kali.
Nonaktifkan baris status
Jalankan/statusline dan minta untuk menghapus atau menghapus baris status Anda (misalnya, /statusline delete, /statusline clear, /statusline remove it). Anda juga dapat secara manual menghapus bidang statusLine dari settings.json Anda.
Bangun baris status langkah demi langkah
Panduan ini menunjukkan apa yang terjadi di balik layar dengan membuat baris status secara manual yang menampilkan model saat ini, direktori kerja, dan persentase penggunaan jendela konteks.Menjalankan
/statusline dengan deskripsi apa yang Anda inginkan mengonfigurasi semua ini untuk Anda secara otomatis.
Buat skrip yang membaca JSON dan mencetak output
Claude Code mengirim data JSON ke skrip Anda melalui stdin. Skrip ini menggunakan
jq, pengurai JSON baris perintah yang mungkin perlu Anda instal, untuk mengekstrak nama model, direktori, dan persentase konteks, kemudian mencetak baris yang diformat.Simpan ini ke ~/.claude/statusline.sh (di mana ~ adalah direktori home Anda, seperti /Users/username di macOS atau /home/username di Linux):Buat dapat dieksekusi
Tandai skrip sebagai dapat dieksekusi sehingga shell Anda dapat menjalankannya:
Tambahkan ke pengaturan
Beri tahu Claude Code untuk menjalankan skrip Anda sebagai baris status. Tambahkan konfigurasi ini ke Baris status Anda muncul di bagian bawah antarmuka. Pengaturan dimuat ulang secara otomatis, tetapi perubahan tidak akan muncul sampai interaksi berikutnya Anda dengan Claude Code.
~/.claude/settings.json, yang menetapkan type ke "command" (berarti โjalankan perintah shell iniโ) dan menunjuk command ke skrip Anda:Bagaimana baris status bekerja
Claude Code menjalankan skrip Anda dan menyalurkan data sesi JSON ke dalamnya melalui stdin. Skrip Anda membaca JSON, mengekstrak apa yang dibutuhkan, dan mencetak teks ke stdout. Claude Code menampilkan apa pun yang dicetak skrip Anda. Kapan itu diperbarui Skrip Anda berjalan setelah setiap pesan asisten baru, setelah/compact selesai, ketika mode izin berubah, atau ketika vim mode beralih. Pembaruan dibatasi pada 300ms, berarti perubahan cepat dikumpulkan bersama dan skrip Anda berjalan sekali semuanya stabil. Jika pembaruan baru dipicu saat skrip Anda masih berjalan, eksekusi yang sedang berlangsung dibatalkan. Jika Anda mengedit skrip Anda, perubahan tidak akan muncul sampai interaksi berikutnya Anda dengan Claude Code memicu pembaruan.
Pemicu ini dapat menjadi senyap ketika sesi utama menganggur, misalnya saat koordinator menunggu subagen latar belakang. Untuk menjaga segmen berbasis waktu atau bersumber eksternal tetap terkini selama periode menganggur, atur refreshInterval untuk juga menjalankan kembali perintah pada timer tetap.
Apa yang dapat dicetak skrip Anda
- Beberapa baris: setiap pernyataan
echoatauprintditampilkan sebagai baris terpisah. Lihat contoh multi-baris. - Warna: gunakan kode escape ANSI seperti
\033[32muntuk hijau (terminal harus mendukungnya). Lihat contoh status git. - Tautan: gunakan urutan escape OSC 8 untuk membuat teks dapat diklik (Cmd+klik di macOS, Ctrl+klik di Windows/Linux). Memerlukan terminal yang mendukung hyperlink seperti iTerm2, Kitty, atau WezTerm. Lihat contoh tautan yang dapat diklik.
Baris status berjalan secara lokal dan tidak menggunakan token API. Itu sementara bersembunyi selama interaksi UI tertentu, termasuk saran pelengkapan otomatis, menu bantuan, dan prompt izin.
Data yang tersedia
Claude Code mengirim bidang JSON berikut ke skrip Anda melalui stdin:| Bidang | Deskripsi |
|---|---|
model.id, model.display_name | Pengidentifikasi model saat ini dan nama tampilan |
cwd, workspace.current_dir | Direktori kerja saat ini. Kedua bidang berisi nilai yang sama; workspace.current_dir lebih disukai untuk konsistensi dengan workspace.project_dir. |
workspace.project_dir | Direktori tempat Claude Code diluncurkan, yang mungkin berbeda dari cwd jika direktori kerja berubah selama sesi |
workspace.added_dirs | Direktori tambahan yang ditambahkan melalui /add-dir atau --add-dir. Array kosong jika tidak ada yang telah ditambahkan |
workspace.git_worktree | Nama git worktree ketika direktori saat ini berada di dalam linked worktree yang dibuat dengan git worktree add. Tidak ada di main working tree. Diisi untuk git worktree apa pun, tidak seperti worktree.* yang hanya berlaku untuk sesi --worktree |
cost.total_cost_usd | Perkiraan biaya sesi dalam USD, dihitung sisi klien. Mungkin berbeda dari tagihan aktual Anda |
cost.total_duration_ms | Total waktu dinding jam sejak sesi dimulai, dalam milidetik |
cost.total_api_duration_ms | Total waktu yang dihabiskan menunggu respons API dalam milidetik |
cost.total_lines_added, cost.total_lines_removed | Baris kode yang diubah |
context_window.total_input_tokens, context_window.total_output_tokens | Jumlah token saat ini dalam jendela konteks, dari respons API terbaru. Input mencakup pembacaan dan penulisan cache. Sebelum v2.1.132 ini adalah total sesi kumulatif |
context_window.context_window_size | Ukuran jendela konteks maksimum dalam token. 200000 secara default, atau 1000000 untuk model dengan konteks diperpanjang. |
context_window.used_percentage | Persentase jendela konteks yang digunakan yang telah dihitung sebelumnya |
context_window.remaining_percentage | Persentase jendela konteks yang tersisa yang telah dihitung sebelumnya |
context_window.current_usage | Jumlah token dari panggilan API terakhir, dijelaskan dalam bidang jendela konteks |
exceeds_200k_tokens | Apakah jumlah token total (input, cache, dan output token digabungkan) dari respons API terbaru melebihi 200k. Ini adalah ambang batas tetap terlepas dari ukuran jendela konteks aktual. |
effort.level | Tingkat upaya penalaran saat ini (low, medium, high, xhigh, atau max). Mencerminkan nilai sesi langsung, termasuk perubahan /effort pertengahan sesi. Tidak ada ketika model saat ini tidak mendukung parameter upaya |
thinking.enabled | Apakah pemikiran diperpanjang diaktifkan untuk sesi |
rate_limits.five_hour.used_percentage, rate_limits.seven_day.used_percentage | Persentase batas laju 5 jam atau 7 hari yang dikonsumsi, dari 0 hingga 100 |
rate_limits.five_hour.resets_at, rate_limits.seven_day.resets_at | Detik epoch Unix ketika jendela batas laju 5 jam atau 7 hari direset |
session_id | Pengidentifikasi sesi unik |
session_name | Nama sesi khusus yang ditetapkan dengan bendera --name atau /rename. Tidak ada jika tidak ada nama khusus yang telah ditetapkan |
transcript_path | Jalur ke file transkrip percakapan |
version | Versi Claude Code |
output_style.name | Nama gaya output saat ini |
vim.mode | Mode vim saat ini (NORMAL, INSERT, VISUAL, atau VISUAL LINE) ketika vim mode diaktifkan |
agent.name | Nama agen saat menjalankan dengan bendera --agent atau pengaturan agen dikonfigurasi |
worktree.name | Nama worktree aktif. Hadir hanya selama sesi --worktree |
worktree.path | Jalur absolut ke direktori worktree |
worktree.branch | Nama cabang Git untuk worktree (misalnya, "worktree-my-feature"). Tidak ada untuk worktree berbasis hook |
worktree.original_cwd | Direktori tempat Claude berada sebelum memasuki worktree |
worktree.original_branch | Cabang Git yang diperiksa sebelum memasuki worktree. Tidak ada untuk worktree berbasis hook |
Skema JSON lengkap
Skema JSON lengkap
Perintah baris status Anda menerima struktur JSON ini melalui stdin:Bidang yang mungkin tidak ada (tidak ada dalam JSON):
session_name: muncul hanya ketika nama khusus telah ditetapkan dengan--nameatau/renameworkspace.git_worktree: muncul hanya ketika direktori saat ini berada di dalam linked git worktreeeffort: muncul hanya ketika model saat ini mendukung parameter upaya penalaranvim: muncul hanya ketika vim mode diaktifkanagent: muncul hanya saat menjalankan dengan bendera--agentatau pengaturan agen dikonfigurasiworktree: muncul hanya selama sesi--worktree. Ketika ada,branchdanoriginal_branchjuga mungkin tidak ada untuk worktree berbasis hookrate_limits: muncul hanya untuk pelanggan Claude.ai (Pro/Max) setelah respons API pertama dalam sesi. Setiap jendela (five_hour,seven_day) mungkin secara independen tidak ada. Gunakanjq -r '.rate_limits.five_hour.used_percentage // empty'untuk menangani ketiadaan dengan anggun.
null:context_window.current_usage:nullsebelum panggilan API pertama dalam sesi, dan lagi setelah/compacthingga panggilan API berikutnya mengisinya kembalicontext_window.used_percentage,context_window.remaining_percentage: mungkinnullawal dalam sesi
Bidang jendela konteks
Objekcontext_window menjelaskan jendela konteks langsung dari respons API terbaru. Mulai dari v2.1.132, total_input_tokens dan total_output_tokens mencerminkan penggunaan konteks saat ini, bukan total sesi kumulatif.
- Total gabungan (
total_input_tokens,total_output_tokens): token saat ini dalam jendela konteks.total_input_tokensadalah jumlah dariinput_tokens,cache_creation_input_tokens, dancache_read_input_tokens;total_output_tokensadalah token output dari respons terbaru. Keduanya adalah0sebelum respons API pertama. - Penggunaan per komponen (
current_usage): jumlah token yang sama dipecah menurut kategori. Gunakan ini ketika Anda memerlukan cache hits terpisah dari input segar.
current_usage berisi:
input_tokens: token input dalam konteks saat inioutput_tokens: token output yang dihasilkancache_creation_input_tokens: token yang ditulis ke cachecache_read_input_tokens: token yang dibaca dari cache
used_percentage dihitung dari token input saja: input_tokens + cache_creation_input_tokens + cache_read_input_tokens. Itu tidak termasuk output_tokens.
Jika Anda menghitung persentase konteks secara manual dari current_usage, gunakan formula input-only yang sama untuk mencocokkan used_percentage.
Objek current_usage adalah null sebelum panggilan API pertama dalam sesi, dan lagi segera setelah /compact hingga panggilan API berikutnya mengisinya kembali.
Contoh
Contoh-contoh ini menunjukkan pola baris status umum. Untuk menggunakan contoh apa pun:- Simpan skrip ke file seperti
~/.claude/statusline.sh(atau.py/.js) - Buat dapat dieksekusi:
chmod +x ~/.claude/statusline.sh - Tambahkan jalur ke pengaturan Anda
jq untuk mengurai JSON. Python dan Node.js memiliki penguraian JSON bawaan.
Penggunaan jendela konteks
Tampilkan model saat ini dan penggunaan jendela konteks dengan bilah kemajuan visual. Setiap skrip membaca JSON dari stdin, mengekstrak bidangused_percentage, dan membangun bilah 10 karakter di mana blok yang diisi (โ) mewakili penggunaan:

Status git dengan warna
Tampilkan cabang git dengan indikator berkode warna untuk file yang dipentingkan dan dimodifikasi. Skrip ini menggunakan kode escape ANSI untuk warna terminal:\033[32m adalah hijau, \033[33m adalah kuning, dan \033[0m mengatur ulang ke default.

Pelacakan biaya dan durasi
Lacak biaya API sesi dan waktu yang telah berlalu. Bidangcost.total_cost_usd mengakumulasi biaya semua panggilan API dalam sesi saat ini. Bidang cost.total_duration_ms mengukur total waktu yang telah berlalu sejak sesi dimulai, sementara cost.total_api_duration_ms melacak hanya waktu yang dihabiskan menunggu respons API.
Setiap skrip memformat biaya sebagai mata uang dan mengonversi milidetik ke menit dan detik:

Tampilkan beberapa baris
Skrip Anda dapat menampilkan beberapa baris untuk membuat tampilan yang lebih kaya. Setiap pernyataanecho menghasilkan baris terpisah di area status.

print atau echo membuat baris terpisah:
Tautan yang dapat diklik
Contoh ini membuat tautan yang dapat diklik ke repositori GitHub Anda. Itu membaca URL remote git, mengonversi format SSH ke HTTPS dengansed, dan membungkus nama repo dalam kode escape OSC 8. Tahan Cmd (macOS) atau Ctrl (Windows/Linux) dan klik untuk membuka tautan di browser Anda.

printf '%b' yang menginterpretasikan escape backslash lebih andal daripada echo -e di berbagai shell:
Penggunaan batas laju
Tampilkan penggunaan batas laju langganan Claude.ai dalam baris status. Objekrate_limits berisi five_hour (jendela bergulir 5 jam) dan seven_day (jendela mingguan). Setiap jendela menyediakan used_percentage (0-100) dan resets_at (detik epoch Unix ketika jendela direset).
Bidang ini hanya ada untuk pelanggan Claude.ai (Pro/Max) setelah respons API pertama. Setiap skrip menangani bidang yang tidak ada dengan anggun:
Cache operasi yang mahal
Skrip baris status Anda berjalan sering selama sesi aktif. Perintah sepertigit status atau git diff dapat lambat, terutama di repositori besar. Contoh ini menyimpan informasi git ke file temp dan hanya menyegarkannya setiap 5 detik.
Nama file cache perlu stabil di seluruh invokasi baris status dalam sesi, tetapi unik di seluruh sesi sehingga sesi bersamaan di repositori berbeda tidak membaca keadaan git cache satu sama lain. Pengidentifikasi berbasis proses seperti $$, os.getpid(), atau process.pid berubah pada setiap invokasi dan mengalahkan cache. Gunakan session_id dari input JSON sebagai gantinya: itu stabil untuk seumur hidup sesi dan unik per sesi.
Setiap skrip memeriksa apakah file cache hilang atau lebih lama dari 5 detik sebelum menjalankan perintah git:
Konfigurasi Windows
Di Windows, Claude Code menjalankan perintah baris status melalui Git Bash ketika Git Bash diinstal, atau melalui PowerShell ketika Git Bash tidak ada. Untuk menjalankan skrip PowerShell sebagai baris status Anda, panggil melaluipowershell; ini berfungsi dari shell mana pun:
Baris status subagen
PengaturansubagentStatusLine merender badan baris khusus untuk setiap subagen yang ditampilkan di panel agen di bawah prompt. Gunakan untuk mengganti baris default name ยท description ยท token count dengan pemformatan Anda sendiri.
columns (lebar baris yang dapat digunakan) dan array tasks, di mana setiap tugas memiliki id, name, type, status, description, label, startTime, tokenCount, tokenSamples, dan cwd.
Tulis satu baris JSON ke stdout per baris yang ingin Anda ganti, dalam bentuk {"id": "<task id>", "content": "<row body>"}. String content dirender apa adanya, termasuk warna ANSI dan hyperlink OSC 8. Hilangkan id tugas untuk menjaga rendering default untuk baris itu; keluarkan string content kosong untuk menyembunyikannya.
Gerbang kepercayaan dan disableAllHooks yang sama yang berlaku untuk statusLine berlaku di sini. Plugin dapat mengirimkan subagentStatusLine default dalam settings.json mereka.
Tips
- Uji dengan input mock:
echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/home/user/project"},"context_window":{"used_percentage":25},"session_id":"test-session-abc"}' | ./statusline.sh - Jaga output tetap pendek: bilah status memiliki lebar terbatas, jadi output panjang mungkin dipotong atau membungkus dengan canggung
- Cache operasi lambat: skrip Anda berjalan sering selama sesi aktif, jadi perintah seperti
git statusdapat menyebabkan lag. Lihat contoh caching untuk cara menangani ini.
Troubleshooting
Baris status tidak muncul- Verifikasi skrip Anda dapat dieksekusi:
chmod +x ~/.claude/statusline.sh - Periksa bahwa skrip Anda menampilkan ke stdout, bukan stderr
- Jalankan skrip Anda secara manual untuk memverifikasi itu menghasilkan output
- Jika
disableAllHooksdiatur ketruedalam pengaturan Anda, baris status juga dinonaktifkan. Hapus pengaturan ini atau atur kefalseuntuk mengaktifkan kembali. - Jalankan
claude --debuguntuk mencatat kode keluar dan stderr dari invokasi baris status pertama dalam sesi - Minta Claude untuk membaca file pengaturan Anda dan jalankan perintah
statusLinesecara langsung untuk mengungkap kesalahan
-- atau nilai kosong
- Bidang mungkin
nullsebelum respons API pertama selesai - Tangani nilai null dalam skrip Anda dengan fallback seperti
// 0dalam jq - Mulai ulang Claude Code jika nilai tetap kosong setelah beberapa pesan
- Gunakan
used_percentageuntuk keadaan konteks yang paling akurat - Persentase konteks mungkin berbeda dari output
/contextkarena kapan masing-masing dihitung
- Verifikasi terminal Anda mendukung hyperlink OSC 8 (iTerm2, Kitty, WezTerm)
- Terminal.app tidak mendukung tautan yang dapat diklik
-
Jika teks tautan muncul tetapi tidak dapat diklik, Claude Code mungkin tidak mendeteksi dukungan hyperlink di terminal Anda. Ini biasanya mempengaruhi Windows Terminal dan emulator lain yang tidak ada dalam daftar deteksi otomatis. Atur variabel lingkungan
FORCE_HYPERLINKuntuk mengganti deteksi sebelum meluncurkan Claude Code:Di PowerShell, atur variabel dalam sesi saat ini terlebih dahulu: - Sesi SSH dan tmux mungkin menghapus urutan OSC tergantung pada konfigurasi
-
Jika urutan escape muncul sebagai teks literal seperti
\e]8;;, gunakanprintf '%b'alih-alihecho -euntuk penanganan escape yang lebih andal
- Urutan escape kompleks (warna ANSI, tautan OSC 8) dapat sesekali menyebabkan output berantakan jika tumpang tindih dengan pembaruan UI lainnya
- Jika Anda melihat teks yang rusak, coba sederhanakan skrip Anda ke output teks biasa
- Baris status multi-baris dengan kode escape lebih rentan terhadap masalah rendering daripada teks biasa satu baris
- Perintah baris status hanya berjalan jika Anda telah menerima dialog kepercayaan ruang kerja untuk direktori saat ini. Karena
statusLinemengeksekusi perintah shell, itu memerlukan penerimaan kepercayaan yang sama seperti hooks dan pengaturan lain yang mengeksekusi shell. - Jika kepercayaan tidak diterima, Anda akan melihat notifikasi
statusline skipped ยท restart to fixalih-alih output baris status Anda. Mulai ulang Claude Code dan terima prompt kepercayaan untuk mengaktifkannya.
- Skrip yang keluar dengan kode non-nol atau tidak menghasilkan output menyebabkan baris status menjadi kosong
- Skrip lambat memblokir baris status dari pembaruan sampai selesai. Jaga skrip tetap cepat untuk menghindari output basi.
- Jika pembaruan baru dipicu saat skrip lambat berjalan, skrip yang sedang berlangsung dibatalkan
- Uji skrip Anda secara independen dengan input mock sebelum mengonfigurasinya
- Notifikasi sistem seperti kesalahan server MCP dan pembaruan otomatis ditampilkan di sisi kanan baris yang sama dengan baris status Anda. Notifikasi sementara seperti peringatan konteks-rendah juga bersiklus melalui area ini.
- Mengaktifkan mode verbose menambahkan penghitung token ke area ini
- Di terminal sempit, notifikasi ini mungkin memotong output baris status Anda