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 与沙箱跑 Agent:权限面差在哪里

人类开发者登录 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 分钟自动开通