一个运行在浏览器里的 AI 控制台,背后藏着怎样的设计哲学?
你有没有想过,如果把 AI Agent 的控制台搬到浏览器里,会是什么样子?
传统上,AI Agent 都是命令行工具——打开终端,输入命令,看文字输出。这对程序员来说没问题,但对更多普通用户,那个黑底白字的窗口既陌生又令人望而生畏。
Hermes Agent 最近推出的 Dashboard 改变了这一切。它把 Agent 的所有能力——配置管理、会话浏览、任务监控、甚至完整的交互界面——都搬进了浏览器。
但这里有一个有趣的挑战:如何在保证安全的前提下,让浏览器和本地 AI Agent 顺畅通信?
今天,我们就来拆解 Hermes Dashboard 的架构设计,看看它是如何解决这个问题的。
一、为什么需要 Dashboard?
在深入架构之前,我们先回答一个基础问题:既然有命令行,为什么还需要 Dashboard?
命令行对程序员友好,但对其他人群不友好:配置复杂,需要手写配置文件,一个缩进错误就可能导致程序崩溃;可视性差,看不到历史会话,不方便回溯;监控困难,后台任务的状态不直观;协作困难,团队成员无法共享同一个 Agent 实例。
Dashboard 的设计目标正是解决这些痛点:图形化配置,用表单、下拉框、开关按钮代替手工编辑;会话管理,浏览历史对话,随时恢复;实时监控,任务状态、模型使用、Token 消耗一目了然;嵌入式终端,在浏览器里直接和 Agent 对话。
简单说,就是把 AI Agent 变成一个 Web 应用,同时保留命令行的全部能力。
二、整体架构:前后端分离
Dashboard 采用经典的前后端分离架构。
浏览器里运行的是一个 React 单页应用,包含配置编辑器、会话浏览器、任务列表和嵌入式终端。后端则是一个 Python FastAPI 服务,提供接口、处理业务逻辑、管理配置和会话。
前后端通过 HTTP 和 WebSocket 通信,一个处理普通请求,一个处理实时数据流。
整体来看,这套架构并不复杂。但真正让 Dashboard 脱颖而出的,是它在安全设计上的考量。
三、安全架构:保护本地服务
这是 Dashboard 设计中最关键的部分。
Dashboard 是一个运行在本地的 Web 服务。表面上看,这和其他本地服务差不多。但有一个安全陷阱:DNS Rebinding 攻击。
想象这个场景:攻击者注册一个域名,让它先解析到一个合法网站。你在浏览器里访问这个域名,加载了一段恶意脚本。然后 DNS 记录被悄悄修改,域名重新解析到你的本地地址。此时,恶意脚本已经可以访问你的 Dashboard——浏览器认为这是"同源"请求!
你的配置、你的 API Key、你的会话历史,全都能被窃取。
三层防护机制
Hermes Dashboard 设计了三层安全防护来抵御这类攻击。
第一层:Session Token 认证
每次 Dashboard 启动时,会生成一个随机 Token。这个 Token 不存储在文件里,只存在于内存中,进程退出后立即失效。
前端每次发送请求时,都要带上这个 Token。服务器验证通过后才处理请求。攻击者的网站无法读取这个 Token,因为浏览器的同源策略阻止了跨域访问。
第二层:Host Header 校验
即使 Token 被猜到(几乎不可能),Dashboard 还有第二道防线:验证请求来源。
当服务绑定到本地地址时,它只接受来自本机的请求。如果请求的来源地址不对,直接拒绝。这就像一个额外的守门员——即使你有票,位置不对也不让进。
第三层:CORS 白名单
跨域资源共享的配置非常严格,只允许来自本地的请求。其他任何来源都会被浏览器拦截。
这三层防护共同构建了一个坚固的安全边界,让本地 Web 服务也能抵御复杂的网络攻击。
四、配置编辑器:化繁为简
Dashboard 的一个核心功能是图形化配置编辑。
Hermes 有超过 200 个配置项,分布在多个层级。手动编写配置文件容易出错,一个小小的拼写错误可能导致整个服务无法启动。
Dashboard 的解决方案很聪明:让配置数据驱动 UI 生成。
系统会自动遍历默认配置,根据每个字段的类型推断对应的界面控件。布尔值变成开关按钮,数字变成输入框,枚举值变成下拉选择框。200 多个配置项按功能分组,每个组成为一个标签页,用户可以快速定位。
这套动态 Schema 机制意味着:新增配置项时,前端界面自动适配,无需手动维护。这大大降低了开发成本,也保证了前后端的一致性。
五、嵌入式终端:浏览器里的命令行
Dashboard 最酷的功能是 Chat 标签页——在浏览器里嵌入完整的 Hermes 交互界面。
你可能会问:为什么不直接用 React 实现一个聊天界面?
答案:Hermes 的终端界面功能太丰富了。复杂的键盘快捷键、Markdown 渲染、工具调用显示、审批流程、模型切换、斜杠命令……重新实现意味着巨大的工作量,而且永远落后于原版。
Hermes 的选择很聪明:直接嵌入原有的终端界面。
技术实现
浏览器里的终端模拟器负责渲染输出,WebSocket 负责双向通信,后端通过伪终端技术运行真正的 Hermes 终端界面。
用户在浏览器里看到的,和直接在命令行里运行一模一样。所有功能都可用,无需重新学习。
平台限制
有一个小限制:嵌入式终端在原生 Windows 上暂不可用。这项功能需要 WSL2 或 Linux/macOS 环境。好消息是,Dashboard 的其他功能在 Windows 上完全正常。
六、会话管理:时间旅行
Dashboard 提供了强大的会话管理功能。
Hermes 把每次对话都存储在数据库里。Dashboard 可以列出所有会话、搜索历史对话、一键恢复之前的会话。
这就像一个时间机器——你可以随时回到任何一个过去的对话,继续之前的讨论。点击一个会话,可以看到完整的对话历史、使用的模型、Token 消耗统计、工具调用记录。这些信息帮助你理解 AI 在每个会话里做了什么。
七、插件系统:无限扩展
Dashboard 支持插件扩展。第三方开发者可以添加新功能,比如任务看板系统、游戏化成就追踪、监控面板等。
这意味着 Dashboard 不仅仅是一个配置界面,而是一个可扩展的平台。它的能力边界可以不断延伸,满足不同用户的需求。
八、设计哲学
拆解完架构,我们来总结 Dashboard 的设计哲学。
安全第一
从架构的最底层,Dashboard 就把安全放在首位。多层防护措施虽然增加了复杂度,但保证了用户数据的安全。
复用而非重写
Dashboard 没有重新实现终端界面,而是直接嵌入原有程序。这是明智的选择:减少工作量,保证功能完整,自动获得所有更新。
动态而非静态
配置界面是自动生成的,而不是硬编码的。新增配置项时,界面自动适配,维护成本大大降低。
可扩展而非封闭
插件系统让 Dashboard 成为一个平台,而不是一个封闭的应用。它的能力可以不断扩展。
九、使用体验
说了这么多架构,用户实际体验是怎样的?
启动 Dashboard 后,浏览器会自动打开界面。配置管理页面上,左侧是分类导航,右侧是对应的表单,修改后自动保存生效。不需要手动编辑文件,不需要担心格式错误。
会话浏览页面上,可以看到所有历史对话,点击恢复就能继续之前的讨论。搜索功能帮助你快速找到特定内容。
任务监控页面上,定时任务的状态、执行历史一目了然。启动、暂停、删除任务,点点鼠标就能完成。
嵌入式聊天页面上,完整的终端界面呈现在浏览器标签页里。你可以在浏览器里和 AI 对话,就像在终端里一样。
十、技术启示
Dashboard 的架构设计,给我们带来几个启示。
本地 Web 服务需要特别的安全考量
很多人认为本地服务天然安全。但 DNS Rebinding 攻击告诉我们,即使是本地服务,也要验证请求来源。
嵌入比重写更优雅
当你要在 Web 里复用一个命令行工具时,不要急着重写界面。先问自己:能不能直接嵌入原有程序?这样更省力,也更可靠。
动态 Schema 减少维护负担
当配置项很多时,让数据驱动界面生成。配置变了,界面自动跟着变,无需手动维护。
结语
Hermes Dashboard 的架构,展示了如何把一个命令行 AI Agent 变成一个现代 Web 应用。
它没有简单地"加个 Web 界面",而是设计了完善的安全架构,实现了优雅的嵌入式终端,构建了动态的配置系统,提供了可扩展的插件机制。
对于 AI Agent 开发者来说,这是一个值得借鉴的案例:好的用户体验需要好的架构支撑。
而对于 Hermes 用户来说,Dashboard 意味着:你可以在浏览器里管理一切,而不需要记命令、改文件、查日志。
AI Agent 正变得越来越强大,而 Dashboard 让它变得越来越易用。这或许就是技术进步的方向——让强大的能力,变得触手可及。
夜雨聆风