04 · 工具系統與終端後端
區分 Hermes toolsets、tools、terminal backends、後臺程序、Nous Tool Gateway 和整體許可權風險。
Hermes 的工具系統決定 agent 能做什麼。**終端後端(terminal backend)**決定這些動作在哪裡發生。新手必須把這兩個問題分開——否則會把"開了 terminal toolset(終端工具集)"和"命令在本機執行"混成一件事,結果讓一個不可信任務在本機直接跑命令。
官方資料:Tools & Toolsets、Configuration、Toolsets Reference、Tools Reference、Security。
先給結論:toolset 是「能力開關」(讓 agent 能調什麼),backend 是「執行位置」(動作真正發生在哪臺機器)。先開最小 toolset,再選隔離合適的 backend;不要讓本機 local backend 承擔不可信任務——一條刪 ~/ 的命令在 local 沒有任何攔截。
Toolset 不是 backend
**Toolset(工具集)**是按用途分組的工具包,常見有:
web/search:搜尋和抽取網頁內容。file:讀寫檔案。terminal:執行 shell 命令。browser:頁面導航、快照、視覺自動化(playwright 風)。memory/session_search:長期記憶寫入與跨 session 歷史檢索。skills:載入可複用流程(agent 自創 + 手動 skill)。cronjob/messaging:定時任務和訊息投遞。delegation/code_execution:委派子代理和程式化 Python 執行。
完整工具清單按官方 Toolsets Reference 當前列表為準——具體工具集隨版本更新。
**Terminal backend(終端後端)**是 shell 命令的執行環境:
local:本機直接跑——快但沒有任何隔離,命令對本機有完全許可權。docker:在一個長生命週期 Docker 容器內跑——有隔離但容器內狀態會持久共享(詳見下文 Docker 的誤區)。ssh:透過 SSH 跑到遠端伺服器——把"Hermes 在哪"和"命令在哪"完全解耦。singularity:HPC(高效能運算)或 Docker 不可用的共享機器,常見於科研叢集。modal/daytona:雲端 sandbox(隔離沙箱)/ workspace——閒置免費、按需啟動的 serverless 環境。vercel_sandbox:Vercel 的 microVM(微型虛擬機器)+ 快照支援的雲端執行環境。
一句話總結:toolset 決定它能拿什麼工具,backend 決定命令實際在哪裡跑——兩個問題獨立配置,互不替代。
把這兩件事放在同一張圖裡看,就是橫軸×縱軸的矩陣——任意一條命令都對應"開了哪個 toolset"+"跑在哪個 backend"兩個獨立座標:
flowchart TB
subgraph TS["② toolset 維度 · 調什麼"]
T1["web<br/>搜尋"]
T2["file<br/>讀寫"]
T3["terminal<br/>執行"]
T4["browser<br/>瀏覽"]
T5["memory<br/>記憶"]
T6["skills<br/>技能"]
end
subgraph BE["① backend 維度 · 在哪跑"]
B1["local<br/>本機直跑<br/>無隔離"]
B2["docker<br/>容器<br/>持久共享"]
B3["ssh<br/>遠端主機"]
B4["modal/daytona<br/>vercel_sandbox<br/>雲端 sandbox"]
B5["singularity<br/>HPC"]
end
TS -->|"決定 agent<br/>能調什麼"| RUN["⚡ 命令實際執行"]
BE -->|"決定 shell 命令<br/>實際在哪臺機器"| RUN
style B1 fill:#fde2e2,stroke:#c43d3d
style RUN fill:#fde7c2,stroke:#d4761a
紅色 local 是預設且最危險的——開了 terminal toolset 不等於隔離,命令會直接跑在你開啟 Hermes 的那臺機器上。關鍵 mismatch:很多事故來自只看到 toolset 維度("我開了哪些工具"),卻沒意識到 backend 維度("命令實際在哪臺機器")始終是另一個獨立維度。
最小工具集
按任務開工具:
查资料 -> web/search
读文件 -> file read
改文件 -> file + patch
跑测试 -> terminal + 明确 backend
操作页面 -> browser
回查历史 -> session_search
长期事实 -> memory
复用流程 -> skills
定时任务 -> cronjob
跨平台通知 -> messaging/send_message工具越多,許可權越大,錯誤來源也越多。第一次使用只開最少能力:普通對話穩定後,再讀檔案,再執行低風險命令。
Backend 選擇
local
最快,直接影響本機。只適合可信專案和低風險命令。
docker
適合隔離未知程式碼和臨時依賴。注意容器在 Hermes 程序內持久共享。
ssh
適合遠端 GPU、VPS、隔離診斷機或不想碰本機環境的任務。
singularity
適合 HPC 或 Docker 不可用的共享機器。
modal / daytona
適合雲端執行、臨時算力和遠端持久 workspace。
vercel_sandbox
適合 Vercel microVM(微型虛擬機器)和 snapshot-backed(快照支援的)雲端執行——快速冷啟動 + 檔案系統快照持久化。
local 沒有隔離。docker 有隔離但不是每條命令全新容器。ssh 有主機邊界但需要管理遠端憑據。雲 sandbox 有成本、持久化和憑據同步邊界。
Docker 的誤區
Hermes Docker backend 是一個長生命週期容器。它會把後續 terminal、file、execute_code 呼叫透過 docker exec 送進去,程序生命週期內會保留包、檔案和工作目錄狀態。
這有兩個後果:
- 好處:一次安裝的依賴後續可用,像遠端開發容器。
- 風險:並行 subagents、
/new、/reset仍可能共享同一容器狀態。
如果你需要並行隔離,不能只說“用 Docker”。還要規劃每個任務的工作目錄、volume、env、寫入路徑和清理方式。
後臺程序
測試、構建、服務啟動、長時間診斷適合後臺程序。它們必須能啟動、輪詢、讀取日誌、等待和終止。
terminal(command="pytest -v tests/", background=true)
process(action="poll", session_id="proc_abc123")
process(action="log", session_id="proc_abc123")
process(action="kill", session_id="proc_abc123")不要把釋出、刪除、資料庫遷移、賬單變更這類高風險動作直接後臺化。後臺不是降低風險,只是讓任務離開當前互動視線。
Nous Tool Gateway 的邊界
Nous Portal 付費使用者可以透過 Tool Gateway 使用 web search、image generation、TTS、browser automation 等能力,減少單獨配置工具 API key 的成本。
但 Tool Gateway 只解決“工具供應商憑據”問題,不解決“哪些人和平臺能呼叫工具”的問題。Gateway 使用者、toolsets、terminal backend、allowlist 仍要單獨管。
風險不只來自 shell
即使關閉 terminal,也仍有副作用:
file可以讀寫檔案。browser可以操作網頁和登入態。messaging可以外發內容。memory會影響後續 session。skills可能載入指令碼和金鑰需求。- MCP tools 可能連線資料庫、GitHub、Slack 或瀏覽器。
安全邊界要按整體工具能力設計,而不是隻盯 shell。
驗收清單
你應該能用一句話回答下面 7 個問題。任何一項答不上來,說明工具 / 後端邊界沒真正搞清楚——先停下來弄清,再開下一個工具:
- 當前啟用了哪些 toolset?(
hermes config show看toolsets欄位) - 每個 toolset 為什麼需要?(不能回答 = 應該關掉)
- Terminal backend 是
local、docker、ssh還是雲端?(hermes config show看terminal.backend欄位,或直接看~/.hermes/config.yaml) - 命令實際在哪個環境執行?(讓 Hermes 跑一條
pwd && hostname驗證) - 哪些 env vars(環境變數)會進入 backend?(敏感變數是否會洩漏到容器或遠端)
- 日誌、輸出檔案和後臺程序狀態在哪裡看?(
~/.hermes/logs/+process(action="log")) - 不需要的工具如何關閉?(
hermes config set toolsets.<name> false或編輯 yaml)
官方資料
- Tools & Toolsets
- Tools Reference(完整工具清單)
- Toolsets Reference(toolset 分組)
- Security(命令審批、使用者授權、容器隔離)
- Docker Backend(Docker 後端深入)
- Checkpoints & Rollback(破壞性操作的回復機制)