跳到主要内容

工具与工具集(Tools & Toolsets)

工具是扩展 Agent 能力的函数。它们被组织成逻辑化的工具集(toolsets),可按平台启用或禁用。

可用工具

Hermes 内置了涵盖网页搜索、浏览器自动化、终端执行、文件编辑、记忆、委派、强化学习训练、消息投递、Home Assistant 等功能的广泛工具注册表。

备注

Honcho 跨会话记忆作为记忆提供商插件(plugins/memory/honcho/)提供,而非内置工具集。安装详情参见插件

高层类别:

类别示例描述
网络web_searchweb_extract搜索网络并提取页面内容。
终端与文件terminalprocessread_filepatch执行命令并操作文件。
浏览器browser_navigatebrowser_snapshotbrowser_vision支持文本和视觉的交互式浏览器自动化。
媒体vision_analyzeimage_generatetext_to_speech多模态分析与生成。
Agent 编排todoclarifyexecute_codedelegate_task规划、澄清、代码执行和子 Agent 委派。
记忆与检索memorysession_search持久记忆和会话搜索。
自动化与投递cronjobsend_message支持创建/列出/更新/暂停/恢复/运行/删除操作的定时任务,以及出站消息投递。
集成ha_*、MCP 服务器工具、rl_*Home Assistant、MCP、强化学习训练及其他集成。

完整的代码派生注册表,参见内置工具参考工具集参考

Nous 工具网关

付费 Nous Portal 订阅者可通过**工具网关(Tool Gateway)**使用网页搜索、图像生成、TTS 和浏览器自动化——无需单独 API 密钥。运行 hermes model 启用,或使用 hermes tools 配置各个工具。

使用工具集

# 使用特定工具集
hermes chat --toolsets "web,terminal"

# 查看所有可用工具
hermes tools

# 按平台配置工具(交互式)
hermes tools

常用工具集包括 websearchterminalfilebrowservisionimage_genmoaskillsttstodomemorysession_searchcronjobcode_executiondelegationclarifyhomeassistantmessagingspotifydiscorddiscord_admindebuggingsaferl

完整集合(包括 hermes-clihermes-telegram 等平台预设以及 mcp-<server> 等动态 MCP 工具集)参见工具集参考

终端后端

终端工具可在不同环境中执行命令:

后端描述使用场景
local在本机运行(默认)开发、可信任务
docker隔离容器安全性、可重现性
ssh远程服务器沙箱化,让 Agent 远离自身代码
singularityHPC 容器集群计算、无根权限
modal云端执行无服务器、弹性伸缩
daytona云端沙箱工作区持久化远程开发环境
vercel_sandboxVercel 沙箱云微虚拟机带快照支持文件系统持久化的云端执行

配置

# In ~/.hermes/config.yaml
terminal:
backend: local # or: docker, ssh, singularity, modal, daytona, vercel_sandbox
cwd: "." # Working directory
timeout: 180 # Command timeout in seconds

Docker 后端

terminal:
backend: docker
docker_image: python:3.11-slim

一个持久容器,在整个进程中共享。 Hermes 在首次使用时启动一个长期运行的容器(docker run -d ... sleep 2h),并通过 docker exec 将每次终端、文件和 execute_code 调用路由到同一容器中。工作目录更改、已安装的包、环境调整以及写入 /workspace 的文件,在 /new/resetdelegate_task 子 Agent 之间,在 Hermes 进程的整个生命周期内都会保留。容器在关闭时停止并删除。

这意味着 Docker 后端的行为类似于持久沙箱虚拟机,而非每个命令一个新容器。如果你 pip install foo 一次,它在整个会话期间都会存在。如果你 cd /workspace/project,后续的 ls 调用会看到该目录。完整生命周期详情和控制 /workspace/root 是否在 Hermes 重启后存活的 container_persistent 标志,参见配置 → Docker 后端

SSH 后端

出于安全考虑推荐使用——Agent 无法修改自身代码:

terminal:
backend: ssh
# Set credentials in ~/.hermes/.env
TERMINAL_SSH_HOST=my-server.example.com
TERMINAL_SSH_USER=myuser
TERMINAL_SSH_KEY=~/.ssh/id_rsa

Singularity/Apptainer

# Pre-build SIF for parallel workers
apptainer build ~/python.sif docker://python:3.11-slim

# Configure
hermes config set terminal.backend singularity
hermes config set terminal.singularity_image ~/python.sif

Modal(无服务器云)

uv pip install modal
modal setup
hermes config set terminal.backend modal

Vercel 沙箱

pip install 'hermes-agent[vercel]'
hermes config set terminal.backend vercel_sandbox
hermes config set terminal.vercel_runtime node24

需要同时配置 VERCEL_TOKENVERCEL_PROJECT_IDVERCEL_TEAM_ID 三个认证信息。这是在 Render、Railway、Docker 及类似主机上进行部署和正常长时间运行 Hermes 进程的支持路径。支持的运行时为 node24node22python3.13;Hermes 默认将 /vercel/sandbox 作为远程工作区根目录。

对于一次性本地开发,Hermes 也接受短期 Vercel OIDC token:

VERCEL_OIDC_TOKEN="$(vc project token <project-name>)" hermes chat

在已关联的 Vercel 项目目录中:

VERCEL_OIDC_TOKEN="$(vc project token)" hermes chat

设置 container_persistent: true 后,Hermes 使用 Vercel 快照在同一任务的沙箱重建后保留文件系统状态。这可以包括沙箱内 Hermes 同步的凭证、技能和缓存文件。快照不会保留活动进程、PID 空间或相同的活动沙箱身份。

后台终端命令使用 Hermes 的通用非本地进程流程:在沙箱活动时,spawn、poll、wait、log 和 kill 通过正常的 process 工具工作,但 Hermes 在清理或重启后不提供原生 Vercel 分离进程恢复。

保持 container_disk 未设置或使用共享默认值 51200;Vercel 沙箱不支持自定义磁盘大小,会导致诊断/后端创建失败。

容器资源

为所有容器后端配置 CPU、内存、磁盘和持久化:

terminal:
backend: docker # or singularity, modal, daytona, vercel_sandbox
container_cpu: 1 # CPU cores (default: 1)
container_memory: 5120 # Memory in MB (default: 5GB)
container_disk: 51200 # Disk in MB (default: 50GB)
container_persistent: true # Persist filesystem across sessions (default: true)

设置 container_persistent: true 后,已安装的包、文件和配置在会话间保留。

容器安全

所有容器后端均采用安全加固运行:

  • 只读根文件系统(Docker)
  • 所有 Linux capabilities 已丢弃
  • 禁止权限提升
  • PID 限制(256 个进程)
  • 完整命名空间隔离
  • 通过卷持久化工作区,而非可写根层

Docker 可通过 terminal.docker_forward_env 选择性接收显式环境变量允许列表,但转发的变量对容器内的命令可见,应视为在该会话中已暴露。

后台进程管理

启动后台进程并管理它们:

terminal(command="pytest -v tests/", background=true)
# Returns: {"session_id": "proc_abc123", "pid": 12345}

# Then manage with the process tool:
process(action="list") # Show all running processes
process(action="poll", session_id="proc_abc123") # Check status
process(action="wait", session_id="proc_abc123") # Block until done
process(action="log", session_id="proc_abc123") # Full output
process(action="kill", session_id="proc_abc123") # Terminate
process(action="write", session_id="proc_abc123", data="y") # Send input

PTY 模式(pty=true)支持 Codex 和 Claude Code 等交互式 CLI 工具。

Sudo 支持

如果命令需要 sudo,系统会提示输入密码(在会话期间缓存)。或者在 ~/.hermes/.env 中设置 SUDO_PASSWORD

注意

在消息平台上,如果 sudo 失败,输出会包含一条提示,建议将 SUDO_PASSWORD 添加到 ~/.hermes/.env