Web 仪表板
Web 仪表板是一个基于浏览器的 UI,用于管理您的 Hermes Agent 安装。无需编辑 YAML 文件或运行 CLI 命令,您可以从一个干净的 Web 界面配置设置、管理 API 密钥和监控会话。
快速开始
hermes dashboard这会启动一个本地 Web 服务器并在您的浏览器中打开 http://127.0.0.1:9119。仪表板完全在您的机器上运行——没有数据离开 localhost。
选项
| 标志 | 默认 | 描述 |
|---|---|---|
--port | 9119 | Web 服务器运行的端口 |
--host | 127.0.0.1 | 绑定地址 |
--no-open | — | 不自动打开浏览器 |
--insecure | off | 允许绑定到非 localhost 主机(危险——在网络上暴露 API 密钥;搭配防火墙和强认证使用) |
--tui | off | 暴露浏览器内 Chat 选项卡(通过 PTY/WebSocket 嵌入的 hermes --tui)。或者设置 HERMES_DASHBOARD_TUI=1。 |
# 自定义端口
hermes dashboard --port 8080
# 绑定到所有接口(在共享网络上谨慎使用)
hermes dashboard --host 0.0.0.0
# 启动但不打开浏览器
hermes dashboard --no-open
# 启用浏览器内 Chat 选项卡
hermes dashboard --tui先决条件
默认的 hermes-agent 安装不包含 HTTP 栈或 PTY 辅助程序——这些是可选附加组件。Web 仪表板需要 FastAPI 和 Uvicorn(web 附加组件)。Chat 选项卡还需要 ptyprocess 在伪终端后生成嵌入的 TUI(POSIX 上的 pty 附加组件)。同时安装两者:
pip install 'hermes-agent[web,pty]'web 附加组件引入 FastAPI/Uvicorn;pty 引入 ptyprocess(POSIX)或 pywinpty(原生 Windows——注意嵌入的 TUI 本身仍需要 WSL)。pip install hermes-agent[all] 包含两个附加组件,如果您还想要消息/语音等,这是最简单的路径。
当您在没有依赖项的情况下运行 hermes dashboard 时,它会告诉您要安装什么。如果前端尚未构建且 npm 可用,它会在首次启动时自动构建。
Chat 选项卡在普通的 hermes dashboard 启动下有意关闭。当您想要嵌入的浏览器聊天面板时,使用 hermes dashboard --tui 启动仪表板或设置 HERMES_DASHBOARD_TUI=1。
页面
状态
着陆页面显示您安装的实时概览:
- 代理版本和发布日期
- 网关状态 — 运行/停止、PID、已连接平台及其状态
- 活跃会话 — 最近 5 分钟内活跃的会话数
- 最近会话 — 最近 20 个会话的列表,包含模型、消息数、token 使用量和对话预览
状态页面每 5 秒自动刷新。
聊天
Chat 选项卡将完整的 Hermes TUI(与 hermes --tui 相同的界面)直接嵌入浏览器。您在终端 TUI 中可以做的所有事情——斜杠命令、模型选择器、工具调用卡片、markdown 流式传输、clarify/sudo/批准提示、皮肤主题——在这里完全相同地工作,因为仪表板在运行真实的 TUI 二进制文件并通过 xterm.js 渲染其 ANSI 输出,使用其 WebGL 渲染器实现像素级精确的单元格布局。
工作原理:
/api/pty打开一个用仪表板会话 token 认证的 WebSocket- 服务器在 POSIX 伪终端后生成
hermes --tui - 击键传输到 PTY;ANSI 输出流式返回浏览器
- xterm.js 的 WebGL 渲染器将每个单元格绘制到整数像素网格上;鼠标追踪(SGR 1006)、宽字符(Unicode 11)和制表符绘制字符都原生渲染
- 调整浏览器窗口大小会通过
@xterm/addon-fit插件调整 TUI 大小
恢复现有会话: 从 Sessions 选项卡,点击任何会话旁的播放图标(▶)。这会跳转到 /chat?resume=<id> 并使用 --resume 启动 TUI,加载完整历史记录。
先决条件:
- Node.js(与
hermes --tui相同的要求;TUI 捆绑包在首次启动时构建) ptyprocess— 由pty附加组件安装(pip install 'hermes-agent[web,pty]',或[all]涵盖两者)- POSIX 内核(Linux、macOS 或 WSL2)。
/chat终端面板特别需要 POSIX PTY——原生 Windows Python 没有等效功能,因此在原生 Windows 安装上,仪表板的其余部分(会话、作业、指标、配置编辑器)可以工作,但/chat选项卡会显示一条横幅,告诉您使用 WSL2 来使用该功能。
关闭浏览器选项卡,服务器上会干净地回收 PTY。重新打开会生成一个新会话。
配置
一个基于表单的 config.yaml 编辑器。所有 150+ 配置字段从 DEFAULT_CONFIG 自动发现并按选项卡类别组织:
- model — 默认模型、提供商、基础 URL、推理设置
- terminal — 后端(local/docker/ssh/modal)、超时、Shell 偏好
- display — 皮肤、工具进度、恢复显示、旋转器设置
- agent — 最大迭代次数、网关超时、服务层级
- delegation — 子代理限制、推理力度
- memory — 提供商选择、上下文注入设置
- approvals — 危险命令批准模式(ask/yolo/deny)
- 以及更多——config.yaml 的每个部分都有对应的表单字段
具有已知有效值(终端后端、皮肤、批准模式等)的字段呈现为下拉菜单。布尔值呈现为开关。其他所有内容为文本输入。
操作:
- Save — 立即将更改写入
config.yaml - Reset to defaults — 将所有字段恢复为默认值(不保存,直到您点击 Save)
- Export — 以 JSON 格式下载当前配置
- Import — 上传 JSON 配置文件以替换当前值
:::tip
配置更改在下一个代理会话或网关重启时生效。Web 仪表板编辑与 hermes config set 和网关读取的相同 config.yaml 文件。
:::
API 密钥
管理存储 API 密钥和凭证的 .env 文件。密钥按类别分组:
- LLM 提供商 — OpenRouter、Anthropic、OpenAI、DeepSeek 等
- 工具 API 密钥 — Browserbase、Firecrawl、Tavily、ElevenLabs 等
- 消息平台 — Telegram、Discord、Slack 机器人 token 等
- 代理设置 — 非秘密环境变量,如
API_SERVER_ENABLED
每个密钥显示:
- 是否已设置(带遮盖预览的值)
- 用途描述
- 提供商注册/密钥页面的链接
- 设置或更新值的输入字段
- 删除按钮
高级/少用的键默认隐藏在一个切换按钮后面。
会话
浏览和检查所有代理会话。每行显示会话标题、来源平台图标(CLI、Telegram、Discord、Slack、cron)、模型名称、消息数、工具调用数以及上次活动时间。活跃会话标有脉冲徽章。
- 搜索 — 使用 FTS5 对所有消息内容进行全文搜索。结果显示高亮片段,展开时自动滚动到第一个匹配消息。
- 展开 — 点击会话以加载其完整消息历史。消息按角色颜色编码(user、assistant、system、tool)并作为带语法高亮的 Markdown 渲染。
- 工具调用 — 带有工具调用的助手消息显示可折叠块,包含函数名称和 JSON 参数。
- 删除 — 使用垃圾桶图标删除会话及其消息历史。
日志
查看代理、网关和错误日志文件,支持过滤和实时追踪。
- 文件 — 在
agent、errors和gateway日志文件之间切换 - 级别 — 按日志级别过滤:ALL、DEBUG、INFO、WARNING 或 ERROR
- 组件 — 按来源组件过滤:all、gateway、agent、tools、cli 或 cron
- 行数 — 选择显示的行数(50、100、200 或 500)
- 自动刷新 — 切换每 5 秒轮询新日志行的实时追踪
- 颜色编码 — 日志行按严重性着色(红色表示错误,黄色表示警告,暗淡表示调试)
分析
从会话历史计算的使用量和成本分析。选择时间段(7、30 或 90 天)以查看:
- 摘要卡片 — 总 token 数(输入/输出)、缓存命中百分比、总估计或实际成本和总会话数及日平均值
- 每日 token 图表 — 堆叠条形图显示每天的输入和输出 token 使用量,悬停工具提示显示细分和成本
- 每日细分表格 — 日期、会话数、输入 token、输出 token、缓存命中率和每天的每项成本
- 按模型细分 — 表格显示使用的每个模型、其会话数、token 使用量和估计成本
Cron
创建和管理按重复计划运行代理提示的定时 cron 作业。
- 创建 — 填写名称(可选)、提示、cron 表达式(例如
0 9 * * *)和投递目标(local、Telegram、Discord、Slack 或 email) - 作业列表 — 每个作业显示其名称、提示预览、计划表达式、状态徽章(enabled/paused/error)、投递目标、上次运行时间和下次运行时间
- 暂停 / 恢复 — 在活跃和暂停状态之间切换作业
- 立即触发 — 在正常计划之外立即执行作业
- 删除 — 永久删除 cron 作业
技能
浏览、搜索和切换技能及工具集。技能从 ~/.hermes/skills/ 加载并按类别分组。
- 搜索 — 按名称、描述或类别过滤技能和工具集
- 类别过滤器 — 点击类别标签以缩小列表(例如 MLOps、MCP、Red Teaming、AI)
- 切换 — 使用开关启用或禁用单个技能。更改在下次会话时生效。
- 工具集 — 单独部分显示内置工具集(文件操作、网页浏览等)及其活跃/非活跃状态、设置要求和包含的工具列表
:::warning 安全
Web 仪表板读取和写入您的 .env 文件,其中包含 API 密钥和秘密。默认情况下它绑定到 127.0.0.1——仅可从本地机器访问。如果您绑定到 0.0.0.0,网络上的任何人都可以查看和修改您的凭证。仪表板自身没有认证。
:::
/reload 斜杠命令
仪表板 PR 还向交互式 CLI 添加了 /reload 斜杠命令。通过 Web 仪表板(或直接编辑 .env)更改 API 密钥后,在活跃的 CLI 会话中使用 /reload 来获取更改而无需重启:
您 → /reload
已重新加载 .env(更新了 3 个变量)
这会重新读取 ~/.hermes/.env 到运行中的进程环境。当您通过仪表板添加了新的提供商密钥并想立即使用时,这很有用。
REST API
Web 仪表板暴露了一个前端使用的 REST API。您也可以直接调用这些端点进行自动化:
GET /api/status
返回代理版本、网关状态、平台状态和活跃会话数。
GET /api/sessions
返回最近 20 个会话及其元数据(模型、token 数、时间戳、预览)。
GET /api/config
以 JSON 格式返回当前 config.yaml 内容。
GET /api/config/defaults
返回默认配置值。
GET /api/config/schema
返回描述每个配置字段的模式——类型、描述、类别和适用的选择选项。前端使用此模式为每个字段渲染正确的输入控件。
PUT /api/config
保存新配置。请求体:{"config": {...}}。
GET /api/env
返回所有已知环境变量及其设置/未设置状态、遮盖值、描述和类别。
PUT /api/env
设置环境变量。请求体:{"key": "VAR_NAME", "value": "secret"}。
DELETE /api/env
删除环境变量。请求体:{"key": "VAR_NAME"}。
GET /api/sessions/\{session_id\}
返回单个会话的元数据。
GET /api/sessions/\{session_id\}/messages
返回会话的完整消息历史,包括工具调用和时间戳。
GET /api/sessions/search
对消息内容进行全文搜索。查询参数:q。返回匹配的会话 ID 及高亮片段。
DELETE /api/sessions/\{session_id\}
删除会话及其消息历史。
GET /api/logs
返回日志行。查询参数:file(agent/errors/gateway)、lines(计数)、level、component。
GET /api/analytics/usage
返回 token 使用量、成本和会话分析。查询参数:days(默认 30)。响应包括每日细分和按模型汇总。
GET /api/cron/jobs
返回所有配置的 cron 作业及其状态、计划和运行历史。
POST /api/cron/jobs
创建新的 cron 作业。请求体:{"prompt": "...", "schedule": "0 9 * * *", "name": "...", "deliver": "local"}。
POST /api/cron/jobs/\{job_id\}/pause
暂停 cron 作业。
POST /api/cron/jobs/\{job_id\}/resume
恢复已暂停的 cron 作业。
POST /api/cron/jobs/\{job_id\}/trigger
立即触发 cron 作业,在其计划之外运行。
DELETE /api/cron/jobs/\{job_id\}
删除 cron 作业。
GET /api/skills
返回所有技能及其名称、描述、类别和启用状态。
PUT /api/skills/toggle
启用或禁用技能。请求体:{"name": "skill-name", "enabled": true}。
GET /api/tools/toolsets
返回所有工具集及其标签、描述、工具列表和活跃/配置状态。
CORS
Web 服务器将 CORS 限制为仅 localhost 来源:
http://localhost:9119/http://127.0.0.1:9119(生产环境)http://localhost:3000/http://127.0.0.1:3000http://localhost:5173/http://127.0.0.1:5173(Vite 开发服务器)
如果您在自定义端口上运行服务器,该来源会自动添加。
开发
如果您正在为 Web 仪表板前端做贡献:
# 终端 1:启动后端 API
hermes dashboard --no-open
# 终端 2:启动带 HMR 的 Vite 开发服务器
cd web/
npm install
npm run devhttp://localhost:5173 的 Vite 开发服务器将 /api 请求代理到 http://127.0.0.1:9119 的 FastAPI 后端。
前端使用 React 19、TypeScript、Tailwind CSS v4 和 shadcn/ui 风格组件构建。生产构建输出到 hermes_cli/web_dist/,由 FastAPI 服务器作为静态 SPA 提供。
更新时自动构建
当您运行 hermes update 时,如果 npm 可用,Web 前端会自动重建。这使仪表板与代码更新保持同步。如果未安装 npm,更新会跳过前端构建,hermes dashboard 会在首次启动时构建它。
主题与插件
仪表板附带六个内置主题,可以通过用户定义的主题、插件选项卡和后端 API 路由进行扩展——全部放入式,无需克隆仓库。
从标题栏实时切换主题——单击语言切换器旁边的调色板图标。选择持久化到 config.yaml 中的 dashboard.theme,页面加载时恢复。
内置主题:
| 主题 | 特征 |
|---|---|
Hermes Teal(default) | 深青色 + 奶油色,系统字体,舒适的间距 |
Hermes Teal(大号)(default-large) | 与默认相同,18px 文本和更宽松的间距 |
Midnight(midnight) | 深蓝紫色,Inter + JetBrains Mono |
Ember(ember) | 暖深红 + 青铜色,Spectral 衬线 + IBM Plex Mono |
Mono(mono) | 灰度,IBM Plex,紧凑 |
Cyberpunk(cyberpunk) | 黑色上的霓虹绿,Share Tech Mono |
Rosé(rose) | 粉色 + 象牙色,Fraunces 衬线,宽敞 |
要构建您自己的主题、添加插件选项卡、注入到 shell 插槽或暴露插件特定的 REST 端点,请参阅**扩展仪表板**——完整指南涵盖:
- 主题 YAML 模式——调色板、排版、布局、资源、componentStyles、colorOverrides、customCSS
- 布局变体——
standard、cockpit、tiled - 插件清单、SDK、Shell 插槽、页面范围插槽(无需覆盖即可将小部件注入内置页面)、后端 FastAPI 路由
- 完整的主题+插件组合演练(Strike Freedom cockpit 演示)
- 发现、重新加载和故障排除