Hermes Agent 是一款运行在服务器上的高级自主代理,可通过终端或消息应用访问,它能记住所学内容,运行时间越长,能力越强。
Hermes WebUI 是一款轻量级、深色主题的 Web 应用界面,可在浏览器中操作 Hermes Agent。与 CLI 体验完全一致——所有能在终端中完成的操作,都可通过此 UI 实现。无需构建步骤,无需框架,无需打包工具。仅需 Python 和原生 JS。
布局:三面板结构。左侧边栏用于会话和导航,中间为聊天区域,右侧为工作区文件浏览。模型、配置文件和工作区控制位于编辑器底部——编辑时始终可见。圆形上下文环可直观显示令牌使用情况。所有设置和会话工具均位于 Hermes 控制中心(侧边栏底部的启动器)。
支持完整配置文件的浅色模式 自定义设置,配置密码
带内联预览的工作区文件浏览器 会话项目、标签和工具调用卡片
这使您能通过便捷的 Web UI 获得与 Hermes CLI 几乎 1:1 的体验,您可通过 Hermes 环境中的 SSH 隧道安全访问该 UI。只需一条命令即可启动,一条命令建立 SSH 隧道即可在电脑上访问。Web UI 的所有部分均使用您现有的 Hermes 代理和模型,无需额外设置。
如果您在独立的Docker容器中运行Hermes Agent,并希望WebUI在另一个容器中:
docker compose -f docker-compose.two-container.yml up -d
这将启动两个带有共享卷的容器:
~/.hermes,用于配置、会话、技能和内存[!NOTE] 卷类型:默认情况下,compose文件使用命名Docker卷。如果您希望绑定挂载到现有目录(例如,与您已运行的代理容器共享状态),两个容器必须挂载相同的主机路径 — 代理写入
/root/.hermes,WebUI 读取/home/hermeswebui/.hermes。有关绑定挂载示例,请参见docker-compose.two-container.yml。
WebUI的初始化脚本在首次启动时会自动将hermes-agent及其所有依赖项(openai、anthropic等)安装到其自己的Python环境中。后续重启将重用已安装的包。
[!NOTE] 工作原理:WebUI直接导入hermes-agent的Python模块(不通过HTTP)。共享卷使代理源代码可用,初始化脚本运行
uv pip install来设置依赖项。两个容器共享同一个~/.hermes目录用于配置和状态。
有关完整配置,请参见 docker-compose.two-container.yml。
要在共享卷上一起运行Hermes Agent、Hermes Dashboard和WebUI,请使用三容器Compose文件:
docker compose -f docker-compose.three-container.yml up -d
这将启动:
所有三个服务共享同一个 hermes-home 命名卷,因此配置、会话、技能和内存在所有界面中保持一致。
实际上,hermes-home 卷是一个绑定挂载 — 所有三个容器都写入 ~/.hermes 下的同一文件系统树。如果容器以不同的UID运行,首先创建文件的容器将成为其所有者,其他容器在后续写入时会遇到 PermissionError。
解决方法是让所有容器以主机用户的UID和GID运行。
[!WARNING] 两个镜像系列使用不同的环境变量名称来设置UID/GID:
| 镜像 | 变量 |
|---|---|
| nousresearch/hermes-agent(代理+仪表板) | HERMES_UID / HERMES_GID |
| ghcr.io/nesquena/hermes-webui | WANTED_UID / WANTED_GID |
使用 .env 文件时,必须设置这两组变量。
对于标准Linux用户(UID ≥ 1000):
# 创建包含主机UID/GID的.env文件
echo "UID=$(id -u)"
>> .env
echo "GID=$(id -g)"
>> .env
# hermes-agent / hermes-dashboard
echo "HERMES_UID=$(id -u)"
>> .env
echo "HERMES_GID=$(id -g)"
>> .env
对于首选固定服务账户的NAS/Unraid部署,使用 10000:10000(或您的NAS服务UID)代替 $(id -u)。
如果在现有 ~/.hermes 目录上遇到 PermissionError,请运行一次性所有权修复命令:
chown -R $(id -u):$(id -g) ~/.hermes
仪表板容器需要对共享卷的读写访问权限(它会写入会话日志和仪表板状态)。不要在 hermes-dashboard 的 volumes: 条目中为 hermes-home 卷添加 :ro。
有关完整参考配置,请参见 docker-compose.three-container.yml。
| 项目 | 发现方式 |
|---|---|
| Hermes代理目录 | HERMES_WEBUI_AGENT_DIR 环境变量,然后是 ~/.hermes/hermes-agent,再是同级目录 ../hermes-agent |
| Python可执行文件 | 首先是代理虚拟环境,然后是本仓库中的 .venv,再是系统 python3 |
| 状态目录 | HERMES_WEBUI_STATE_DIR 环境变量,然后是 ~/.hermes/webui-mvp |
| 默认工作区 | HERMES_WEBUI_DEFAULT_WORKSPACE 环境变量,然后是 ~/workspace,再是状态目录 |
| 端口 | HERMES_WEBUI_PORT 环境变量或第一个参数,默认8787 |
如果自动发现找到了所有内容,则无需其他操作。
export HERMES_WEBUI_AGENT_DIR=/path/to/hermes-agent
export HERMES_WEBUI_PYTHON=/path/to/python
export HERMES_WEBUI_PORT=9000
export HERMES_WEBUI_AUTO_INSTALL=1 # 启用代理依赖自动安装(默认禁用)
./start.sh
或内联执行:
HERMES_WEBUI_AGENT_DIR=/custom/path ./start.sh 9000
环境变量完整列表:
| 变量 | 默认值 | 描述 |
|---|---|---|
| HERMES_WEBUI_AGENT_DIR | 自动发现 | hermes-agent 检出路径 |
| HERMES_WEBUI_PYTHON | 自动发现 | Python可执行文件 |
| HERMES_WEBUI_HOST | 127.0.0.1 | 绑定地址 |
| HERMES_WEBUI_PORT | 8787 | 端口 |
| HERMES_WEBUI_STATE_DIR | ~/.hermes/webui-mvp | 会话和状态存储位置 |
| HERMES_WEBUI_DEFAULT_WORKSPACE | ~/workspace | 默认工作区 |
| HERMES_WEBUI_DEFAULT_MODEL | openai/gpt-5.4-mini | 默认模型 |
| HERMES_WEBUI_PASSWORD | (未设置) | 设置以启用密码认证 |
| HERMES_HOME | ~/.hermes | Hermes状态的基础目录(影响所有路径) |
| HERMES_CONFIG_PATH | ~/.hermes/config.yaml | Hermes配置文件路径 |
HERMES_WEBUI_AGENT_DIR、HERMES_WEBUI_PYTHON、HERMES_WEBUI_HOST(默认值127.0.0.1)、HERMES_WEBUI_PORT(默认值8787)、HERMES_WEBUI_STATE_DIR(默认值~/.hermes/webui-mvp)、HERMES_WEBUI_DEFAULT_WORKSPACE(默认值~/workspace)、HERMES_WEBUI_DEFAULT_MODEL(默认值openai/gpt-5.4-mini)、HERMES_WEBUI_PASSWORD、HERMES_HOME(默认值~/.hermes)、HERMES_CONFIG_PATH(默认值~/.hermes/config.yaml)
服务器默认绑定到127.0.0.1(仅本地回环)。如果您在VPS或远程服务器上运行Hermes,请从本地机器使用SSH隧道:
ssh -N -L <local-port>:127.0.0.1:<remote-port> <user>@<server-ip>
示例:
ssh -N -L 8787:127.0.0.1:8787 user@your.server.com
然后在本地浏览器中打开 http://localhost:8787。
当检测到您通过SSH运行时,start.sh会自动为您打印此命令。
Tailscale是基于构建的零配置网状。在服务器和手机上安装它,它们将加入同一个私有网络——无需端口转发、无需SSH隧道、无需公网暴露。
Hermes Web UI具有完全响应式设计和移动优化布局(汉堡菜单侧边栏、抽屉式侧边栏顶部标签、触控友好控件),因此非常适合作为手机上的日常代理界面。
设置步骤:
HERMES_WEBUI_HOST=0.0.0.0 HERMES_WEBUI_PASSWORD=your-secret ./start.sh
tailscale ip -4命令查找服务器的Tailscale IP)。就是这样。流量通过***进行端到端加密,密码认证在应用层面保护UI。您可以将其添加到主屏幕,获得类似应用的体验。
提示:如果使用Docker,请在docker-compose.yml的环境变量中设置
HERMES_WEBUI_HOST=0.0.0.0(已是默认值)并设置HERMES_WEBUI_PASSWORD。
提示:如果使用Docker,请在docker-compose.yml的环境变量中设置HERMES_WEBUI_HOST=0.0.0.0(已是默认值)并设置HERMES_WEBUI_PASSWORD。
如果您希望直接启动服务器:
cd /path/to/hermes-agent # 或任何sys.path能找到Hermes模块的位置
HERMES_WEBUI_PORT=8787 venv/bin/python /path/to/hermes-webui/server.py
[!NOTE] 使用代理的venv Python(或任何已安装Hermes代理依赖的Python环境)。系统Python会缺少openai、httpx和其他必需包。
请登录使用轩辕镜像享受快速拉取体验,支持国内访问优化,速度提升
docker pull ghcr.io/nesquena/hermes-webui:0.50.113探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务