1–5 分鐘交付

內建 OpenClaw 的 Agent 沙箱

$21.5 / 天起 · 實體機獨享
配置雲端 Mac
策略隔離 操作審計 M4 · 38 TOPS

FIELD NOTE · AI Agent

OpenClaw 沙箱實戰:在隔離 macOS 裡跑 AI Agent 任務

LangGraph、AutoGen 或自研 Agent 若直接掛在登入使用者的 shell 權限下執行,等同把鑰匙串、SSH 私鑰與整台 Mac 的讀寫能力交給不可預測的工具呼叫鏈。本文記錄在 JexMac 獨享 Mac mini M4 節點上,如何用 OpenClaw 為 Agent 劃定策略邊界、提交首個隔離任務並核對審計日誌——從控制台開通到 CLI 執行,全程可復現。

Agent 為什麼不能「裸跑」在 macOS 上

人類開發者 SSH 登入後,通常清楚自己不會誤刪 ~/.ssh 或匯出 Distribution 憑證;AI Agent 則不同——框架在呼叫 shell、檔案、網路工具時,預設繼承當前 macOS 使用者的完整權限。一個任務描述為「掃描倉庫 TODO 並輸出 Markdown 報告」的 Agent,理論上只需要讀專案目錄和寫一個輸出檔,實際上卻能觸達鑰匙串、瀏覽器 Cookie、任意出站 HTTP 請求。

容器化能隔離行程,但在 macOS 上會犧牲完整 Xcode 工具鏈與 Apple 原生框架;每次任務重建虛擬機又太慢。OpenClaw 走第三條路:在真實 macOS 上,用 YAML 策略在系統呼叫層做 allow/deny 決策,同時把每條決策寫入審計流。Agent 仍可使用 M4 的 38 TOPS 神經引擎做本地推理,但越權讀寫會被即時攔截。

本文演示任務很具體:在沙箱內對已有程式碼快照做靜態掃描(rg 搜 TODO/FIXME),嘗試一次會被策略拒絕的 git clone,最後把報告寫到 /workspace。驗收標準是:腳本跑完、審計日誌裡同時出現 allow 與 deny 事件、你能從日誌欄位反查到觸發的 YAML 規則。

2.6s
演示腳本端到端耗時(含被攔 clone)
< 80ms
策略引擎累計決策開銷
3/3
CLI 健康檢查元件全綠
16 GB
M4 統一記憶體,推理與沙箱並行
實測環境說明

硬體:JexMac 日本(東京)節點 · Mac mini M4 · 10 核 CPU · 16 GB 統一記憶體 · 256 GB NVMe · 1 Gbps 獨享頻寬。系統:macOS 15 Sequoia。OpenClaw CLI 0.9.x,策略格式 v2。全程透過 SSH 完成,核心擴充批准步驟需短暫 VNC 登入一次。

動手前的四項檢查清單

本地筆電可以是 Windows、Linux 或 macOS,只要有 SSH 用戶端即可;但以下四項缺任意一項,流程會在中途卡住。

  • 已交付的 JexMac 實例:控制台「接入資訊」裡能看到 SSH 位址與連接埠。五處節點——新加坡、日本(東京)、韓國(首爾)、中國香港、美國東部——規格與定價一致,Agent 實驗建議按目標 API 延遲就近選區。
  • OpenClaw instance-token:在控制台「安全與沙箱」首次啟用時產生,格式類似 oct-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,頁面只顯示一次,須立即存入 1Password / Bitwarden 等密鑰庫。
  • 工作目錄 /workspace:宿主機上預先建立,沙箱會把該路徑對應為 Agent 的可讀寫區。不要把私鑰或 p12 放進此目錄。
  • 至少一份策略 YAML:第五節提供唯讀範本;原則是先嚴後鬆,用 deny 日誌驅動後續放權。

從控制台啟用 OpenClaw 並保管 instance-token

OpenClaw 並非預設開啟——每台物理實例獨立控制,避免不需要審計的場景承擔額外開銷。瀏覽器裡只需完成下面三步,其餘全部在 SSH 裡進行。

  1. 01
    進入實例詳情 →「安全與沙箱」

    登入 JexMac 控制台,開啟目標 Mac mini 實例,找到 OpenClaw 開關區域。若實例剛交付(1–5 分鐘內),等待狀態變為「執行中」再操作。

  2. 02
    啟用並複製 token

    點擊啟用,彈窗展示 instance-token。確認已寫入密鑰庫後,點「我已儲存,繼續」。切勿把 token 貼進 Slack、工單或 Git 提交。

  3. 03
    確認徽章為「已啟用」

    若 30 秒內仍顯示「啟用中」,重新整理頁面。綠色徽章出現即可關閉瀏覽器,後續用 CLI 操作。

透過 SSH 安裝 CLI 與三項元件健康檢查

SSH 登入實例後,安裝腳本會自動識別 Apple Silicon 架構,在 M4 上通常 30 秒內完成。

curl -fsSL https://api.jexmac.com/openclaw/install.sh | bash
openclaw auth login --token <instance-token>
openclaw status

openclaw status 必須三項均為 healthy

元件 職責 期望狀態
Policy Engine 解析 YAML,在 syscall 前做 allow/deny healthy
Sandbox Runtime 沙箱生命週期、行程隔離、目錄對應 healthy
Audit Bus 非同步寫入審計事件,不阻塞 Agent 主鏈路 healthy

若某項為 degradedunavailable,先跑 openclaw doctor。常見原因是首次安裝的系統擴充待批准——需瀏覽器 VNC 連入,開啟「系統設定 → 隱私權與安全性」點允許,再回到 SSH 重啟 CLI 服務。Policy Engine healthy 只代表行程正常,不代表 YAML 語法正確,策略校驗在下一節單獨做。

撰寫最小權限策略:一份可版本化的 YAML

策略檔決定 Agent 能讀哪些路徑、能啟動哪些行程、能否存取外網。推薦工作流:第一份 YAML 只開放任務必需的最小集合 → 跑任務 → 查 deny 日誌 → 按需追加 allow 規則,而不是從「全開放」事後收緊。

將下面內容儲存為 ~/policies/agent-readonly.yaml

apiVersion: openclaw.jexmac.com/v2
kind: SandboxPolicy
metadata:
  name: agent-readonly
spec:
  filesystem:
    allow:
      - path: /workspace
        access: [read, write]
    deny:
      - path: "**/Keychains/**"
      - path: "**/.ssh/**"
      - path: "**/Library/Cookies/**"
  process:
    allow: [git, rg, python3, zsh, bash]
  network:
    egress: deny-all

三個設計要點:deny 優先於 allow,即使 /workspace 整棵樹可寫,deny 列表中的路徑仍被阻斷;process.allow 是行程名稱白名單,Agent 若需 node / npm 須明確加入,否則報 E_POLICY_DENY: processegress: deny-all 在本演示中故意攔截 git clone,便於在審計裡看到 network deny 事件。

建立沙箱前校驗語法:

openclaw policy validate -f ~/policies/agent-readonly.yaml

期望輸出 policy valid (0 warnings);欄位拼寫錯誤或 v1 舊格式會給出具體行號。

建立沙箱、執行 Agent 任務、核對結果

在接入 LangGraph 等框架之前,建議先用確定性 shell 腳本跑通閉環——腳本行為可預期,報錯時能分清是「策略問題」還是「Agent 邏輯問題」。

在宿主機建立入口腳本 /workspace/agent-entry.sh

#!/bin/zsh
set -euo pipefail
cd /workspace
git clone --depth 1 https://github.com/apple/swift-sample-code.git repo 2>/dev/null \
  || echo "clone blocked (expected)"
rg -rn "TODO|FIXME" . --glob '*.swift' > scan-report.txt 2>/dev/null || true
echo "Scan complete: $(wc -l < scan-report.txt | tr -d ' ') matches" > summary.txt
cat summary.txt

chmod +x /workspace/agent-entry.sh 後,按順序執行:

  1. 01
    建立沙箱

    openclaw sandbox create --name agent-demo --policy ~/policies/agent-readonly.yaml

    返回狀態 ready 即可。同名沙箱重複 create 會提示已存在,不會破壞資料。

  2. 02
    另開 SSH 工作階段,即時追蹤審計

    openclaw audit tail --sandbox agent-demo --follow

    決策事件通常在操作後 50–200 ms 內出現在終端機。

  3. 03
    在沙箱內執行腳本

    openclaw sandbox exec agent-demo -- /bin/zsh /workspace/agent-entry.sh

    預期輸出含 clone blocked (expected),同時 summary.txt 寫入掃描行數。

  4. 04
    停止沙箱

    openclaw sandbox stop agent-demo

    /workspace 資料保留在宿主機;徹底清理加 --rm

因為出站網路被 deny,git clone 不會成功——這正是為了產生一條可核對的 network deny。若 rg 步驟正常完成,說明檔案系統 allow 設定正確。我們在東京節點測得整段腳本約 2.6 秒,策略開銷可忽略。

讀懂審計日誌:allow 與 deny 各代表什麼

審計不是事後 PDF 報告,而是與策略決策同步的事件流。典型 allow 記錄(讀入口腳本):

ts=2026-07-28T09:03:12.481Z
sandbox=agent-demo
syscall=open
resource=filesystem
path=/workspace/agent-entry.sh
access=read
decision=allow
policy_rule=filesystem.allow[0]
latency_us=34

policy_rule 指向觸發的 YAML 規則索引;latency_us 是決策微秒耗時。對應的 network deny(被攔的 clone):

ts=2026-07-28T09:03:12.512Z
sandbox=agent-demo
syscall=connect
resource=network
dst=140.82.113.4:443
decision=deny
policy_rule=network.egress.deny-all
latency_us=19

若生產任務確實需要拉取 GitHub,把 network.egress 改為 allow-list 並加入 github.com:443,validate 後執行 openclaw sandbox update --name agent-demo --policy ~/policies/agent-readonly.yaml,無需銷毀重建沙箱。

常用查詢:

  • 最近 1 小時 deny:openclaw audit query --decision deny --since 1h
  • 依路徑過濾:openclaw audit query --resource filesystem --path "/workspace/**"
  • 匯出 JSON 供 SIEM:openclaw audit export --sandbox agent-demo --since 24h --format json > audit.json

六種常見錯誤與最快修復方式

報錯現象 根本原因 處理辦法
auth login token 無效 複製帶空格,或 token 已輪換 控制台重新複製;macOS 上可用 pbpaste | xxd 檢查首尾字元
status 顯示 unavailable 系統擴充未批准 VNC → 系統設定 → 隱私權與安全性 → 允許 OpenClaw → 重啟服務
policy validate unknown field YAML 欄位名錯誤或 v1 格式 確認 apiVersion: openclaw.jexmac.com/v2
E_POLICY_DENY: filesystem 存取了 allow 列表外路徑 audit query --decision deny 查路徑,補入 filesystem.allow
E_POLICY_DENY: process 啟動了白名單外行程 resource=process 的 deny,把行程名加入 process.allow
git clone 逾時無 deny 日誌 DNS 被攔,connect 未到達 網路策略改用 allow-list,同時放行 8.8.8.8:53 或網域規則
憑證與多人協作

instance-token 等效於實例高權限憑證,禁止寫入 .env 或 Git。生產環境應為每位成員設定零信任裝置憑證與角色(viewer / operator / admin),而不是共享同一 token。

PoC 通過後:Agent 該部署在哪台 Mac 上長期執行

唯讀沙箱驗證環境只是起點。真實場景裡 Agent 可能要調 xcodebuild、拉 npm/PyPI、在 CI 裡依 PR 自動建立銷毀沙箱——擴展路徑始終是用 deny 日誌驅動策略迭代,而不是猜測權限。

算力方面,單台 Mac mini M4 · 16 GB 實測可並行 2 個含 DerivedData 的建置沙箱,另留約 4 GB 給 OpenClaw 審計與系統服務。負載繼續成長時,JexMac 的 Thunderbolt 5 並聯服務可將多台 Mac mini 組成 80 Gbps 叢集,各實例策略與審計日誌仍獨立儲存。

若團隊還沒有專屬雲端 Mac,常見替代方案各有明顯短板:本地 MacBook 7×24 跑 Agent 干擾日常開發且持續高負載散熱吃緊;GitHub 託管 macOS Runner 共享資源池、無 OpenClaw 原生整合,高峰排隊對互動式 Agent 不友善;自購 Mac mini 則要承擔採購週期、機房託管與憑證輪換的現場維護。

JexMac 提供獨享物理 Mac mini M4(10 核 · 16 GB · 256 GB NVMe · 38 TOPS),OpenClaw 隨標準實例內建,五節點各配獨立公網 IPv4 與 1 Gbps 頻寬,付款後 1–5 分鐘交付,按天 $21.5 起租、按月 $107.3,無合約鎖定。Agent 實驗階段按天開通,策略穩定後轉按月即可。

實體機獨享 · 1–5 分鐘交付

在隔離 macOS 裡跑你的第一個 Agent

文中命令已在 JexMac Mac mini M4 實體節點驗證。開通實例 → 啟用 OpenClaw → 依本文策略提交任務,一小時內可看到首條審計記錄。按天起租,PoC 結束隨時釋放。

標準配置
晶片Apple M4 · 38 TOPS
CPU10 核(4P + 6E)
記憶體16 GB 統一記憶體
網路1 Gbps 獨享頻寬
SLA99.9% 可用性
交付1–5 分鐘自動開通