部落格
Tactic Remote 背後的架構:打造分散式程式開發平台
我們如何設計一個系統,讓 Mac 成為唯一的事實來源,同時讓 iPhone 上的每次互動都感覺即時。
繼續查看該欄目下的產品與工程更新。
瀏覽此分類打造遠端開發平台在紙面上聽起來很簡單:在一台機器上執行程式碼,在另一台上顯示。但實際上,工程挑戰層層疊疊。每一毫秒的延遲都會侵蝕信任。每一次斷線都可能導致工作遺失。每一個安全上的便宜行事都可能招來災難。
本文將逐步介紹 Tactic Remote 的架構——我們所做的決策、接受的取捨,以及指導我們技術方向的原則。
核心問題
開發者越來越依賴像 Claude Code 這樣的 AI 輔助程式開發工具,但這些工具被綁定在桌面終端機上。你無法離開桌子而不失去對 AI 助手正在做什麼的掌握。Tactic Remote 就是為了解決這個問題而存在:你的 Mac 仍然是執行引擎,而 iPhone 成為一等的控制介面。
挑戰在於讓這一切感覺無縫,而不是像笨重的遠端桌面工作階段。
分層架構
Tactic Remote 建構在四個獨立的層級上,每個層級都有清晰的職責邊界:
第一層:執行引擎(Mac)
基礎層是您的 Mac 在 tmux session 中執行 Claude Code。我們刻意選擇 tmux——它提供了處理程序持久性、session 多工處理,以及一個廣為人知的程式化終端機控制介面。Mac companion app 管理 tmux 生命週期、監控 session 健康狀態,並為上游消費者提供輕量級的 HTTP API。
此層級的關鍵設計決策:
- 處理程序隔離:每個 Claude Code session 在自己的 tmux 視窗中執行,防止專案之間的交叉污染。
- 狀態持久性:tmux session 在應用程式重啟、網路斷線甚至系統睡眠週期後仍能存活。
- 最小資源佔用:companion app 在閒置時增加的 CPU 和記憶體開銷微乎其微。
第二層:傳輸層
在您的 Mac 和 iPhone 之間是傳輸層——透過區域網路直接連線或 Cloudflare Tunnel 進行遠端存取。
區域網路模式 使用 mDNS/Bonjour 進行裝置探索,並使用直接 HTTP 進行資料傳輸。在良好的網路環境下,這能實現低於 10ms 的往返時間,讓終端機串流感覺即時。
Cloudflare Tunnel 模式 透過 Cloudflare 的邊緣網路路由流量。這會增加延遲(通常 30-80ms),但能從任何地方存取——咖啡廳、通勤列車或全球各地。我們在 Mac 端利用 Cloudflare 的 cloudflared 守護程式,它建立的是只出不進的連線,意味著不需要在防火牆上開放任何連接埠。
第三層:Session 管理器
Session 管理器是整個系統的大腦。它在 Mac 上執行,維護活躍 tmux session 的註冊表、追蹤它們的狀態(閒置、執行中、等待輸入),並處理重新連線的複雜協調工作。
當您的 iPhone 在網路中斷後重新連線時,session 管理器必須在毫秒內回答幾個問題:
- 斷線前哪些 session 是活躍的?
- 在中斷期間是否有終端機輸出累積?
- 是否有任何 session 正在等待使用者核准敏感操作?
- 每個 Claude Code 實例目前的處理程序狀態是什麼?
我們透過 事件溯源(將狀態轉換記錄為不可變事件)和 快照快取(定期捕捉終端機緩衝區狀態以快速恢復)的組合來解決這個問題。
第四層:行動端介面
iPhone 應用程式刻意 不是 一個終端機模擬器。我們在早期就做了決定,在手機螢幕上塞入完整終端機會創造糟糕的使用者體驗。相反,行動端層提供:
- 對話檢視:以易讀的格式查看 Claude 的推理過程和輸出。
- 終端機預覽:在需要時快速瀏覽原始終端機輸出。
- 核准控制:一鍵核准/拒絕需要人類確認的操作。
- 通知橋接:針對任務完成和核准請求的推播通知。
韌性模式
現實世界的網路是不可靠的。手機在電梯中失去訊號。在房間之間走動時 Wi-Fi 會斷線。我們的韌性策略建立在三個原則之上:
假設斷線是正常的。 每個元件都被設計為在網路分區期間能獨立運作。Mac 繼續執行。iPhone 快取最後已知的狀態。重新連線觸發狀態調和協議,而非完全重啟。
絕不遺失工作。 終端機輸出在 Mac 端進行緩衝,可設定保留時間。即使您的 iPhone 離線一小時,重新連線後也能看到發生的一切。
明確呈現錯誤。 當出現問題時,使用者會看到誠實的錯誤訊息,而非永遠轉不停的載入動畫。我們大量投入在連線狀態指示器上,確保它們能在數秒內反映真實狀況。
安全性設計
遠端執行 AI 生成的程式碼引發了嚴肅的安全問題。我們的安全模型在 Security Model 文件中有深入說明,但架構上的重點包括:
- 零信任傳輸:所有通訊都經過加密,無論是區域網路(TLS)還是通道(Cloudflare 的加密層)。
- 核准閘門:敏感操作(檔案寫入、shell 指令、網路存取)在執行前需要明確的行動端核准。
- 無雲端依賴:您的程式碼永遠不會離開您的 Mac。Tactic Remote 是控制平面,而非資料平面。
下一步
架構永遠不會完成。我們正在積極開發多 Mac 支援(一部 iPhone 連接多台開發機器)、協作式 session(多位團隊成員監控同一個 Claude Code 執行)以及更深度的 IDE 整合。每一項都需要擴展架構,同時不影響我們已建立的可靠性。
如果您正在建構分散式開發者工具,希望這個概述對您有所幫助。如果您想親身體驗這個架構,從這裡開始。