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)。請僅在上述情境下使用跨會話訊息傳遞。


訊息是如何發送與傳遞的

  1. 發現 (Discovery) – Claude 調用 ListAgents 來尋找可連接的會話。
  2. 發送 (Sending) – Claude 調用 SendMessage 並帶上目標名稱和訊息文本。
  3. 傳遞 (Delivery) – 接收會話在當前回合處理訊息,或者在閒置時啟動新回合。
  4. 結果 (Outcome) – 入站控制決定訊息是被傳遞 (Delivered)暫存 (Held) 還是拒絕 (Refused)

已傳遞 的訊息會傳遞給接收端的 Claude,並像普通提示詞一樣計入使用量。暫存 的訊息會留在隊列中,直到您批准(或設定變更)。拒絕 的訊息會被靜默丟棄。


入站控制 (crossSessionInbound)

crossSessionInbound 設定決定了傳入訊息的預設處理方式:

行為
accept 所有訊息都會被傳遞。
hold 每條訊息都會觸發通知;您必須在傳遞前批准它。
refuse 訊息會被丟棄而不進行傳遞。

當沒有明確的設定值時,Claude 會回退到權限模式類別:

  • 繞過權限提示 的會話(例如 autoacceptEdits)會導致傳入訊息被暫存,除非發送端也繞過了權限。
  • 需要權限提示 的會話會立即傳遞訊息。

如果暫存的訊息被批准,它將被傳遞;如果過期(預設 5 分鐘)或您拒絕,它將被丟棄。一個會話最多可以暫存 100 條訊息;較舊的訊息會被捨棄。


跨機器訊息傳遞限制

目的地 傳輸方式 可以發送的內容
同一台機器 直接 Unix-domain socket 新訊息回覆
您的另一台機器 (Remote Control) Anthropic 伺服器 → Remote Control 僅限回覆
Web 版 Claude Code Anthropic 伺服器 僅限回覆

傳送到遠端機器的訊息是僅限回覆;會話無法與遠端對等端啟動新的對話。若要要求在任何跨機器訊息離開主機前進行明確批准,請設置 isolatePeerMachines=true


安全性與權限模型

  • 無隱含同意 – 傳入的訊息永遠不代表用戶的同意。它不能批准權限提示、更改設定檔或執行嵌入在文本中的命令。
  • 權限提示仍會觸發 – 如果根據訊息進行操作需要接收端會話所缺乏的權限,您會看到與任何其他操作相同的提示。
  • 工具拒絕 – 管理員可以透過在權限規則中拒絕 SendMessageListAgents 工具來完全封鎖訊息傳遞。
  • 潛在攻擊面 – 正如一位 Hacker News 評論者所指出的,如果配置錯誤,暴露訊息通道會增加遠端程式碼執行的向量。適當的入站控制 (crossSessionInbound=holdrefuse) 和 isolatePeerMachines 可以降低此風險。

管理會話與名稱

  • 使用 /list-agents (或 /peers) 查看可連接的會話及其名稱。
  • 會話是透過 /rename--name CLI 旗標設置的名稱來進行定址的。如果名稱衝突,Claude 會添加一個簡短的識別碼來進行區分。
  • 只有已綁定收件箱 socket 的會話會出現在列表中。處於 bare mode 的無頭 claude -p 會話不會綁定 socket,因此無法接收訊息。
  • 收件箱 socket 路徑透過 CLAUDE_CODE_MESSAGING_SOCKET 暴露,並顯示在 /statusPeer 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
  • 停止發送/列出 – 為 SendMessageListAgents 添加權限拒絕規則。
  • 全組織禁用 – 管理設定可以結合這兩種方法,確保沒有會話可以發送或接收訊息。

即使禁用,每個會話仍會綁定其收件箱 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_TRAFFICDISABLE_TELEMETRYDO_NOT_TRACKDISABLE_GROWTHBOOK 且其值會關閉底層旗標,則該功能將被禁用。

使用 /list-agents (或 /peers) 檢查會話。如果命令無法識別,則表示該會話缺少所需的版本或功能旗標。


限制

  • 僅支援純文字訊息;結構化團隊協定保留在代理團隊 (agent teams) 內部。
  • 訊息迴圈會受到限制:短時間內的相同重複訊息會被丟棄,且會話會將待處理訊息限制在 50 條。
  • 容器擁有隔離的文件系統;容器內的會話無法接觸到主機會話,除非它們共享同一個 socket 目錄。

總結

Claude Code 的跨會話訊息傳遞提供了一種輕量級、具備權限意識的方式,讓獨立的 Claude 會話能夠協調工作、分享發現並回報狀態,而無需手動複製貼上。透過配置入站控制、隔離旗標和權限規則,使用者可以在便利性與安全性之間取得平衡。

Sources

相關

  • Dispatch
  • Dispatch
  • Dispatch
  • 專案
  • 專案