返回列表

部落格

Tactic Remote 背後的架構:打造分散式程式開發平台

我們如何設計一個系統,讓 Mac 成為唯一的事實來源,同時讓 iPhone 上的每次互動都感覺即時。

發布於 標籤: engineering / architecture / deep-dive
部落格

繼續查看該欄目下的產品與工程更新。

瀏覽此分類

打造遠端開發平台在紙面上聽起來很簡單:在一台機器上執行程式碼,在另一台上顯示。但實際上,工程挑戰層層疊疊。每一毫秒的延遲都會侵蝕信任。每一次斷線都可能導致工作遺失。每一個安全上的便宜行事都可能招來災難。

本文將逐步介紹 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 守護程式,它建立的是只出不進的連線,意味著不需要在防火牆上開放任何連接埠。

┌─────────────┐         ┌──────────────────┐         ┌─────────────┐
│   iPhone    │◄───────►│  Transport Layer  │◄───────►│     Mac     │
│  (Control)  │   HTTP  │  Local / CF Edge  │   HTTP  │ (Execution) │
└─────────────┘         └──────────────────┘         └─────────────┘

第三層:Session 管理器

Session 管理器是整個系統的大腦。它在 Mac 上執行,維護活躍 tmux session 的註冊表、追蹤它們的狀態(閒置、執行中、等待輸入),並處理重新連線的複雜協調工作。

當您的 iPhone 在網路中斷後重新連線時,session 管理器必須在毫秒內回答幾個問題:

  1. 斷線前哪些 session 是活躍的?
  2. 在中斷期間是否有終端機輸出累積?
  3. 是否有任何 session 正在等待使用者核准敏感操作?
  4. 每個 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 整合。每一項都需要擴展架構,同時不影響我們已建立的可靠性。

如果您正在建構分散式開發者工具,希望這個概述對您有所幫助。如果您想親身體驗這個架構,從這裡開始。

立即體驗 Tactic Remote

用手機遠端操作程式開發 Agent

連線到 Mac、Windows 或 Linux 電腦上的 Claude Code、Codex 等 Agent,在 iPhone 或 iPad 上查看進度並傳送下一個請求。