@OpenRouter:关于如何在 Hermes 中设置 Pareto Code 的 @NousResearch 文档:https://hermes-agent.nousresearch.com/docs/user-guide/c…

X AI KOLs Following 工具

摘要

NousResearch 的文档解释了如何配置 Hermes AI 代理,重点在于通过 OpenRouter 设置 Pareto Code 路由以及管理配置文件。

@NousResearch 关于如何在 Hermes 中设置 Pareto Code 的文档:https://hermes-agent.nousresearch.com/docs/user-guide/configuration#openrouter-routing--pareto-code-for-auxiliary-tasks…
查看原文 导出为 Word 导出为 PDF
查看缓存全文

缓存时间: 2026/05/11 02:33

来自 @NousResearch 的文档,介绍如何在 Hermes 中设置 Pareto Code:https://hermes-agent.nousresearch.com/docs/user-guide/configuration#openrouter-routing–pareto-code-for-auxiliary-tasks…


配置 | Hermes Agent

来源:https://hermes-agent.nousresearch.com/docs/user-guide/configuration

所有设置均存储在 ~/.hermes/ 目录下,以便轻松访问。

目录结构

~/.hermes/
├── config.yaml # 设置(模型、终端、TTS、压缩等)
├── .env # API 密钥和机密信息
├── auth.json # OAuth 提供商凭证(Nous Portal 等)
├── SOUL.md # 主要代理身份(系统提示中的第 1 个槽位)
├── memories/ # 持久化记忆(MEMORY.md, USER.md)
├── skills/ # 代理创建的技能(通过 skill_manage 工具管理)
├── cron/ # 计划任务
├── sessions/ # 网关会话
└── logs/ # 日志(errors.log, gateway.log — 自动隐藏机密信息)

管理配置

hermes config # 查看当前配置
hermes config edit # 在编辑器中打开 config.yaml
hermes config set KEY VAL # 设置特定值
hermes config check # 检查缺少的选项(更新后)
hermes config migrate # 交互式添加缺少的选项

# 示例:
hermes config set model anthropic/claude-opus-4
hermes config set terminal.backend docker
hermes config set OPENROUTER_API_KEY sk-or-... # 保存到 .env

提示hermes config set 命令会自动将值路由到正确的文件——API 密钥保存到 .env,其他所有内容保存到 config.yaml

配置优先级

设置按以下顺序解析(优先级从高到低):

  1. CLI 参数——例如,hermes chat --model anthropic/claude-sonnet-4(每次调用的覆盖)
  2. ~/.hermes/config.yaml——所有非机密设置的主要配置文件
  3. ~/.hermes/.env——环境变量的后备;必需用于机密信息(API 密钥、令牌、密码)
  4. 内置默认值——当其他未设置时的硬编码安全默认值

经验法则:机密信息(API 密钥、机器人令牌、密码)放入 .env。其他所有内容(模型、终端后端、压缩设置、内存限制、工具集)放入 config.yaml。当两者都设置时,对于非机密设置,config.yaml 优先。

环境变量替换

您可以在 config.yaml 中使用 ${VAR_NAME} 语法引用环境变量:

auxiliary:
  vision:
    api_key: ${GOOGLE_API_KEY}
    base_url: ${CUSTOM_VISION_URL}
delegation:
  api_key: ${DELEGATION_KEY}

单个值中的多个引用有效:url: "${HOST}:${PORT}"。如果引用的变量未设置,占位符将原样保留(${UNDEFINED_VAR} 保持原样)。仅支持 ${VAR} 语法——裸 $VAR 不会展开。

有关 AI 提供商设置(OpenRouter、Anthropic、Copilot、自定义端点、自托管 LLM、备用模型等),请参阅 AI Providers

提供商超时

您可以为提供商设置 providers.<name>.request_timeout_seconds 以进行全范围的请求超时,以及 providers.<name>.models.<model>.timeout_seconds 以进行模型特定的覆盖。

这适用于每次传输(OpenAI-wire、原生 Anthropic、Anthropic 兼容)上的主轮次客户端、备用链、凭证轮换后的重建,以及(对于 OpenAI-wire)每个请求的超时 kwarg——因此配置的值的优先级高于旧的 HERMES_API_TIMEOUT 环境变量。

您还可以为流式调用的陈旧检测器设置 providers.<name>.stale_timeout_seconds,以及 providers.<name>.models.<model>.stale_timeout_seconds 以进行模型特定的覆盖。这优先于旧的 HERMES_API_CALL_STALE_TIMEOUT 环境变量。

保持这些设置未设置会保留旧的默认值(HERMES_API_TIMEOUT=1800s, HERMES_API_CALL_STALE_TIMEOUT=300s, 原生 Anthropic 900s)。

目前未与 AWS Bedrock 连接(bedrock_converse 和 AnthropicBedrock SDK 路径均使用 boto3,其有自己的超时配置)。

参见 cli-config.yaml.example 中的注释示例:https://github.com/NousResearch/hermes-agent/blob/main/cli-config.yaml.example

终端后端配置

Hermes 支持七种终端后端。每种后端决定代理的 shell 命令实际执行的位置——您的本地机器、Docker 容器、通过 SSH 的远程服务器、Modal 云沙箱(直接或通过 Nous 管理的网关)、Daytona 工作区、Vercel Sandbox 或 Singularity/Apptainer 容器。

terminal:
  backend: local # local | docker | ssh | modal | daytona | vercel_sandbox | singularity
  cwd: "." # 网关/计划任务工作目录(CLI 始终使用启动目录)
  timeout: 180 # 每个命令的超时(秒)
  env_passthrough: [] # 转发到沙箱执行的环境变量名称(终端 + execute_code)
  singularity_image: "docker://nikolaik/python-nodejs:python3.11-nodejs20" # Singularity 后端的容器镜像
  modal_image: "nikolaik/python-nodejs:python3.11-nodejs20" # Modal 后端的容器镜像
  daytona_image: "nikolaik/python-nodejs:python3.11-nodejs20" # Daytona 后端的容器镜像

对于 Modal、Daytona 和 Vercel Sandbox 等云沙箱,container_persistent: true 意味着 Hermes 将尝试在沙箱重建之间保留文件系统状态。它不保证相同的实时沙箱、PID 空间或后台进程仍在运行。

后端概述

后端命令运行位置隔离性最佳用途
local直接在您的机器上开发、个人使用
docker单个持久 Docker 容器(跨会话、/new、子代理共享)完全(命名空间、cap-drop)安全沙箱、CI/CD
ssh通过 SSH 的远程服务器网络边界远程开发、强大硬件
modalModal 云沙箱完全(云 VM)临时云计算、评估
daytonaDaytona 工作区完全(云容器)托管云开发环境
vercel_sandboxVercel Sandbox完全(云 microVM)具有快照支持文件系统持久化的云执行
singularitySingularity/Apptainer 容器命名空间(–containall)HPC 集群、共享机器

Local 后端

默认选项。命令直接在您的机器上运行,无隔离。无需特殊设置。

警告:代理具有与您用户帐户相同的文件系统访问权限。使用 hermes tools 禁用不需要的工具,或切换到 Docker 进行沙箱隔离。

Docker 后端

在具有安全加固(所有功能丢弃、无权限提升、PID 限制)的 Docker 容器内运行命令。

单个持久容器,而非每个命令一个。 Hermes 在首次使用时启动一个长寿命容器,并通过 docker exec 将每个终端、文件和 execute_code 调用路由到该同一容器——跨越会话、/new/resetdelegate_task 子代理——直至 Hermes 进程的生命周期结束。工作目录更改、安装的包和 /workspace 中的文件从一个工具调用延续到下一个,就像本地 shell 一样。容器在关闭时停止并移除。

详见下面的容器生命周期

terminal:
  backend: docker
  docker_image: "nikolaik/python-nodejs:python3.11-nodejs20"
  docker_mount_cwd_to_workspace: false # 将启动目录挂载到 /workspace
  docker_run_as_host_user: false # 见下文“以主机用户身份运行容器”
  docker_forward_env: # 转发到容器的环境变量
    - "GITHUB_TOKEN"
  docker_volumes: # 主机目录挂载
    - "/home/user/projects:/workspace/projects"
    - "/home/user/data:/data:ro" # :ro 表示只读
  # 资源限制
  container_cpu: 1 # CPU 核心数 (0 = 无限制)
  container_memory: 5120 # MB (0 = 无限制)
  container_disk: 51200 # MB (需要 XFS+pquota 上的 overlay2)
  container_persistent: true # 跨会话保留 /workspace 和 /root

要求:安装并运行 Docker Desktop 或 Docker Engine。Hermes 探测 $PATH 以及常见的 macOS 安装位置 (/usr/local/bin/docker, /opt/homebrew/bin/docker, Docker Desktop 应用包)。Podman 开箱即用:设置 HERMES_DOCKER_BINARY=podman(或完整路径)以在两者都安装时强制使用。

容器生命周期:Hermes 重用单个长寿命容器(docker run -d ... sleep 2h)用于所有终端和文件工具调用,跨越会话、/new/resetdelegate_task 子代理,直至 Hermes 进程的生命周期结束。命令通过具有登录 shell 的 docker exec 运行,因此工作目录更改、安装的包和 /workspace 中的文件都从一个工具调用延续到下一个。容器在 Hermes 关闭(或空闲扫描回收它时)停止并移除。通过 delegate_task(tasks=[...]) 生成的并行子代理共享这一个容器——并发的 cd、环境变量突变和写入同一路径会发生冲突。如果子代理需要隔离的沙箱,它必须通过 register_task_env_overrides() 注册每任务镜像覆盖,RL 和基准环境(TerminalBench2、HermesSweEnv 等)会自动为其每任务 Docker 镜像执行此操作。

安全加固

  • --cap-drop ALL,仅重新添加 DAC_OVERRIDE, CHOWN, FOWNER
  • --security-opt no-new-privileges
  • --pids-limit 256
  • 大小限制的 tmpfs 用于 /tmp (512MB), /var/tmp (256MB), /run (64MB)

凭证转发docker_forward_env 中列出的环境变量首先从 shell 环境解析,然后从 ~/.hermes/.env 解析。技能还可以声明 required_environment_variables,它们会自动合并。

SSH 后端

通过 SSH 在远程服务器上运行命令。使用 ControlMaster 进行连接重用(5 分钟空闲保持活动)。默认启用持久 shell——状态(cwd、环境变量)在命令之间存活。

terminal:
  backend: ssh
  persistent_shell: true # 保持长寿命 bash 会话(默认:true)

必需的环境变量

TERMINAL_SSH_HOST=my-server.example.com
TERMINAL_SSH_USER=ubuntu

可选

变量默认值描述
TERMINAL_SSH_PORT22SSH 端口
TERMINAL_SSH_KEY(系统默认)SSH 私钥路径
TERMINAL_SSH_PERSISTENTtrue启用持久 shell

工作原理:在初始化时使用 BatchMode=yesStrictHostKeyChecking=accept-new 连接。持久 shell 在远程主机上保持单个 bash -l 进程存活,通过临时文件通信。需要 stdin_datasudo 的命令自动回退到一次性模式。

Modal 后端

Modal 云沙箱中运行命令。每个任务获得一个隔离的 VM,具有可配置的 CPU、内存和磁盘。文件系统可以在会话之间快照/恢复。

terminal:
  backend: modal
  container_cpu: 1 # CPU 核心数
  container_memory: 5120 # MB (5GB)
  container_disk: 51200 # MB (50GB)
  container_persistent: true # 快照/恢复文件系统

必需MODAL_TOKEN_ID + MODAL_TOKEN_SECRET 环境变量,或 ~/.modal.toml 配置文件。

持久性:启用时,沙箱文件系统会在清理时快照,并在下次会话时恢复。快照记录在 ~/.hermes/modal_snapshots.json 中。这保留了文件系统状态,而不是实时进程、PID 空间或后台作业。

凭证文件:自动从 ~/.hermes/ 挂载(OAuth 令牌等)并在每个命令之前同步。

Daytona 后端

Daytona 托管工作区中运行命令。支持停止/恢复以实现持久性。

terminal:
  backend: daytona
  container_cpu: 1 # CPU 核心数
  container_memory: 5120 # MB → 转换为 GiB
  container_disk: 10240 # MB → 转换为 GiB (最大 10 GiB)
  container_persistent: true # 停止/恢复而不是删除

必需DAYTONA_API_KEY 环境变量。

持久性:启用时,沙箱在清理时停止(不删除),并在下次会话时恢复。沙箱名称遵循 hermes-{task_id} 模式。

磁盘限制:Daytona 强制执行 10 GiB 最大限制。超过此值的请求会被截断并带有警告。

Vercel Sandbox 后端

Vercel Sandbox 云 microVM 中运行命令。Hermes 使用标准的终端和文件工具表面;没有 Vercel 特定的面向模型的工具。

terminal:
  backend: vercel_sandbox
  vercel_runtime: node24 # node24 | node22 | python3.13
  cwd: /vercel/sandbox # 默认工作区根目录
  container_persistent: true # 快照/恢复文件系统
  container_disk: 51200 # 共享默认值;不支持自定义磁盘

必需安装:安装可选的 SDK 额外包:

pip install 'hermes-agent[vercel]'

必需认证:配置访问令牌认证,包含 VERCEL_TOKENVERCEL_PROJECT_IDVERCEL_TEAM_ID。这是 Render、Railway、Docker 和类似主机上部署和正常长时间运行的 Hermes 进程的受支持设置。对于一次性本地开发,Hermes 也接受短寿命 Vercel OIDC 令牌:

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

从链接的 Vercel 项目目录,您可以省略项目名称:

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

OIDC 令牌短寿命,不应用作记录的部署路径。

运行时terminal.vercel_runtime 支持 node24node22python3.13。如果未设置,Hermes 默认为 node24

持久性:当 container_persistent: true 时,Hermes 在清理期间快照沙箱文件系统,并为同一任务从该快照恢复后来的沙箱。快照内容可以包括 Hermes 同步的凭证、技能和复制到沙箱中的缓存文件。这仅保留文件系统状态;它不保留实时沙箱身份、PID 空间、shell 状态或运行的后台进程。

后台命令terminal(background=true) 使用 Hermes 的通用非本地后台进程流。您可以通过正常的进程工具在沙箱存活时生成、轮询、等待、查看日志和杀死进程。Hermes 不提供清理或重启后的原生 Vercel 分离进程恢复。

磁盘大小:Vercel Sandbox 目前不支持 Hermes 的 container_disk 资源旋钮。保持 container_disk 未设置或为共享默认值 51200;非默认值会导致诊断和后端创建失败,而不是被静默忽略。

Singularity/Apptainer 后端

Singularity/Apptainer 容器中运行命令。专为 Docker 不可用的 HPC 集群和共享机器设计。

terminal:
  backend: singularity
  singularity_image: "docker://nikolaik/python-nodejs:python3.11-nodejs20"
  container_cpu: 1 # CPU 核心数
  container_memory: 5120 # MB
  container_persistent: true # 可写覆盖层在会话之间持久化

要求:`apptainer

相似文章