配置工具系统和终端后端
理解 Hermes tools、toolsets、Nous Tool Gateway、terminal backends、后台进程和权限边界。
打开工具后,Hermes Agent 就不只是聊天。它可以搜索网页、抽取页面、读写文件、运行命令、操作浏览器、写记忆、检索历史 session、创建 cron、发消息、调 Home Assistant、接 MCP(模型上下文协议),甚至启动子代理或 RL(强化学习)任务——能力越多,权限边界越需要刻意设计。
官方资料:Tools & Toolsets、Toolsets Reference、Tools Reference、Security、Docker Backend。
先给结论:Toolset(工具集)决定 Hermes 能调用哪些能力,terminal backend(终端后端)决定命令在哪里执行。先按任务开最小 toolset,再按风险选择 local / docker / ssh / 云 sandbox——两件事独立配置,互不替代。
三个核心概念
- Tool(工具):单个外部能力,例如
terminal(执行 shell)、read_file(读文件)、patch(改文件)、web_search(搜网页)。 - Toolset(工具集):按场景打包的一组 tools,例如
web(网页类)、terminal(执行类)、file(文件类)、browser(浏览器类)、memory(记忆类)。这是配置的最小单元,按 toolset 整体启停。 - Terminal backend(终端后端):
terminal/file/code execution工具实际运行的环境——共 7 种:local(本机)、Docker(容器)、SSH(远程主机)、Daytona、Modal、Singularity、Vercel Sandbox。
不要把 toolset 和 backend 混在一起。terminal toolset 打开后,命令依然可能跑在本机、容器、远程服务器或云环境里——这两件事得分别决策。一句"我开了 terminal" 不等于"我知道命令在哪跑"。
工具分类
Web
web_search、web_extract,用于外部事实核验和网页抽取。
Terminal & Files
terminal、process、read_file、patch,负责命令执行和文件修改。
Browser
browser_navigate、browser_snapshot、browser_vision,用于页面交互和视觉检查。
Media
vision_analyze、image_generate、text_to_speech,处理多模态输入输出。
Agent orchestration
todo、clarify、execute_code、delegate_task,用于计划、澄清、代码执行和子代理。
Memory & recall
memory、session_search,用于长期记忆和历史会话检索。
Automation & delivery
cronjob、send_message,用于定时任务和消息投递。
Integrations
Home Assistant、MCP、RL training 和其他插件扩展。
Honcho(AI 原生用户建模插件,Nous Research 推荐)的 cross-session memory(跨会话记忆)是 memory provider plugin(记忆插件),不是内置 toolset。需要 Honcho 时按 memory provider(记忆插件)路线安装和配置。
Nous Tool Gateway
官方文档说明,付费 Nous Portal 用户可以通过 Nous Tool Gateway 使用 web search、image generation、TTS 和 browser automation,而不需要分别配置每个第三方 API key。
这解决的是“工具供应商凭据”问题,不解决“工具权限边界”问题。即使工具来自 Gateway,你仍然要决定哪些平台能用 browser、terminal、file、cronjob、send_message。
按任务开 toolset
可以按这个顺序判断:
查外部资料 -> web/search
读写项目文件 -> file
跑测试或脚本 -> terminal
操作网页 -> browser
沉淀流程 -> skills
长期上下文 -> memory/session_search
周期任务 -> cronjob
跨平台发消息 -> messaging/send_message
并行任务 -> delegation如果说不清为什么要开某个 toolset,先不要开。最小 toolset 的价值是让失败更容易定位。
Terminal backend 怎么选
local
可信个人项目、只读检查和低风险命令。最快,但没有隔离。
docker
不信任脚本、临时依赖、可复现环境。注意容器是进程内持久共享的。
ssh
远程服务器、隔离主机、VPS 或远程硬件。
singularity
HPC 和共享机器上的 rootless container 场景。
modal / daytona
云端 sandbox(隔离沙箱)、临时算力或远程持久 workspace(工作区);闲置免费、按需启动。
vercel_sandbox
Vercel microVM(微型虚拟机),支持 snapshot-backed(快照支持的)云端执行环境。
本机小任务用 local,不可信任务用 docker,远程资源用 ssh,长期云端执行再考虑 Modal、Daytona 或 Vercel Sandbox。
后台进程
Hermes 可以启动后台任务,并用 process tool 管理:
terminal(command="pytest -v tests/", background=true)
process(action="list")
process(action="poll", session_id="proc_abc123")
process(action="log", session_id="proc_abc123")
process(action="kill", session_id="proc_abc123")适合后台化的任务:
- 测试套件。
- 本地 dev server。
- 长时间日志观察。
- 非破坏性批处理。
不适合直接后台化的任务:
- 删除数据。
- 数据库迁移。
- 发布生产环境。
- 账单、权限、用户数据相关命令。
后台不是降低风险,只是让任务离开当前交互视线。越是后台任务,越要有日志、停止方式和超时。
Sudo 和密钥
需要 sudo 时,Hermes 会提示输入密码并在当前 session 内缓存。消息平台上不要发送密码。长期自动化如果必须使用 SUDO_PASSWORD,只能放在本地 .env 或安全凭据系统里,并明确它会暴露给对应 session 的命令执行环境。
环境变量转发也要收窄。Docker、SSH、云 sandbox 里只转发当前任务真正需要的变量。不要把全量 .env 直接透传给 agent 命令。
最小验收
启用工具后,你应该能回答下面 7 个问题。任何一项答不上来,先停下排查再继续接 Gateway 或 cron:
- 当前启用了哪些 toolsets?(
hermes config show看toolsets字段) - 每个 toolset 为什么需要?(不能回答 = 应该关)
- Terminal backend 是什么?(
hermes config show看terminal.backend字段,或直接看~/.hermes/config.yaml) - 命令实际在哪个环境执行?(让 Hermes 跑
pwd && hostname验证) - 后台进程如何查看、等待、读日志和停止?(
process(action="list/poll/log/kill")) - 不需要的工具如何关闭?(编辑 yaml 或
hermes config set toolsets.<name> false) - 哪些 secret 会进入这个 backend?(看
terminal.env_passthrough配置)
常见坑
按事故频率从高到低:
- 任务只需要读文件,却同时打开 terminal、browser、messaging —— 一旦出错,故障域比真正需要的大 5 倍
- 不知道命令在本机、容器、远程服务器还是云 sandbox 执行 —— 删错文件后才发现是本机
- Docker backend 共享同一个持久容器却按"每命令隔离"理解 —— 一个任务装的依赖污染另一个任务
- 后台进程启动后没人 poll、log 或 kill —— 长跑任务静默成功 / 失败都没人看
- 在消息平台里处理 sudo、密钥或高风险 shell —— 群里其他人能看到密码、能误触命令
- Tool Gateway 可用后就默认把所有工具开放给所有平台 —— 开放性 ≠ 权限边界,Gateway 只解决凭据,不解决"谁能用"
官方资料
- Tools & Toolsets
- Tools Reference(完整工具清单)
- Toolsets Reference(toolset 分组)
- Docker Backend
- Security(命令审批、用户授权、容器隔离)
- Checkpoints & Rollback(破坏性操作回滚)