每一份 Hermes Agent 安装都有一个 sandbox 设置,它决定shell 命令到底跑在哪儿。这件事的后果挺重的:决定一条坏命令的爆炸半径有多大、agent 用起来的体感有多快、以及你每个活跃小时要花多少钱。
Hermes 一共带七个后端。README 把它们列得整整齐齐:local、docker、ssh、singularity、modal、daytona、vercel。v0.14.0 把 Vercel Sandbox 补进来,凑成现在这一套。下面是决策树。
一张表看完七个后端
| 后端 | 隔离强度 | 延迟 | 成本 | 持久化 | 适合谁 |
|---|---|---|---|---|---|
| local | 没有 | <10 ms | 免费 | 有(你的磁盘) | 自己一个人在一台用完即扔的 VM 上写 |
| Docker | 容器 | 约 50 ms | 免费 | 按容器 | 任何开发机的默认选项 |
| SSH | 远端是什么强度就是什么 | 远端延迟 | 远端费用 | 有 | agent 在别人的机器上跑 |
| Singularity | HPC 容器 | 约 100 ms | 免费 | 按容器 | HPC 集群、科学计算 |
| Modal | serverless 容器 | 冷启动约 200 ms | 按活跃秒收费 | 可 snapshot | 突发计算、GPU 活儿 |
| Daytona | serverless 工作区 | 冷启动约 300 ms | 按活跃秒收费 | 闲置时休眠 | 长跑的 agent 环境、闲置成本几乎为零 |
| Vercel Sandbox | serverless 容器 | 冷启动约 200 ms | 按活跃秒收费 | 临时 | Web 工具链、JS 重度场景 |
local 和 docker 免费,跑在你机器上。剩下五个跑在别处——延迟、钱都得付,但换回来一些东西。
一个一个看,什么时候挑哪个
local——"在这台机器上我信这个 agent"
agent 直接在你的文件系统上、用你这个 user 的权限跑命令。零隔离。 agent 要是决定 rm -rf ~/code,就真的删了。tool 输出里夹带了一条 prompt injection,那条注入的命令也照跑。
什么时候这一档是对的:你在一台用完即扔的 VM 上写东西,agent 干的事情爆炸半径反正跟你自己手动干差不多,延迟低到 0 比安全余量更重要。
什么时候这一档是错的:基本上其他所有时候。
docker——对的默认值
跑在你机器上的一个容器,用 Linux namespace 做隔离。agent 看到的文件系统是容器视角;你真实的 /home 看不见——除非你自己挂进来。
hermes config set sandbox docker 然后 hermes setup,镜像就会拉好、配好。之后每一次 shell 工具调用都走容器。
这是 80% 用户的对的默认值。 延迟开销(每条命令约 50 ms)在聊天体感里看不出来。隔离强度足够——agent 跑 rm -rf / 也只能炸掉容器视角,容器本身是一次性的。需要 debug 的话你可以 docker exec 进去。
ssh——"agent 住在另一台机器上"
agent 的 shell 工具通过 SSH 在一台远端机器上执行。本地这边的 Hermes 进程是客户端;活儿都发生在远端那台。
这一档对的场景:agent 干的就是那种本该在远端干的基础设施活儿——部署到服务器、debug 生产日志、跑 migration。你不需要本地沙箱,因为远端那台就是沙箱。
远端那台机器,你得能接受 agent 拿到 shell 权限。SSH 凭据要按生产凭据来对待,因为它本来就是。
singularity——HPC 集群
Singularity(现在叫 Apptainer)是 HPC 集群真在用的容器 runtime——Docker 在 host 上要 root,HPC 环境给不了。你在一个研究集群上跑 Hermes——SLURM 调度、没有 Docker、一堆 GPU——这一档就对了。
不认识 "HPC" 或 "Singularity" 这两个词的话,跳过这一节。
modal——突发计算,尤其是 GPU
Modal 是个 serverless 容器平台。Hermes 每条命令(或者每个会话,可复用)起一个 Modal 容器,跑完命令再拆掉。按活跃计算秒数付费。GPU 档位有。
什么时候它强过 Docker:agent 需要 GPU,或者计算资源超出你本地机器能给的。什么时候它强过其他 serverless:冷启动约 200 ms,对聊天节奏的工具调用是可以接受的;snapshotting 也够好,会话中途的状态留得住。
daytona——长跑、闲置近零
Daytona 的杀手锏是休眠。你 agent 的环境闲下来就睡,要用的时候几百毫秒里醒过来。你付的是活跃秒数,不是闲置秒数。
实际效果是:你可以拥有一个"我的 Hermes"环境,带着你的 dotfiles、你的 skills、你跑到一半的活儿,它能在那几个月几乎不要钱,因为你只在用的时候付。
这一档适合:你想要一个 agent "住在某个地方"——但不想让它住你笔记本上。长时间闲置之后第一条请求约 300 ms 唤醒;之后请求就是容器速度。
vercel——Vercel Sandbox(v0.14.0)
最新加的一个后端,v0.14.0 进来的。和 Modal 一样的 serverless 容器模型,跑在 Vercel 的基建上。你本来就以 Vercel 作为部署目标的话,这是把 agent 沙箱也放到同一家 provider 上摩擦最小的选项。
最适合:JS 重度的场景,你希望 agent 的环境跟你生产部署环境一模一样。
怎么切换
hermes config set sandbox docker
# 或者:local、ssh、singularity、modal、daytona、vercel
需要凭据的后端(ssh / modal / daytona / vercel)——hermes setup 会问你要;也可以直接按文档用 hermes config set 设。
需要的话还能按 session 临时覆盖:hermes --sandbox modal 单跑一次需要 GPU 的活儿,之后回到你默认的 sandbox。
完全不要沙箱行不行
你可以完全关掉沙箱(local 后端),但 Hermes 还会在这之上盖一层命令审批流程:危险命令——rm -rf、curl | sh、动 /etc 的——都会在执行前明确弹审批。v0.14.0 把这一层加固了一遍,关掉三个 dangerous-command 绕过、加了 sudo 暴力破解阻断(#23736, #26829)。所以即便是 local 也不是"什么都没有"——它是"隔离更轻,但还有真审批"。逐层拆解可以看安全模型那篇。
实际给的建议
绝大多数人、绝大多数时候:Docker。
想让 agent 住在一台不是你笔记本的服务器上:Daytona(闲置就睡这件事真的挺神奇,成本算下来也对)。
有 GPU 活儿、或者 agent 在做真正的计算:Modal。
在集群里搞研究的:Singularity。
local —— 你得清楚这个 tradeoff 再用。SSH——只在活儿"本该"在远端发生的时候用。Vercel——你本来就在 Vercel 上的话。