遠端控制與行動裝置
Control Center 是一款桌面應用程式,但它所追蹤的工作不會在你離開書桌時停下來。
遠端控制會用位於 remote.usectrl.dev 的伴侶應用程式
Remote,把你的手機與你的 cc_server 配對,讓
你可以從手機跟上機群:閱讀訊息與工單、回覆代理、整理你的新聞動態,而伺服器上的
音訊、逐字稿、原始碼與憑證,永遠不會離開伺服器。
不妨把它想成主介面上一個以讀取為主的伴侶。它並不是要取代完整的桌面用戶端。
傳輸方式
標題為「傳輸方式」的章節手機透過 WebSocket 觸達 cc_server:可以是直接連線(回送、LAN、tailnet 或
wss://),也可以是信令仲介上需邀請才能加入的房間,由該仲介轉送密封的訊框。
這裡沒有點對點的資料通道。
手機能做什麼
標題為「手機能做什麼」的章節已配對的手機只能觸達伺服器介面中一小塊刻意劃定的範圍:
- 讀取工單、代理、空間及其訊息,以及你的新聞動態
- 回覆:在空間中傳送訊息、更新或指派工單、把文章標示為已讀或已儲存
- 執行 Playbook:以參數具現一個已儲存的計畫範本。它只會_提出_計畫;在操作 人員於完整用戶端的 Plan Studio 中核准之前,不會有任何執行或花費
- 切換工作區,在手機自己的選擇器中
差不多就是全部了。相較於完整用戶端,手機是權限較低的主體。它不能啟動行程、 動用 LLM 預算、推送到 GitHub,也不能建立工作區。它是如何被真正強制執行、而不只是 設計意圖,請見存取模型。
連線是如何建立的
標題為「連線是如何建立的」的章節連線依托一條仲介式中繼:伺服器以房間擁有者的身分,加入 wss:// 仲介上一個
需邀請才能進入的房間,而每個已配對的用戶端——桌面版、網頁版、手機——都憑一個有
時限的准入權杖加入同一個房間。共有三個部分共同運作:
| 組成部分 | 角色 |
|---|---|
| Remote(手機應用程式) | 伴侶網頁應用程式,預設託管於 remote.usectrl.dev,也可自行託管。它在瀏覽器中載入,並把配對記錄保存在 IndexedDB 中。 |
| 中繼仲介 | 一條無狀態的 wss:// 中繼(cc_signaling_server),託管 N 方房間。它只承載不透明的訊框:每個負載都在手機與伺服器之間端到端密封,因此仲介永遠看不到應用程式資料或配對密鑰,也從不解讀它所轉送的內容。 |
cc_server |
房間的擁有者。它透過其他所有用戶端所用的同一個派送器,回應手機的呼叫。 |
一次配對邀約會帶上一個連線描述元,列出通往伺服器的每一條路徑(LAN、tailnet、
公開的 wss://、中繼),以及伺服器的身分指紋。手機的解析器會挑選最佳的可達路徑,
並在首次連線時釘選該指紋(TOFU);即使沒有任何直接路徑,中繼也能保證連通性,同時
始終無法讀取流量。
配對負載是什麼
標題為「配對負載是什麼」的章節配對由應用程式簽發,並以深層連結的形式交付;程序請見 配對裝置。這裡重要的是它的結構。
https://<pwa-host>/#<payload>負載位於 URL 的片段,也就是 # 之後、瀏覽器從不傳送給伺服器的那一段,因此
PWA 的 HTTPS 主機永遠看不到它。它帶著手機觸達伺服器並證明自身身分所需的一切:
連線描述元(每一條路徑加上身分指紋)、一個新簽發的裝置 ID、一個 32 位元組的
預共享金鑰,以及一個到期時間戳。手機會將它解碼、在本機儲存配對記錄,並移除片段,
讓密鑰離開 URL。
負載有兩種形態,而且不可互換。從應用程式內配對面板簽發的手機 QR 碼,就是
上面那種指向 Remote PWA 主機的 v2 PairingPayload。cc_server pair --client-url
發出的是另一種較舊的 v1 連結({s, i, k} —— 伺服器 URL、裝置 ID、金鑰),
只供 Web 用戶端使用。
兩者的有效期也不同,這一點很容易搞錯:
| 簽發方式 | 憑證到期時間 |
|---|---|
應用程式內配對面板(pairing.mint) |
一律 30 天 |
命令列上的 cc_server pair |
無 —— 憑證不會到期 |
存取模型
標題為「存取模型」的章節已配對的裝置是已驗證但不受信任的。數道各自獨立的關卡,讓一次獲准(或外洩) 的配對不會變成對伺服器的完全控制。
1. 邊界在於成員資格,而非配對
標題為「1. 邊界在於成員資格,而非配對」的章節有效的配對金鑰只能證明你是_哪一台裝置_。你可以讀取或變更什麼,取決於你的工作區 角色——每一次呼叫都會重新解析——以及任何會揭露儲存庫內容的操作上依儲存庫授予 的權限。一台持有完全有效金鑰、但所屬使用者並非所指名工作區成員的裝置,會被拒絕, 並回覆「Not a member of this workspace」。
角色下限由操作的種類推導而來,除非操作自行宣告:讀取需要 guest,變更需要
member,破壞性操作需要 admin。
2. 手機屬於較低的工作階段層級
標題為「2. 手機屬於較低的工作階段層級」的章節除了角色檢查之外,手機工作階段所帶的能力也低於桌面版或網頁版工作階段。宣告為 僅限完整用戶端的操作,會在處理常式執行之前就對手機拒絕,無論其背後的使用者權限有 多高:簽發、列出、重新命名與撤銷裝置配對;讀取與設定通道連線;伺服器備份與工作區 匯出/匯入;行程偵測與終止;配接器探測;伺服器設定;SSO 管理;機群控制;以及 接管或交回正在執行的代理。
3. 預設拒絕的工具允許清單
標題為「3. 預設拒絕的工具允許清單」的章節具體到 MCP 工具介面(tools/call),哪些工具可由手機叫用,是由一份預設拒絕的
允許清單決定。未列入清單的工具會在執行之前被拒絕。這份清單以讀取與觀察為主,另加
少量僅限本機的寫入——一則訊息、一次工單更新、一個文章標記——它們不消耗
LLM 預算、不啟動行程,也不接觸任何外部系統。
例如會被拒絕的:向代理諮詢、啟動 AI 審查、終止代理、把審查發布到 GitHub、聘用或 解僱代理、建立工作區。
4. 每次呼叫的工作區範圍限定
標題為「4. 每次呼叫的工作區範圍限定」的章節伺服器不保存任何「目前工作區」。它在設計上是無狀態的:每個以工作區為範圍的
呼叫,都必須在自己的引數中指名目標 workspace_id,而當這個引數缺失、或指名的是
一個伺服器並未註冊的工作區時,派送器會直接拒絕該呼叫——這發生在任何資料庫被開啟
之前。因此手機永遠無法繼承或漂移到另一個用戶端的範圍,指名一個外來的工作區也幫
不上忙,因為第 1 道關卡的成員資格檢查仍然適用。這與產品其餘部分所強制執行的
工作區隔離是同一項不變式。
5. 以預共享金鑰為金鑰的端到端密封訊框
標題為「5. 以預共享金鑰為金鑰的端到端密封訊框」的章節手機與伺服器之間的每一個訊框,都以配對金鑰密封;准入權杖只是讓用戶端進入房間, 它不解密任何東西。仲介轉送的只有密文,永遠看不到金鑰。已撤銷的裝置會發現自己的 憑證早已消失,因此重新連線時會失效即關閉。
由應用程式簽發的憑證有時限,為 30 天;超過期限後,連線關卡會判定它失效,手機 必須重新配對。撤銷是即時的:伺服器會監看裝置表,並在數秒內中斷已撤銷裝置的現有 工作階段,而不是等它下次連線。
6. 依主體限制速率
標題為「6. 依主體限制速率」的章節滑動視窗限速器把遠端工具流量限制在每分鐘 120 次呼叫,並對變更類動詞再加上一個更 緊的每分鐘 30 次上限。這份額度屬於主體,而不是工作階段:你的三台裝置共用 同一份額度,因此被劫持的用戶端無法靠開更多工作階段換取餘裕,一個吵鬧的成員也無法 讓其他人挨餓。
7. 什麼也學不到的仲介
標題為「7. 什麼也學不到的仲介」的章節中繼仲介刻意保持笨拙:它託管房間、轉送密封訊框,不保存任何帳戶、應用程式資料或 金鑰。房間需邀請才能加入,而且是暫時性的。應用程式資料、音訊、逐字稿、原始碼與 憑證全都留在伺服器上。
即時更新
標題為「即時更新」的章節配對之後,手機會以通知訊框的形式收到即時更新——新的代理訊息、指派給你的工單、 狀態變更——與桌面版自己的通知如出一轍。伺服器會把這些訊框廣播給每個已連線的 工作階段,而工作區篩選是在用戶端套用,因此你看到的內容會被限縮在你正在查看的那個 工作區。
所在位置
標題為「所在位置」的章節| 介面 | 顯示內容 |
|---|---|
設定 → 你 → 你的裝置(/workspaces/:workspaceId/settings/you/devices) |
已配對的用戶端及其即時狀態,另有配對新用戶端(網頁瀏覽器、桌面應用程式或手機)與撤銷 |
同一個面板也會為第二個瀏覽器或桌面應用程式簽發配對,並不只限於手機——流程完全 相同,只有深層連結不同。
另請參閱
標題為「另請參閱」的章節- 工作區與隔離:它所依賴的逐次呼叫範圍限定
- 多人協作——身分、成員資格與線上狀態:角色、成員資格與儲存庫權限
- 部署與用戶端:遠端控制在各用戶端層級中的位置
- 架構:遠端控制在技術堆疊中的位置
- 配對裝置