每一份 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 上的話。