在同一台设备上同时运行 Hermes Agent v0.18.2 和 v0.19.1 时,最核心的挑战在于两个版本之间的数据库 schema 与 ABI 互不兼容。如果放任它们共用默认的 ~/.hermes 配置目录,启动失败、SQL 报错甚至记忆损坏几乎不可避免。v0.19.1 目前仍为预发布版(截至 2026 年 8 月 4 日,最新稳定版仍是 v0.18.2),其代码结构、状态数据库和插件 ABI 均可能已经调整,因此必须通过 HERMES_HOME 环境变量严格隔离配置目录,或者借助 Docker 容器、独立系统用户实现完全隔离。

以下提供三种具体操作方案,从轻量级到高强度,您可以根据实际需求灵活选用。
用 HERMES_HOME 环境变量硬隔离两套配置根目录
如果您主要进行开发调试或版本对比,这套方案最为轻量可控,无需新建系统用户或 Docker。关键在于:两个版本各自读写独立的配置目录,互不干扰。
首先为 v0.18.2 创建专属配置目录并初始化。在您当前已成功运行 v0.18.2 的环境下,执行 mkdir -p ~/hermes-v0.18.2 && cp -r ~/.hermes/* ~/hermes-v0.18.2/ 2>/dev/null || true。这一步至关重要——如果 ~/.hermes 为空或不完整,后续操作会出错。
接着为 v0.19.1 准备一个空白配置目录,执行 mkdir -p ~/hermes-v0.19.1。注意,切勿将旧配置复制进去。v0.19.1 的 state.db 表结构已经重写,强行复用 v0.18.2 的数据库会触发 schema migration 失败,导致 agent 启动即退出。
然后分别安装两个版本的可执行文件。安装 v0.18.2 使用最新稳定脚本 curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/install.sh | bash,它会自动安装到 ~/.hermes/venv/ 下。安装 v0.19.1 则需要从源码构建:先克隆预发布分支 git clone --branch v0.19.1-rc https://github.com/NousResearch/hermes-agent.git ~/hermes-v0.19.1-src,再进入目录执行 uv venv venv --python 3.11 && source venv/bin/activate && uv pip install -e ".[all]"。
最后启动时严格绑定各自环境。v0.18.2 实例执行 HERMES_HOME="$HOME/hermes-v0.18.2" ~/.hermes/venv/bin/python -m hermes --name=v18;v0.19.1 实例执行 HERMES_HOME="$HOME/hermes-v0.19.1" ~/hermes-v0.19.1-src/venv/bin/python -m hermes --name=v19。两个实例会各自读写独立的 SOUL.md、MEMORY.md 和 SQLite 文件。端口默认均为 8000,请记得手动指定不同端口以避免冲突。
用 Docker 容器彻底隔绝运行时环境
如果您需要验证 v0.19.1 在生产级网络策略、资源限制或特定 Python 版本下的行为,Docker 是唯一能保证 100% 隔离的方案。容器之间,文件系统、进程空间、端口和环境变量均不会泄漏。
方法一:基于最新镜像定制双标签。先拉取基础镜像并打两个版本标签:docker pull ghcr.io/nousresearch/hermes-agent:latest,然后重命名为 hermes:v0.18.2;再从 v0.19.1-rc 分支构建新镜像:cd ~/hermes-v0.19.1-src && docker build -t hermes:v0.19.1 .。
方法二:用 docker-compose 启动双实例。创建一个 docker-compose.yml,定义两个 service:agent-v18 使用 image hermes:v0.18.2,挂载卷 ./v18-config:/root/.hermes,暴露端口 8001:8000;agent-v19 使用 image hermes:v0.19.1,挂载卷 ./v19-config:/root/.hermes,暴露端口 8002:8000。
执行 docker-compose up -d 启动后,两个实例完全独立:v0.18.2 的日志写入 ./v18-config/logs/,v0.19.1 的 auth.json 存于 ./v19-config/auth.json,彼此不可见。
用独立系统用户实现最高强度隔离
如果您对安全性要求极高,例如在同一台机器上为不同客户部署 v0.18.2 生产环境和 v0.19.1 测试沙箱,必须杜绝任何内核级资源共享,那么独立系统用户方案是最佳选择。
第一步,创建专用用户:sudo adduser --disabled-password --gecos "" hermes-v18 和 sudo adduser --disabled-password --gecos "" hermes-v19。
第二步,为 hermes-v18 用户部署稳定版:sudo -u hermes-v18 bash -c 'curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/install.sh | bash'。
第三步,为 hermes-v19 用户部署预发布版:sudo -u hermes-v19 bash -c 'git clone --branch v0.19.1-rc https://github.com/NousResearch/hermes-agent.git ~/hermes-agent && cd ~/hermes-agent && uv venv venv --python 3.11 && source venv/bin/activate && uv pip install -e ".[all]"'。
第四步,启动命令必须显式指定用户与路径:sudo -u hermes-v18 HERMES_HOME="/home/hermes-v18/.hermes" /home/hermes-v18/.hermes/venv/bin/python -m hermes --port=8001;sudo -u hermes-v19 HERMES_HOME="/home/hermes-v19/.hermes" /home/hermes-v19/hermes-agent/venv/bin/python -m hermes --port=8002。
值得注意的是,两个用户的 home 目录权限被 Linux 内核强制隔离,hermes-v19 无法读取 hermes-v18 的 ~/.hermes/auth.json,反之亦然——这是文件系统级硬隔离,比环境变量或容器更底层。
