---
read_when:
    - 你想要透過瀏覽器操作閘道
    - 你想在不使用 SSH 通道的情況下存取 Tailnet
sidebarTitle: Control UI
summary: 閘道的瀏覽器控制介面（聊天、活動、節點、設定）
title: 控制介面
x-i18n:
    generated_at: "2026-07-14T14:05:39Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 25
    provider: openai
    source_hash: 4974d8b0e6f2db068632b2aa31c3712d6a86d52516653f2c311c6cdf856e8989
    source_path: web/control-ui.md
    workflow: 16
---

Control UI 是由閘道提供服務的小型 **Vite + Lit** 單頁應用程式：

- 預設值：`http://<host>:18789/`
- 選用前綴：設定 `gateway.controlUi.basePath`（例如 `/openclaw`）

它會透過相同連接埠，**直接連線至閘道 WebSocket**。

## 快速開啟（本機）

如果閘道在同一台電腦上執行，請開啟 [http://127.0.0.1:18789/](http://127.0.0.1:18789/)（或 [http://localhost:18789/](http://localhost:18789/)）。

如果頁面無法載入，請先啟動閘道：`openclaw gateway`。

<Note>
在原生 Windows LAN 綁定中，即使 `127.0.0.1` 可在閘道主機上運作，Windows 防火牆或組織管理的群組原則仍可能封鎖公告的 LAN URL。請在 Windows 主機上執行 `openclaw gateway status --deep`；它會回報可能遭封鎖的連接埠、設定檔不相符，以及原則可能忽略的本機防火牆規則。
</Note>

驗證會在 WebSocket 交握期間透過下列方式提供：

- `connect.params.auth.token`
- `connect.params.auth.password`
- 當 `gateway.auth.allowTailscale: true` 時的 Tailscale Serve 身分標頭
- 當 `gateway.auth.mode: "trusted-proxy"` 時的受信任 Proxy 身分標頭

儀表板設定面板會保留目前瀏覽器分頁工作階段的權杖與所選的閘道 URL；密碼不會持久保存。首次連線時，初始設定通常會產生用於共享密鑰驗證的閘道權杖，但當 `gateway.auth.mode` 為 `"password"` 時，也可使用密碼驗證。

## 裝置配對（首次連線）

從新的瀏覽器或裝置連線時，通常需要**一次性配對核准**，顯示為 `disconnected (1008): pairing required`。

<Steps>
  <Step title="列出待處理的要求">
    ```bash
    openclaw devices list
    ```
  </Step>
  <Step title="依要求 ID 核准">
    ```bash
    openclaw devices approve <requestId>
    ```
  </Step>
</Steps>

如果瀏覽器使用變更後的驗證詳細資料（角色／範圍／公開金鑰）重試配對，先前待處理的要求會被取代，並建立新的 `requestId`；請在核准前重新執行 `openclaw devices list`。

將已配對的瀏覽器從讀取存取權切換為寫入／管理員存取權，會視為核准升級，而不是無提示地重新連線：OpenClaw 會維持舊核准有效、封鎖權限更廣的重新連線，並要求你明確核准新的範圍集合。

核准後，裝置會被記住，除非你使用 `openclaw devices revoke --device <id> --role <role>` 撤銷，否則不需要重新核准。如需權杖輪替、撤銷，以及 Paperclip／`openclaw_gateway` 首次執行核准流程，請參閱[裝置命令列介面](/zh-TW/cli/devices)。

<Note>
- 直接從本機回送位址連線的瀏覽器（`127.0.0.1`／`localhost`）會自動獲准。
- 當 `gateway.auth.allowTailscale: true`、Tailscale 身分驗證通過，且瀏覽器出示其裝置身分時，Tailscale Serve 可讓 Control UI 操作員工作階段略過配對來回流程。沒有裝置身分的瀏覽器及節點角色連線仍會遵循一般裝置檢查。
- 直接 Tailnet 綁定、LAN 瀏覽器連線，以及沒有裝置身分的瀏覽器設定檔仍需要明確核准。
- 每個瀏覽器設定檔都會產生唯一的裝置 ID，因此切換瀏覽器或清除瀏覽器資料後都必須重新配對。

</Note>

## 配對行動裝置

已配對的管理員可以建立 iOS／Android 連線 QR Code，而不必開啟終端機：

<Steps>
  <Step title="開啟行動裝置配對">
    選取 **Devices**，然後在 **Devices** 卡片中按一下 **Pair mobile device**。
  </Step>
  <Step title="連接手機">
    在 OpenClaw 行動應用程式中，開啟 **Settings** → **Gateway** 並掃描 QR Code。也可以改為複製並貼上設定碼。
  </Step>
  <Step title="確認連線">
    官方 iOS／Android 應用程式會自動連線。如果 **Pending approval** 顯示要求，請在核准前檢查其角色與範圍。
  </Step>
</Steps>

建立設定碼需要 `operator.admin`；沒有該權限的工作階段會停用按鈕。設定碼包含短效的啟動認證資訊，因此在有效期間，請將 QR Code 與複製的程式碼視同密碼。若要進行遠端配對，閘道必須解析為 `wss://`（例如透過 Tailscale Serve/Funnel）；純 `ws://` 僅限回送位址與私人 LAN 位址。如需完整的安全性與後援詳細資訊，請參閱[配對](/zh-TW/channels/pairing#pair-from-the-control-ui-recommended)。

## 個人身分（瀏覽器本機）

Control UI 支援每個瀏覽器各自的個人身分（顯示名稱與頭像），並將其附加至送出的訊息，以便在共用工作階段中標示來源。這些資料存放於瀏覽器儲存空間中，範圍限定於目前的瀏覽器設定檔，不會同步到其他裝置，也不會在伺服器端持久保存；唯一例外是你所傳送訊息中的一般逐字稿作者中繼資料。清除網站資料或切換瀏覽器會將其重設為空白。

助理頭像覆寫也遵循相同的瀏覽器本機模式：上傳的覆寫會在本機疊加於閘道解析的身分之上，且絕不會透過 `config.patch` 往返傳輸。共用的 `ui.assistant.avatar` 設定欄位仍可供直接寫入該欄位的非 UI 用戶端使用。

## 執行階段設定端點

Control UI 會從 `/control-ui-config.json` 擷取其執行階段設定，並以閘道的 Control UI 基底路徑為基準解析（例如基底路徑 `/__openclaw__/` 下的 `/__openclaw__/control-ui-config.json`）。該端點受到與其餘 HTTP 介面相同的閘道驗證保護：未驗證的瀏覽器無法擷取，而且成功擷取需要有效的閘道權杖／密碼、Tailscale Serve 身分或受信任 Proxy 身分。

## 閘道主機狀態

在簡易檢視中開啟 **Settings**，即可查看 **Gateway Host** 卡片，其中包含閘道機器、LAN 位址、作業系統、執行階段、運作時間、CPU 負載、記憶體及狀態磁碟區磁碟空間。卡片顯示時，會每 10 秒透過 `system.info` 閘道 RPC 重新整理，而這需要 `operator.read` 範圍。較舊的閘道以及沒有該範圍的連線不會顯示此卡片。

## 語言支援

Control UI 首次載入時，會根據你的瀏覽器地區設定自動本地化。若要稍後覆寫，請開啟 **Settings -> General -> Language**（選擇器位於 General 快速設定卡片中，而不是 Appearance 之下）。

- 支援的地區設定：`en`、`ar`、`de`、`es`、`fa`、`fr`、`hi`、`id`、`it`、`ja-JP`、`ko`、`nl`、`pl`、`pt-BR`、`ru`、`th`、`tr`、`uk`、`vi`、`zh-CN`、`zh-TW`
- 非英文翻譯會在瀏覽器中延遲載入。
- 所選地區設定會儲存在瀏覽器儲存空間中，並在日後造訪時重複使用。
- 缺少的翻譯鍵會回退至英文。

文件翻譯也會針對相同的非英文地區設定集合產生，但文件網站內建的 Mintlify 語言選擇器只會列出 Mintlify 接受的地區設定代碼。泰文（`th`）與波斯文（`fa`）文件仍會在發布儲存庫中產生；在 Mintlify 支援這些代碼之前，它們可能不會出現在該選擇器中。

## 外觀主題

Appearance 面板內建 Claw、Knot 與 Dash 主題（預設為 Claw），另有一個僅限瀏覽器本機的 tweakcn 匯入欄位。若要匯入主題，請開啟 [tweakcn 編輯器](https://tweakcn.com/editor/theme)，選擇或建立主題、按一下 **Share**，然後將複製的連結貼到 Appearance 中。匯入工具也接受 `https://tweakcn.com/r/themes/<id>` 登錄 URL、如 `https://tweakcn.com/editor/theme?theme=amethyst-haze` 的編輯器 URL、相對 `/themes/<id>` 路徑、原始主題 ID，以及如 `amethyst-haze` 的預設主題名稱。

匯入的主題只會儲存在目前的瀏覽器設定檔中；不會寫入閘道設定，也不會跨裝置同步。替換匯入的主題會更新該本機欄位；如果匯入的主題為使用中，清除後會切換回 Claw。

Appearance 另有僅限瀏覽器本機的文字大小設定，與其餘 Control UI 偏好設定一起儲存。它會套用至聊天文字、撰寫器文字、工具卡片及聊天側邊欄，並讓文字輸入框至少維持 16px，避免行動版 Safari 在取得焦點時自動縮放。

## 管理外掛

開啟側邊欄中的 **Plugins**，或使用相對於已設定 Control UI
基底路徑的 `/settings/plugins`，即可在不離開
Control UI 的情況下瀏覽及管理外掛。例如，基底路徑
`/openclaw` 會使用 `/openclaw/settings/plugins`。
即使所有選用外掛都已停用，此頁面仍隨時可用。

Plugins 是包含四個分頁的中樞：**Installed** 與 **Discover** 會在
`/settings/plugins` 管理外掛程式碼；**Skills** 會在
`/skills` 提供個別代理程式的技能管理員；而 **Workshop** 會在
`/skills/workshop` 提供 Skill Workshop 提案審查。每個分頁都會保留自己的
URL，而側邊欄會為所有分頁顯示單一 Plugins 項目。

**Installed** 分頁會依類別顯示完整的本機清單，
並提供概覽數量。每一列都可開啟詳細資料檢視；其溢位（`…`）選單可
啟用或停用外掛，並為外部安裝的外掛提供 **Remove**。
它也會列出已設定的 [MCP 伺服器](/zh-TW/cli/mcp)，並支援直接加入、停用
及移除。**Discover** 分頁是商店：其中包含
OpenClaw 隨附的精選外掛、官方外部外掛，以及適用於熱門服務的一鍵式 MCP 連接器。
在搜尋方塊中輸入內容會直接查詢
[ClawHub](https://clawhub.ai/plugins)，並附加 **From ClawHub**
區段，其中包含下載次數與來源驗證徽章。深層連結可使用
`/settings/plugins?tab=discover` 直接指向商店。

**Skills** 分頁會保留技能狀態報告、啟用／停用切換、API
金鑰輸入，以及內嵌 ClawHub 技能搜尋，範圍限定於所選代理程式。
**Workshop** 分頁會保留 Skill Workshop 看板與 Today 審查流程，用於
[技能提案](/zh-TW/tools/skill-workshop)。**Find skill ideas** 會從最新到最舊，
審查一定範圍內具實質內容的工作階段，並將所有結果保留為
待處理提案。面板會顯示累計涵蓋範圍；**Scan earlier work**
會從持久保存的游標繼續，較舊的歷史記錄全部掃描完畢後，
就會變成 **Scan new work**。停用自主自我學習時，
仍可進行手動歷史記錄審查，並使用所選代理程式設定的模型。

隨附的外掛已存在於閘道上，並會顯示 **Enable** 或
**Disable**，而不是 **Install**。例如，Workboard 隨
OpenClaw 提供，但預設停用，因此其動作為 **Enable**。內建外掛
無法移除，只能停用。

讀取目錄及搜尋 ClawHub 需要 `operator.read`。安裝、
啟用、停用或移除外掛，以及變更 MCP 伺服器，都需要
`operator.admin`；這些動作對唯讀操作員維持停用狀態。

ClawHub 安裝會透過閘道執行，並採用與其他閘道媒介安裝相同的信任、完整性
及外掛安裝原則檢查。安裝或移除外掛程式碼需要重新啟動閘道。
若外掛及目前的閘道執行階段支援，啟用或停用已安裝的外掛可在
不重新啟動的情況下生效；否則 UI 會回報需要重新啟動。
以 OAuth 為基礎的 MCP 連接器在加入後，需要從命令列介面執行一次
`openclaw mcp login <name>`。

此頁面刻意聚焦於清單、探索、安裝、啟用
及移除。若要使用任意 npm、git 或本機路徑來源、進行更新及進階外掛設定，
請使用 [`openclaw plugins`](/zh-TW/cli/plugins)。

## 側邊欄導覽

側邊欄會將導覽列固定在可捲動的工作階段清單上方。在多代理程式設定中，每個代理程式都會顯示為可收合的頂層區段；展開代理程式即可瀏覽其工作階段，而不會離開目前開啟的聊天，收合的代理程式則會顯示未讀指示。每個代理程式的清單會分為：**已釘選**、每個已連線頻道各自的內建區段（Telegram、Slack、WhatsApp 等）、供繫結至受管理工作樹或執行節點之工作階段使用的內建 **工作** 區段（資料列會顯示一行 `repo ⎇ branch` 以及節點主機）、自訂群組（工作階段 `category`），以及容納其餘項目的 **聊天**。頻道與工作區段會自動分類資料列；將工作階段指派至自訂群組一律具有優先權。開啟工作階段只會移動選取醒目提示，不會重新排序資料列。自上次讀取後有新活動的工作階段會顯示未讀圓點，開啟後即標示為已讀。每個工作階段資料列都有內容選單（烤肉串按鈕或按右鍵），其中包含釘選／取消釘選、標示為未讀／已讀、重新命名、分支、移至群組（包括新增群組及從群組移除）、封存及刪除；觸控版面會讓直接釘選與選單控制項保持可見。按住 Cmd/Ctrl 並按一下可切換資料列的多重選取狀態，按住 Shift 並按一下則會依可見順序延伸選取範圍；接著在已選取的資料列上開啟選單，便會提供批次動作（將 N 個項目標示為未讀／已讀、將 N 個項目移至群組、封存 N 個項目、刪除 N 個項目），並套用至所有已選取的工作階段，而批次刪除只需確認一次。將工作階段拖曳至自訂群組或 **聊天** 即可移動。自訂群組標頭可以收合、展開或透過拖曳重新排序；群組名稱及其順序會儲存在閘道中（`sessions.groups.*`），因此可跨瀏覽器同步，而收合狀態則保留在瀏覽器設定檔中。群組標頭也有內容選單（烤肉串按鈕或按右鍵），其中包含重新命名群組、新增群組及刪除群組；重新命名或刪除群組時，伺服器端會更新每個成員工作階段，包括已封存的工作階段，而刪除群組會保留其中的工作階段，並將其移回聊天。工作階段清單標頭中唯一的 **+** 會開啟新增工作階段頁面（見下文）。排序控制項也有「分組方式」切換選項：分組（預設）或無，後者會顯示單一扁平清單（已釘選仍維持獨立）；此選擇會儲存在目前的瀏覽器設定檔中。**用量**、**自動化**及**外掛**預設會釘選；**更多**資料列會開啟包含所有其他目的地的選單，其中也包括外掛提供的分頁。在該選單中選取 **編輯釘選項目**，或在導覽區域按右鍵，即可釘選或取消釘選目的地，以及還原預設值。釘選集合會儲存在目前的瀏覽器設定檔中，並在重新載入後保留。

## 新增工作階段頁面

側邊欄工作階段清單標頭中的 **+** 會在 `/new` 開啟全頁草稿：在你傳送第一則訊息前，不會建立任何項目。訊息方塊上方的目標資料列可選擇工作階段的運作位置：代理程式（多代理程式設定）、執行作業的運行位置（**閘道 · 本機**，或公開 `system.run` 的已配對節點；需要 `operator.admin`）、資料夾（預設為代理程式工作區；其他絕對閘道路徑需要 `operator.admin` 及工作樹），以及選用的 **工作樹** 切換開關與基礎分支選擇器（由 `worktrees.branches` 提供，因此不會執行擷取），另可選填工作樹名稱（分支會變成 `openclaw/<name>`）。資料夾方塊的瀏覽按鈕會開啟由僅限管理員使用的 `fs.listDir` 方法提供支援的行內目錄選擇器。其頂層會顯示閘道與每個已知節點；離線節點及不支援目錄瀏覽的節點仍會顯示，但處於停用狀態。選取閘道後，會從目前資料夾或閘道主目錄開始瀏覽。選取具備所需功能的節點後，會瀏覽該節點的主機檔案系統、將執行作業繫結至該節點，並直接使用所選取的絕對節點路徑（受管理工作樹仍僅限閘道使用）。提交時會使用第一則訊息呼叫 `sessions.create`，因此執行作業會在同一次往返中開始，使用者介面則會跳至新工作階段的聊天。如果閘道建立了工作階段，但拒絕該次首次傳送，聊天會在重新載入後保留提示詞與錯誤；**重試**會透過已建立的工作階段傳送訊息，而不會再建立另一個工作階段。

在 **Settings** 中，專用側邊欄的開頭設有 **Search settings** 欄位，可快速尋找設定區段。

側邊欄頂端的 **Search** 欄位會開啟命令選擇區（⌘K）。按一下側邊欄標頭中的 OpenClaw 品牌，即會開啟簡潔的「新增工作階段」起始畫面。當有事項需要處理時（例如失敗或逾期的排程工作、即將到期或已到期的模型驗證），側邊欄頁尾上方會顯示精簡的提醒標籤，按一下即可前往相應頁面。頁尾會以標籤顯示作用中的代理程式，包括頭像（身分圖片或表情符號）、名稱、連線狀態點及即時副標題，旁邊另有 **+** 可建立新工作階段。按一下該標籤會開啟代理程式選單，其中包含代理程式切換器（多代理程式設定）、「這個代理程式能做什麼？」、**代理程式設定**、**設定**、行動裝置配對、**文件**、建置版本標籤，以及色彩模式切換開關。代理程式超過十個時，清單會顯示篩選欄位，並優先列出已釘選的代理程式；可從「代理程式設定」頁面釘選或取消釘選代理程式，釘選項目會儲存在瀏覽器設定檔中。選擇代理程式後，「聊天」、「用量」、「自動化」、「任務」、「工作看板」及「工作階段」都會限定於該代理程式。每個限定範圍的頁面都提供 **代理程式** 控制項，並可選擇 **所有代理程式** 以解除限制；這會擴大共用頁面的範圍，但不會變更實際的聊天代理程式，而工作階段的直接連結仍會開啟其目標。代理程式設定頁面會保留自己的 `?agent=` 選取項目，不會跟隨共用頁面的範圍。當閘道從原始碼簽出版本執行，且所在分支不是 `main` 時，頁尾也會以紅色顯示該分支名稱，讓使用者一眼就能看出這是非發行版本的閘道（發行版安裝絕不會顯示）。按 Shift-Command-Comma 可開啟 **設定**，且不會覆寫瀏覽器的 Command-Comma 快捷鍵。側邊欄標頭也包含收合切換按鈕（⌘B）；收合後會完全隱藏側邊欄，提供全寬工作區，而浮動的展開控制項（或 ⌘B）可將其恢復；macOS 應用程式則改為在標題列原生提供此切換按鈕。側邊欄是桌面版唯一的導覽介面，不設頂端列。狹窄的檢視區會將側邊欄替換為滑入式抽屜，並在精簡標頭列後方提供抽屜切換按鈕、品牌及命令選擇區搜尋；在 macOS 應用程式中，該標頭列會將標題列的預留空間整合成位於視窗控制項旁的單一精簡橫條。導覽使用一般瀏覽器歷程記錄，因此可使用瀏覽器的上一頁／下一頁按鈕巡覽；macOS 應用程式還會在視窗控制項旁新增原生側邊欄切換按鈕，並支援觸控式軌跡板滑動手勢。側邊欄展開時，其右側邊緣會顯示上一頁／下一頁按鈕；收合時則會顯示原生搜尋（命令選擇區）及新增工作階段按鈕。

## 目前可執行的功能

<AccordionGroup>
  <Accordion title="聊天與語音交談">
    - 透過閘道 WS 與模型聊天（`chat.history`、`chat.send`、`chat.abort`、`chat.inject`）。
    - 重新整理聊天記錄時，會請求有界限的近期時間窗，並限制每則訊息的文字長度，因此大型工作階段不會迫使瀏覽器在聊天可用前先轉譯完整的對話記錄承載資料。
    - 將滑鼠停留在公開的 GitHub 議題或提取要求連結上，或使用鍵盤將焦點移至該連結時，會顯示其狀態、標題、作者、近期活動、留言及變更統計資料。已連線的閘道會擷取並快取公開中繼資料，而不會變更連結目標，即使使用者介面使用遠端閘道亦同。閘道會先確認儲存庫為公開，再於可用時使用 `GH_TOKEN` 或 `GITHUB_TOKEN`；否則會使用 GitHub 的匿名 API，並採用較長的快取時間。
    - 透過瀏覽器即時工作階段進行語音交談。OpenAI 使用直接 WebRTC，Google Live 透過 WebSocket 使用受限的單次瀏覽器權杖，而僅限後端的即時語音外掛則使用閘道轉送傳輸。由用戶端擁有的供應商工作階段以 `talk.client.create` 啟動；閘道轉送工作階段則以 `talk.session.create` 啟動。轉送機制會將供應商認證資訊保留在閘道上，同時瀏覽器透過 `talk.session.appendAudio` 串流麥克風 PCM，透過 `talk.client.toolCall` 轉送 `openclaw_agent_consult` 供應商工具呼叫，以套用閘道政策及使用已設定的較大型 OpenClaw 模型，並透過 `talk.client.steer` 或 `talk.session.steer` 路由作用中執行的語音引導。
    - 在聊天中串流工具呼叫及即時工具輸出卡片（代理程式事件）。工具活動會依類型顯示為不同的列：殼層命令會顯示經語法醒目提示的命令及終端機樣式輸出；支援的編輯與寫入呼叫會顯示有界限的行內差異、可用時顯示行號，以及 `+added -removed` 統計資料；連續呼叫則會收合為摘要，例如「執行了 13 個命令、讀取了 6 個檔案、編輯了 9 個檔案」。執行進行中時，最新執行中的呼叫名稱會作為群組標頭。展開任一列即可檢查其餘引數及原始輸出。
    - 可選擇讓 AI 為複雜的工具呼叫產生用途標題（較長的殼層命令、引數繁多的外掛工具），使用 `gateway.controlUi.toolTitles: true` 啟用（預設關閉）。標題會透過標準公用模型路由，由批次 `chat.toolTitles` 方法產生：明確設定的 `utilityModel`（由操作人員選擇的供應商，與其他公用工作相同），否則使用工作階段供應商所宣告的預設小型模型，並由閘道依各代理程式進行快取。未啟用此選項或沒有可用的低成本模型時，各列會保留其確定性標籤，且不會呼叫模型。
    - 啟動或略過模型建議的暫時性後續任務；接受建議後，會以建議的提示詞開啟全新的受管理工作樹工作階段。
    - 活動分頁會根據現有的 `session.tool`／工具事件傳遞，在瀏覽器本機提供以遮蔽為優先的即時工具活動摘要。

  </Accordion>
  <Accordion title="頻道、工作階段、記憶">
    - 頻道：內建及隨附／外部外掛頻道的狀態、QR 登入，以及各頻道的設定（`channels.status`、`web.login.*`、`config.patch`）。
    - 頻道探測重新整理時，會在速度較慢的供應商檢查完成前繼續顯示先前的快照；若探測或稽核超過其 UI 時間預算，則會標示部分完成的快照。
    - 工作階段（位於 **代理程式與工具** 下的設定頁面，`/settings/sessions`）：預設列出已設定代理程式的工作階段、釘選常用工作階段、重新命名、封存或還原非使用中的工作階段、在未設定代理程式的工作階段金鑰失效時使用備援，並套用各工作階段的模型／思考／快速／詳細／追蹤／推理覆寫（`sessions.list`、`sessions.patch`）。已釘選的工作階段會排在最近但未釘選的工作階段之前；已封存的工作階段位於「工作階段」頁面的封存檢視中，並保留其對話記錄。對於自上次讀取後有活動的工作階段，資料列會顯示未讀圓點，並提供標示為未讀／已讀的動作（`sessions.patch { unread }`），以及將對話記錄分支為新工作階段的「分支」動作（`sessions.create { parentSessionKey, fork: true }`）。表格上方的總覽資訊方塊會彙總已載入的名冊（工作階段數、即時執行數、未讀工作階段數、權杖總數）；每個資料列都會顯示類型圖示，若有即時執行則附帶圓點；狀態會呈現為純圓點加上標籤；當工作階段回報權杖數與內容窗口大小時，「權杖」欄會顯示內容窗口用量計量表。資料列管理動作位於各資料列的選單中（三點按鈕或按右鍵），與側邊欄的工作階段選單一致；資料列抽屜則會連同其他工作階段詳細資料，顯示代理程式執行階段與執行持續時間。
    - 工作階段分組：「分組依據」控制項可依自訂群組、頻道、類型、代理程式或日期，將工作階段表格整理成多個區段。自訂群組會透過 `sessions.patch`（`category`）按工作階段保存，因此從訊息頻道（Discord、Telegram、WhatsApp 等）啟動的工作階段也能分類；可將資料列拖曳到區段上，或使用各資料列的群組選擇器來指派群組，並可透過「新增群組」動作建立群組。
    - 記憶（「代理程式」頁面中的分頁，範圍限定為所選代理程式）：夢境整理狀態、啟用／停用切換開關，以及「夢境日記」閱讀器（`doctor.memory.status`、`doctor.memory.dreamDiary`、`config.patch`）。
    - 匯入記憶（位於 **代理程式與工具** 下的設定頁面，`/settings/memory-import`）：預覽本機 Codex 彙整記憶或 Claude Code 自動記憶，並將其複製到所選代理程式工作區（`migrations.memory.plan`、`migrations.memory.apply`）。

  </Accordion>
  <Accordion title="排程、任務、外掛、Skills、裝置、執行核准">
    - 自動化（排程工作）：「自動化數量」、「失敗數量」、「排程器狀態」、「下次喚醒」統計卡片位於「自動化／執行記錄」分頁切換器上方；「自動化」分頁會在可篩選的表格中列出工作（全部／使用中／已暫停、搜尋、排程與上次執行篩選器、各資料列的動作選單），下方附有入門建議；「執行記錄」分頁則顯示所有自動化最近的執行（`cron.*`）。
    - 任務：即時顯示使用中及最近的背景任務清冊，包含連結的工作階段與取消功能（`tasks.*`）。
    - 外掛：瀏覽已安裝清單和精選商店、搜尋 ClawHub、安裝及移除外掛程式碼，以及啟用或停用已安裝的外掛（`plugins.*`）；MCP 伺服器資料列會透過設定方法編輯 `mcp.servers`。
    - Skills：狀態、啟用／停用、安裝、API 金鑰更新（`skills.*`）。
    - 裝置：單一清單會整合已配對的裝置記錄、節點目錄及即時上線狀態（`device.pair.list`、`node.list`、`system-presence`）。閘道主機會固定顯示於最前方；已配對的用戶端會顯示連線狀態、角色、權杖、功能及命令。重複的配對會收合成可展開的群組，而 **清理 N 個過時項目** 會大量移除經管理員確認已離線的重複項目；這些項目須為自動核准（靜默本機、受信任的 CIDR 或經 SSH 驗證）或早於核准來源記錄。可移除項目（`node.pair.remove`、`device.pair.remove`）、直接處理裝置配對及節點重新核准（`device.pair.*`、`node.pair.approve`/`reject`），並從同一張卡片建立行動裝置設定碼。
    - 執行核准：編輯閘道或節點允許清單，以及 `exec host=gateway/node` 的詢問原則（`exec.approvals.*`）。

  </Accordion>
  <Accordion title="設定">
    - 檢視／編輯 `~/.openclaw/openclaw.json`（`config.get`、`config.set`）。
    - 代理程式：具有各代理程式分頁（總覽、檔案、工具、Skills、頻道、自動化、記憶）的設定頁面（**設定 → 代理程式**，`/settings/agents`）。「總覽」分頁可編輯代理程式的身分識別，包括顯示名稱、表情符號，以及在 `agents.update` 前於瀏覽器中縮小並限制大小的頭像圖片。儲存時會保存已設定的身分識別欄位，並將其同步至工作區的 `IDENTITY.md`；已設定的值優先於對相同檔案欄位的手動編輯。
    - 個人檔案：顯示預設代理程式身分識別的設定頁面，並提供所有期間的使用統計資料，包括歷來權杖數、尖峰日、最長工作階段、活動連續天數、全年度權杖熱度圖、最常用工具及頻道重點（`usage.cost`、`sessions.usage`）。
    - MCP 有專用的設定頁面，提供唯讀伺服器資料列（傳輸方式、啟用狀態、OAuth／篩選器／平行處理摘要）、常用操作員命令，以及限定範圍的 `mcp` 設定編輯器；新增、啟用／停用及移除伺服器則在「外掛」頁面進行。
    - 模型供應商：列出所有已設定模型供應商的設定頁面，包含其品牌圖示、驗證狀態（`models.authStatus`）、模型可用性（`models.list`）、供應商有回報時的即時方案／配額／帳務資料（`usage.status`），以及過去 30 天的本機工作階段支出（`sessions.usage`）。「重新整理」動作會重新讀取認證資訊狀態及供應商用量。
    - 連線：位於 **連線** 下的設定頁面，負責儀表板本身的閘道連結，包括 WebSocket URL、閘道權杖、密碼及預設工作階段金鑰，以及最新的交握快照（狀態、運作時間、計時週期、上次頻道重新整理）。離線登入閘門會處理中斷連線的情況；此頁面則可在已連線時編輯連線。
    - 經驗證後套用並重新啟動（`config.apply`），接著喚醒最後使用中的工作階段。
    - 寫入時包含基底雜湊防護，避免覆蓋同時進行的編輯。
    - 寫入（`config.set`/`config.apply`/`config.patch`）會預先檢查已提交設定承載資料中參照的使用中 SecretRef 是否能解析；提交的使用中參照若無法解析，會在寫入前遭到拒絕。
    - 表單儲存時，會捨棄無法從已儲存設定還原的過時遮蔽預留位置，同時保留仍對應至已儲存密鑰的遮蔽值。
    - 結構描述與表單呈現來自 `config.schema` / `config.schema.lookup`，包括欄位 `title`/`description`、相符的 UI 提示、直屬子項摘要、巢狀物件／萬用字元／陣列／組合節點上的文件中繼資料，以及可用時的外掛與頻道結構描述。只有快照能安全地進行原始資料來回轉換時，原始 JSON 編輯器才可用；否則控制介面會強制使用「表單」模式。
    - 原始 JSON 編輯器的「重設為已儲存內容」會保留以原始資料撰寫的形態（格式、註解、`$include` 版面配置），而非重新呈現扁平化快照；因此，當快照能安全地來回轉換時，外部編輯可在重設後保留。
    - 結構化 SecretRef 物件值會在表單文字輸入欄位中以唯讀方式呈現，以防意外發生物件轉字串的資料損毀。

  </Accordion>
  <Accordion title="用量">
    - 從工作階段衍生的權杖與預估成本分析，會與供應商帳務分開處理。
    - 供應商卡片會呼叫 `usage.status`，並顯示已設定供應商外掛回報的即時方案名稱、配額週期、餘額、支出及預算。
    - 供應商用量查詢失敗不會阻止工作階段／成本儀表板運作；無法使用的供應商卡片會顯示各自的錯誤狀態。

  </Accordion>
  <Accordion title="偵錯、日誌、更新">
    - 偵錯：狀態／健康情況／模型快照、事件日誌，以及手動 RPC 呼叫（`status`、`health`、`models.list`）。
    - 事件日誌包含控制介面重新整理／RPC 計時、速度較慢的聊天／設定呈現計時，以及當瀏覽器提供相關 PerformanceObserver 項目類型時，長時間動畫影格或長時間任務的瀏覽器回應性項目。
    - 日誌：即時追蹤閘道檔案日誌，並提供篩選／匯出功能（`logs.tail`）。
    - 更新：執行套件／Git 更新及重新啟動（`update.run`），並提供重新啟動報告；接著在重新連線後輪詢 `update.status`，以驗證執行中的閘道版本。

  </Accordion>
  <Accordion title="自動化面板注意事項">
    - 選取資料列會開啟完整頁面的詳細資料檢視，頁首提供「使用中／已暫停」切換開關和「立即執行」（其選單中包含到期時執行、複製和移除）；「設定」分頁可直接編輯自動化（提示詞、詳細資料、頻率、進階覆寫），「執行記錄」分頁則顯示該自動化的執行。
    - 表格下方的入門自動化項目，會以可編輯的提示詞和排程預先填入建立表單。
    - 對於隔離任務，傳送方式預設為宣告摘要；若僅供內部執行，請切換為「無」。
    - 選取宣告時，會顯示頻道／目標欄位。
    - 網路鉤子模式使用 `delivery.mode = "webhook"`，且 `delivery.to` 須設為有效的 HTTP(S) 網路鉤子 URL。
    - 對於主要工作階段任務，可使用網路鉤子和「無」傳送模式。
    - 進階編輯控制項包括執行後刪除、清除代理程式覆寫、排程精確／錯開選項、代理程式模型／思考覆寫，以及盡力傳送切換開關。
    - 表單驗證會直接顯示各欄位的錯誤；修正前，無效值會停用儲存按鈕。
    - 設定 `cron.webhookToken` 以傳送專用的不記名權杖；若省略，網路鉤子將不含驗證標頭。
    - `cron.webhook` 是已淘汰的舊版備援：執行 `openclaw doctor --fix`，將仍使用 `notify: true` 的已儲存工作遷移至明確的各工作網路鉤子或完成傳送。

  </Accordion>
</AccordionGroup>

## 匯入助理記憶

開啟 **設定** → **匯入記憶**，將本機 Codex 或 Claude Code 記憶匯入 OpenClaw 代理程式。閘道會自行探索其主機上支援的本機記憶，因此遠端控制介面會從閘道電腦匯入，而不是從瀏覽器電腦匯入。

1. 選擇目的地代理程式。
2. 檢視偵測到的來源集合和 Markdown 檔名。檔案內容不會在計畫回應中傳送，也不會顯示於頁面。
3. 選取要匯入的集合並確認。套用會在寫入前重建計畫，讓過時的選取項目安全地失敗。
4. 若檔案已存在，請啟用 **取代現有匯入項目**、重新整理預覽，然後確認取代。

Codex 僅匯入其彙整的 `MEMORY.md` 和 `memory_summary.md`。Claude Code 會從專案自動記憶目錄和已設定的 `autoMemoryDirectory` 匯入 Markdown；此頁面不會匯入工作階段、設定、指示或認證資訊。檔案會複製到所選工作區的 `memory/imports/` 下，供使用中的記憶外掛建立索引。來源永遠不會變更。

規劃與套用需要 `operator.admin`。每次套用時，若存在狀態，皆會建立經過驗證的
OpenClaw 備份、寫入已遮蔽敏感資訊的移轉報告，並在取代現有目的地檔案前保留
項目層級的備份。路徑與
記憶回想行為請參閱[記憶體概覽](/zh-TW/concepts/memory#import-from-coding-assistants)。

## MCP 頁面

專用的 MCP 頁面是供操作者檢視 OpenClaw 所管理之 MCP 伺服器的介面，這些伺服器位於 `mcp.servers` 下。此頁面本身不會啟動 MCP 傳輸；請用它檢查及編輯已儲存的設定，並在需要即時伺服器驗證時使用 `openclaw mcp doctor --probe`。

一般工作流程：

1. 從側邊欄開啟 **MCP**。
2. 查看摘要卡片中的伺服器總數、已啟用、OAuth 及已篩選數量。
3. 檢視每個伺服器資料列的傳輸方式、啟用狀態、驗證、篩選器、逾時及命令提示。
4. 在 **外掛**頁面上管理伺服器（新增、啟用／停用、移除）；該頁面是 `mcp.servers` 唯一的互動式寫入介面，而此處的資料列清單會連結至該頁面。
5. 編輯具範圍限定的 `mcp` 設定區段，以設定伺服器定義、標頭、TLS/mTLS 路徑、OAuth 中繼資料、工具篩選器及 Codex 投影中繼資料。
6. 使用**儲存**寫入設定；若應讓執行中的閘道套用變更後的設定，則使用**儲存並發布**。
7. 從終端機執行 `openclaw mcp status --verbose`、`openclaw mcp doctor --probe` 或 `openclaw mcp reload`，以進行靜態診斷、即時驗證或清除快取的執行階段。

此頁面會在呈現前遮蔽 URL 類型值中包含的認證資訊，並在命令片段中以引號括住伺服器名稱，確保複製的命令即使包含空格或 shell 中繼字元仍可正常運作。完整的命令列介面與設定參考：[MCP](/zh-TW/cli/mcp)。

## 活動分頁

活動分頁位於**設定 › 系統**，在記錄與偵錯旁邊。它是瀏覽器本機的暫時性即時工具活動觀察器，衍生自與聊天工具卡片相同的閘道 `session.tool`／工具事件串流。它不會新增其他閘道事件系列、端點、持久性活動儲存區、指標動態消息或外部觀察器串流。

活動項目只會保留經過清理的摘要，以及已遮蔽敏感資訊並截短的輸出預覽。工具引數值不會儲存在活動狀態中；UI 會顯示引數已隱藏，並只記錄引數欄位數量。記憶體內的清單會跟隨目前的瀏覽器分頁，在控制 UI 內導覽時仍會保留，並在重新載入頁面、切換工作階段或按下**清除**時重設。

## 操作者終端機

可停駐的操作者終端機預設為停用。若要啟用，請設定 `gateway.terminal.enabled: true` 並重新啟動閘道。終端機需要 `operator.admin` 連線，並會在使用中代理程式的工作區內開啟主機 PTY。新分頁會跟隨目前選取的聊天代理程式。

<Warning>
終端機是不受限制的主機 shell，並會繼承閘道程序環境。請只在受信任的操作者部署環境中啟用。OpenClaw 會拒絕為使用 `sandbox.mode: "all"` 的代理程式建立終端機工作階段；將使用中的代理程式變更為該模式，會關閉其現有及進行中的終端機工作階段。
</Warning>

使用 **Ctrl + 反引號**切換停駐區。版面配置支援停駐於底部或右側、隨瀏覽器檢視區調整大小，並可保留多個 shell 分頁。如需 `gateway.terminal.enabled` 與選用的 `gateway.terminal.shell` 覆寫設定，請參閱[閘道設定](/zh-TW/gateway/configuration-reference#gateway)。

在工作階段側邊欄中探索到的 Codex 與 Claude Code 工作階段，可在同一個終端機面板內以其原生命令列介面開啟。在**設定 › 聊天**中，將**開啟 Codex/Claude 工作階段的位置**設為**終端機**，即可讓一般的資料列點擊動作開啟 `codex resume` 或 `claude --resume`；預設仍為唯讀的 OpenClaw 檢視器。資料列的右鍵選單或烤肉串選單一律會提供這兩個選項；當該工作階段符合資格時，檢視器標頭也會包含**在終端機中開啟**。

資格會依各工作階段及各主機判定。閘道本機工作階段會在閘道主機上啟動由提供者擁有的繼續命令。配對節點工作階段會在所屬節點上啟動允許清單中的提供者命令，且只轉送該 PTY 的輸出、輸入及調整大小事件；這不會暴露一般節點 shell，也不會接受瀏覽器提供的命令。未公布相符終端機繼續命令的節點，包括不支援雙向串流的嵌入式工作節點橋接器，仍可使用檢視器，並會顯示無法開啟終端機。

工作階段可在中斷連線後繼續存在：重新載入頁面、筆記型電腦進入睡眠或短暫網路中斷時，工作階段會在閘道上中斷連結，而不會遭到終止；同一個瀏覽器分頁重新連線時會重新連結，並重播最近的輸出。中斷連結的工作階段會在 `gateway.terminal.detachedSessionTimeoutSeconds` 後遭到終止（預設為 300 秒；`0` 會還原為中斷連線時終止）。`terminal.list` 會顯示可連結的工作階段，`terminal.attach` 會接管其中一個工作階段（類似 tmux 的接管方式），而 `terminal.text` 則會在不連結的情況下，以純文字讀取工作階段最近的輸出，供代理程式／工具使用。

終端機也可透過 `/?view=terminal` 以全螢幕、僅含終端機的文件形式使用。iOS 與 Android 應用程式會在其終端機畫面中嵌入此頁面，並重複使用已儲存的閘道認證資訊；可用性遵循相同的 `gateway.terminal.enabled` 與 `operator.admin` 閘門，且在所連線的閘道未提供終端機時，頁面會顯示通知。

## 瀏覽器面板

控制 UI 隨附可停駐的瀏覽器面板，可在任何一般網頁瀏覽器中呈現由閘道控制的瀏覽器（也就是代理程式透過[瀏覽器工具](/zh-TW/tools/browser-control)操控的同一個瀏覽器），不需要原生 WebView。當所連線的閘道向 `operator.admin` 連線公布 `browser.request` 時，此面板便會出現；工作階段工作區欄中的地球按鈕可切換其顯示狀態。面板會顯示即時頁面快照，並提供分頁、可編輯的 URL 列、上一頁／下一頁／重新載入及在你的瀏覽器中開啟等功能；它可停駐於右側或底部，並將點擊、滾輪捲動及基本輸入轉送至遠端頁面。

兩種擷取模式可為代理程式封裝頁面內容：

- **註記（鉛筆）**：在頁面上手繪標記。**傳送至聊天**會將筆畫合成至螢幕截圖、把圖片附加至使用中的聊天編輯器，並預先填入說明頁面 URL、標題及每個已標示區域的提示，讓代理程式確切知道你圈選了哪些部分。
- **檢查（指標）**：將游標懸停以查看游標下方的元素（選取器、無障礙名稱、角色、大小）；按一下即可透過相同的編輯器流程，傳送該元素的詳細資訊及反白標示的螢幕截圖。檢查、滾輪捲動及上一頁／下一頁功能需要 `browser.evaluateEnabled`（預設開啟）。

macOS 應用程式會保留其原生連結瀏覽器側邊欄，用於開啟在儀表板中點擊的連結；瀏覽器面板也可在其中運作，並且是在其他所有平台上註記頁面的方式。

## 聊天行為

<AccordionGroup>
  <Accordion title="傳送與歷史記錄語意">
    - `chat.send` 是**非阻塞式**的：它會立即以 `{ runId, status: "started" }` 確認，回應則透過 `chat` 事件串流傳送。受信任的控制介面用戶端也可能收到選用的 ACK 計時中繼資料，以供本機診斷。
    - 聊天上傳接受圖片及非影片檔案。圖片保留原生圖片路徑；其他檔案會儲存為受管理的媒體，並在歷史記錄中顯示為附件連結。
    - 使用相同的 `idempotencyKey` 重新傳送時，執行期間會傳回 `{ status: "in_flight" }`，完成後則傳回 `{ status: "ok" }`。
    - `chat.history` 回應會限制大小，以確保介面安全。當逐字稿項目過大時，閘道可能會截斷較長的文字欄位、省略大型中繼資料區塊，並以預留位置取代過大的訊息（`[chat.history omitted: message too large]`）。
    - 當可見的助理訊息在 `chat.history` 中遭截斷時，側邊閱讀器可依需求透過 `chat.message.get`，使用 `sessionKey`、需要時的有效 `agentId`，以及逐字稿 `messageId`，擷取經顯示正規化的完整逐字稿項目。如果閘道仍無法傳回更多內容，閱讀器會顯示明確的無法取得狀態，而不會默默重複遭截斷的預覽。
    - 助理產生的圖片會持久儲存為受管理的媒體參照，並透過經驗證的閘道媒體 URL 提供，因此重新載入不需要依賴原始 base64 圖片承載資料持續留在聊天歷史記錄回應中。
    - 呈現 `chat.history` 時，控制介面會從可見的助理文字中移除僅供顯示的行內指示標籤（例如 `[[reply_to_*]]` 和 `[[audio_as_voice]]`）、純文字工具呼叫 XML 承載資料（包括 `<tool_call>...</tool_call>`、`<function_call>...</function_call>`、`<tool_calls>...</tool_calls>`、`<function_calls>...</function_calls>` 及遭截斷的工具呼叫區塊），以及洩漏的 ASCII／全形模型控制權杖。若助理項目的全部可見文字僅為完全相符的靜默權杖 `NO_REPLY`／`no_reply`，或心跳偵測確認權杖 `HEARTBEAT_OK`，則會省略該項目。
    - 在傳送進行期間及最後一次重新整理歷史記錄時，如果 `chat.history` 短暫傳回較舊的快照，聊天檢視會讓本機樂觀顯示的使用者／助理訊息維持可見；閘道歷史記錄追上後，標準逐字稿就會取代這些本機訊息。
    - 即時 `chat` 事件代表傳遞狀態，而 `chat.history` 則會從持久的工作階段逐字稿重建。工具最終事件發生後，控制介面會重新載入歷史記錄，且只合併一小段樂觀顯示的尾端內容；逐字稿邊界記載於 [WebChat](/zh-TW/web/webchat)。
    - `chat.inject` 會將助理備註附加至工作階段逐字稿，並廣播 `chat` 事件，以供僅限介面的更新使用（不執行代理程式、不傳遞至頻道）。
    - 側邊欄會依代理程式區段，以及已釘選／頻道／工作／自訂／聊天分類，列出所有已載入的有效工作階段，並提供單一的「新增工作階段」動作來開啟草稿對話方塊。開啟可見的資料列只會移動醒目提示。自訂群組可收合並能以拖曳重新排序，工作階段也可拖放至群組或聊天；群組名稱與順序會透過閘道同步，而收合狀態則保留在瀏覽器中。新的儀表板工作階段會以其第一則非命令訊息非同步產生簡短標題；明確指定的名稱絕不會被取代。設定 `agents.defaults.utilityModel`（或 `agents.list[].utilityModel`），即可將這個獨立的模型呼叫路由至成本較低的模型。展開另一個代理程式區段，即可瀏覽該代理程式的工作階段，而不會離開目前開啟的聊天。
    - 工作階段搜尋位於命令選擇區中（⌘K，或側邊欄頂端的「搜尋」欄位）：輸入查詢時，會在各代理程式間檢索數量受限的相符頁面、篩除內部子項目／排程資料列，並在導覽命令旁列出可見的相符項目。工作階段頁面則保留附篩選器的完整可搜尋清單。
    - 側邊欄的每個資料列都保留直接釘選功能，以及完整的內容選單，可用於未讀狀態、重新命名、分支複製、分組、封存和刪除。多重選取的資料列（按住 Cmd/Ctrl 點選，使用 Shift 點選範圍）會顯示批次選單，涵蓋未讀狀態、分組、封存和刪除；除非每個所選工作階段都可封存，否則批次封存／刪除會保持停用。進行中的執行作業和代理程式的主要工作階段無法封存。封存或刪除目前所選的工作階段後，聊天會切回該代理程式的主要工作階段。
    - 在 macOS 應用程式中，OpenClaw 標誌會使用視窗控制項旁原本空白的原生標題列區域，而不會占用側邊欄的資料列。
    - 在桌面寬度下，聊天控制項會維持在單一緊湊資料列中，並在逐字稿向下捲動時收合；向上捲動、回到頂端或到達底部時，控制項會恢復顯示。
    - 連續重複且僅含文字的訊息會呈現為單一對話泡泡，並附上數量徽章。包含圖片、附件、工具輸出或畫布預覽的訊息不會收合。
    - 當工作階段的簽出項目位於 GitHub 儲存庫的非預設分支時，聊天檢視會在撰寫器上方釘選提取請求方塊：PR 編號、儲存庫、分支、差異計數、CI 膠囊標籤，以及草稿／已合併／已關閉狀態，每一項都會連結至該 PR。該資料列最多顯示兩個方塊——即時（開啟中／草稿）PR 優先——而「顯示更多」按鈕會顯示已收合的已合併／已關閉歷史記錄。CI 膠囊標籤會開啟小型 CI 監控彈出視窗，顯示通過／失敗／執行中／已略過的檢查數量，以及前往 PR 檢查頁面的連結。偵測會在伺服器端透過 `controlUi.sessionPullRequests` 執行；若已設定閘道的 `GH_TOKEN`／`GITHUB_TOKEN`，便會重複使用。達到 GitHub API 速率限制時，方塊會保留最後已知狀態，並顯示狀態可能已過時的警告；關閉方塊後，該方塊會在目前瀏覽器設定檔中針對該工作階段隱藏。在任何 PR 存在之前，該資料列會顯示分支本身——儲存庫、分支名稱，以及相較於預設分支合併基準的差異 +/− 大小（包括已提交及未提交的工作）。推送的分支有可供比較的提交後，該資料列會新增「建立 PR」按鈕，以開啟 GitHub 的新提取請求頁面；在此之前，若工作階段有變更的檔案（已提交、未提交或未追蹤），仍會顯示該資料列，但不會顯示按鈕。存在開啟中或草稿 PR 時，該資料列會自行隱藏。分支資料列僅來自本機 git，因此即使 GitHub 受速率限制仍可使用，並會顯示相同的狀態過時警告，因為在限制重設前，不能相信「找不到 PR」的結果。
    - 工作階段差異面板會顯示工作階段簽出項目實際變更的內容：分支按鈕（位於工作區導軌標頭、分割窗格標頭，或單一窗格聊天中的浮動按鈕）會開啟詳細資料面板，依檔案顯示分支、未提交及未追蹤工作相較於簽出項目預設分支合併基準的差異——包括狀態圓點、重新命名箭頭、各檔案 +/− 計數、可收合檔案，以及區塊之間的「N 行未修改」標記。差異會在伺服器端透過 `sessions.diff` 閘道方法（`operator.read` 範圍）計算；二進位及過大檔案會降級為僅含統計資料的項目，且只有在連線的閘道宣告 `sessions.diff` 時才會顯示按鈕。
    - 每個聊天窗格中的工作階段工作區導軌會列出工作階段檔案、專案檔案和成品。預設會停駐於窗格右側邊緣；拖曳其標頭（或使用停駐按鈕）可將其移至底部，此選擇會儲存在目前的瀏覽器設定檔中。收合的導軌完全不占空間：可使用 ⇧⌘B、分割窗格標頭中的檔案切換按鈕，或單一窗格聊天中的浮動檔案按鈕重新開啟（後兩者皆會顯示已變更檔案數量徽章）。獨立的檔案、工具和畫布詳細資料面板不受影響。
    - 點選聊天中的檔案參照、已展開讀取／編輯／寫入工具卡中的檔案路徑，或工作區導軌中的檔案資料列，會開啟檔案詳細資料面板：這是以 CodeMirror 為基礎的程式碼檢視，具備語法醒目提示、行號、跳至指定行、檔案內搜尋、複製動作，以及在外部編輯器中開啟的選單。當閘道對 `operator.admin` 連線宣告 `sessions.files.set` 時，面板會新增具備變更追蹤及 Cmd/Ctrl-S 儲存功能的編輯模式；在目前的瀏覽器分頁中，未儲存的草稿會在檔案、面板及工作階段導覽之間保留，直到明確儲存或捨棄。儲存作業會根據 `sessions.files.get` 傳回的內容雜湊進行比較並交換：如果檔案自載入後已在磁碟上變更（例如代理程式持續作業），面板會顯示衝突通知，並提供「重新載入」（採用最新內容）和「覆寫」（保留本機編輯）動作。寫入作業會採用與讀取相同的檔案系統安全工作區防護措施——路徑包含範圍、拒絕符號連結／硬式連結，以及 256 KB UTF-8 上限——而且只能覆寫現有檔案；編輯器絕不會建立或刪除檔案。
    - 每個聊天窗格中的背景工作導軌會列出目前代理程式的背景工作和子代理程式（`tasks.list` 依代理程式限定範圍，並透過 `task` 事件保持即時）：執行中的工作會顯示即時經過時間計時器、工具使用次數、目前使用中的工具，以及停止控制項；可收合的已完成區段會另外顯示執行持續時間；「檢視逐字稿」連結則會在窗格中開啟該工作的子工作階段。可使用分割窗格標頭中的活動切換按鈕，或單一窗格聊天中的浮動活動按鈕開啟——工作快照會預先載入，因此兩者都會顯示執行中數量徽章，不必先開啟導軌。工作頁面仍是完整的跨代理程式記錄簿。
    - 工作區導軌、背景工作導軌和詳細資料面板會依各窗格自身的寬度調整，而不是依視窗調整：在較窄的窗格或緊湊視窗中，兩個導軌都會顯示為底部橫條（側邊停駐控制項會隱藏，直到窗格加寬；當空間只容得下一欄時，工作區導軌會優先使用側邊位置），詳細資料面板則會堆疊在線程下方，並使用水平調整大小控點，而不會與線程共用同一資料列。手機大小的檢視區仍會以全螢幕開啟詳細資料面板。
    - 聊天標頭中的模型及思考模式選擇器會透過 `sessions.patch` 立即修補目前工作階段；它們是持久的工作階段覆寫設定，而不是僅適用於單次傳送的選項。
    - **分割檢視：**從右上角的浮動切換按鈕列開啟（位於工作階段差異、背景工作和工作階段檔案切換按鈕旁），然後將目前窗格向右或向下分割，建立空間可容納的任意數量窗格。每個窗格都有自己的工作階段、逐字稿、撰寫器和工具串流。
    - 將工作階段從側邊欄拖入聊天，即可在窗格中開啟。動畫拖放預覽會在區域間平滑移動並標示結果——在新窗格將占用的確切半側上顯示「分割」，在整個窗格上顯示「在此開啟」——且單一窗格模式也支援拖放。
    - 作用中的分割窗格會控制側邊欄選取項目和 URL。每個窗格都有自己的標頭資料列，包含工作階段標題，以及工作區導軌、分割和關閉控制項；分隔線可調整欄位和堆疊窗格的大小，而瀏覽器會在本機儲存版面配置，並於重新載入後保留。
    - 在窄螢幕上，分割檢視會保留版面配置，但只呈現作用中的窗格，包括其含有關閉控制項的標頭。
    - 如果在同一工作階段的模型選擇器變更仍在儲存時傳送訊息，撰寫器會等待該工作階段修補完成後才呼叫 `chat.send`，確保傳送時使用所選模型。
    - 輸入 `/new` 會建立並切換至與 New Chat 相同的全新儀表板工作階段；但若已設定 `session.dmScope: "main"`，且目前的父工作階段是代理程式的主要工作階段，則會直接重設該主要工作階段。輸入 `/reset` 會保留閘道針對目前工作階段明確執行的原地重設行為。
    - 聊天模型選擇器會向閘道要求已設定的模型檢視。若存在 `agents.defaults.models`，該允許清單會驅動選擇器，其中包括可讓供應商範圍目錄保持動態的 `provider/*` 項目。否則，選擇器會顯示明確的 `models.providers.*.models` 項目，以及具有可用驗證資訊的供應商。完整目錄仍可透過偵錯用的 `models.list` RPC 搭配 `view: "all"` 取得。
    - 當閘道最新的工作階段用量報告包含目前的上下文權杖數時，聊天撰寫工具列會顯示一個小型上下文用量環，並標示已使用的百分比。開啟該圓環即可查看目前的上下文視窗、最近一次執行的權杖數與預估總成本、供應商／模型識別資訊，以及最近一次供應商回應所回報的輸入／輸出／快取成本明細。當上下文壓力偏高時，該圓環會切換為警告樣式；達到建議的壓縮程度時，則會顯示一個精簡按鈕，用來執行一般的工作階段壓縮流程。過時的權杖快照會隱藏，直到閘道再次回報最新用量。

  </Accordion>
  <Accordion title="對話模式（瀏覽器即時通訊）">
    對話模式使用已註冊的即時語音供應商。若要設定 OpenAI，請使用 `talk.realtime.provider: "openai"` 搭配 `openai` API 金鑰設定檔、`talk.realtime.providers.openai.apiKey` 或 `OPENAI_API_KEY`。OpenAI Realtime 使用公開的 Platform API，且需要 Platform API 金鑰；Codex OAuth 登入無法滿足此介面的需求。若要設定 Google，請使用 `talk.realtime.provider: "google"` 搭配 `talk.realtime.providers.google.apiKey`。瀏覽器絕不會收到標準供應商 API 金鑰：OpenAI 會收到用於 WebRTC 的暫時性 Realtime 用戶端密鑰，而 Google Live 會收到用於瀏覽器 WebSocket 工作階段、僅限單次使用且受限制的 Live API 驗證權杖，其中的指示與工具宣告會由閘道鎖定至權杖中。僅提供後端即時橋接的供應商會透過閘道中繼傳輸執行，因此認證資訊與供應商通訊端會保留在伺服器端，而瀏覽器音訊則透過已驗證的閘道 RPC 傳輸。Realtime 工作階段提示詞由閘道組裝；`talk.client.create` 不接受呼叫端提供的指示覆寫。

    持續性供應商、模型、語音、傳輸、推理強度、精確的 VAD 閾值、靜音持續時間與前置填補預設值位於 **設定 → 通訊 → 對話**；變更這些設定需要 `operator.admin` 存取權。設定閘道中繼會強制使用後端中繼路徑；設定 WebRTC 則會讓工作階段由用戶端擁有，若供應商無法建立瀏覽器工作階段，便會失敗，而不會默默改用中繼。

    對話控制項本身是撰寫工具列中的麥克風按鈕。其插入符號選單會列出 **系統預設值**，以及瀏覽器公開的所有麥克風，包括 USB、Bluetooth 與虛擬輸入。所選的裝置 ID 僅保留在瀏覽器本機，絕不會傳送至閘道；如果該確切裝置消失，對話模式會要求你選擇其他輸入，而不會默默改用不同的麥克風錄音。對話模式運作時，麥克風按鈕會變成顯示即時輸入音量計的膠囊按鈕；按一下即可停止語音輸入，將游標停留其上時會顯示停止圖示。當即時工具呼叫透過 `talk.client.toolCall` 查詢已設定的較大型模型時，螢幕閱讀器會播報 `Connecting voice input...`、`Listening...` 或 `Asking OpenClaw...`。停止正在執行的代理程式回應仍使用膠囊按鈕旁獨立的方形 **停止** 控制項。

    維護者即時冒煙測試：`OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts` 會使用模擬麥克風媒體，驗證 OpenAI 後端 WebSocket 橋接、OpenAI 瀏覽器 WebRTC SDP 交換、Google Live 受限制權杖的瀏覽器 WebSocket 設定，以及閘道中繼瀏覽器配接器。此命令只會輸出供應商狀態，不會記錄密鑰。

  </Accordion>
  <Accordion title="停止與中止">
    - 按一下 **停止**（呼叫 `chat.abort`）。
    - 執行作業進行期間，一般後續訊息會排入佇列。按一下佇列訊息上的 **引導**，即可將該後續訊息注入正在執行的回合。
    - 輸入 `/stop`（或獨立的中止片語，例如 `stop`、`stop action`、`stop run`、`stop openclaw`、`please stop`），即可透過頻外方式中止。
    - `chat.abort` 支援使用 `{ sessionKey }`（不含 `runId`），以中止該工作階段的所有作用中執行作業。

  </Accordion>
  <Accordion title="保留中止時的部分內容">
    - 執行作業中止後，部分助理文字仍可顯示在 UI 中。
    - 若緩衝區中已有輸出，閘道會將中止時的部分助理文字保存至對話記錄歷程。
    - 保存的項目包含中止中繼資料，讓對話記錄取用端能區分中止時的部分內容與正常完成的輸出。

  </Accordion>
</AccordionGroup>

## 連線中斷與重新連線

工作階段建立後，閘道連線中斷並不會將你登出。儀表板會保持顯示，並在頂端列下方顯示浮動的琥珀色“閘道連線已中斷 — 正在重新連線…”膠囊提示，同時用戶端會以退避機制自動重試（從 800 ms 到最多 15 s）。即時更新與即時通訊／工作階段操作會暫停，直到連線恢復；膠囊提示中的 **立即重試** 會強制立即嘗試連線。聊天內容仍可編輯：一般文字與附件傳送會保留在目前分頁中以閘道／工作階段為範圍的瀏覽器儲存空間內，顯示為等待重新連線，並在閘道恢復後自動傳送。離線時，即時控制項與斜線命令仍無法使用。

若此瀏覽器已持有認證資訊（已設定的權杖／密碼或已核准的裝置權杖），首次開啟與重新載入時會在建立連線期間顯示小型動畫 OpenClaw 標誌，而不會短暫閃現登入閘門。只有在尚未儲存認證資訊，或閘道主動拒絕認證資訊（錯誤的權杖／密碼、已撤銷的配對）時，才會顯示登入閘門——這些狀態需要你提供輸入，而非繼續等待。

## 安裝 PWA 與網頁推播

控制 UI 隨附 `manifest.webmanifest` 與服務工作執行緒，因此現代瀏覽器可將其安裝為獨立 PWA。即使分頁或瀏覽器視窗未開啟，網頁推播也能讓閘道透過通知喚醒已安裝的 PWA。

如果頁面在 OpenClaw 更新後立即顯示 **通訊協定不相符**，請先使用 `openclaw dashboard` 重新開啟儀表板並強制重新整理。若仍然失敗，請清除儀表板來源的網站資料，或在瀏覽器的無痕視窗中測試；舊分頁或瀏覽器服務工作執行緒快取可能會讓更新前的控制 UI 套件繼續搭配較新的閘道執行。

| 介面                                                  | 功能                                                               |
| ----------------------------------------------------- | ------------------------------------------------------------------ |
| `ui/public/manifest.webmanifest`                      | PWA 資訊清單。瀏覽器可存取後便會提供“安裝應用程式”選項。   |
| `ui/public/sw.js`                                     | 處理 `push` 事件與通知點擊的服務工作執行緒。 |
| `push/vapid-keys.json`（位於 OpenClaw 狀態目錄下） | 用於簽署網頁推播承載資料的自動產生 VAPID 金鑰組。       |
| `push/web-push-subscriptions.json`                    | 已保存的瀏覽器訂閱端點。                          |

若要固定金鑰（多主機部署、密鑰輪替或測試），可透過閘道程序的環境變數覆寫 VAPID 金鑰組：

- `OPENCLAW_VAPID_PUBLIC_KEY`
- `OPENCLAW_VAPID_PRIVATE_KEY`
- `OPENCLAW_VAPID_SUBJECT`（預設為 `https://openclaw.ai`）

控制 UI 使用下列受範圍限制的閘道方法來註冊及測試瀏覽器訂閱：

- `push.web.vapidPublicKey` 取得作用中的 VAPID 公開金鑰。
- `push.web.subscribe` 註冊 `endpoint` 以及 `keys.p256dh`/`keys.auth`。
- `push.web.unsubscribe` 移除已註冊的端點。
- `push.web.test` 將測試通知傳送至呼叫端的訂閱。

<Note>
網頁推播與 iOS APNS 中繼路徑彼此獨立（中繼支援的推播請參閱[設定](/zh-TW/gateway/configuration)），也與以原生行動裝置配對為目標的 `push.test` 方法無關。
</Note>

## 託管嵌入內容

助理訊息可使用 `[embed ...]` 短代碼在行內呈現託管的網頁內容。iframe 沙箱原則由 `gateway.controlUi.embedSandbox` 控制：

內建的 Canvas 外掛也提供 [`show_widget`](/zh-TW/tools/show-widget)，可直接從工具呼叫呈現獨立完整的 SVG 或 HTML。瀏覽器會公布 `inline-widgets` 閘道能力，且重新載入聊天歷程時，產生的 Canvas 文件仍可使用。源自頻道的執行作業不會獲得此工具。

<Tabs>
  <Tab title="嚴格">
    停用託管嵌入內容中的指令碼執行。
  </Tab>
  <Tab title="指令碼（預設）">
    在維持來源隔離的同時允許互動式嵌入內容；通常足以支援獨立完整的瀏覽器遊戲／小工具。
  </Tab>
  <Tab title="受信任">
    對於刻意需要更高權限的同站台文件，會在 `allow-scripts` 之上新增 `allow-same-origin`。
  </Tab>
</Tabs>

```json5
{
  gateway: {
    controlUi: {
      embedSandbox: "scripts",
    },
  },
}
```

<Warning>
只有在嵌入文件確實需要同源行為時，才使用 `trusted`。對大多數代理程式產生的遊戲與互動式畫布而言，`scripts` 是較安全的選擇。
</Warning>

絕對外部 `http(s)` 嵌入 URL 預設仍會遭到封鎖。若要允許 `[embed url="https://..."]` 載入第三方頁面，請設定 `gateway.controlUi.allowExternalEmbedUrls: true`。

## 聊天訊息寬度

聊天對話記錄使用與撰寫區對齊、置中且易於閱讀的框架。在該框架內，助理與工具輸出保持靠左對齊，而使用者訊息泡泡保持靠右對齊。寬螢幕部署可設定 `gateway.controlUi.chatMessageMaxWidth`，在不修補內建 CSS 的情況下覆寫對話記錄寬度：

```json5
{
  gateway: {
    controlUi: {
      chatMessageMaxWidth: "min(1280px, 82%)",
    },
  },
}
```

該值會在送達瀏覽器前進行驗證。支援的格式包括 `960px` 或 `82%` 等純長度與百分比，以及受限制的 `min(...)`、`max(...)`、`clamp(...)`、`calc(...)` 和 `fit-content(...)` 寬度運算式。

## Tailnet 存取（建議）

<Tabs>
  <Tab title="整合式 Tailscale Serve（首選）">
    讓閘道保持在迴路介面，並由 Tailscale Serve 透過 HTTPS 代理：

    ```bash
    openclaw gateway --tailscale serve
    ```

    開啟 `https://<magicdns>/`（或你設定的 `gateway.controlUi.basePath`）。

    根據預設，當 `gateway.auth.allowTailscale` 為 `true` 時，控制 UI/WebSocket Serve 請求可透過 Tailscale 身分標頭（`tailscale-user-login`）進行驗證。OpenClaw 會使用 `tailscale whois` 解析 `x-forwarded-for` 位址並與標頭比對，以驗證該身分；只有當請求透過迴路介面傳入，且包含 Tailscale 的 `x-forwarded-*` 標頭時，才會接受這些身分。對具有瀏覽器裝置身分的控制 UI 操作者工作階段，此經驗證的 Serve 路徑也會略過裝置配對往返流程；沒有裝置身分的瀏覽器與節點角色連線仍會遵循一般裝置檢查。若即使是 Serve 流量也要明確要求共用密鑰認證資訊，請設定 `gateway.auth.allowTailscale: false`，然後使用 `gateway.auth.mode: "token"` 或 `"password"`。

    對於該非同步 Serve 身分路徑，在寫入速率限制之前，會將相同用戶端 IP 與驗證範圍的失敗驗證嘗試序列化。因此，同一瀏覽器並行發出的錯誤重試，可能會讓第二個請求顯示 `retry later`，而不是讓兩個一般不相符錯誤並行競爭。

    <Warning>
    無權杖 Serve 驗證假設閘道主機是受信任的。如果不受信任的本機程式碼可能在該主機上執行，請要求權杖／密碼驗證。
    </Warning>

  </Tab>
  <Tab title="繫結至 tailnet 並使用權杖">
    ```bash
    openclaw gateway --bind tailnet --token "$(openssl rand -hex 32)"
    ```

    開啟 `http://<tailscale-ip>:18789/`（或你設定的 `gateway.controlUi.basePath`）。

    將相符的共用密鑰貼入 UI 設定（以 `connect.params.auth.token` 或 `connect.params.auth.password` 傳送）。

  </Tab>
</Tabs>

## 不安全的 HTTP

如果你透過純 HTTP（`http://<lan-ip>` 或 `http://<tailscale-ip>`）開啟儀表板，瀏覽器會在 **非安全環境** 中執行並封鎖 WebCrypto。根據預設，OpenClaw 會 **封鎖** 沒有裝置身分的控制 UI 連線。

文件記載的例外情況：

- 僅限 localhost 的不安全 HTTP 相容性搭配 `gateway.controlUi.allowInsecureAuth=true`
- 透過 `gateway.auth.mode: "trusted-proxy"` 成功完成控制 UI 操作者驗證
- 緊急用途的 `gateway.controlUi.dangerouslyDisableDeviceAuth=true`

**建議的修正方式：**使用 HTTPS（Tailscale Serve），或在 `https://<magicdns>/`（Serve）或 `http://127.0.0.1:18789/`（位於閘道主機上）於本機開啟 UI。

<AccordionGroup>
  <Accordion title="不安全認證切換行為">
    ```json5
    {
      gateway: {
        controlUi: { allowInsecureAuth: true },
        bind: "tailnet",
        auth: { mode: "token", token: "replace-me" },
      },
    }
    ```

    `allowInsecureAuth` 僅是本機相容性切換選項：

    - 它允許 localhost 的 Control UI 工作階段在非安全的 HTTP 情境中不使用裝置身分也能繼續。
    - 它不會略過配對檢查。
    - 它不會放寬遠端（非 localhost）的裝置身分要求。

  </Accordion>
  <Accordion title="僅限緊急解鎖">
    ```json5
    {
      gateway: {
        controlUi: { dangerouslyDisableDeviceAuth: true },
        bind: "tailnet",
        auth: { mode: "token", token: "replace-me" },
      },
    }
    ```

    <Warning>
    `dangerouslyDisableDeviceAuth` 會停用 Control UI 的裝置身分檢查，並造成嚴重的安全性降級。緊急使用後請儘快還原。
    </Warning>

  </Accordion>
  <Accordion title="受信任 Proxy 注意事項">
    - 成功的受信任 Proxy 認證可允許 **operator** Control UI 工作階段不使用裝置身分。
    - 這**不會**延伸至節點角色的 Control UI 工作階段。
    - 同一主機上的迴路反向 Proxy 仍不符合受信任 Proxy 認證；請參閱[受信任 Proxy 認證](/zh-TW/gateway/trusted-proxy-auth)。

  </Accordion>
</AccordionGroup>

如需 HTTPS 設定指引，請參閱 [Tailscale](/zh-TW/gateway/tailscale)。

## 內容安全政策

Control UI 隨附嚴格的 `img-src` 政策：僅允許**同源**資產、`data:` URL，以及本機產生的 `blob:` URL。遠端 `http(s)` 與協定相對圖片 URL 會遭瀏覽器拒絕，且絕不會發出網路擷取要求。

實際行為如下：

- 透過相對路徑提供的頭像與圖片（例如 `/avatars/<id>`）仍會顯示，包括 UI 擷取後轉換成本機 `blob:` URL 的需認證頭像路由。
- 行內 `data:image/...` URL 仍會顯示。
- 由 Control UI 建立的本機 `blob:` URL 仍會顯示。
- GitHub 連結預覽頭像由閘道從 GitHub 的固定頭像主機擷取，並以受限的 `data:` URL 傳回；操作者的瀏覽器絕不會連絡遠端頭像主機。
- 頻道中繼資料輸出的遠端頭像 URL 會在 Control UI 的頭像輔助函式中遭移除，並以內建標誌／徽章取代，因此遭入侵或惡意的頻道無法強迫操作者的瀏覽器任意擷取遠端圖片。

此功能永遠啟用，且無法設定。

## 頭像路由認證

設定閘道認證後，Control UI 頭像端點需要與 API 其餘部分相同的閘道權杖：

- `GET /avatar/<agentId>` 僅向已認證的呼叫端傳回頭像圖片。`GET /avatar/<agentId>?meta=1` 依相同規則傳回頭像中繼資料。
- 對任一路由發出的未認證要求都會遭拒絕（與同層級的助理媒體路由一致），因此頭像路由不會在其他部分皆受保護的主機上洩漏代理程式身分。
- Control UI 擷取頭像時，會以 Bearer 標頭轉送閘道權杖，並使用已認證的 Blob URL，讓圖片仍可在儀表板中顯示。

若停用閘道認證（不建議在共用主機上這麼做），頭像路由也會與閘道其餘部分一樣變成不需認證。

## 助理媒體路由認證

設定閘道認證後，助理的本機媒體預覽會使用兩步驟路由：

- `GET /__openclaw__/assistant-media?meta=1&source=<path>` 需要一般的 Control UI 操作者認證；瀏覽器檢查可用性時，會以 Bearer 標頭傳送閘道權杖。
- 成功的中繼資料回應會包含一個短效的 `mediaTicket`，其範圍限定於該確切來源路徑。
- 瀏覽器顯示的圖片、音訊、影片與文件 URL 會使用 `mediaTicket=<ticket>`，而非使用中的閘道權杖或密碼。票證會很快到期，且無法授權其他來源。

這可維持媒體顯示與瀏覽器原生媒體元素的相容性，同時避免將可重複使用的閘道認證資訊放入可見的媒體 URL。

## 核准連結

操作者核准通知可深層連結至保留的 `${controlUiBasePath}/approve/{approvalId}` 命名空間下提供的獨立核准文件（例如 `/approve/<approvalId>`，或在設定基底路徑時使用 `/openclaw/approve/<approvalId>`）。此 URL 在核准的生命週期內保持穩定，且可安全地在你自己的裝置間轉送：它只會識別核准，絕不會授權核准。

- 閘道會在外掛 HTTP 路由之前，為**所有** HTTP 方法保留單區段的 `/approve/<approvalId>` 命名空間，因此外掛路由絕不可能遮蔽或攔截核准文件。
- 開啟核准文件需要與 Control UI 其餘部分相同的閘道認證（權杖／密碼、Tailscale Serve 身分，或受信任 Proxy 身分）；認證資訊絕不會成為核准 URL 的一部分。
- 停用 Control UI 提供服務時，對此命名空間的要求會傳回 `404`，而不會轉交給外掛處理常式。
- 在核准文件中登入僅對該頁面暫時有效：它不會覆寫同一瀏覽器中完整 Control UI 所儲存的閘道選擇或設定。

閘道會從 `dist/control-ui` 提供靜態檔案：

```bash
pnpm ui:build
```

選用的絕對基底（固定資產 URL）：

```bash
OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build
```

本機開發（獨立開發伺服器）：

```bash
pnpm ui:dev
```

接著將 UI 指向你的閘道 WS URL（例如 `ws://127.0.0.1:18789`）。

## Control UI 空白頁面

如果瀏覽器載入空白儀表板，且 DevTools 未顯示有用的錯誤，可能是擴充功能或提早執行的內容指令碼阻止 JavaScript 模組應用程式求值。靜態頁面包含純 HTML 復原面板，若啟動後未註冊 `<openclaw-app>`，此面板便會顯示。

變更瀏覽器環境後，請使用面板的 **Try again** 動作，或在完成以下檢查後手動重新載入：

- 停用會注入所有頁面的擴充功能，特別是具有 `<all_urls>` 內容指令碼的擴充功能。
- 嘗試使用無痕視窗、全新的瀏覽器設定檔，或其他瀏覽器。
- 讓閘道保持執行，並在變更瀏覽器後驗證相同的儀表板 URL。

## 偵錯／測試：開發伺服器 + 遠端閘道

Control UI 是靜態檔案；WebSocket 目標可設定，且可與 HTTP 來源不同。若要在本機使用 Vite 開發伺服器，但閘道在其他位置執行，這項功能相當實用。

<Steps>
  <Step title="啟動 UI 開發伺服器">
    ```bash
    pnpm ui:dev
    ```
  </Step>
  <Step title="使用 gatewayUrl 開啟">
    ```text
    http://localhost:5173/?gatewayUrl=ws%3A%2F%2F<gateway-host>%3A18789
    ```

    選用的一次性認證（如有需要）：

    ```text
    http://localhost:5173/?gatewayUrl=wss%3A%2F%2F<gateway-host>%3A18789#token=<gateway-token>
    ```

  </Step>
</Steps>

<AccordionGroup>
  <Accordion title="注意事項">
    - `gatewayUrl` 會在載入後儲存至 localStorage，並從 URL 移除。
    - 若透過 `gatewayUrl` 傳入完整的 `ws://` 或 `wss://` 端點，請對該值進行 URL 編碼，讓瀏覽器正確剖析查詢字串。
    - 只要可行，應透過 URL 片段（`#token=...`）傳遞 `token`。片段不會傳送至伺服器，因此可避免要求記錄與 Referer 洩漏。為了相容性，仍會匯入舊版 `?token=` 查詢參數一次，但僅作為備援，並會在啟動程序後立即移除。
    - `password` 僅保留在記憶體中。
    - 設定 `gatewayUrl` 後，UI 不會退回使用設定或環境認證資訊。請明確提供 `token`（或 `password`）；缺少明確的認證資訊即為錯誤。
    - 當閘道位於 TLS 後方（Tailscale Serve、HTTPS Proxy 等）時，請使用 `wss://`。
    - `gatewayUrl` 僅在頂層視窗中接受（不可嵌入），以防止點擊劫持。
    - 公開的非迴路 Control UI 部署必須明確設定 `gateway.controlUi.allowedOrigins`（完整來源）。從迴路、RFC1918／連結本機、`.local`、`.ts.net` 或 Tailscale CGNAT 主機載入的私有同源 LAN／Tailnet 內容，無須啟用 Host 標頭備援即可接受。
    - 閘道啟動時可能會根據有效的執行階段繫結與連接埠，預先填入 `http://localhost:<port>` 和 `http://127.0.0.1:<port>` 等本機來源，但遠端瀏覽器來源仍需明確加入項目。
    - 除非進行嚴格控管的本機測試，否則請勿使用 `gateway.controlUi.allowedOrigins: ["*"]`；它表示允許任何瀏覽器來源，而不是“比對我正在使用的任何主機”。
    - `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` 會啟用 Host 標頭來源備援模式，但這是一種危險的安全模式。

  </Accordion>
</AccordionGroup>

```json5
{
  gateway: {
    controlUi: {
      allowedOrigins: ["http://localhost:5173"],
    },
  },
}
```

遠端存取設定詳情：[遠端存取](/zh-TW/gateway/remote)。

## 相關內容

- [儀表板](/zh-TW/web/dashboard) — 閘道儀表板
- [健康狀態檢查](/zh-TW/gateway/health) — 閘道健康狀態監控
- [終端介面](/zh-TW/web/tui) — 終端使用者介面
- [WebChat](/zh-TW/web/webchat) — 瀏覽器式聊天介面
