工具与工具集

工具是扩展代理能力的函数。它们被组织为逻辑工具集,可按平台启用或禁用。

可用工具

Hermes 附带广泛的内置工具注册表,涵盖网络搜索、浏览器自动化、终端执行、文件编辑、记忆、委派、RL 训练、消息投递、Home Assistant 等。

:::note Honcho 跨会话记忆可作为记忆提供商插件使用(plugins/memory/honcho/),而非内置工具集。安装请见插件。 :::

高级类别:

类别示例描述
Webweb_searchweb_extract搜索网络并提取页面内容。
X 搜索x_search通过 xAI 内置的 x_search Responses 工具搜索 X(Twitter)帖子和线程——依赖于 xAI 凭证(SuperGrok OAuth 或 XAI_API_KEY);默认关闭,通过 hermes tools → 🐦 X (Twitter) Search 选择加入。
终端与文件terminalprocessread_filepatch执行命令和操作文件。
浏览器browser_navigatebrowser_snapshotbrowser_vision支持文本和视觉的交互式浏览器自动化。
媒体vision_analyzeimage_generatevideo_generatevideo_analyzetext_to_speech多模态分析和生成。video_generatevideo_analyze 是选择加入的(通过 hermes tools--toolsets 添加 video_gen / video 工具集)。
代理编排todoclarifyexecute_codedelegate_task计划、澄清、代码执行和子代理委派。
记忆与回忆memorysession_search持久记忆和会话搜索。
自动化与投递cronjobsend_message定时任务(支持创建/列表/更新/暂停/恢复/运行/移除操作)以及出站消息投递。
集成ha_*、MCP 服务器工具、rl_*Home Assistant、MCP、RL 训练和其他集成。

有关权威的代码派生注册表,请参阅内置工具参考工具集参考

:::tip Nous 工具网关 付费 Nous Portal 订阅者可以通过**工具网关**使用网络搜索、图片生成、TTS 和浏览器自动化——无需单独的 API 密钥。运行 hermes model 启用它,或使用 hermes tools 配置单个工具。 :::

使用工具集

# 使用特定工具集
hermes chat --toolsets "web,terminal"
 
# 查看所有可用工具
hermes tools
 
# 按平台配置工具(交互式)
hermes tools

常用工具集包括 websearchterminalfilebrowservisionimage_genmoaskillsttstodomemorysession_searchcronjobcode_executiondelegationclarifyhomeassistantmessagingspotifydiscorddiscord_admindebuggingsaferl

查看工具集参考获取完整列表,包括平台预设如 hermes-clihermes-telegram 和动态 MCP 工具集如 mcp-<server>

终端后端

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

后端描述用例
local在您的机器上运行(默认)开发、受信任的任务
docker隔离容器安全、可重现性
ssh远程服务器沙箱化、防止代理修改自身代码
singularityHPC 容器集群计算、非 root
modal云端执行无服务器、扩展
daytona云沙箱工作区持久化远程开发环境
vercel_sandboxVercel Sandbox 云微 VM具有快照支持文件系统持久化的云端执行

配置

# 在 ~/.hermes/config.yaml 中
terminal:
  backend: local    # 或: docker, ssh, singularity, modal, daytona, vercel_sandbox
  cwd: "."          # 工作目录
  timeout: 180      # 命令超时时间(秒)

Docker 后端

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

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

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

SSH 后端

推荐用于安全——代理无法修改自身代码:

terminal:
  backend: ssh
# 在 ~/.hermes/.env 中设置凭证
TERMINAL_SSH_HOST=my-server.example.com
TERMINAL_SSH_USER=myuser
TERMINAL_SSH_KEY=~/.ssh/id_rsa

Singularity/Apptainer

# 为并行工作器预构建 SIF
apptainer build ~/python.sif docker://python:3.11-slim
 
# 配置
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 Sandbox

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 令牌:

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,但 Hermes 在清理或重启后不提供原生 Vercel 分离进程恢复。

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

容器资源

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

terminal:
  backend: docker  # 或 singularity、modal、daytona、vercel_sandbox
  container_cpu: 1              # CPU 核心数(默认:1)
  container_memory: 5120        # 内存 MB(默认:5GB)
  container_disk: 51200         # 磁盘 MB(默认:50GB)
  container_persistent: true    # 跨会话持久化文件系统(默认:true)

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

容器安全

所有容器后端都运行安全强化:

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

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

后台进程管理

启动后台进程并进行管理:

terminal(command="pytest -v tests/", background=true)
# 返回: {"session_id": "proc_abc123", "pid": 12345}
 
# 然后使用 process 工具进行管理:
process(action="list")       # 显示所有运行中的进程
process(action="poll", session_id="proc_abc123")   # 检查状态
process(action="wait", session_id="proc_abc123")   # 阻塞直到完成
process(action="log", session_id="proc_abc123")    # 完整输出
process(action="kill", session_id="proc_abc123")   # 终止
process(action="write", session_id="proc_abc123", data="y")  # 发送输入

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

Sudo 支持

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

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