Hermes Agent 是一款运行在您服务器上的高级自主代理,可通过终端或消息应用访问,它能记住所学内容,运行时间越长,能力越强。
Hermes WebUI 是一款轻量级、深色主题的 Web 应用界面,可在浏览器中使用 Hermes Agent。与 CLI 体验完全对等——所有可通过终端完成的操作,都能通过此 UI 实现。无需构建步骤,无需框架,无需打包工具。仅需 Python 和原生 JS。
布局:三面板。左侧边栏用于会话和导航,中间为聊天区域,右侧为工作区文件浏览。模型、配置文件和工作区控制项位于 编辑器底部——在编辑时始终可见。圆形上下文环可直观显示令牌使用情况。所有设置和会话工具均位于 Hermes 控制中心(侧边栏底部的启动器)。
这使您能通过便捷的 Web UI 实现与 Hermes CLI 近乎 1:1 的对等体验,您可以通过 Hermes 环境中的 SSH 隧道安全访问。只需一条命令即可启动,一条命令即可通过 SSH 隧道在您的计算机上访问。Web UI 的每一部分都使用您现有的 Hermes 代理和现有模型,无需额外设置。
预构建镜像(amd64 + arm64)在每次发布时都会发布到GHCR。
有关涵盖所有3个compose文件、常见故障模式和绑定挂载迁移的综合设置指南,请参见docs/docker.md。README文档涵盖了5分钟快速入门路径。
最简单的设置:一个在进程内运行agent的WebUI容器。
git clone https://github.com/nesquena/hermes-webui
cd hermes-webui
cp .env.docker.example .env
# 如果主机UID不是1000(例如macOS的UID从501开始),请编辑.env
docker compose up -d
# 打开 http://localhost:8787
容器会从挂载的~/.hermes卷自动检测您的UID/GID,因此agent写入的文件在主机上仍可被您读取。
要启用密码保护(如果将端口暴露在127.0.0.1之外则必需):
echo "HERMES_WEBUI_PASSWORD=change-me-to-something-strong"
>> .env
docker compose up -d --force-recreate
docker run(不使用compose)docker pull ghcr.io/nesquena/hermes-webui:latest
docker run -d \
-e WANTED_UID=$(id -u) -e WANTED_GID=$(id -g) \
-v ~/.hermes:/home/hermeswebui/.hermes \
-e HERMES_WEBUI_STATE_DIR=/home/hermeswebui/.hermes/webui \
-v ~/workspace:/workspace \
-p 127.0.0.1:8787:8787 \
ghcr.io/nesquena/hermes-webui:latest
docker build -t hermes-webui .
docker run -d \
-e WANTED_UID=$(id -u) -e WANTED_GID=$(id -g) \
-v ~/.hermes:/home/hermeswebui/.hermes \
-e HERMES_WEBUI_STATE_DIR=/home/hermeswebui/.hermes/webui \
-v ~/workspace:/workspace \
-p 127.0.0.1:8787:8787 \
hermes-webui
如果希望agent和WebUI在单独的容器中运行(为了隔离,或者因为您已在其他地方运行agent网关):
# Agent + WebUI
docker compose -f docker-compose.two-container.yml up -d
# Agent + Dashboard + WebUI
docker compose -f docker-compose.three-container.yml up -d
这两个compose文件默认使用命名Docker卷,通过构造解决了UID/GID问题。如果需要绑定挂载来共享现有主机目录,请参见docs/docker.md获取完整迁移方法。
[!IMPORTANT] 已知限制(#681):在双容器设置中,从WebUI触发的工具在WebUI容器中运行,而非agent容器。如果需要在WebUI的文件系统上使用git/node等工具,请使用单容器设置、扩展WebUI Dockerfile,或使用社区https://github.com/sunnysktsang/hermes-suite%E3%80%82
[!IMPORTANT] 源代码边界说明(#2453):多容器设置默认将
hermes-agent-src以只读方式挂载到WebUI中。这可防止WebUI端重写源代码,但仍是实现耦合的桥梁,而非稳定的Agent API边界。有关当前源代码/API解耦清单,请参见docs/rfcs/agent-source-boundary.md。
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 | 绑定地址(0.0.0.0 表示所有 IPv4,:: 表示所有 IPv6,::1 表示 IPv6 环回) |
HERMES_WEBUI_PORT | 8787 | 端口 |
HERMES_WEBUI_STATE_DIR | $HERMES_HOME/webui(Windows 默认 %LOCALAPPDATA%\hermes\webui,POSIX 默认 ~/.hermes/webui) | 会话和状态的存储位置 |
HERMES_WEBUI_DEFAULT_WORKSPACE | ~/workspace | 默认工作区 |
HERMES_WEBUI_DEFAULT_MODEL | (提供程序默认) | 可选的模型覆盖;不设置则使用当前 Hermes 提供程序的默认模型 |
HERMES_WEBUI_PASSWORD | (未设置) | 设置后启用密码认证 |
HERMES_WEBUI_CSP_CONNECT_EXTRA | (未设置) | 可选的空格分隔的 http(s):// 或 ws(s):// 源,用于追加到仅报告模式 CSP 的 connect-src 指令,适用于反向代理或隧道部署 |
HERMES_WEBUI_EXTENSION_DIR | (未设置) | 可选的本地目录,通过 /extensions/ 提供服务;在启用扩展注入前必须指向现有目录 |
HERMES_WEBUI_EXTENSION_SCRIPT_URLS | (未设置) | 可选的逗号分隔的同源脚本 URL,用于注入;参见 WebUI 扩展 |
HERMES_WEBUI_EXTENSION_STYLESHEET_URLS | (未设置) | 可选的逗号分隔的同源样式表 URL,用于注入;参见 WebUI 扩展 |
HERMES_HOME | Windows: %LOCALAPPDATA%\hermes;POSIX: ~/.hermes | Hermes 状态的基础目录(影响所有路径) |
HERMES_CONFIG_PATH | $HERMES_HOME/config.yaml | Hermes 配置文件路径 |
~/.hermes/webui/attachments/,或配置HERMES_WEBUI_ATTACHMENT_DIR时的路径)⋯下拉菜单执行操作——固定、移动到项目、归档、复制、删除/usage命令)workspace://path/to/file的聊天链接在右侧预览窗格中打开文件config.yaml,因此无需手动编辑文件即可配置Ollama、LMStudio和其他本地端点HERMES_WEBUI_PASSWORD环境变量或设置面板启用/login路径下的简约深色主题登录页面system、dark、light)和皮肤(default、ares、mono、slate、poseidon、sisyphus、charizard、sienna、catppuccin、nous、geist-contrast/Geist Contrast)/theme命令切换data-skin和CSS变量;深色模式通过.dark类实现,而非data-theme自定义主题维度——详见THEMES.mdhttps://github.com/jasonjcwu — 编辑器与对话记录优化(16个PR,v0.50.227 → v0.51.55)
通过活动轨道点击实现侧边栏折叠(#2054,整合#1884 + #1924)、编辑器芯片灯箱(#1758)、工具密集型首次交互的标题修复、会话切换期间的静默压缩状态(#2185)、并发发送丢失修复(#2186)、对话记录中的引导消息标记(#2187),以及一系列前端优化修复。
https://github.com/Jordan-SkyLF — 实时流与用户体验优化(12个PR,v0.50.18 → v0.51.58)
最初的工作区回退解析冲刺、实时推理卡片(#366、#367、#394–#397),以及近期的一系列更新:提供商配额卡片上的手动“刷新用量”按钮(#2150)、取消轮次状态分类(#2151)、Firefox侧边栏滚动稳定性(#2200)、早期临时会话标题(#2202)、目标感知的“新增功能?”更新横幅链接(#2207),以及设置中MCP工具溢出修复(#2210)。
https://github.com/Hinotoi-agent — 配置文件 + 会话安全(PR #351、#2048)
配置文件 .env 的密钥隔离修复(PR #351)可防止配置文件间的 API 密钥泄露,会话导入工作区验证(PR #2048)可阻止针对 / 的*** JSON 文件读取***。
https://github.com/Sanjays2402 — 无限滚动 + 起始跳转竞态修复(PR #1949)
通过生成令牌 + 互斥锁组合修复了 v0.51.30 版本中无限滚动预加载与起始跳转的 _ensureAllMessagesLoaded 之间的竞态问题。早期的同标志检查方案(#1942 和 #1962 中提出)对 await 后的竞态无效,而 Sanjays2402 的修复方案是正确的。
https://github.com/fxd-jason — 通过 SSE 实现实时审批 + 澄清(PR #1350、#1355)
将审批和澄清功能的 1.5 秒 HTTP 轮询替换为 SSE 长连接,将延迟从最多 1.5 秒降至近乎即时。同时确保了所有正确性细节(原子订阅 + 快照、锁内通知、队列头部 payload、尾随事件重发)。
https://github.com/happy5318 — 自定义提供商模型去重(PR #1947)
修复了不同名称的自定义提供商提供的相同模型在选择器中被静默去重的问题,Opus 还发现了原始测试中需要增强的竞态条件。
https://github.com/NocGeek — 流式滚动 + 手动 cron 输出持久化(7 个 PR)
工具/队列卡片插入时的流式滚动视口稳定性(#1360),手动 cron 运行输出和元数据持久化(#1372,从搁置的 #1352 拆分)。
https://github.com/DavidSchuchert — 德语翻译(PR #190)
完整的德语本地化(de),覆盖所有 UI 字符串、设置标签、命令和系统消息,并对 i18n 系统进行了压力测试,发现了多个尚未可翻译的元素并在同一 PR 中修复。
https://github.com/Bobby9228 — 移动端配置文件按钮(PR #265)
在移动端导航流程中添加了配置文件入口,使手机用户可以切换配置文件。
https://github.com/kevin-ho — OLED 主题(PR #168)
第 7 个内置主题:纯黑色背景搭配暖色调强调色,旨在降低烧屏风险。
https://github.com/andrewy-wizard — 中文本地化(PR #177)
初始简体中文(zh)语言包,是首批非英语语言包之一。
https://github.com/DelightRun — WebUI 会话的 session_search 修复(PR #356)
找到了流式路径中缺失的 SessionDB 注入,该问题曾导致 WebUI 会话中的工具静默失效。
https://github.com/lawrencel1ng — Bandit 安全修复(PR #354)
系统性的 Bandit 扫描修复:urlopen 前的 URL scheme 验证、MD5 的 usedforsecurity=False 设置,以及 40 多个空 except: pass 块替换为适当的日志记录。
https://github.com/shaoxianbilly — Unicode 文件名下载(PR #378)
正确的 Content-Disposition 头,使用 RFC 5987 filename*=UTF-8''... 编码,确保非 ASCII 文件名下载时不会崩溃。
https://github.com/lx3133584 — 反向代理的 CSRF 修复(PR #360)
解决了在 Nginx Proxy Manager 或类似工具后托管且端口非 80/443 时的实际使用障碍。
https://github.com/betamod — 安全审计(PR #171)
全面的 CSRF/SSRF/XSS/环境变量竞态条件审计,已随 v0.39.0 版本发布。
https://github.com/TaraTheStar — 机器人名称 + 思考块 + 登录页面重构(PR #132、#176、#181)
可配置的助手显示名称、思考/推理块显示,以及登录页面重构。
git@github.com:nesquena/hermes-webui.git
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 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 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务