在終端機裡讀檔、改程式、跑指令的開發工具。本篇主要是底部狀態列的設定,以及跨 session 傳訊的用法。
一鍵安裝
本篇的設定步驟也寫成了腳本:install.sh。執行前請先閱讀檔案開頭的說明,裡面列出會改動哪些檔案、哪些步驟需要手動處理。
curl -fsSL -o /tmp/claude-code-install.sh https://oawu.tw/blog/macos/claude-code/files/install.sh
bash /tmp/claude-code-install.sh- Claude Code 本身一律從官方網址安裝;已經裝過的(npm、Homebrew 都算)會略過,只補上狀態列的設定
settings.json會合併下方的三項設定,其他既有設定保留不動- 完成後執行
claude,第一次要在瀏覽器登入帳號,這步無法自動化 - 可重複執行,已完成的步驟會略過
安裝步驟
- 官網 - https://claude.com/product/claude-code
- 用官方安裝腳本安裝,不需要 Node.js:
curl -fsSL https://claude.ai/install.sh | bash - 安裝位置是
~/.local/bin/claude,但安裝腳本不會把它加進 PATH。執行claude出現command not found時:echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc source ~/.zshrc - 檢查是否安裝成功:
claude --version - 第一次執行
claude會開啟瀏覽器,登入帳號後即可使用
❗️ 不要加
sudo,安裝腳本會直接拒絕執行。所有檔案都裝在自己的家目錄底下,不需要管理員權限。
安裝網址只用官方文件上的 https://claude.ai/install.sh,不要用其他來源。下載的執行檔會比對官方清單的 SHA256,本身也有 Anthropic PBC 的 Apple 簽章並經過公證。
其他安裝方式
| 方式 | 指令 | 備註 |
|---|---|---|
| 官方安裝腳本(本篇) | curl -fsSL https://claude.ai/install.sh | bash | 自動更新 |
| Homebrew | brew install --cask claude-code | 不會自動更新,要自己 brew upgrade claude-code |
| npm | npm install -g @anthropic-ai/claude-code | 需要 Node.js 22 以上 |
❗️ 照 Node.js 那篇用官網安裝檔裝的 Node,全域套件的資料夾屬於系統管理員,
npm install -g會遇到權限錯誤。官方明確不建議加sudo,遇到時改用官方安裝腳本即可。
設定檔
使用者層級的設定放在 ~/.claude/:
| 檔案 | 用途 |
|---|---|
~/.claude/settings.json | 主設定 |
~/.claude/statusline.sh | 底部狀態列的腳本 |
settings.json:
{
"theme": "dark",
"tui": "fullscreen",
"statusLine": {
"type": "command",
"command": "bash ~/.claude/statusline.sh"
}
}
| 設定 | 說明 |
|---|---|
theme | 深色主題 |
tui | 全螢幕介面,畫面更新時不會閃爍。也可以在 Claude Code 裡輸入 /tui fullscreen 切換 |
statusLine | 執行指定的指令,把輸出顯示在輸入框下方 |
底部狀態列
為什麼要做
Claude Code 的 context(對話記憶)有上限,快滿的時候會自動執行 auto compact - 把前面的對話壓縮成摘要。
壓縮後細節會遺失,進行到一半的工作可能要重新說明一次。
所以希望隨時看得到 context 已經用了多少,在快滿之前自己找時間點收尾,或手動 /compact,而不是被自動壓縮打斷。
❗️ 只顯示「已使用」而不是「剩餘」 - 數字越大越該注意,比較直覺。
長這樣
➜ 00_MacOS git:(main) context: 37% used · Opus 5.5
| 片段 | 內容 | 顏色 |
|---|---|---|
➜ | 開頭箭頭 | 綠 |
00_MacOS | 目前的資料夾名稱 | 青 |
git:(main) | 目前的 git 分支,不是 git 專案就不顯示 | 藍框紅字 |
context: 37% used | context 已使用的比例 | 依比例變色,見下表 |
· Opus 5.5 | 目前使用的模型 | 暗灰 |
樣式仿 oh-my-zsh 的 robbyrussell 主題,跟 iTerm2 的提示字元一致,見 iTerm2。
context 顏色分級
| 已使用 | 顏色 | 建議動作 |
|---|---|---|
| 0–49% | 綠 | 放心用 |
| 50–69% | 青 | 過半,留意 |
| 70–79% | 黃 | 準備收尾,或在段落結束時 /compact |
| 80% 以上 | 紅(粗體) | 盡快手動處理,隨時可能 auto compact |
⚠️ auto compact 不是到 100% 才觸發 - Claude Code 會預留一段空間給壓縮本身使用,實際門檻依模型與 context 大小而異,所以紅色提早到 80%。 輸入
/context可以看到「Autocompact buffer」的大小,再依自己的狀況調整門檻。
安裝
下載腳本 - statusline.sh:
curl -fsSL -o ~/.claude/statusline.sh https://oawu.tw/blog/macos/claude-code/files/statusline.sh再到 ~/.claude/settings.json 加入下面這段(已經有其他設定的話,合併進去即可):
"statusLine": {
"type": "command",
"command": "bash ~/.claude/statusline.sh"
}下一次畫面更新時就會出現,沒出現的話重開 Claude Code。
實作重點
- 資料來源 - Claude Code 會把目前的狀態以 JSON 從 stdin 傳給指令,用到三個欄位:
model.display_name、workspace.current_dir、context_window.used_percentage - 不依賴 jq - macOS 預設沒有 jq,改用
grep+sed依欄位名稱取值 - git 分支 -
git --no-optional-locks branch --show-current,加--no-optional-locks避免和其他 git 操作搶鎖 - 還沒有資料時 - 對話剛開始時
used_percentage可能是 null,顯示暗灰的context: n/a - 調整門檻 - 改
statusline.sh裡的if判斷即可
驗證
不用開 Claude Code,直接餵假資料測試:
echo '{"model":{"display_name":"Opus 5.5"},"workspace":{"current_dir":"'$PWD'"},"context_window":{"used_percentage":72}}' | bash ~/.claude/statusline.sh應該輸出黃色的 context: 72% used。把 72 換成 15、55、86 可以看到各級顏色。
跨 session 傳訊
同一台電腦開了好幾個 Claude Code(例如各自負責不同專案),其中一個需要把發現、決定或進度交給另一個時,讓它們直接互傳訊息,不用自己在終端機之間複製貼上。
- 需要 v2.1.224 以上(macOS、Linux;Windows 原生要 v2.1.234 以上),不用另外開啟
- 檢查有沒有這個功能:輸入
/list-agents,認得這個指令就是有
操作
| 要做的事 | 怎麼做 |
|---|---|
| 看有哪些 session | /list-agents(也可以打 /peers)。第一行是自己的名稱,下面是聯絡得到的 session,會顯示忙碌或閒置、工作目錄 |
| 傳訊息 | 用講的就好,例如「跟另一個終端機的 session 問一下 migration 跑完沒」。Claude 會自己找對象、送出 |
| 交給它寫內容 | 例如「把我們剛剛做的事說明給負責 API 的 session 聽」,不用自己逐字寫 |
| 指定對象 | 輸入 @ 加上名稱開頭幾個字,從選單挑(v2.1.232 以上) |
| 取個好記的名稱 | 啟動時 claude --name api-worker,或在 session 裡 /rename api-worker。沒取名會自動產生一個 |
| 等對方做完 | 說「那邊做完時告訴我」,對方下次閒下來(或結束)時會收到一次通知。兩邊都要 v2.1.236 以上,12 小時內沒閒下來就自動取消 |
規則與限制
- 只傳純文字 - 不會帶過對話紀錄或檔案。訊息裡寫
@檔案路徑也不會附上檔案,對方要自己去讀。內容很多時,先寫成一份交接檔,訊息只講檔案在哪裡 - 不會打斷對方 - 對方忙的時候,會在兩次工具呼叫之間讀到;閒著的話會直接開始處理
- 不算本人同意 - 別的 session 傳來的訊息不能代替你通過權限詢問,也不會因此去改權限設定或
CLAUDE.md。訊息裡的斜線指令(例如/compact)只是文字,不會執行 - 權限各管各的 - 對方要做的事該跳權限詢問照樣會跳。Claude 也不會請對方去做自己這邊被擋下來的事,會改成回頭問你
- 同一台電腦不經過網路 - 走本機的 socket,不經過 Anthropic 的伺服器。其他電腦或雲端的 session 要透過 Remote Control,那就會經過
收不收訊息
/config 的 Messages from your other sessions,或在設定檔加 crossSessionInbound:
| 值 | 行為 |
|---|---|
accept | 直接收下 |
hold | 每則都先擋著,等你核准 |
refuse | 直接丟掉 |
沒設定時看兩邊的權限模式:一邊是略過所有權限詢問的模式、另一邊不是時,訊息會跳視窗等你核准,預設 5 分鐘沒處理就丟掉;其他情況直接收下。
跟其他協作方式的差別
| 方式 | 適合 |
|---|---|
| 跨 session 傳訊 | 各自開著、各管一個專案的 session,偶爾交換資訊 |
| Subagent | 在同一個 session 裡派一個小幫手做一件事 |
| Agent teams | 一個主控 session 帶多個隊友,分工同一個大任務 |
| Resume | 要把整段對話接過去,不是只傳一則訊息 |
實際用起來
前端與後端各開一個 session。後端改了 API 的欄位,跟它說「通知前端那邊」,前端的 session 就會在手上的工作告一段落時讀到,自己去改呼叫的地方;改完再回一則訊息說改了哪些檔案、有沒有發現其他問題。
兩邊來回幾次也不用自己轉述,但每一邊的 commit、部署還是要自己下指令,訊息代替不了你的同意。
踩雷
- 改了腳本不會馬上出現 - 狀態列只在特定時機重跑,例如收到下一則回覆、
/compact結束時。要等下一次觸發,或重開 Claude Code - 一開始做成顯示「剩餘」 - 實際用起來,「已使用」越大越危險比較直覺,就改掉了
相關參考
- 官方文件 - https://code.claude.com/docs/en/overview
- 安裝說明 - https://code.claude.com/docs/en/setup
- 狀態列設定 - https://code.claude.com/docs/en/statusline
- 跨 session 傳訊 - https://code.claude.com/docs/en/cross-session-messaging
- oh-my-zsh 的 robbyrussell 主題 - https://github.com/ohmyzsh/ohmyzsh/wiki/Themes#robbyrussell