aire.
·10 分鐘

同時開十幾個 Claude Code 時分頁標題分不出誰在等你,但 iTerm2 3.7 的面板預設會把等你的排到最上面

一個視窗裡兩個 Claude Code 分頁,一個卡在權限確認等你按同意,一個已經做完,標題前綴都是同一個 ✳。9 月 8 日發布的 iTerm2 3.7 帶著 Claude Code 整合,把每條 session 的狀態送進 Session Status 面板,預設把等你的那條排到最上面:9 月 9 日的一次實測裡,卡權限的排第一,做完的排第二。面板的範圍是一個視窗,跨視窗要另外開 Cockpit。Claude Code 在終端機裡的權限提示通知要等大約六秒沒打字才跳,claude agents 只列背景 session,三種解法各有缺口。

收進
本文涉及工具

事實分級:iTerm2 的功能描述來自 iterm2.com 的 Claude Code Integration、Session Status、Workgroups 三頁文件與 3.7 發布公告;Claude Code 的通知、分頁標題、claude agents 來自 code.claude.com 的文件與 CHANGELOG,都在 9 月 9 日重新核對過。標「一次實測」的段落是 9 月 9 日在一台 Mac 上用 iTerm2 3.7.0 與 Claude Code 2.1.266 開兩個 session 看到的畫面,一次觀察,不是通則。

一個視窗裡開著兩個 Claude Code 分頁。左邊那個已經做完,游標閃著等下一句話;右邊那個跳出權限確認,停在原地等人按同意。切回分頁列想找出哪一個在等,看到的標題是 ✳ Claude Code✳ Touch probe-waiting.txt,前綴同樣是 ✳(9 月 9 日的一次實測)。Claude Code 正在跑的時候,前綴會換成旋轉字元;那次畫面裡,卡權限和已經做完長得一模一樣。兩個分頁還能一個一個點進去看,一天開十幾個的人就不行了。

9 月 8 日發布的 iTerm2 3.7 帶著 Claude Code 整合,把每條 session 的狀態送進 Session Status 面板,補的正是排序這一步。同一次實測裡打開面板,卡權限的那條排在最上面:一個藍點,狀態寫 waiting,底下一行小字是 Allow Bash: touch probe-waiting.txt?,右側標著 ⌘2;先開、已經做完的那條排第二,綠點、idle⌘1。iTerm2 的 Session Status 文件把預設順序寫成「the default order is waiting, then working, then idle」。

面板管得到的範圍卻不大。Session Status 文件把它寫成一個視窗裡的每個 session,跨視窗得另外開 Cockpit。而 Claude Code 自己也備了兩套辦法——分頁標題配桌面通知,以及 claude agents 打開的 agent view。三種都有各自看不到的地方。

分頁標題只分忙與不忙,卡權限和做完都是同一個 ✳

Claude Code 的分頁標題是它自己寫上去的。CHANGELOG 看得到這條線怎麼長:2.1.6 把啟動時的終端機標題改成 Claude Code,2.1.81 修好標題沒跟著自動摘要更新,2.1.228 換掉忙碌時的旋轉字元以減少分頁列抖動。實測看到的就是這樣——剛開是 ✳ Claude Code,講過一輪話換成 ✳ Touch probe-waiting.txt,跑起來前綴變成 交替。

分得出忙與不忙。那次看到的畫面裡,分不出等你按權限,還是已經做完。

第二條線是桌面通知。終端機設定文件寫,Claude Code 預設只在三個終端機發:「only in Ghostty, Kitty, and iTerm2」。iTerm2 這邊還要去 profile 的 Terminal 分頁勾選通知中心提醒,再打開 escape sequence 產生的提醒。其他終端機得把 preferredNotifChannel 改成響鈴,或寫一支 Notification hook 把通知接出去。這些都是 Claude Code 自己的設定;換去 Codex 的人,切換時卡住的是另一件事

真正的限制在時間。hooks 文件寫,權限提示這一類通知跟桌面通知共用同一套時機,在終端機 session 裡,只有在「you appear to be away from the terminal」的時候才看得到;權限提示出現以後,要大約六秒沒打字才發,每按一次鍵就再往後延,閒置提示則落在 Claude 回答完大約 60 秒之後、而且同樣要你沒再打字。9 月 9 日的實測裡,權限提示跳出來幾秒後 macOS 才彈出通知,標題是 Alert,內文結尾寫著「Claude needs your permission」。

macOS 桌面通知,標題寫著 Alert,內文顯示某個 Claude Code 分頁需要權限

想在權限提示出現的當下就知道,hooks 文件給的做法是改用 PermissionRequest 事件(文件另註明,沙盒指令的網路請求那種提示不走這個事件);Notification hook 只做副作用,擋不掉也改不了通知本身。

在終端機 session 裡,這類通知只有你看起來離開終端機時才發。手一直放在鍵盤上、開著十幾個分頁的人,每敲一次鍵就把它再往後推,它幫得上的是離開位子的人。

claude agents 把等你的排最上面,但只看得到丟到背景的 session

Claude Code 另外開了一個畫面。agent view 文件第一句就把用途講完:一個畫面裝下背景 session 的三種狀態——在跑的、需要你輸入的、做完的。分組順序把需要輸入的往上抬,Ready for reviewNeeds input 排在 WorkingCompleted 上面。

畫面開著的時候,終端機分頁標題會顯示等待數量,agent view 文件寫成「2 awaiting input · claude agents」,沒有人在等就只剩 claude agents。回到一般的 claude session,提示列下方的箭頭提示會數還有幾個背景 agent 在等你,像 ← 2 agents,沒有人在等就回到 ← for agents,文件說焦點在終端機上時大約每 10 秒更新一次。9 月 9 日的實測畫面左下角看到的正是 ← for agents

缺口寫在同一頁文件上:「Interactive sessions you have open in other terminals don’t appear until you background them」。你在別的終端機開著、正盯著看的互動 session 不會進到 agent view,要先在裡面下 /bg,或在空的提示列按一次左箭頭把它丟到背景。丟過去之後,session 由另一個 supervisor 行程接手,終端機關掉也繼續跑;每一列那句一行摘要,文件說是 Haiku 級模型寫的。agent view 目前掛著研究預覽的標籤,文件明說介面和快捷鍵可能再變。

所以 agent view 是給「派出去就不回頭看」的工作方式用的。要是你的十幾個分頁全開著、隨時準備接話,把它們一個個 /bg 掉只是把問題換一個地方擺。

iTerm2 3.7 的面板把回報狀態的 session 排了序,一次只排一個視窗

先講面板怎麼認狀態。Claude Code Integration 文件分成三種:Claude 正在跑提示或工具是 working,需要你輸入、例如要你同意一次權限請求是 waiting,做完並等你下一句話是 idle。文件另外補一句,搭配較新版本的 Claude Code,只要它啟動的背景 agent 或背景任務還在跑,主對話中間空著也算 working

9 月 9 日的一次實測,畫面上是兩列。

iTerm2 Session Status 面板,上面一列是藍點的 waiting 狀態並顯示權限請求細節,下面一列是綠點的 idle 狀態

上面那列藍點、waiting,detail 那行直接寫出在等什麼:Allow Bash: touch probe-waiting.txt?,右側 ⌘2 是跳到那條 session 的快捷鍵,點一下整列也會跳過去。下面那列綠點、idle⌘1。detail 不只放權限請求——文件寫它也可能放 Claude 最後一則訊息的摘錄,另一輪測試裡對 idle 那條回了一個字,那列就顯示那個字。面板住在 toolbelt 裡,⌘⇧B 開關。

狀態同時也寫在分頁上。分頁標題底下多一行小字 waitingidle,旁邊一個圓點。

iTerm2 分頁列,分頁標題下方多出一行小字狀態與一個彩色圓點

排序規則寫在文件裡:需要注意的會浮到最上面,預設順序是 waitingworkingidle;齒輪設定裡有一張優先序清單可以自己改,決定哪些狀態關鍵字排最高。右鍵一列選 Snooze 會把它壓到分隔線底下並且變暗,等狀態下一次改變才自動解除;面板底部的鈴鐺按鈕打開狀態改變時通知。想連整個視窗一起盯,Window 選單的 Notify on Status Change(⇧⌘X)替目前視窗預約提醒,視窗裡任何一個 session 狀態一變就跳,提醒上的 Reveal 按鈕直接跳到變動的那條。

限制寫在 Session Status 文件裡:面板的範圍是「every session in a window」——一個視窗,不是一台電腦。要一次看完每個視窗,得開 Cockpit:Window 選單裡的 Cockpit,快捷鍵 ⌥⇧⌘C,Session Status 文件說它顯示的是每個視窗的狀態,「not just the front one」。9 月 9 日的實測裡,測試視窗的面板只列出同一個視窗的兩條,另外幾個視窗裡跑著的 Claude Code 沒進來;沒有把原因分離出來,只當一次觀察。

面板省掉的不是點擊,是「下一個該看哪一個」的判斷。

這套狀態機制不是為 Claude Code 做的。Session Status 文件列了三種設定狀態的方式——OSC 21337 控制序列、it2 session set-status 指令、Set Tab Status trigger;Claude Code 整合是目前文件裡列出的用戶,一個分頁一個分頁標出 Claude 在想、在等你、還是做完了。

三種解法擺在一起,缺口的位置各不相同。

解法 看得到哪些 session 等你的怎麼顯示 要先做什麼
Claude Code 分頁標題+桌面通知 每個分頁自己 等你和做完的前綴都是 ✳,同形;終端機 session 裡權限提示的通知要等大約六秒沒打字才跳 iTerm2 要在 profile 勾選通知中心提醒,再打開 escape sequence 提醒
claude agents 的 agent view 丟到背景的 session;互動 session 不列 需要輸入的分到最上面一組,分頁標題帶等待數 現有 session 先 /bg
iTerm2 3.7 的 Session Status 面板 同一個視窗裡有回報狀態的 session,不分互動或背景 藍點加 waiting,預設排最上面,旁邊寫在等什麼 裝整合、開 toolbelt;跨視窗改開 Cockpit

安裝精靈先把要改的五件事列出來,只有 Python API 是必要的

Claude Code Integration 文件把安裝會做的事列成五條:開啟 Python API、在 ~/.claude/settings.json 加上回報狀態給 iTerm2 的 hook、顯示 toolbelt 並開啟 Session Status、加一個 Claude Code Workgroup、在你挑的 profile 加上進出 Workgroup 的 trigger。文件接著寫,除了開啟 Python API 之外每一步都可以不做,macOS 也會在 API 打開前要求確認。

裝的時候看到的精靈就是五步排成一列,上面那排是進度指示、不是選項,Install Workgroup 那格一開始就打勾,第一眼容易以為視窗當掉了。最後一頁的按鈕是 Install 和 Close,選 Close 就是不裝自動進入,文件寫著還是可以從 Shell > Workgroups > Claude Code 手動進去。

settings.json 那一步是合併,不是覆蓋。

裝完之後檔案裡多出 10 個事件各一組 hook——SessionStart、SessionEnd、UserPromptSubmit、PreToolUse、PostToolUse、Stop、StopFailure、SubagentStop、Notification、PermissionRequest——全部指向同一支 ~/.config/iterm2/cc-status,都沒有設 matcher;另一輪安裝的觀察裡,原本就在的 hook 一條也沒被動到,整個檔案只是重新序列化了一次。

cc-status 是一個 symlink,指到 iTerm.app 裡的 utilities/cc-status;文件說 hook 指向的是設定目錄裡的穩定位置,升級或搬移 iTerm2 不會弄壞它。翻進去看,是含 x86_64 與 arm64 的 universal binary,codesign 的 TeamIdentifier 跟 iTerm.app 主程式相同;strings 掃過去,http:// 命中 0 次,看得到的是 PermissionRequestnotification_typewaitingworkingidle。找不到外連的跡象,看起來只跟本機的 iTerm2 講話。

hook 也可能自己消失。Claude Code Integration 文件直說:「Claude Code occasionally rewrites ~/.claude/settings.json and can drop the cc-status hook」,之後 iTerm2 會在下一次 Claude 跑起來時發現,並問你要不要重裝。沒裝整合的人也會被問一次——iTerm2 偵測到 Claude Code 在跑,文件說會跳一次橫幅:「Claude Code is running. Want to try the Claude Code integration?」,按 Try It Now 當場進去,按 Don't Show Again 就不再問。

撤掉也是一條選單。Uninstall Claude Code Integration 會把 settings.json 裡的 cc-status hook、設定裡的 Claude Code Workgroup,以及每個 profile 上的進出 trigger 一起拿掉;Python API 開著的話會另外問要不要留,理由是別的腳本可能已經依賴它。裝的時候 Python API 維持預設的需授權才能連線,沒有改成對所有 App 開放。

這個整合最值得抄的不是功能,是它先把要改的東西列出來、讓人一項一項選,最後留一個能收回去的按鈕。

Workgroup 多開一條 Code Review,額度也跟著多一份

Workgroup 是 iTerm2 從一個 session 長出一組相關 session 的做法:版面定義一次,進去時一次生出全部 Peer,離開就關掉它們、留下原本的主 session。Workgroups 文件裡作者寫得很直白,跑 Claude Code 這類助手時,他想要旁邊有兩個伴,一個顯示改動的即時 diff,一個專門做 code review。

Claude Code Workgroup 給的三個 Peer 就照這句話配:Chat 是主對話,Diff 顯示工作目錄改動的並排檢視,Code Review 專門審改動。Diff 那條有個講究——文件說它會等工作目錄裡真的有待處理的改動才跑,免得對著乾淨的樹開 diff 工具。Code Review 則是把你的審查要求當提示丟給 Claude,系統提示透過 --append-system-prompt 帶進去,審出來的發現寫進 Workgroup 共用的 Clippings 面板,同一組裡的其他 session 看到同一塊。

Peer 之間用 ⌥⇧⌘1⌥⇧⌘8 切換,或 ⌥⌘[⌥⌘] 前後跳。進出可以自動:claude 啟動時觸發進入,結束時觸發退出,而且退出只認主 session——只有主 session 的 claude 結束才會把整組收掉。兩個自動化開關預設都是關的,一個是閒置時自動送出 Clippings,一個是閒置時自動要求審查;自動要求審查那一項還要求整組裡剛好有一個 code review session。不想走自動,Shell > Workgroups > Claude CodeShell > Workgroups > Exit Workgroup 手動進出。

代價在另一個地方。Code Review 是另一條 claude,多開一個 session 就多一份用量;官方沒給用量數字。它的啟動方式是先跳一個提示框等你輸入審查指令、按 Start 才跑,除非把閒置時自動要求審查那個開關打開。要不要讓這條常態開著,先看自己的額度線還剩多少。

給非工程師的一句話

把電腦想成一個櫃台,上面開著十幾個窗口,每個窗口後面都有一個助理替你做事。以前想知道誰卡住了,只能一個窗口一個窗口走過去看:有的在忙,有的做完了在等你交代下一件事,還有的舉著一張單子等你簽名——可是從外面看,做完的和等你簽名的長得一樣。

現在櫃台門口多了一塊板子,照預設的順序把等你簽名的窗口排到最上面,旁邊還寫著在等你簽什麼。該走過去的窗口,一眼就看得到。

板子的限制也很單純:一次只掛在一間辦公室門口。你在另一間辦公室也開了幾個窗口,這塊板子看不到,要看得另外拿一塊掛在走廊上的大板子。

回到最前面那兩個分頁:標題前面掛著同一個符號,一個在等你按同意,一個什麼也不缺。符號一樣的時候,只能一個一個點開看是哪一種。板子做的事,就是把一樣的符號換成有先後的順序。

常見問題

Claude Code 本來就有「在等我」的通知嗎?

有,但在終端機 session 裡只有你看起來離開終端機時才發。官方終端機設定文件寫,桌面通知預設只在 Ghostty、Kitty、iTerm2 三個終端機發,iTerm2 還要在 profile 的 Terminal 分頁勾選通知中心提醒,再打開 escape sequence 產生的提醒。hooks 文件寫,在終端機 session 裡,權限提示的通知要等大約六秒沒打字才發,每按一次鍵就往後延;閒置提示大約落在回答結束後 60 秒,同樣要你沒再打字。想在權限提示出現的當下就收到,文件給的做法是自己寫一支 PermissionRequest hook。

iTerm2 3.7 的 Claude Code 整合改了電腦上的什麼、怎麼移除?

文件列出安裝會做五件事:開啟 Python API、在 ~/.claude/settings.json 加上回報狀態的 hook、顯示 toolbelt 並開啟 Session Status、加一個 Claude Code Workgroup、在你挑的 profile 加上進出 Workgroup 的 trigger;文件寫,除了開啟 Python API 之外每一步都可以不做。移除走 iTerm2 選單的 Uninstall Claude Code Integration,會拿掉 settings.json 裡的 cc-status hook、設定裡的 Workgroup,以及每個 profile 上的 trigger;Python API 開著的話會另外問你要不要留。

Session Status 面板看得到所有視窗的 session 嗎?

文件寫的是一個視窗。iTerm2 的 Session Status 文件把面板的範圍寫成一個視窗裡的每個 session,要一次看完每個視窗得改用 Cockpit——Window 選單裡的 Cockpit,快捷鍵 ⌥⇧⌘C,文件說它顯示的不只是最前面那個視窗。9 月 9 日的一次實測裡,測試視窗的面板只列出同一個視窗的兩條,其他視窗裡跑著的 Claude Code 沒有出現;沒有把原因分離出來,只當一次觀察,不當通則。

claude agents 跟 iTerm2 的面板差在哪?

兩邊預設都把等你輸入的排在最上面,但管的東西不一樣。agent view 的文件寫,你在別的終端機開著的互動 session 不會出現,要先在裡面下 /bg 把它丟到背景;丟過去之後由另一個 supervisor 行程接手跑,終端機關掉也繼續。iTerm2 的面板反過來,看的是同一個視窗裡有回報狀態的 session,不分互動或背景。文件另外標明 agent view 目前是研究預覽,介面與快捷鍵可能還會變。

📚 收進你的工具

For AI Reading Era

把這篇文章交給你日常用的工具——做研究、整理筆記,或當 AI 的 context。

 
延伸閱讀