Hermes Agent 一直在后台跑?给它装个 Web 控制台,把对话、任务和日志都看见
前言
Hermes Agent 真正常驻以后,我最不习惯的一件事,就是它明明一直在工作,我却只能从微信、飞书或企微里看到“问题发出去了、答案回来了”这两个结果。某次回复突然变慢,到底是模型接口慢、工具调用卡住,还是服务本身出了问题,单看聊天窗口很难判断。临时想换 API、确认频道配置、看看任务有没有执行,继续回终端翻配置和日志也不算顺手。对我来说,一个长期运行的 AI 助手如果只能“用”,却很难“看”,后期维护会越来越别扭。尤其真正把它当成长期在线助手以后,偶发问题并不会因为平时能正常回复就自动消失,反而更需要一个能随时打开检查的入口。
这次我给已经运行中的 Hermes Agent 加上 hermes-web-ui。文章保留两种安装路径:一种直接让 Hermes Agent 自己检查 Node.js / npm 并完成安装,另一种手动执行 npm 命令。WebUI 启动后使用 8648 端口和登录 Token,随后实际看了对话、模型、频道、TTS、任务与运行记录,并创建“每天早上 8 点推送天气”的定时任务做验证。最后再按现有 Mac 环境安装 cpolar,把 8648 页面映射到公网,先验证随机地址,再固定为二级子域名 hermes01。我更在意的是这个 WebUI 到底让哪些运行信息变得可见,而不是因为多了网页界面,就把后台问题想得过于简单。
1. hermes-web-ui 不是替代 Hermes Agent,而是给它一个观察窗口
hermes-web-ui 的定位比较明确:
Hermes Agent 继续负责后台运行和处理任务,hermes-web-ui 负责把交互和管理入口搬到浏览器。

刚部署 Hermes Agent 时,终端其实够用。启动、看输出、改配置,都能在命令行完成。
真正开始长期运行以后,问题就不一样了。尤其接入微信、飞书、企微这类消息平台后,我们平时看到的通常只有:
消息发出去 → 回复回来。

中间到底发生了什么,并不直观。我更关心的是这些问题:
- 模型是不是还在响应;
- 工具调用有没有继续执行;
- API 有没有异常;
- 服务是不是已经停了;
- 频道和配置到底有没有生效。
这时候 WebUI 的价值才出来。

它让我不用先翻日志,至少可以先从浏览器里看一次对话从输入到回复的过程。
对于后期调试模型接口、排查调用异常、验证配置是否生效来说,这种可视化入口会方便很多:
等待回复时还有一个思考中的小人动效。
比如在等待回复的时候,页面上还会出现一个正在思考的小人动效,看起来比纯终端输出更有“AI 助手在线工作”的感觉:
这个动效本身不解决问题,但比纯终端输出更容易让我判断“页面还在处理”还是“完全没反应”。
2. 除了聊天框,WebUI 还能看什么?
如果 hermes-web-ui 只是多一个网页聊天框,对我来说吸引力其实不大。真正有用的是,它把 Hermes Agent 原来分散在配置和后台里的几个入口集中到了一个界面。
2.1 TTS 语音
WebUI 支持 TTS 配置。

当前页面里可以看到这些方案:
- 浏览器内置 WebSpeech API;
- OpenAI TTS;
- 自定义 OpenAI 兼容端点;
- Edge TTS;
- MiMo TTS。
这里真正展示的是配置入口和可选方案,不把它扩大成每一种语音方案都已经逐项验证。
2.2 模型
模型页面可以查看已经添加的模型提供商。

对我来说,这一页最实用的不是“模型多”,而是切换模型、检查接口地址、确认默认模型时不用每次都先去翻配置文件。
2.3 频道
频道页面主要对应 Hermes Agent 接入的消息平台。当前界面里包括:
- QQ;
- 飞书;
- 钉钉;
- 微信;
- 企业微信。

如果 Hermes Agent 已经接入多个平台,这种集中查看方式确实比在不同配置文件里找参数更直观。
另外,WebUI 里还有技能、插件、记忆、日志等入口。这次没有逐项展开,所以后面只围绕已经实际操作的安装、任务和公网访问继续。
3. 安装 hermes-web-ui:先让 Hermes Agent 自己做一次
这篇给了两种安装方式。
如果 Hermes Agent 本身已经正常运行,我会先试第一种:直接把安装目标告诉它。
发送下面这段提示词:
请帮我在当前设备上安装 hermes-web-ui。先检查 Node.js 和 npm 是否可用,如果环境正常,就使用 npm 全局安装 hermes-web-ui。安装完成后启动 hermes-web-ui,并告诉我本地和局域网访问地址还有登录的密码是什么,并且告诉我如何修改密码。如果端口被占用,请先提示我,不要删除任何文件。
当前演示是在 Hermes Agent 的终端对话模式里发送。如果已经接入飞书、微信、企微,也可以从对应平台发出同样的任务。

Hermes Agent 会先检查 Node.js 和 npm,然后继续安装、启动 WebUI,并返回访问地址和登录 Token。

当前输出为:
本 地:http://localhost:8648
局域网:http://192.168.50.161:8648
登录 Token (即密码):
d7f898d566ecbc437e4b9fe89bcaf1bf515b656834a3996304111716bcc7ba3d
这里几个参数需要记住:
- 本地地址:http://localhost:8648
- 局域网地址:http://192.168.50.161:8648
- WebUI 端口:8648
- 登录凭据:Token
接下来直接使用局域网地址访问。

页面打开后输入刚才输出的 Token。

能正常进入 WebUI,说明这一条安装链已经跑通。
我喜欢这种方式的地方很简单:Hermes Agent 已经能执行任务,那就先让它自己完成环境检查和安装。但我不会把它理解成“AI 安装一定比手动安装可靠”。后面仍然保留完整的手动方式,出了问题至少知道该从哪里拆开检查。
4. 不想自动安装,也可以手动用 npm
手动安装的思路就是三步:
检查 Node.js / npm → 全局安装 hermes-web-ui → 启动服务。
先检查版本:
node -v
npm -v

当前说明要求:
建议使用 Node.js 23 或更高版本。
如果版本过低,先升级 Node.js,再继续。
然后执行:
npm install -g hermes-web-ui

安装完成以后启动:
hermes-web-ui start

启动成功后,终端同样会输出访问地址和登录 Token。
如果需要修改 Token,当前方法是:
echo "你的新密码" > ~/.hermes-web-ui/.token
hermes-web-ui restart
默认本机访问地址:
http://localhost:8648
同一局域网里的其他设备,则使用启动时输出的局域网地址。

打开页面后输入 Token,就可以进入 WebUI。
自动安装和手动安装最后其实落到同一个结果:
让 hermes-web-ui 在 8648 上运行,并通过 Token 进入控制台。
5. 先用定时任务看看 WebUI 到底有没有价值
WebUI 能打开以后,我不想只停留在“页面看起来不错”。
最直接的测试,是创建一个会真正执行的任务。
这次输入:
让 Hermes Agent 每天早上 8 点,自动给我推送当天的天气情况。
然后进入左侧任务面板,创建任务。

任务保存后,先点击:
立即运行
手动触发一次。
稍等片刻后,微信端就会收到一条天气提醒。同时,在任务面板中也可以看到本次任务的运行历史,方便确认任务是否执行成功:
当前结果里,微信端收到天气提醒,同时任务面板也能看到运行历史。
这时候 WebUI 的价值就比“多一个聊天框”明确多了:
任务有没有执行、什么时候执行、执行结果有没有留下记录,都可以从页面里继续看。
后面要换成新闻、待办、服务器状态或其他内容,任务形式可以继续沿用;但这次真正验证的是天气提醒这一条。
6. 本地能管理了,为什么还需要公网入口?
现在 hermes-web-ui 已经可以在本机和局域网里访问。
如果 Hermes Agent 就放在我面前这台机器上,其实到这里已经够用。
问题是它本来就是一个长期在线的助手。人在外面时,我依然可能想:
- 看任务有没有跑;
- 检查模型配置;
- 看频道状态;
- 临时做一次对话测试;
- 排查是不是 WebUI 或 Agent 自己出了问题。
所以接下来只是补一层网络访问。
cpolar 在这里的职责很简单:
把 hermes-web-ui 的 8648 Web 页面提供到公网。
Hermes Agent 继续负责 AI 任务,hermes-web-ui 继续负责 Web 管理,cpolar 不参与模型调用、任务调度或频道逻辑。

7. 按当前 Mac 环境安装 cpolar
这一部分当前示例使用 macOS + Homebrew。
先打开终端。

检查 Homebrew:
brew -v

如果没有安装 Homebrew,当前给出的安装命令是:
# 官方安装脚本(需要良好的网络环境)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Homebrew 准备好以后安装 cpolar:
brew tap probezy/core && brew install cpolar

然后安装 cpolar 服务:
sudo cpolar service install
启动服务:
sudo cpolar service start

最后检查版本:
cpolar version
看到版本信息后,说明当前安装已经完成。
8. 登录 cpolar Web UI
先注册 cpolar 账号。

完成账号注册。

然后浏览器访问:
http://127.0.0.1:9200

登录以后进入 Web UI。

后面所有隧道配置都在这里完成。
9. 把 hermes-web-ui 的 8648 映射到公网
进入【隧道管理 → 隧道列表】。
当前可以看到已有隧道。

这里编辑 website 隧道,也可以新建一条。
当前配置为:
- 隧道名称:hermesweb
- 协议:http
- 本地地址:8648
- 地区:China Top

更新后进入【状态 → 在线隧道列表】。
hermesweb 会生成公网访问地址。

这里使用 HTTPS 地址访问。

当前已经能够打开 hermes-web-ui 登录页面。
接下来仍然要输入 WebUI 自己的 Token。
也就是说,公网入口和 WebUI 登录不是一回事:
cpolar 负责把页面送到外网,hermes-web-ui 的 Token 负责登录控制台。
10. 随机地址能用以后,再换固定二级子域名
随机公网地址适合先测试。
如果后面准备长期远程管理 Hermes Agent,我更希望入口本身固定下来。
先进入 cpolar 预留页面:
https://dashboard.cpolar.com/reserved
选择【保留二级子域名】。

当前保留结果为:
- 地区:China Top
- 二级域名:hermes01
二级域名具有唯一性,真正配置时以自己账号实际保留成功的名称为准。
接着回到本地 cpolar Web UI,找到:
hermesweb
隧道。

点击编辑,把域名类型改成:
二级子域名
然后在:
Sub Domain
中填写前面保留的名称。

更新以后,到在线隧道列表查看。

此时地址已经变成固定二级子域名形式。
继续用 HTTPS 地址测试。

页面可以正常打开。
再输入前面 WebUI 的 Token。

成功登录以后,固定公网访问链就跑通了。
总结
这次给 Hermes Agent 装 WebUI,我觉得最实际的变化不是“终于有界面了”,而是后台运行的 AI 助手多了一个可以随时检查的窗口。
这次实际跑通的主线是:
Hermes Agent → hermes-web-ui → 自动安装 / npm 手动安装 → 8648 → Token 登录 → 模型 / 频道 / TTS / 任务 → 每天 8 点天气任务测试 → macOS Homebrew → cpolar → hermesweb → 随机公网 → 固定二级子域名 hermes01。
几个边界也要分清:
- Hermes Agent 负责 AI 任务本身,hermes-web-ui 负责浏览器里的观察和管理入口;
- 当前页面展示了模型、频道、TTS、技能、插件、记忆、日志等入口,但这次没有逐项把所有功能完整测试;
- 这次定时任务真正验证的是每天 8 点天气提醒,并确认微信端收到消息、任务面板出现运行历史;
- cpolar 只负责把 8648 Web 页面提供到公网,不参与模型、频道或任务逻辑;
- 公网地址打开以后,仍然需要 hermes-web-ui 的 Token;
- cpolar 安装部分当前用的是 macOS + Homebrew 路径,和前面 WebUI 安装所在设备环境要按自己的实际部署关系确认。
对我来说,Hermes Agent 长期跑起来以后,最重要的不是再多一个“聊天入口”,而是出了问题时能不能快速看见它当前在做什么。WebUI 解决不了所有故障,但至少让我不必每次都从一条聊天回复反推整个后台发生了什么。




