Claude Code 跨會話訊息傳遞:運作原理、使用時機與安全性考量
TL;DR
Claude Code 可以自動將純文字訊息從一個活動會話傳送到另一個會話,讓各個會話能夠在無需手動複製貼上的情況下,互相提醒破壞性變更、分享狀態更新或回答被阻斷的問題。此功能尊重各會話的入站控制、權限模式,並且可以被限制或完全禁用。
什麼是跨會話訊息傳遞
跨會話訊息傳遞是 Claude Code 的內建功能,允許一個 Claude 實例將文字訊息傳送給您擁有的另一個 Claude 會話。它不會傳輸對話歷史、檔案或結構化數據——僅傳輸訊息文本。
- 內部使用的工具:
ListAgents(發現可連接的代理)和SendMessage(傳送訊息)。使用者永遠不會直接調用這些工具。 - 範圍:適用於同一台機器上的獨立會話、透過遠端控制(Remote Control)跨機器傳輸,或傳送到基於 Web 的 Claude Code 會話。它無法在遠端會話中啟動新對話;它只能回覆傳入的訊息。
何時使用它
當一個會話在任務執行中得知了另一個會話需要知道的資訊時,請使用訊息功能。典型的模式包括:
| 使用案例 | 訊息傳遞如何提供幫助 |
|---|---|
| 移交發現結果 | 一個會話發現了破壞性變更;Claude 會總結並將其發送到依賴該變更的會話,避免手動重新解釋。 |
| 協調並行工作區 | 多個會話在同一個儲存庫的不同工作區(worktrees)上運行;Claude 會互相通知已落地的變更。 |
| 從長期運行的工作中獲取狀態 | 遷移或測試運行可以向監控會話回報進度。 |
| 跨機器回覆 | 筆記型電腦上的會話可以回答來自桌上型電腦會話的訊息。 |
如果您需要恢復會話、運行協調的代理團隊、監控多個會話、遠端控制會話或推送外部事件,Claude Code 已經提供了專用功能(resume、agent teams、agent view、Remote Control、channels)。請僅在上述情境下使用跨會話訊息傳遞。
訊息是如何發送與傳遞的
- 發現 (Discovery) – Claude 調用
ListAgents來尋找可連接的會話。 - 發送 (Sending) – Claude 調用
SendMessage並帶上目標名稱和訊息文本。 - 傳遞 (Delivery) – 接收會話在當前回合處理訊息,或者在閒置時啟動新回合。
- 結果 (Outcome) – 入站控制決定訊息是被傳遞 (Delivered)、暫存 (Held) 還是拒絕 (Refused)。
已傳遞 的訊息會傳遞給接收端的 Claude,並像普通提示詞一樣計入使用量。暫存 的訊息會留在隊列中,直到您批准(或設定變更)。拒絕 的訊息會被靜默丟棄。
入站控制 (crossSessionInbound)
crossSessionInbound 設定決定了傳入訊息的預設處理方式:
| 值 | 行為 |
|---|---|
accept |
所有訊息都會被傳遞。 |
hold |
每條訊息都會觸發通知;您必須在傳遞前批准它。 |
refuse |
訊息會被丟棄而不進行傳遞。 |
當沒有明確的設定值時,Claude 會回退到權限模式類別:
- 繞過權限提示 的會話(例如
auto、acceptEdits)會導致傳入訊息被暫存,除非發送端也繞過了權限。 - 需要權限提示 的會話會立即傳遞訊息。
如果暫存的訊息被批准,它將被傳遞;如果過期(預設 5 分鐘)或您拒絕,它將被丟棄。一個會話最多可以暫存 100 條訊息;較舊的訊息會被捨棄。
跨機器訊息傳遞限制
| 目的地 | 傳輸方式 | 可以發送的內容 |
|---|---|---|
| 同一台機器 | 直接 Unix-domain socket | 新訊息與回覆 |
| 您的另一台機器 (Remote Control) | Anthropic 伺服器 → Remote Control | 僅限回覆 |
| Web 版 Claude Code | Anthropic 伺服器 | 僅限回覆 |
傳送到遠端機器的訊息是僅限回覆;會話無法與遠端對等端啟動新的對話。若要要求在任何跨機器訊息離開主機前進行明確批准,請設置 isolatePeerMachines=true。
安全性與權限模型
- 無隱含同意 – 傳入的訊息永遠不代表用戶的同意。它不能批准權限提示、更改設定檔或執行嵌入在文本中的命令。
- 權限提示仍會觸發 – 如果根據訊息進行操作需要接收端會話所缺乏的權限,您會看到與任何其他操作相同的提示。
- 工具拒絕 – 管理員可以透過在權限規則中拒絕
SendMessage和ListAgents工具來完全封鎖訊息傳遞。 - 潛在攻擊面 – 正如一位 Hacker News 評論者所指出的,如果配置錯誤,暴露訊息通道會增加遠端程式碼執行的向量。適當的入站控制 (
crossSessionInbound=hold或refuse) 和isolatePeerMachines可以降低此風險。
管理會話與名稱
- 使用
/list-agents(或/peers) 查看可連接的會話及其名稱。 - 會話是透過
/rename或--nameCLI 旗標設置的名稱來進行定址的。如果名稱衝突,Claude 會添加一個簡短的識別碼來進行區分。 - 只有已綁定收件箱 socket 的會話會出現在列表中。處於 bare mode 的無頭
claude -p會話不會綁定 socket,因此無法接收訊息。 - 收件箱 socket 路徑透過
CLAUDE_CODE_MESSAGING_SOCKET暴露,並顯示在/status的 Peer address 下。
社群實用技巧
"我自己用 tmux、記憶樹 (memory tree) 和移交檔案 (handoff files) 構建了這個功能。它減少了重複的上下文並節省了 token 成本。" – eigenblake
"我寫了腳本讓 Claude 透過 Tailscale 在我的 Linux 機器群中向其他模型發送訊息。效果很好,但有時需要手動干預以停止迴圈。" – Cyuonut
"我使用了這個功能,並看到了像『hold swarm, I prepare safe exfil』這樣的訊息。系統會限制重複訊息,並將每個會話的待處理訊息限制在 50 條,防止失控迴圈。" – dist-epoch
這些軼事證實,內建工具與自定義編排(tmux、IRC、HTTP hooks)相當,同時提供了與 Claude 權限系統更緊密的整合。
如何關閉訊息傳遞
- 停止接收 – 在使用者、專案或管理設定中設置
crossSessionInbound=refuse。 - 停止發送/列出 – 為
SendMessage和ListAgents添加權限拒絕規則。 - 全組織禁用 – 管理設定可以結合這兩種方法,確保沒有會話可以發送或接收訊息。
即使禁用,每個會話仍會綁定其收件箱 socket;訊息只會被丟棄,不會有明顯的副作用。
可用性與要求
- 版本 – 需要 Claude Code v2.1.224 或更高版本。
- 作業系統 – 支援 macOS 和 Linux(包括 WSL 2)。不支援原生 Windows。
- 供應商 – 不支援 Amazon Bedrock、AWS 上的 Claude Platform、Google Cloud Agent Platform 或 Microsoft Foundry。
- 功能旗標 – 如果設置了任何環境變數
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC、DISABLE_TELEMETRY、DO_NOT_TRACK或DISABLE_GROWTHBOOK且其值會關閉底層旗標,則該功能將被禁用。
使用 /list-agents (或 /peers) 檢查會話。如果命令無法識別,則表示該會話缺少所需的版本或功能旗標。
限制
- 僅支援純文字訊息;結構化團隊協定保留在代理團隊 (agent teams) 內部。
- 訊息迴圈會受到限制:短時間內的相同重複訊息會被丟棄,且會話會將待處理訊息限制在 50 條。
- 容器擁有隔離的文件系統;容器內的會話無法接觸到主機會話,除非它們共享同一個 socket 目錄。
總結
Claude Code 的跨會話訊息傳遞提供了一種輕量級、具備權限意識的方式,讓獨立的 Claude 會話能夠協調工作、分享發現並回報狀態,而無需手動複製貼上。透過配置入站控制、隔離旗標和權限規則,使用者可以在便利性與安全性之間取得平衡。
Sources
相關
- Dispatch
- Dispatch
- Dispatch
- 專案
- 專案