Claude Code Statusline 完整教學 — 讓終端機底部長出一條儀表板
我同時開了四個終端機分頁,每個都跑著一個 Claude Code。一個在改後端、一個在跑測試、一個在弄部署腳本、還有一個我已經忘記在幹嘛。切過去切過來,每次都要先問自己「這個是哪個專案來著」,然後等它吐一段話我才從內容認出來。
更糟的是 context。我在某一個分頁裡聊得正起勁,完全沒注意到 context window 已經快滿了,直到它開始忘記前面講過的事、開始鬼打牆,我才意識到「啊它已經塞爆了」。等我發現的時候,已經浪費了好幾輪對話。
這兩個問題的共通點是:我需要的資訊一直都在,只是我看不到。
我先試了笨方法
第一個念頭是手動。我在每個分頁開頭先 cd 到對的目錄、把專案名打在提示字元裡。撐了半天就放棄了——因為這些是靜態的,context 用到幾趴、這次 session 花了多少錢,這些會一直變的東西,手打根本跟不上。
第二個念頭是去翻 /cost 之類的指令,需要的時候手動敲一下查。問題是「需要的時候」永遠是「已經太遲的時候」。儀表這種東西的意義,就在於你不用主動去問它。你開車不會每隔幾分鐘輸入一個指令去查時速,時速就該一直在那。我要的不是一個查詢工具,是一條一直亮著的儀表板。
Claude Code 早就準備好這個東西了,它叫 statusline。
它的運作其實簡單到有點好笑
statusline 就是終端機最底下那條 bar,而它顯示什麼,完全由你給它的一支 shell script 決定。
機制是這樣:每當有狀態變動,Claude Code 就把這個 session 當下的所有資料,包成一包 JSON,從 stdin 餵給你的 script。你的 script 讀這包 JSON,挑出你想看的欄位,印出一行字。Claude Code 就把你印的那行字顯示在底部。就這樣。
換句話說,Claude Code 負責「把資料送過來」,「要怎麼呈現」整個交給你。這跟車子的儀表板剛好相反——車廠把儀表釘死了你不能改,而這裡引擎蓋一掀,連儀表要長什麼樣都是你說了算。
那包 JSON 裡有什麼?大致長這樣:
1 | { |
還有更多——git 分支、PR 狀態、rate limit 用了幾趴、目前的 reasoning effort、vim 模式,全都在裡面。你想顯示什麼,就從這包挑什麼。
最快的做法:張嘴叫它自己寫
如果你連 script 都懶得碰,有個捷徑。直接在 Claude Code 裡打 /statusline,後面用白話描述你要什麼:
1 | /statusline 顯示模型名稱、context 用量百分比,加一個進度條 |
它會幫你把 script 寫好、丟到 ~/.claude/、連 settings 都自動改好。對大部分人來說,這一步就夠用了。
但如果你想懂它到底在幹嘛——而且我建議你懂,因為懂了你才改得動它——我們手動走一遍。
手動做一條:三步驟
第一步,寫一支讀 JSON、印一行字的 script。存成 ~/.claude/statusline.sh:
1 |
|
這裡用到 jq,一個命令列的 JSON 解析器,沒裝的話要先裝。如果你習慣 Python 或 Node,它們內建就會解 JSON,不用額外裝東西。
第二步,給它執行權限:
1 | chmod +x ~/.claude/statusline.sh |
第三步,告訴 Claude Code 用這支 script。打開 ~/.claude/settings.json,加一段:
1 | { |
type 設成 "command" 意思是「跑這個 shell 指令」,padding 是左邊多留幾格空白,純粹是視覺微調。存檔,下一次跟 Claude Code 互動時,底部那條就出現了。
把那個讓我踩坑的 context 條做出來
回到我一開始的痛點——沒注意到 context 快爆。光看一個百分比數字其實還是不夠醒目,數字要變成「一眼就感覺到」的東西,才真的有用。所以把它做成進度條:
1 |
|
現在底部會出現 [Opus] ▓▓▓░░░░░░░ 30% 這種東西。塞到一半,那條黑塊長到一半,你餘光就會瞄到,根本不用主動讀數字。這就是把「需要主動查的資訊」變成「被動就會注意到的訊號」——儀表板的全部意義都在這個轉換上。
想再進階一點,可以加顏色。終端機認 ANSI escape code,\033[32m 是綠、\033[33m 是黃、\033[0m 是重置。git 有改動就標黃、context 過半就轉紅,這些都是幾行 if 的事。多行也行——每個 echo 印一行,第一行放 git、第二行放 context 條,就成了一個兩層的迷你面板。
兩個你該知道的細節
第一,它不花錢也不花 token。statusline 是純本地跑你的 script,不會去呼叫 API。所以你大可在裡面塞 git 查詢、塞各種計算,不用擔心它偷吃你的額度。
第二,它什麼時候更新。你的 script 會在這幾個時機跑:每次 Claude 回完一則訊息、/compact 結束後、權限模式切換、vim 模式切換。更新有 300ms 的 debounce,連續變動會併成一次。但要注意——如果主 session 閒著(比方說在等背景 subagent),這些觸發點會安靜下來。所以如果你顯示的是時鐘這種「跟對話無關、自己會變」的東西,記得在設定裡加一個 refreshInterval(單位秒,最小 1),讓它額外照固定間隔重跑。
繞回最開始的四個分頁
現在我那四個分頁,每個底部都亮著一條:模型、專案資料夾名、一條 context 進度條、這次 session 花了多少。切過去的瞬間我就知道「這個是後端專案、context 才三成、還很安全」,不用再等它吐話來認。那個會讓我鬼打牆的 context 爆掉,現在還沒滿我就看到黑塊在長,提早 /compact 掉。
值得記住的不是某一支 script 怎麼寫,而是 statusline 給了你一個位置——終端機底部那條一直在你眼前、卻不打斷你的地方。哪些資訊值得放在那裡,沒有標準答案,那是你自己工作型態的問題。先想清楚「我最常在哪件事上後知後覺」,再回頭決定那條要顯示什麼。工具給你的是一塊空白的儀表板,填什麼,是你比工具更懂的事。









