蘋果環境

Claude Code

終端機的開發工具

在終端機裡讀檔、改程式、跑指令的開發工具。本篇主要是底部狀態列的設定,以及跨 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自動更新
Homebrewbrew install --cask claude-code不會自動更新,要自己 brew upgrade claude-code
npmnpm 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% usedcontext 已使用的比例依比例變色,見下表
· 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
  • 一開始做成顯示「剩餘」 - 實際用起來,「已使用」越大越危險比較直覺,就改掉了

相關參考