遙控與流動裝置
Control Center 是一款桌面應用程式,但它所追蹤的工作不會在你離開書桌時停下來。
遙控會把你的手機與你的 cc_server 配對,所用的是
Remote——位於 remote.usectrl.dev 的夥伴應用程式
——讓你可以從手機跟進機群:閱讀訊息與工單、回覆代理、整理你的資訊動態,而伺服器上
的音訊、轉錄、原始碼與憑證,始終不會離開伺服器。
不妨把它看成桌面主介面一個以讀取為主的夥伴。它並非用來取代完整的桌面用戶端。
手機經由 WebSocket 觸達 cc_server:可以是直接連線(回送、LAN、tailnet 或
wss://),也可以是訊號中介上需邀請才能加入的房間,由該中介轉發已密封的訊框。
這裏沒有點對點的資料通道。
手機可以做甚麼
標題為「手機可以做甚麼」的章節已配對的手機只能觸達伺服器介面中一小塊刻意劃定的範圍:
- 讀取工單、代理、空間及其訊息,以及你的資訊動態
- 回覆:在空間中傳送訊息、更新或指派工單、把文章標為已讀或已儲存
- 執行劇本:以參數實例化一個已儲存的計劃範本。它只會_提出_計劃;在操作人員 於完整用戶端的 Plan Studio 批准之前,不會有任何執行或花費
- 切換工作區,在手機自己的選擇器裏
差不多就是全部。相比完整用戶端,手機是權限較低的主體。它不能啟動程序、動用 LLM 預算、推送到 GitHub,也不能建立工作區。它是如何被真正強制執行而不只是設計 意圖,見存取模型。
連線是如何建立的
標題為「連線是如何建立的」的章節連線依托一條中介轉發的中繼:伺服器以房間擁有者的身分,加入 wss:// 中介上
一個需邀請才能進入的房間,而每個已配對的用戶端——桌面、Web、手機——都憑一個有
時限的准入權杖加入同一個房間。有三部分共同發揮作用:
| 組成部分 | 角色 |
|---|---|
| Remote(手機應用程式) | 夥伴 Web 應用程式,預設由 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。
負載有兩種形態,二者不可互換。由應用程式內配對面板簽發的手機二維碼,就是上述
指向 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. 手機屬於較低的工作階段層級」的章節除角色檢查之外,手機工作階段所帶的能力也低於桌面或 Web 工作階段。聲明為僅限完整 用戶端的操作,會在處理程式執行之前就對手機拒絕,無論其背後的使用者權限有多高: 簽發、列出、重新命名與撤銷裝置配對;讀取與設定隧道連線;伺服器備份與工作區 匯出/匯入;程序偵測與終止;配接器探測;伺服器設定;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) |
已配對的用戶端及其即時狀態,另有配對新用戶端(網頁瀏覽器、桌面應用程式或手機)與撤銷 |
同一個面板也會為第二個瀏覽器或桌面應用程式簽發配對,並不限於手機——流程完全相同, 只有深層連結不同。
另請參閱
標題為「另請參閱」的章節- 工作區與隔離:它所依托的每次呼叫範圍限定
- 多人協作——身分、成員身分與線上狀態:角色、成員身分與程式庫權限
- 部署與用戶端:遙控在各種用戶端層級中的位置
- 架構:遙控在技術堆疊中的位置
- 配對裝置