用 Crabbox Pond 为 AI Agent 搭建弹性运行时沙箱集群
AI Agent 做测试时最头疼的问题是什么?环境隔离、资源上限、多 Agent 网络互通——尤其是当你需要同时跑多个沙箱环境做集成测试时,每次手动开 VM、配网络、等环境就绪,一两个小时就没了。
Crabbox 是一个基于 Go 语言的开源远程测试执行控制平面(551 stars, MIT 协议),最近发布的 Pond 特性更是直接瞄准了这个问题。它不是又一个 CI 工具,而是让你(或者你的 AI Agent)通过一条命令就能申请一台云 VM,同步当前代码,运行命令,然后释放——整个过程从申请到 SSH 就绪一般在 30 秒以内。
更关键的是 Pond:它允许你把多台 VM 组成一个「运行时池」,池内的机器可以通过 Tailscale 直接互访,实现多 Agent 协作测试。本文带你上手完整的配置和实战场景。
快速安装
Crabbox 是一个 Go 二进制 CLI,安装非常简单:
brew install openclaw/tap/crabbox crabbox --version
不用 Homebrew?直接从 GitHub Releases 下载 macOS、Linux 或 Windows 的二进制即可。前置依赖:git、ssh、ssh-keygen、rsync、curl。
核心概念
Crabbox 的工作流程可以拆成三步:
- Warmup(预热):CLI 通过 Cloudflare Worker Broker 请求一台云 VM
- Sync(同步):rsync 将你的本地代码(包括 dirty checkout)同步到远端
- Run(运行)+ Release(释放):执行命令、流式输出、完成后释放资源
数据面(SSH、rsync、命令执行)始终从 CLI 直接连接到 VM,Broker 只管理租约状态和费用上限。这意味着没有中间数据泄露风险——对 AI Agent 沙箱场景特别重要。
Pond:运行时池的核心
Pond 是 Crabbox 的多 VM 编排特性。当你需要多个沙箱环境协同工作时(例如数据库 + API 服务 + 测试 Agent),传统的做法是手动维护每个 VM 的 IP 和连接参数。Pond 用一条 --pond 标签把多个租约绑定在一起:
crabbox warmup --pond agent-test --slug api --provider hetzner --tailscale crabbox warmup --pond agent-test --slug db --provider hetzner --tailscale crabbox run --id api -- "DB_HOST=db.cbx DATABASE_URL=postgres://user@db.cbx/myapp go test ./..."
三个关键概念:
1. 自动发现:crabbox pond peers --pond agent-test --json 返回所有成员,包含 slug、leaseID、provider、传输平面和暴露的端口信息。AI Agent 可以直接用这个 API 来发现当前可用资源。
2. 三种传输平面(Transport Planes):
| 平面 | 特点 | 适用场景 |
|---|---|---|
| Tailscale | P2P 网状网络, DNS | 多 Agent 协作测试 |
| URL Bridge | HTTP(S) 端点 | 浏览器/API 沙箱(E2B、Modal) |
| SSH-mesh | ssh -L 隧道转发 | 混合云/私有基础设施 |
3. 统一释放:crabbox pond release agent-test 一条命令释放池中所有 VM,不产生残留。
实战场景一:AI 编码 Agent 的集成测试沙箱
你的 AI 编码 Agent(Claude Code、Codex 等)生成了一组修改,需要在真实的云环境中跑集成测试。Crabbox 可以直接嵌入到 Agent 的 workflow 中:
crabbox warmup --pond ci-run --slug runner --provider hetzner --tailscale crabbox run --id runner -- "pnpm install && pnpm test:e2e" crabbox pond release ci-run
整个过程对 Agent 来说是透明的——它只需要调用 crabbox run -- pnpm test,其余的资源管理由 Crabbox 自动完成。
实战场景二:多 Agent 分布式测试(Pond 的核心用例)
当你的 Agent 需要测试分布式系统时(例如一个微服务集群),Pond 就派上用场了:
crabbox warmup --pond microservice-test --slug gateway --provider hetzner --tailscale
crabbox warmup --pond microservice-test --slug user-svc --provider hetzner --tailscale
crabbox warmup --pond microservice-test --slug order-svc --provider gcp --tailscale
crabbox pond peers --pond microservice-test --json | jq '.members[] | {slug, transport, endpoint}'
crabbox run --id gateway -- "USER_SVC_URL=http://user-svc.cbx:3000 go test ./test/e2e/..."
注意这里 provider 可以混用——gateway 和 user-svc 跑在 Hetzner,order-svc 跑在 GCP,但它们通过 Tailscale 组成同一张内网。数据不会经过 Broker,Agent 之间的所有流量直连。
实战场景三:AI Agent 批量回归测试
每天清晨自动触发批量回归测试,每个分支在一个独立的 Pond 中测试:
#!/bin/bash
BRANCHES=("feat/agent-rbac" "fix/rate-limit" "chore/upgrade-deps")
for BRANCH in "${BRANCHES[@]}"; do
POND_NAME="regression-${BRANCH//\//-}"
crabbox warmup --pond "$POND_NAME" --slug runner --provider hetzner --tailscale &
done
wait
for BRANCH in "${BRANCHES[@]}"; do
POND_NAME="regression-${BRANCH//\//-}"
crabbox run --id "$POND_NAME" -- "git checkout $BRANCH && pnpm test:ci" &
done
wait
echo "All tests complete. Releasing ponds..."
for BRANCH in "${BRANCHES[@]}"; do
crabbox pond release "regression-${BRANCH//\//-}"
done
与其他工具对比
| 特性 | Crabbox | GitHub Actions | 自建 Jenkins | E2B Sandbox |
|---|---|---|---|---|
| 启动速度 | ~30s | ~60s | 5-10min | ~5s |
| 多 VM 编排 | Pond | Matrix | 需插件 | 单 VM |
| 本地代码同步 | ✅ rsync | ❌ 需推送 | ✅ 需插件 | ❌ |
| 允许 dirty checkout | ✅ | ❌ | ❌ | ❌ |
| 费用上限 | ✅ 内置 | ✅ 按分钟 | ❌ 需自建 | ✅ |
| 开源 | ✅ MIT | ❌ | ✅ | ✅ |
| 混合云 | ✅ 6+ provider | ❌ 仅 Azure | ✅ | ❌ |
注意事项
Pond 目前是 v0.x 预览特性。pond= 标签键已稳定,但元数据格式和命令标志可能在 v1.0 前发生变化。生产使用建议锁定版本。
费用管理:Broker 内置了活跃租约上限和月度费用上限,可以通过 crabbox config set max-monthly-spend 50 设置每月上限 $50。
SSH 密钥:每次租约会生成一个一次性 SSH 密钥,租约释放后自动废弃,没有凭据残留风险。
快速上手总结
brew install openclaw/tap/crabbox crabbox warmup --pond my-test --slug runner --provider hetzner crabbox run --id runner -- "npm test" crabbox pond release my-test crabbox warmup --pond cluster --slug svc-a --provider hetzner --tailscale crabbox warmup --pond cluster --slug svc-b --provider hetzner --tailscale crabbox pond peers --pond cluster --json crabbox run --id svc-a -- "SVC_B=http://svc-b.cbx:8080 curl svc-b.cbx:8080/health" crabbox pond release cluster
如果你已经在用 AI 编码 Agent 做自动化测试,或者需要为多 Agent 场景搭建弹性沙箱环境,Crabbox Pond 是一个值得关注的开源选择——它解决了一个真实且普遍的痛点:AI Agent 需要快速、隔离、可编排的云上运行环境。
项目地址:github.com/openclaw/crabbox(551 stars, MIT 协议)
Pond 文档:crabbox.sh/features/pond.html
安装:brew install openclaw/tap/crabbox