编码 Agent 已经能独立修改文件、执行测试和调用开发工具,但运行时间越长、权限越高,开发者就越需要隔离环境。Docker 此前推出的 Sandboxes 使用 microVM 承载自主工作的编码 Agent;新加入的 Cloud Sandboxes 则把同一套工作方式扩展到云端,并强调可以通过一条命令在本地与云端之间切换。
这项变化的重点不只是“把任务放到远程机器上”,而是让工作区、运行环境和安全边界一起迁移,减少本地试验与云端长任务之间的割裂。
microVM 为什么适合自主编码 Agent
普通代码补全通常只生成文本,而编码 Agent 可能会执行更广泛的操作:
- 读取和修改整个仓库;
- 安装依赖、运行构建脚本;
- 启动测试、浏览器或本地服务;
- 调用 Git、包管理器和其他命令行工具;
- 在较长时间内持续迭代。
因此,仅靠一个工作目录或进程级限制通常不够。Docker Sandboxes 将 Agent 放进 microVM 环境,让文件系统、进程和运行时边界与开发者的主机分离。这样即使 Agent 执行了错误命令,影响范围也更容易控制。
不过,microVM 并不等于“绝对安全”。一旦把主机凭据、Docker Socket、云账号密钥或无限制网络访问暴露给沙箱,隔离收益就会被显著削弱。真正可靠的方案仍然需要最小权限、短期凭据和明确的网络策略。
从本地切到云端,真正需要保持什么
“一条命令切换”要成立,关键不是两边使用相同的机器,而是双方遵守相同的任务契约。至少应固定以下内容:
- 代码输入:使用哪个提交、分支或工作区快照。
- 运行环境:基础镜像、语言版本和系统依赖。
- Agent 指令:允许修改什么,完成条件是什么。
- 权限边界:哪些目录可写、哪些网络地址可访问。
- 结果输出:补丁、提交、测试报告和日志如何带回。
本地沙箱适合快速试探和交互式调试;云端沙箱通常更适合耗时构建、并行任务,或者不希望因笔记本休眠而中断的工作。切换前最好先生成一个明确的 Git 提交或工作区快照,否则“同一个任务”可能实际运行在两套不同代码上。
一个可改造成真实项目的本地/云端入口
下面示例不是官方 CLI 语法,而是一种可落地的包装方式。假设本地和云端沙箱工具都接受统一的 run --config --workspace 接口;使用前请把 LOCAL_SANDBOX_CLI 与 CLOUD_SANDBOX_CLI 替换成实际命令。
先定义任务配置:
# sandbox-job.yaml
version: 1
workspace:
source: git
writable_paths:
- src
- tests
- package-lock.json
runtime:
image: node:22-bookworm
timeout_minutes: 45
agent:
task: >-
修复失败的测试,只修改 src 和 tests,完成后运行 npm test,
并输出变更摘要与仍未解决的问题。
network:
mode: restricted
allow_hosts:
- registry.npmjs.org
artifacts:
collect:
- test-results
- agent-summary.md
再创建统一入口脚本:
#!/usr/bin/env bash
set -euo pipefail
TARGET="${1:-local}"
CONFIG="${SANDBOX_CONFIG:-sandbox-job.yaml}"
if [[ ! -f "$CONFIG" ]]; then
echo "Missing config: $CONFIG" >&2
exit 1
fi
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
echo "Run this command inside a Git repository." >&2
exit 1
fi
case "$TARGET" in
local)
CLI="${LOCAL_SANDBOX_CLI:-sandbox-local}"
;;
cloud)
CLI="${CLOUD_SANDBOX_CLI:-sandbox-cloud}"
;;
*)
echo "Usage: $0 [local|cloud]" >&2
exit 2
;;
esac
if ! command -v "$CLI" >/dev/null 2>&1; then
echo "Sandbox CLI not found: $CLI" >&2
echo "Set LOCAL_SANDBOX_CLI or CLOUD_SANDBOX_CLI to your actual executable." >&2
exit 127
fi
echo "Target: $TARGET"
echo "Commit: $(git rev-parse HEAD)"
exec "$CLI" run --config "$CONFIG" --workspace "$PWD"
保存为 run-agent.sh 后执行:
chmod +x run-agent.sh
# 在本地 microVM 沙箱中试运行
LOCAL_SANDBOX_CLI=my-local-sandbox ./run-agent.sh local
# 保持任务配置不变,切换到云端
CLOUD_SANDBOX_CLI=my-cloud-sandbox ./run-agent.sh cloud
这个包装层的价值在于,团队不必把运行目标写进 Agent 指令。任务、权限和产物保持稳定,只有执行后端发生变化。接入真实产品时,还应确认其工作区同步、凭据注入和结果下载机制,而不是默认本地与云端行为完全一致。
上线前不要漏掉这些边界
可以从小型、低权限仓库开始验证,并按下面的清单逐步扩大使用范围:
- 固定代码版本:记录提交哈希,避免云端任务基于过期工作区运行。
- 限制凭据:使用短期、只读或仓库级令牌,不要复制个人全局凭据。
- 收紧网络:按域名或服务建立允许列表,避免任意外连。
- 控制写入范围:默认只允许修改任务需要的目录。
- 审查生成结果:将补丁、提交和测试报告带回正常代码评审流程。
- 设置超时与预算:云端 Agent 可能循环执行,应限制时间、并发数和资源规格。
- 保存审计记录:保留启动者、输入提交、执行命令、网络访问和最终产物。
Cloud Sandboxes 最值得关注的地方,是它把“在哪里运行 Agent”变成一个可以切换的部署选择。开发者可以在笔记本上快速开始,再把长时间任务交给云端,但安全性并不会因为使用 microVM 自动完成。只有把可复现环境、最小权限和结果审查组合起来,本地到云端的迁移才真正可靠。