本網站為獨立社群專案,與 OpenClaw 官方無任何關聯。內容僅供參考。 了解更多

翻譯文件

本頁為社群翻譯版本,可能與官方最新內容有出入。 查看官方英文原文 →

macOS 應用程式

macOS 應用程式是 OpenClaw 的選單列配套工具,負責管理權限、Gateway 連線,並向代理公開 macOS 功能。

OpenClaw macOS Companion(選單列 + Gateway 代理)

macOS 應用程式是 OpenClaw 的選單列配套工具。它擁有權限管理、在本機管理/附接 Gateway(透過 launchd 或手動),並以節點形式向代理公開 macOS 功能。

功能介紹

  • 在選單列顯示原生通知與狀態。
  • 擁有 TCC 提示(通知、輔助使用、螢幕錄製、麥克風、語音辨識、自動化/AppleScript)。
  • 執行或連接 Gateway(本機或遠端)。
  • 公開 macOS 專屬工具(Canvas、Camera、Screen Recording、system.run)。
  • 遠端模式下啟動本機節點主機服務(launchd),在本機模式下則停止。
  • 可選擇託管 PeekabooBridge 以進行 UI 自動化。
  • 依請求透過 npm/pnpm 安裝全域 CLI(openclaw)(不建議將 bun 用於 Gateway 執行環境)。

本機模式 vs 遠端模式

  • Local(預設):應用程式會附接到執行中的本機 Gateway(如有);否則透過 openclaw gateway install 啟用 launchd 服務。
  • Remote:應用程式透過 SSH/Tailscale 連接遠端 Gateway,不會啟動本機程序。應用程式會啟動本機節點主機服務,讓遠端 Gateway 能存取此 Mac。應用程式不會將 Gateway 作為子程序產生。

Launchd 控制

應用程式管理以使用者為單位的 LaunchAgent,標籤為 ai.openclaw.gateway(使用 --profile/OPENCLAW_PROFILE 時為 ai.openclaw.<profile>;舊版 com.openclaw.* 仍會卸載)。

launchctl kickstart -k gui/$UID/ai.openclaw.gateway
launchctl bootout gui/$UID/ai.openclaw.gateway

使用命名設定檔時,將標籤替換為 ai.openclaw.<profile>

如果 LaunchAgent 尚未安裝,可從應用程式啟用,或執行 openclaw gateway install

節點功能(mac)

macOS 應用程式以節點形式呈現。常用指令:

  • Canvas:canvas.presentcanvas.navigatecanvas.evalcanvas.snapshotcanvas.a2ui.*
  • Camera:camera.snapcamera.clip
  • Screen:screen.record
  • System:system.runsystem.notify

節點會回報 permissions 映射,讓代理判斷哪些操作是被允許的。

節點服務 + 應用程式 IPC:

  • 當無介面的節點主機服務正在執行(遠端模式),它會透過 WS 連接 Gateway 作為節點。
  • system.run 在 macOS 應用程式(UI/TCC 環境)中透過本機 Unix socket 執行;提示與輸出保留在應用程式內。

架構圖(SCI):

Gateway -> Node Service (WS)
                 |  IPC (UDS + token + HMAC + TTL)
                 v
             Mac App (UI + TCC + system.run)

執行核准(system.run)

system.run 由 macOS 應用程式中的 Exec approvals 控制(Settings → Exec approvals)。安全性、詢問模式與允許清單儲存在 Mac 本機:

~/.openclaw/exec-approvals.json

範例:

{
  "version": 1,
  "defaults": {
    "security": "deny",
    "ask": "on-miss"
  },
  "agents": {
    "main": {
      "security": "allowlist",
      "ask": "on-miss",
      "allowlist": [{ "pattern": "/opt/homebrew/bin/rg" }]
    }
  }
}

注意事項:

  • allowlist 項目是已解析二進位路徑的 glob 模式。
  • 包含 shell 控制或擴展語法(&&||;|`$<>())的原始 shell 指令文字會被視為允許清單未命中,需要明確核准(或將 shell 二進位檔加入允許清單)。
  • 在提示中選擇「Always Allow」會將該指令加入允許清單。
  • system.run 環境變數覆寫會經過過濾(移除 PATHDYLD_*LD_*NODE_OPTIONSPYTHON*PERL*RUBYOPTSHELLOPTSPS4),然後與應用程式環境合併。
  • 對於 shell 包裝器(bash|sh|zsh ... -c/-lc),請求範圍的環境變數覆寫會縮減為小型明確允許清單(TERMLANGLC_*COLORTERMNO_COLORFORCE_COLOR)。
  • 在允許清單模式下的永久允許決策中,已知的分派包裝器(envnicenohupstdbuftimeout)會保存內部可執行檔路徑,而非包裝器路徑。如果解包不安全,則不會自動保存允許清單項目。

應用程式註冊 openclaw:// URL scheme 以執行本機操作。

openclaw://agent

觸發 Gateway agent 請求。

open 'openclaw://agent?message=Hello%20from%20deep%20link'

查詢參數:

  • message(必填)
  • sessionKey(選填)
  • thinking(選填)
  • deliver / to / channel(選填)
  • timeoutSeconds(選填)
  • key(選填,無人值守模式金鑰)

安全性:

  • 沒有 key 時,應用程式會提示確認。
  • 沒有 key 時,應用程式會對確認提示強制訊息長度限制,並忽略 deliver / to / channel
  • 提供有效 key 時,執行為無人值守模式(用於個人自動化)。

入門流程(典型)

  1. 安裝並啟動 OpenClaw.app
  2. 完成權限核對清單(TCC 提示)。
  3. 確保 Local 模式啟用且 Gateway 正在執行。
  4. 如需終端機存取,請安裝 CLI。

建置與開發流程(原生)

  • cd apps/macos && swift build
  • swift run OpenClaw(或使用 Xcode)
  • 打包應用程式:scripts/package-mac-app.sh

偵錯 Gateway 連線(macOS CLI)

使用偵錯 CLI 來演練 macOS 應用程式使用的相同 Gateway WebSocket 交握與探索邏輯,而無需啟動應用程式。

cd apps/macos
swift run openclaw-mac connect --json
swift run openclaw-mac discover --timeout 3000 --json

連線選項:

  • --url <ws://host:port>:覆寫設定
  • --mode <local|remote>:從設定解析(預設:設定值或 local)
  • --probe:強制執行全新的健康探測
  • --timeout <ms>:請求逾時(預設:15000
  • --json:結構化輸出以便比對

探索選項:

  • --include-local:包含會被過濾為「local」的 gateway
  • --timeout <ms>:整體探索時間窗口(預設:2000
  • --json:結構化輸出以便比對

提示:與 openclaw gateway discover --json 比較,查看 macOS 應用程式的探索管線(NWBrowser + tailnet DNS-SD 備援)是否與 Node CLI 的 dns-sd 探索有差異。

遠端連線機制(SSH 通道)

當 macOS 應用程式以 Remote 模式執行時,它會開啟 SSH 通道,讓本機 UI 元件能像在 localhost 一樣與遠端 Gateway 通訊。

控制通道(Gateway WebSocket 連接埠)

  • 用途: 健康檢查、狀態、Web Chat、設定及其他控制面呼叫。
  • 本機連接埠: Gateway 連接埠(預設 18789),始終穩定。
  • 遠端連接埠: 遠端主機上的相同 Gateway 連接埠。
  • 行為: 不使用隨機本機連接埠;應用程式會重複使用現有的健康通道,或在需要時重新啟動。
  • SSH 形式: ssh -N -L <local>:127.0.0.1:<remote>,搭配 BatchMode + ExitOnForwardFailure + keepalive 選項。
  • IP 回報: SSH 通道使用迴路位址,因此 Gateway 會將節點 IP 視為 127.0.0.1。如果想顯示真實的客戶端 IP,請使用 Direct (ws/wss) 傳輸方式(參見 macOS remote access)。

設定步驟請參見 macOS remote access。協定詳情請參見 Gateway protocol

相關文件