遠端 IDE 橋接最棘手的兩件事,一是代理程式一把梭寫穿整個家目錄,二是閘道已半死不活卻無人知曉。把「只讀程式碼根目錄+可寫沙箱+本機回環閘道+最小權限權杖+定時探針」串成可重現流水線,排錯會少掉大半「玄學」。🔒

本文假設您已在遠端 Mac 安裝 OpenClaw(概念與安裝可參考說明中心 · OpenClaw 指南),並以 VS Code、Cursor 等透過 SSH 開啟單一工作區,讓本機 IDE 驅動遠端工具鏈。與OpenClaw 與自動化主題中強調的閘道、預先拉取相依一致,此處補齊權限邊界可觀測性。若您同時關心本機 RAG 與向量落盤紀律,可對照Mac 本機 RAG 決策矩陣;平台概覽見首頁,需要獨立節點承載長駐閘道時,可開啟購買頁比對區域與規格。

目錄與閱讀動線

痛點拆解:為何要最小權限沙箱

1. 權限面過大:代理程式若可寫入整個 $HOME,一次錯誤指令就可能污染 .ssh、套件快取與個人文件,稽核與回滾成本極高。

2. 變更不可見:沒有 diff 摘要與固定日誌路徑時,團隊只能憑印象猜「剛才動了哪裡」,合併與資安審查都難以對齊。

3. 健康狀態假陽性:行程仍存在但模型路徑壞掉、磁碟已滿或監聽埠衝突時,若無 doctor 基線與週期 /health,使用者要到 IDE 卡死才發現。

決策矩陣:開放式工作區 vs 橋接沙箱

面向 開放式遠端工作區 本文橋接沙箱
寫入範圍 常見為整個家目錄或單一大專案樹,易誤寫 repo 只讀、scratch 集中可寫,邊界清楚
閘道暴露 易誤綁 0.0.0.0 或忘記 TLS/權杖 預設 127.0.0.1,經 SSH 隧道或內網轉發
權杖管理 環境變數明文、寫入 shell 歷程 0600 檔案+OPENCLAW_TOKEN_FILE,scope 最小化
可觀測性 依賴人工嘗試 doctor --json、diff 日誌、定時 curl /health

設計原則(2026 最小權限版)

  • 閘道只綁本機回環:OpenClaw 閘道監聽 127.0.0.1,由 SSH 反向隧道或內網轉發接入,避免未充分鑑別的服務面直接面向公網。
  • 權杖依 scope 簽發:僅授予 workspace:read、白名單 exec 等必要能力;檔案權限 0600,以 OPENCLAW_TOKEN_FILE 引用,禁止寫入儲存庫與 shell 歷程。
  • 目錄二元化:repo 只讀、scratch 可寫;建置產物、探針日誌、暫存模型快取一律落在沙箱路徑下。
  • 變更附 diff 摘要:任務前後落盤 git diff --stat,讓人與自動化一眼看到「動了多少檔案」。
  • 先 doctor 再探針:先以 openclaw doctor 收斂環境,再以 curl /health 做高頻心跳,降低「行程在但半殘」的假綠。

可重現步驟

1. 目錄與權限。於遠端 Mac 執行:

mkdir -p ~/ide-bridge/repo ~/ide-bridge/scratch/probe # 將 clone 或同步的程式碼置於 repo,並移除寫入(範例) chmod -R a-w ~/ide-bridge/repo

若需對單一使用者保留寫入,可使用 ACL 或以專用系統帳戶跑閘道行程,IDE 使用者僅掛載唯讀——核心是代理與自動化預設不得改寫原始碼樹

2. 簽發閘道權杖。依您安裝的 OpenClaw 版本使用對應子命令產生權杖,寫入 ~/.openclaw/gateway.tokenchmod 600。於 ~/.zprofile 或 launchd 環境設定 export OPENCLAW_TOKEN_FILE="$HOME/.openclaw/gateway.token",避免使用 export TOKEN=密碼 形式以免外洩。

3. 啟動閘道(本機回環)。埠號請與 IDE 側設定一致。

openclaw gateway listen \ --bind 127.0.0.1:18765 \ --token-file "$HOME/.openclaw/gateway.token"

長時間執行建議以 launchd KeepAlive 包裹,標準輸出導向 ~/ide-bridge/scratch/logs/gateway.log

4. IDE 工作區根。Remote-SSH 開啟 ~/ide-bridge/repo;於專案設定將 OUT_DIR、暫存目錄、OpenClaw 快取指向 ~/ide-bridge/scratch,避免建置腳本在唯讀樹失敗或悄悄放寬權限。

5. diff 摘要留痕。於自動化進入點前後附加:

LOG=~/ide-bridge/scratch/probe/diff-$(date +%F).log { echo "=== $(date -Iseconds) pre ==="; git -C ~/ide-bridge/repo diff --stat; \ git -C ~/ide-bridge/repo diff --cached --stat; } >> "$LOG" # ... 執行任務 ... { echo "=== $(date -Iseconds) post ==="; git -C ~/ide-bridge/repo diff --stat; \ git -C ~/ide-bridge/repo diff --cached --stat; } >> "$LOG"

即使不跑完整 git diff,也能在日誌中快速掌握檔案級變更規模,利於稽核與回滾決策。

6. doctor 與健康探針。變更設定後先執行:

openclaw doctor --json > ~/ide-bridge/scratch/probe/doctor-last.json

再以 launchd 每五分鐘請求健康端點(標頭請依實際鑑別方式調整):

curl -fsS -H "Authorization: Bearer $(cat ~/.openclaw/gateway.token)" \ http://127.0.0.1:18765/health \ || echo "$(date -Iseconds) health FAIL" >> ~/ide-bridge/scratch/probe/health.log

探針失敗時可 tail 上述日誌並對照閘道退出碼;與定價頁所選機器規格無關的常見原因包含磁碟空間耗盡與監聽埠衝突。

可引用檢核點:① 閘道僅 127.0.0.1;② 權杖檔 600;③ diff 日誌每日一檔於 scratch/probe;④ 健康探針間隔建議 300 秒;⑤ doctor --json 於每次升級 CLI 後重跑。

排錯 FAQ

健康檢查 401/403?核對權杖檔權限與 Authorization 標頭格式;輪換權杖後請重啟 IDE 端與 launchd 工作,避免新舊 secret 混用。

IDE 儲存出現 EROFS?表示寫入落在唯讀 repo;請改為可寫 worktree,或先寫入 scratch 再由流水線合併。

doctor 回報模型或快取路徑不可讀?將快取根統一設為 ~/ide-bridge/scratch/openclaw-cache 並於設定檔明示,避免預設路徑落在唯讀卷或網路掛載。

diff 統計始終為空?確認 git -C 指向含 .git 的儲存庫根;子模組目錄請在父儲存庫外另記錄或改用 git -C 子模組路徑

閘道間歇無回應?檢視 launchctl print 與使用者資源限制;於同一機器執行 openclaw doctor 與手動 curl,區分網路問題與行程鎖死。

摘要:最小權限沙箱=唯讀儲存庫+可寫 scratch+本機回環閘道+限定權杖;可觀測性=doctor --json 基線+ diff 摘要+定時 /health。依序落地,可在遠端 Mac 穩定承載 IDE 橋接,而不把整台機器交給單次實驗。