Hermes Agent 是一款运行在服务器上的高级自主代理,可通过终端或消息应用访问,它能记住所学内容,运行时间越长,能力越强。
Hermes WebUI 是一款轻量级、深色主题的 Web 应用界面,可在浏览器中使用 Hermes Agent。与 CLI 体验完全一致——所有可通过终端完成的操作,都能通过此 UI 实现。无需构建步骤,无需框架,无需打包工具。仅需 Python 和原生 JS。
布局:三面板。左侧边栏用于会话和导航,中间为聊天区域,右侧为工作区文件浏览。模型、配置文件和工作区控制项位于输入框底部——在输入时始终可见。圆形上下文环可直观显示令牌使用情况。所有设置和会话工具均位于 Hermes Control Center(侧边栏底部的启动器)中。
这使你能通过便捷的 Web UI 获得与 Hermes CLI 几乎 1:1 的功能对等体验,可通过 Hermes 环境中的 SSH 隧道安全访问。单条命令即可启动,单条命令即可通过 SSH 隧道在你的电脑上访问。Web UI 的每一部分都使用你现有的 Hermes 代理和现有模型,无需任何额外设置。
docker compose -f docker-compose.two-container.yml up -d
docker compose -f docker-compose.three-container.yml up -d
两个compose文件默认使用命名Docker卷,通过这种方式从根本上解决了UID/GID问题。如果需要使用绑定挂载来共享现有主机目录,请参阅docs/docker.md获取完整迁移方案。
已知限制(#681):在双容器设置中,从WebUI触发的工具在WebUI容器中运行,而非agent容器。如果需要在WebUI的文件系统中使用git/node等工具,请使用单容器设置、扩展WebUI Dockerfile或使用社区一体化镜像。
已知限制(#681):在双容器设置中,从WebUI触发的工具在WebUI容器中运行,而非agent容器。如果需要在WebUI的文件系统中使用git/node等工具,请使用单容器设置、扩展WebUI Dockerfile或使用社区一体化镜像。
| 症状 | 可能原因 | 解决方法 |
|---|---|---|
| 启动时出现 PermissionError | 绑定挂载的UID不匹配 | 在.env中设置 UID=$(id -u) |
| .env: permission denied(#1389) | fix_credential_permissions() 强制设置为0600 | 在.env中设置 HERMES_SKIP_CHMOD=1 |
| 工作区显示为空 | /workspace挂载的UID不匹配 | 在.env中设置 UID=$(id -u) |
| 聊天中出现 git: command not found | 双容器架构限制(#681) | 使用单容器或扩展Dockerfile |
| WebUI无法找到agent源 | hermes-agent-src卷配置错误 | 直接使用compose文件中的命名卷 |
| Podman共享 .hermes 失败 | Podman 3.4的keep-id限制 | 使用Podman 4+或单容器 |
PermissionError、UID=$(id -u)、.env、.env: permission denied、fix_credential_permissions()、HERMES_SKIP_CHMOD=1、.env、/workspace、UID=$(id -u)、.env、git: command not found、hermes-agent-src、.hermes、keep-id。有关这些问题的深入分析,请参阅docs/docker.md。
[!NOTE] 默认情况下,Docker Compose绑定到127.0.0.1(仅本地主机)。要在网络上暴露,请在docker-compose.yml中将端口更改为“8787:8787”,并设置HERMES_WEBUI_PASSWORD以启用身份验证。
[!NOTE] 默认情况下,Docker Compose绑定到127.0.0.1(仅本地主机)。要在网络上暴露,请在docker-compose.yml中将端口更改为“8787:8787”,并设置HERMES_WEBUI_PASSWORD以启用身份验证。
127.0.0.1、"8787:8787"、docker-compose.yml、HERMES_WEBUI_PASSWORD
| 项目 | 发现方式 |
|---|---|
| Hermes agent目录 | HERMES_WEBUI_AGENT_DIR环境变量,然后是~/.hermes/hermes-agent,再然后是同级目录../hermes-agent |
| Python可执行文件 | 优先使用Agent虚拟环境,然后是本仓库中的.venv,再然后是系统python3 |
| 状态目录 | HERMES_WEBUI_STATE_DIR环境变量,然后是~/.hermes/webui-mvp |
| 默认工作区 | HERMES_WEBUI_DEFAULT_WORKSPACE环境变量,然后是~/workspace,再然后是状态目录 |
| 端口 | HERMES_WEBUI_PORT环境变量或第一个参数,默认8787 |
HERMES_WEBUI_AGENT_DIR、~/.hermes/hermes-agent、../hermes-agent、.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 # 启用agent依赖的自动安装(默认禁用)
./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_WEBUI_EXTENSION_DIR | (未设置) | 可选本地目录,在/extensions/提供服务;启用扩展注入前必须指向现有目录 |
| HERMES_WEBUI_EXTENSION_SCRIPT_URLS | (未设置) | 可选逗号分隔的同源脚本URL,用于注入;参见WebUI扩展 |
| HERMES_WEBUI_EXTENSION_STYLESHEET_URLS | (未设置) | 可选逗号分隔的同源样式表URL,用于注入;参见WebUI扩展 |
| 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_WEBUI_EXTENSION_DIR、/extensions/、HERMES_WEBUI_EXTENSION_SCRIPT_URLS、HERMES_WEBUI_EXTENSION_STYLESHEET_URLS、HERMES_HOME、~/.hermes、HERMES_CONFIG_PATH、~/.hermes/config.yaml
服务器默认绑定到127.0.0.1(仅回环地址)。如果在VPS或远程服务器上运行Hermes,请从本地机器使用SSH隧道:
ssh -N -L <本地端口>:127.0.0.1:<远程端口> <用户名>@<服务器地址>
示例:
ssh -N -L 8787:127.0.0.1:8787 user@your.server.com
然后在本地浏览器中打开http://localhost:8787。
http://localhost:8787。当start.sh检测到通过SSH运行时,会自动为您打印此命令。
start.sh
Tailscale是基于构建的零配置网状。在服务器和手机上安装它,它们将加入同一个私有网络——无需端口转发、无需SSH隧道、无需公网暴露。
Hermes Web UI具有完全响应式设计和移动优化布局(汉堡菜单侧边栏、抽屉式侧边栏顶部标签、触控友好控件),因此非常适合作为手机上的日常代理界面。
设置步骤:
HERMES_WEBUI_HOST=0.0.0.0 HERMES_WEBUI_PASSWORD=your-secret ./start.sh
http://<服务器的Tailscale IP>:8787、tailscale ip -4
就是这样。流量通过***进行端到端加密,密码身份验证在应用层保护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。
HERMES_WEBUI_HOST=0.0.0.0、docker-compose.yml、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及其他必要包。
健康检查:
curl http://127.0.0.1:8787/health
测试会动态发现仓库和Hermes代理——无硬编码路径。
cd hermes-webui
pytest tests/ -v --timeout=60
或显式使用代理venv:
/path/to/hermes-agent/venv/bin/python -m pytest tests/ -v
测试在8788端口的隔离服务器上运行,并使用单独的状态目录。生产数据和实际cron任务绝不会被触及。当前测试数量:100多个测试文件中的3309个测试。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 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
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务