---
title: "04 · 工具系統與終端後端"
description: "區分 Hermes toolsets、tools、terminal backends、後臺程序、Nous Tool Gateway 和整體許可權風險。"
verifiedAt: "2026-05-09"
---

Hermes 的**工具系統**決定 agent 能做什麼。**終端後端（terminal backend）**決定這些動作在哪裡發生。新手必須把這兩個問題分開——否則會把"開了 terminal toolset（終端工具集）"和"命令在本機執行"混成一件事，結果讓一個不可信任務在本機直接跑命令。

官方資料：[Tools & Toolsets](https://hermes-agent.nousresearch.com/docs/user-guide/features/tools)、[Configuration](https://hermes-agent.nousresearch.com/docs/user-guide/configuration)、[Toolsets Reference](https://hermes-agent.nousresearch.com/docs/reference/toolsets-reference)、[Tools Reference](https://hermes-agent.nousresearch.com/docs/reference/tools-reference)、[Security](https://hermes-agent.nousresearch.com/docs/user-guide/security)。

> [!NOTE]
> **先給結論**：**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](https://hermes-agent.nousresearch.com/docs/reference/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"兩個獨立座標：

```mermaid
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 維度（"命令實際在哪臺機器"）始終是另一個獨立維度。

## 最小工具集

按任務開工具：

```text
查资料        -> web/search
读文件        -> file read
改文件        -> file + patch
跑测试        -> terminal + 明确 backend
操作页面      -> browser
回查历史      -> session_search
长期事实      -> memory
复用流程      -> skills
定时任务      -> cronjob
跨平台通知    -> messaging/send_message
```

工具越多，許可權越大，錯誤來源也越多。第一次使用只開最少能力：普通對話穩定後，再讀檔案，再執行低風險命令。

## Backend 選擇

<Cards>
  <Card title="local" description="最快，直接影響本機。只適合可信專案和低風險命令。" />
  <Card title="docker" description="適合隔離未知程式碼和臨時依賴。注意容器在 Hermes 程序內持久共享。" />
  <Card title="ssh" description="適合遠端 GPU、VPS、隔離診斷機或不想碰本機環境的任務。" />
  <Card title="singularity" description="適合 HPC 或 Docker 不可用的共享機器。" />
  <Card title="modal / daytona" description="適合雲端執行、臨時算力和遠端持久 workspace。" />
  <Card title="vercel_sandbox" description="適合 Vercel microVM（微型虛擬機器）和 snapshot-backed（快照支援的）雲端執行——快速冷啟動 + 檔案系統快照持久化。" />
</Cards>

`local` 沒有隔離。`docker` 有隔離但不是每條命令全新容器。`ssh` 有主機邊界但需要管理遠端憑據。雲 sandbox 有成本、持久化和憑據同步邊界。

## Docker 的誤區

Hermes Docker backend 是一個長生命週期容器。它會把後續 terminal、file、`execute_code` 呼叫透過 `docker exec` 送進去，程序生命週期內會保留包、檔案和工作目錄狀態。

這有兩個後果：

- 好處：一次安裝的依賴後續可用，像遠端開發容器。
- 風險：並行 subagents、`/new`、`/reset` 仍可能共享同一容器狀態。

如果你需要並行隔離，不能只說“用 Docker”。還要規劃每個任務的工作目錄、volume、env、寫入路徑和清理方式。

## 後臺程序

測試、構建、服務啟動、長時間診斷適合後臺程序。它們必須能啟動、輪詢、讀取日誌、等待和終止。

```python
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](https://hermes-agent.nousresearch.com/docs/user-guide/features/tools)
- [Tools Reference](https://hermes-agent.nousresearch.com/docs/reference/tools-reference)（完整工具清單）
- [Toolsets Reference](https://hermes-agent.nousresearch.com/docs/reference/toolsets-reference)（toolset 分組）
- [Security](https://hermes-agent.nousresearch.com/docs/user-guide/security)（命令審批、使用者授權、容器隔離）
- [Docker Backend](https://hermes-agent.nousresearch.com/docs/user-guide/docker)（Docker 後端深入）
- [Checkpoints & Rollback](https://hermes-agent.nousresearch.com/docs/user-guide/checkpoints-and-rollback)（破壞性操作的回復機制）

## 下一步

<Cards>
  <Card title="記憶與召回" description="工具邊界清楚後，再理解 Hermes 怎麼跨 session 保留事實——記憶系統的寫入門檻和召回機制。" href="/zh-Hant/docs/hermes/understanding/05-memory-and-recall" />
  <Card title="工具手冊" description="需要具體 toolset 和 backend 配置示例，查官方教程中文版的工具系統頁。" href="/zh-Hant/docs/hermes/official/01-user-guide/tools" />
</Cards>
