部落格
超越 SSH:為什麼 WebSocket 更適合 AI 程式設計智能體
SSH 為互動式人工工作階段設計,AI 程式設計智能體需要不同的東西。這裡解釋 WebSocket 為何是更好的選擇。
繼續查看該欄目下的產品與工程更新。
瀏覽此分類「為什麼不直接 SSH 到 Mac?」——這是開發者第一次聽說從手機控制 Claude Code 時的典型反應。
SSH 成熟、安全、無處不在。但 AI 程式設計智能體的互動模式與互動式 Shell 有根本區別,這些差異疊加後會導致更差的體驗。
互動模型不匹配
SSH 設計於 1995 年,面向一種模型:人坐在終端機前,輸入指令,讀取輸出。工作階段是互動式同步的。
AI 程式設計智能體顛覆了這一模型:
| SSH(互動式 Shell) | AI 智能體控制 | |
|---|---|---|
| 工作階段時長 | 數分鐘到數小時的主動使用 | 數小時到數天,多為閒置監控 |
| 人類注意力 | 持續 | 間歇性——收到通知時查看 |
| 輸入模式 | 頻繁按鍵 | 偶爾提示 + 審批決策 |
| 輸出模式 | 回應你的指令 | 長時間自主輸出流,掃讀而非細讀 |
| 關鍵事件 | 你在盯著所以能看到 | 不盯著就可能錯過 |
問題 1:無推播通知
AI 程式設計的最佳工作流程是:發送任務 → 放下手機 → 收到完成通知 → 查看繼續。
SSH 無法做到第三步。SSH 協定沒有向行動裝置推播通知的機制。
WebSocket 方案: 伺服器監控 Claude Code 輸出和 hook 事件,偵測到完成或審批請求時,透過 WebSocket 推送結構化事件,iOS 應用將其轉為原生推播通知。
問題 2:iOS 背景行為
iOS 會積極暫停背景應用。SSH 用戶端進入背景約 30 秒後網路連線被中斷,重新開啟時「broken pipe」。Mosh 稍好但仍無法解決通知問題。
WebSocket 方案: 伺服器緩衝終端機輸出,不受用戶端連線狀態影響。iOS 應用回到前景後自動重連,多階段狀態恢復(0.2s、0.7s、1.5s),同時關鍵事件在應用暫停時也能以推播通知送達。
問題 3:工作階段狀態管理
多個並行任務時,SSH 需要手動 tmux attach -t session-a,逐個切換、檢查、中斷連線——在手機鍵盤上操作很痛苦。
WebSocket 方案: 伺服器將工作階段管理暴露為結構化命令。iOS 應用顯示工作階段清單和狀態,點擊切換,建立新工作階段時可瀏覽 Mac 檔案系統選擇路徑。
問題 4:智能體事件語意
SSH 傳輸原始位元組,不理解終端機中發生的事情。Claude Code 有 hook 系統在特定事件觸發指令碼,但 SSH 沒有乾淨的方式路由這些事件。
WebSocket 方案: 伺服器透過 HTTP POST 接收 hook 事件,解析、去重(3 秒視窗),透過同一 WebSocket 連線推送到 iOS 應用。一條連線,多種資料類型。
問題 5:認證與存取控制
SSH 認證在行動端使用不便:iOS 金鑰管理不方便、需要設定 sshd、連接埠轉送需要額外配置。
WebSocket 方案: Tactic Remote 使用 API Key 認證。區域網路連線 API Key 可選,Cloudflare Tunnel 連線必須。Mac 應用產生 32 字元隨機金鑰,透過 QR 碼傳輸。
SSH 仍然更好的情境
- 管理多台伺服器
- 需要檔案傳輸(SFTP/SCP)
- 使用非 Claude 工具
- 需要連接埠轉送
- 合規要求 SSH
架構圖
關於 Mosh
Mosh 使用 UDP 改善了行動 SSH 體驗(網路漫遊、連線持久性、本機回顯),但仍不解決核心問題:無推播通知、無智能體事件感知、無結構化工作階段管理。
結論
問題不是「SSH 還是 WebSocket」的抽象協定對比,而是「你的工作流程需要什麼互動模型」。
管理伺服器和執行互動命令,SSH 是正確的協定。控制一個自主執行的 AI 智能體、需要間歇性關注和推播通知,專為此設計的 WebSocket 架構能解決 SSH 無法解決的問題。