Hermes WebUI 路线图全解:从 CLI 功能对齐到可靠性加固与全平台分发
【免费下载链接】hermes-webuiHermes WebUI: The best way to use Hermes Agent from the web or from your phone!项目地址: https://gitcode.com/GitHub_Trending/he/hermes-webui
本文以仓库根目录的 ROADMAP.md 为主体,完整梳理 Hermes WebUI 的生态版图:当前功能状态快照、分层架构、功能对齐清单(聊天/会话/工作区/定时任务/安全/国际化等 20 余个维度)、原生客户端矩阵、自治维护框架与前瞻工作计划。结合仓库源码(测试隔离机制、Docker 构建、MCP 服务、国际化实现)逐层印证,帮助读者掌握该项目的真实完成度边界、刻意不做的设计决策,以及"单一服务器 + 多端壳"的全平台落地思路。
定位与读法:版本数据"活"而不"钉"
ROADMAP.md 开篇明确了一个工程约定:版本号、测试数量、发布历史都是"实时派生"的,不写死在文件里——因为每个发布版本都会漂移。仓库给出的权威获取方式是:
- 版本与历史:
git tag --sort=-v:refname | head加 CHANGELOG.md; - 测试数量:
pytest tests/ --collect-only -q。
ARCHITECTURE.md 中留有周期性快照(当前发布构建v0.51.792、约 11,500 个测试、CI 在 Python 3.11/3.12/3.13 上各跑 3 个并行分片),但文档自己也标注这只是"周期性快照,权威来源是最新 git tag 与pytest --collect-only"。这种"路线图钉住方向、数字交给命令"的写法,避免了文档与代码脱节这一常见腐化源。
路线图总结的阶段性判断是:最初的"CLI 对齐 + Claude 对齐"愿景已经完成,工作重心从"追平功能"转向"加固可靠性 + 拓宽分发"。下面所有章节都围绕这一主线展开。
当前状态快照(Status Snapshot)
路线图用一张状态表概括了 12 个产品面的完成度,全部标记为 ✅ Complete:
| 产品面 | 状态 |
|---|---|
| Hermes CLI 对齐 | 每个 CLI 工作流都有 Web 等价实现 |
| 流式输出 + 工具透明度 | 实时工具卡片、推理卡片、审批提示、澄清(clarify)、取消、转向(steer) |
| 多提供商模型支持 | 任何在config.yaml中配置的提供商都会出现在选择器中 + 自定义端点实时发现 |
| 会话 + 项目 + 搜索 | CRUD、内容搜索、项目、标签、归档、分叉、导入、批量操作、CLI 桥接 |
| 移动端 + Docker + 认证 | 汉堡导航、侧滑面板、PWA 安装、密码认证、GHCR 镜像 |
| 辅助面板 | 工作区树 + 编辑 + 终端、cron CRUD、技能 CRUD、记忆写入、MCP 服务器 UI |
| 视觉打磨 | Light / Dark / System × 21 皮肤、Mermaid、KaTeX、语法高亮、Transparent Stream |
| 国际化 | 15 种语言 + 键对齐守卫 + CJK/RTL/IME 处理 |
| 网关集成 | 实时外部会话(Telegram、Discord、Slack、微信、Signal、SMS)+ 跨渠道交接 |
| 扩展系统 | 选择性加载器、能力面(主题/TTS/导航/sidecar)、一键画廊、审核库仓库 |
| 原生客户端 | macOS(Swift)、Windows+Linux+macOS(Rust/Tauri)、Android、iOS——各自独立仓库 |
| 自治维护 | 自运行 triage/review/release 流水线;已泛化为公开的 StewardOS 框架 |
剩余缺口与前向工作集中在"Forward Work"部分(见 前瞻工作),不再重复罗列。
架构分层:无构建步骤的薄服务端 + 原生 JS
路线图把整个系统拆成 8 个层,每一层都有对应文件与状态说明:
| 层 | 文件 | 说明 |
|---|---|---|
| Python 服务端 | server.py+api/模块 | 覆盖api/业务逻辑(配置、会话、流式、profile、路由、引导、工作区、更新、上传、扩展)的薄 HTTP 壳 + 认证中间件 |
| HTML 模板 | static/index.html | 直接从磁盘服务 |
| CSS | static/style.css | 主题 + 皮肤、移动响应式、KaTeX、表格样式 |
| JavaScript | static/{ui,sessions,messages,workspace,panels,boot,commands,icons,i18n,login,onboarding,extension_settings}.js | 作为静态文件服务的原生 JS 模块——无 bundler |
| Service Worker | static/sw.js | 离线壳缓存、版本钉死的资源 |
| Docker | Dockerfile、docker-compose.yml | python:3.12-slim、多架构(amd64+arm64)、HEALTHCHECK |
| CI/CD | .github/workflows/ | 每个 PR 跑 ruff lint + 分片 pytest + Playwright 浏览器测试 + Docker smoke;tag push 时自动发布 + GHCR 推送 |
| 测试隔离 | tests/_pytest_port.py | 按 worktree 派生端口 + 状态目录,互不冲突 |
路线图特别注明:逐文件行数每个版本都在变,当前模块地图以 ARCHITECTURE.md 为准,精确规模用
git ls-files查询。
源码层面的印证
服务端确实是"薄壳 + 业务模块"结构。server.py 基于 Python 标准库http.server(ThreadingHTTPServer),入口只做信号处理(如SIGPIPE忽略,防止客户端断连杀死进程)、测试模式网络隔离、路由分发;具体业务被拆到 api/ 下的 70 余个模块(会话生命周期、流式、配置、工作区、扩展、MCP 桥接等)。这种拆分正是 Sprint 9–10 "server.py →api/modules"重构的成果(见 冲刺历史)。
测试隔离机制是一个值得细看的实现细节。tests/_pytest_port.py 不再让每个测试文件硬编码http://127.0.0.1:8788,而是:
- 测试端口由仓库根目录的 MD5 派生:
20000 + (hash % 10000),不同 worktree 天然拿到不同端口; - 测试状态目录为
webui-test-<md5前8位>,锚定在系统临时目录下的hermes-webui-tests/而非~/.hermes; - 模块级"纵深防御":若状态目录被解析到生产目录
~/.hermes之内(且临时根本身不在生产目录下),直接抛RuntimeError拒绝运行——"测试永远不能触碰生产文件"。
这与 ARCHITECTURE.md 提到的默认状态目录~/.hermes/webui形成生产/测试硬隔离。
Docker 层比路线图表格更"厚"。Dockerfile 基于python:3.12-slim,但额外从官方 amalgamation 源码编译了定制 SQLite(带 SHA-256 校验与-DSQLITE_SECURE_DELETE),因为基础镜像的 SQLite 版本存在 WAL 重置损坏缺陷;EXPOSE 8787声明服务端口,HEALTHCHECK配置为--interval=30s --timeout=8s --start-period=10s --retries=3,与状态快照中"HEALTHCHECK"一一对应。多容器编排则对应仓库根目录的 docker-compose.yml、docker-compose.two-container.yml、docker-compose.three-container.yml(two-container 即 webui + agent 的组合,对应功能清单里的"Two-container Docker compose")。
CI 工作流清单可逐一核对:.github/workflows/ 下有tests.yml(分片 pytest + lint)、browser-smoke.yml与conversation-lifecycle.yml(Playwright 浏览器测试)、docker-smoke.yml、release.yml(tag 触发自动发布)、docs-ci.yml、native-windows-startup.yml,与路线图"CI/CD"行的描述完全吻合。
子路径挂载(reverse proxy at/hermes/)在 HTML 里就能看到实现。static/index.html 头部内联脚本在页面加载前动态写入<base href>,从location.pathname中剥离/session/<id>路由前缀再拼出基础路径,保证所有静态资源引用保持相对路径、在反代子路径下正确解析——这正是"Subpath mount support"清单项的底层机制。
功能对齐清单(Feature Parity Checklist)
这是路线图最核心的部分:按 20 余个维度逐项打勾,声明 WebUI 相对 CLI 与 Claude 式交互的对齐程度。以下完整继承原文档条目,并在关键处补充仓库证据。
聊天与流式(Chat and Streaming)
- 发送消息、SSE 流式响应;
- 会话作用域模型选择器(每会话可选模型);
- 按提供商分组、可搜索的模型选择器(composer 与 Preferences 默认模型处均为同一组件);
- 多提供商 API 支持——OpenAI、Anthropic、Google、OpenRouter、xAI、GLM、DeepSeek、Mistral、MiniMax、Kimi、OpenCode、Nous Portal、自定义 OpenAI 兼容端点;
- 自定义端点模型实时发现(Ollama、LM Studio、vLLM 经
/v1/models); - 从 Settings 直接添加自托管提供商(Ollama / LM Studio)——无需编辑
config.yaml; - OpenRouter 模型名自由输入(自动补全 + 自定义输入);
- 工具进度以内联实时工具卡片展示;
- 危险命令审批卡片(Allow once / session / always、Deny);
- 审批轮询 + SSE 推送审批事件;
- Clarify 对话框——agent 可提出阻塞式澄清问题;
- 工具视图中展示子 agent 委托卡片;
- INFLIGHT 守卫:请求中途切换会话不丢响应;
- 页面加载时从 localStorage 恢复会话;
- 流式中途刷新页面时显示重连横幅;
- SSE 自动重连(扩展退避阶梯 + 全会话轮询兜底);
- 每消息/每会话的 token 与成本估算;
- 上下文用量指示(composer 底栏的紧凑圆环徽章);
- 自动压缩处理 +
/compact命令; - "上下文压缩耗尽"的一键恢复(聚焦续写);
- rAF 节流的 token 渲染(平滑、无 DOM 抖动);
- composer 底栏的取消/停止按钮;
- 推理力度选择器(low / medium / high / xhigh)+
/reasoning命令; - 纯文本流式 + 崩溃恢复——部分消息刷新后从 localStorage 恢复;
- 忙碌回合的默认消息模式:Queue / Interrupt / Steer(新安装默认 Steer);
- 带附件转向(steer)进行中的回合(文件上传并限定到所属会话);
- Transparent Stream 模式——按时间线的工作日志、逐词淡入(遵循 reduced-motion 偏好)。
会话控制(Conversation Controls)
- 复制消息到剪贴板(气泡悬停图标);
- 编辑最后一条用户消息并重新生成;
- 重新生成最后一条回复;
- 清空对话(带截断水印,被清历史无法"复活");
- 从任意消息点分叉会话(压缩过的会话按回合边界对齐);
- 纯文本流与工具调用流均可恢复。
会话管理(Sessions)
- 创建会话(+ 按钮或 Cmd/Ctrl+K);
- 侧边栏点击加载会话;
- 删除会话(悬停垃圾桶、toast 可撤销、有回退);
- 首条用户消息自动命名 + 自适应标题刷新(可配置节奏);
- 通过辅助路由(auxiliary route)生成 LLM 标题(可配置模型);
- 内联重命名(双击、Enter 保存、Escape 取消);
- 标题搜索(实时过滤)与内容搜索(跨全会话全文检索);
- 日期分组头(Today / Yesterday / Earlier)可折叠;
- 置顶/星标、复制会话;
- 会话 JSON 导入/导出(完整消息 + 元数据)、Markdown 转录下载;
- 标签(
#tag提取 + 过滤芯片)、归档(默认隐藏,"Show N archived"开关); - 项目/文件夹(芯片过滤栏、"Unassigned"过滤);
- 每会话 profile 追踪、每会话工具集覆盖(
/toolsets); - 批量选择模式(多选、批量删除/移动/归档);
- CLI 会话桥接——从
state.db读取 CLI/agent 会话、实时呈现运行中会话、可导入为 WebUI 会话; - 只读 cron(定时任务)会话可分叉为可编辑聊天;
- 侧边栏分组稳定(分叉/压缩/子 agent 簇在刷新时不重排);
- 跨设备最近使用重排序(后台标签页中重新激活的会话也会升到顶部)。
工作区与文件(Workspace and Files)
- 添加工作区带路径校验(目录必须存在、跟随符号链接);移除/重命名工作区;
- 顶栏下拉快速切换;侧边栏实时显示工作区(名 + 路径);新会话继承最近使用的工作区;
- 目录树浏览(类型图标)、展开/折叠 + 懒加载(#22);子目录面包屑导航;
- 文本/代码只读预览;Markdown 预览(渲染 + 表格 + Mermaid + KaTeX);
- 图片内联预览(PNG、JPG、GIF、SVG、WEBP、AVIF);PDF / SVG / 音频 / 视频 / Excalidraw / CSV / JSON / YAML 预览;
- 内联编辑文件(Edit 按钮、Enter 保存、Escape 取消);当前目录下创建/重命名/删除文件与文件夹;
- 拖放 / 点击 / 剪贴板粘贴上传;压缩包上传(zip / tar)并解压;
- 复制绝对 + 相对文件路径;Prism.js 语法高亮代码预览;
- 目录导航时文件预览自动关闭;右面板可拖拽调整宽度;
- 内嵌工作区终端(
/api/terminal/{start,input,output})——对应 static/terminal.js 前端模块; - 工作区头部显示 Git 分支 + 脏状态徽章。
定时任务(Cron Jobs)
- 任务侧边栏标签列出全部 cron 任务;查看任务详情(prompt、计划、上次运行、输出);
- 运行 / 暂停 / 恢复 / 删除;从 UI 创建任务(名称、计划、prompt、投递目标);
- 内联编辑(与创建表单完全对齐,含技能选择);
- 免 cron 语法的计划构建器(频率预设 + 时间/星期选择器 + 内联表达式预览);
- 每个任务可展开的运行历史查看器;完成提醒(toast + 徽章);带实时监视模式的运行状态追踪。
技能、记忆、Profile(Skills / Memory / Profiles)
技能:按类别分组列出;按名称/描述/类别搜索过滤;查看完整SKILL.md内容;查看技能关联文件;创建/编辑/删除技能;/skills斜杠命令。
记忆:个人笔记(MEMORY.md)与用户档案(USER.md)以 Markdown 渲染;每节显示最后修改时间戳;内联添加/编辑记忆条目。
Profile:
- 多 profile 支持——创建、切换、删除(#28);
- 顶栏 profile 选择器带网关状态点;
- Profile 管理面板(完整 CRUD);
- 无感切换(不重启服务器,刷新模型/技能/记忆/cron/工作区并强制配置重载);
- Profile 本地工作区存储;
- 首运行引导向导带提供商配置(OpenRouter / Anthropic / OpenAI / Custom);
- Codex 与 Claude 的站内 OAuth;
- 并发 per-profile 隔离(上下文级 home 覆盖,使并行 worker 互不干扰)。
配置与通知(Configuration / Notifications)
配置:设置面板(默认模型、默认工作区、发送键、主题、皮肤、语音、字号);设置项可搜索;发送键偏好(Enter 或 Ctrl+Enter);密码认证(默认关闭);每会话工具集覆盖;config.yaml配置人格(personality);推理力度持久化。
通知:cron 任务完成提醒;后台 agent 错误横幅;审批等待徽章;提供商/模型不匹配 toast 警告。
斜杠命令(Slash Commands)
- 命令注册表 + 自动补全下拉;
- 内置命令:
/help、/clear、/model、/workspace、/new、/usage、/theme、/compact、/queue、/interrupt、/steer、/goal、/btw、/reasoning、/skills、/toolsets; - 未识别命令透传。
安全(Security)
安全是清单最长的一块之一,逐项如下:
- 密码认证使用 HMAC 签名 HTTP-only Cookie(24h TTL);
- 安全响应头(X-Content-Type-Options、X-Frame-Options、Referrer-Policy);
- CSRF 防护(scheme 感知、为反向代理做端口归一化);
- CORS preflight 只回显白名单来源——绝不使用通配符;
- PBKDF2 密码哈希;认证端点限流;会话 ID 校验;
- SSRF 防护(
/api/models/live、cfg_base_url、custom_providers[]); - 环境变量变更围绕 ENV_LOCK;所有渲染 HTML 做 XSS 净化;
- HMAC 签名密钥随机(每安装独立);技能路径穿越防护;
- Cookie 安全标志(HttpOnly、SameSite、HTTPS 时加 Secure);
- 错误消息净化(响应中不暴露堆栈);POST body 大小限制(20MB);
- 上传路径穿越防护;API 响应凭据脱敏;profile 切换时
.env密钥隔离; ?next=登录参数开放重定向防护(有界解码、折叠登录循环链);- 自动安装门控(
HERMES_WEBUI_AUTO_INSTALL=1显式开启)。
视觉 / UX
- 3 种基础模式——Light、Dark、System(自动同步);
- 21 个皮肤叠加在基础模式之上:default、ares、catppuccin、charizard、codex、geist-contrast、github、graphite、hepburn、mono、neon、neon-paint、neon-soft、nous、poseidon、sienna、sisyphus、slate、terracotta、verdigris、zeus;
- 双轴外观模型(基础模式 + 皮肤),方便社区贡献主题;
- Mermaid 图渲染(fit / 全屏工具栏);KaTeX 公式渲染(含 fence-before-math 修复);Prism.js 语法高亮(语言感知、YAML 换行保留);
- Markdown 图片语法
alt与内联MEDIA:token 渲染为<img>;纯 URL 自动链接; - 表格单元格内联 Markdown(粗体、斜体、代码、链接);代码块复制按钮;
- 工具卡片展开/折叠;可折叠思考/推理卡片(Claude 扩展思考、o3 推理 token);
- 消息时间戳(弱化显示、悬停完整日期);
- 聊天头部(模型、图标、TPS 徽章、时间戳)随字号偏好缩放;
- 空 composer 隐藏发送按钮(图标圆 + pop-in 动画);
- 可插拔 Lucide SVG 图标(避免 emoji 渲染不一致);
- Composer 中心化控制(v0.50.0 UI 改版);Hermes Control Center 模态框(集中操作);
- 工作区面板状态机(默认关闭,浏览/预览时打开);三栏桌面布局在缩放时保持可读的对话区;
- PWA manifest + service worker(离线壳);Favicon(SVG + PNG + ICO);品牌化引导向导。
21 皮肤在源码中可数清。static/boot.js 中的_SKINS数组恰好列出 21 项(Default、Ares、Mono、Graphite、GitHub、Codex、Terracotta、Slate、Poseidon、Sisyphus、Charizard、Sienna、Catppuccin、Hepburn、Nous、Neon、Neon Soft、Neon Paint、Geist Contrast、Zeus、Verdigris),每项携带三色调色板;_VALID_SKINS白名单负责校验。static/index.html 首屏内联脚本内置同一份皮肤白名单 + 旧主题名映射表(如 solarized → poseidon、nord → slate),在 CSS 加载前就完成主题/皮肤的防闪烁恢复——这就是"双轴外观模型"的运行时形态。
语音、移动端、国际化(Voice / Mobile / i18n)
语音:Web Speech API 语音输入(按住说话听写);免提语音模式(回合制对话,Settings → Preferences 选择性开启);响应 TTS 播放(可配置音色、语速、音调)。
移动端:汉堡侧边栏(滑入覆盖);底部导航栏(5 标签 iOS 风格);Files 侧滑面板(右栏转为 slide-over);44px 最小触控目标;composer 上的容器查询;Android Chrome 兼容修复;PWA 安装(manifest + 图标 + Android 支持);流式滚动加固(离屏高度保持、原生滚动锚定、iOS/Android 不跳顶);移动抽屉承载仪表盘链接与扩展导航动作。
国际化:
- 15 种语言——英语、意大利语、日语、俄语、西班牙语、德语、中文(zh + zh-Hant)、葡萄牙语、韩语、法语、捷克语、土耳其语、波兰语、越南语;
- 非英语语言近乎全量翻译覆盖——新近加入的键留有少量英文回退尾巴(捷克语约 2%,土耳其语最多约 15%),由周期性翻译回填;
- 键对齐(key-parity)测试保证每个语言包拥有全部键;
- RTL 与 CJK 输入(IME 组合修复)。
从源码结构看,语言包全部集中在 static/i18n.js 的单一LOCALES对象中(en、zh、zh-Hant等各为独立键空间),这种"单文件全量语言包 + 键对齐测试"的结构正是 key-parity 守卫能成立的前提。
网关集成(Gateway Integration)
- 侧边栏实时网关会话(Telegram、Discord、Slack、微信/Weixin、Signal、SMS),经 SSE + DB 轮询;
- 跨渠道交接坞(handoff dock)——composer 停靠的浮层,摘要进行中的外部会话;
- 10+ 轮次时生成转录摘要卡片;
- 侧边栏按会话身份去重键(同平台不同聊天保持独立);
- 网关会话同步对外部会话跳过复制/删除选项;
- LLM Gateway 路由元数据展示——助手回合与会话元数据显示实际服务的模型/提供商、故障转移路径、模型切换警告(#732);
- 设置中的网关状态卡片(#1457);网关审批运行 API 可选开启(已文档化)。
MCP 集成
- MCP 服务器管理 UI(System Settings → MCP Servers);
- MCP 服务器条目的添加/编辑/删除。
此外,仓库根目录还有一个常被忽视的实现细节:mcp_server.py 让Hermes WebUI 自身反向暴露为 MCP 服务器——通过 stdio 把项目管理与会话管理暴露为任何 MCP 兼容 agent 可调用工具,pip install "mcp>=1.28,<2"后python3 mcp_server.py即启动,支持--profile指定 profile,并在config.yaml的mcp_servers段注册。这与前瞻工作中"Native MCP server expose(#733)"候选项直接相关,可视为该方向的先行落地。
扩展系统(Extension System)
- 选择性扩展加载器——服务本地静态资源、向应用壳注入同源 CSS/JS;
- 从应用内画廊(Settings → Extensions)一键安装到 WebUI 管理的状态目录(不重启、不依赖环境变量);
- 清单契约(
extensions.json)用于捆绑/多扩展安装; - 能力面——注册自定义主题(皮肤)、注册自定义 TTS 引擎、添加导航动作、声明回环 sidecar、在 iframe 标签中嵌入外部 Web 应用;
- 每扩展设置 schema + 自有存储;
- 经同意的扩展 sidecar 代理路径(不开放任意后端路由注册);
- 状态 + 诊断端点;
- 信任模型已文档化——扩展运行在完整会话权限下;只安装审核过的/自研的;
- 带 CI 安全门的审核、带版本号的库仓库(hermes-webui 组织下的 hermes-webui-extensions 仓库,"进注册表 == 已审核");
- 核心仓库捆绑零扩展——纯客户端扩展迁移到库仓库,不合并进核心。
分发(Distribution)
- Docker 支持(多架构 amd64 + arm64、HEALTHCHECK、UID/GID 自动检测);
- Two-container Docker compose(webui + agent);
- GHCR 在 tag push 时自动发布;
- 子路径挂载支持(反向代理部署在
/hermes/下); - PWA 可从任意浏览器安装;
- 原生 macOS 应用——Intel + Apple Silicon 通用、签名 + 公证 DMG、Sparkle 2 自动更新;
- 原生 Windows + Linux + macOS 桌面应用——Rust/Tauri、每平台安装器;
- 原生 Android 应用——可上架 Play 的 APK/AAB 发布;
- 原生 iOS 应用——iPhone 客户端(经 Tailscale 连接)。
原生客户端矩阵:一服务器、全客户端
路线图的定位是"Web 应用是引擎,一组原生壳包裹它",让 Hermes 在每个平台都以真实应用形态运行。每个客户端各在自己的仓库,独立版本与发布节奏——没有任何一个是 WebUI 源码的 fork:
| 客户端 | 平台 | 技术栈 | 仓库 |
|---|---|---|---|
| Hermes for Mac | macOS(Intel + Apple Silicon) | Swift + WKWebView、SSH 隧道、Sparkle 2 自动更新、签名 + 公证 DMG | hermes-webui/hermes-swift-mac |
| Hermes Desktop | Windows + Linux + macOS | Rust / Tauri(WebView2 / WebKitGTK)、每平台安装器 | hermes-webui/hermes-desktop-rust |
| Hermes for Android | Android | 原生 Android、可上架 Play 的发布 | hermes-webui/hermes-android |
| Hermes for iOS | iOS(iPhone) | 原生 Swift、经 Tailscale 连接(QR / 主机名配对) | hermes-webui/hermes-swift-ios |
"一台机器跑 WebUI,浏览器、桌面、手机都能到达"——各仓库的 Releases 页承载实时版本与发布说明,因此本表刻意不携带版本号(各仓库版本独立漂移)。这也解释了 前瞻工作 中"不做完整 SwiftUI/native 重写前端"的决策:WebView 壳已经拿到约 95% 的原生收益,维护成本却低一个量级。
自治项目维护(Autonomous Project Maintenance)
路线图披露了一个少见的维护模式:Hermes WebUI 由自治 agent 系统维护——入站 issue 与 PR 被自动 triage、深度评审(多模型门 + 完整测试套件 + 浏览器 QA)、发布、带署名关闭,几乎不需要人工引导。该系统的去项目化提炼已作为公开框架发布为StewardOS(nesquena/steward-os),包含角色、自治带(autonomy bands)、安全脊柱、issue/PR/质量门生命周期与可复用技能,且 harness 无关(不绑定特定 agent 运行时)。
路线图给出的因果链是:StewardOS 是泛化,WebUI 自身的操作规程是源头——这就是贡献者 PR 能获得当日深度评审、发布节奏达到每日多次的原因。这也解释了 CHANGELOG.md 中单版本包含大量带贡献者署名的修复条目的来源。
前瞻工作(Forward Work)
原始 forward-work 清单的大部分已经发布。剩下的分为"正在主动考虑的功能请求"与"明确推迟的概念"。Issue 状态会漂移,权威查询方式是gh issue list(对应当前仓库)。
候选项(正在主动考虑的功能请求)
| 主题 | 追踪 | 理由 |
|---|---|---|
| 轻量应用内 Canvas 编辑 | #1255 | 用于 prompt 草稿 / 共享笔记的文本画布 |
| Provider / Model 真源对齐 | #1240 | 调和 WebUI vs CLI vs Gateway 的提供商解析 |
| 内置 SearXNG Web 搜索 | #1037 | 轻量搜索工具,带开/关切换 |
退役LMSTUDIO_API_KEY旧环境变量 | #1502 | 别名保留一个小版本周期后移除 |
| 原生 MCP server 暴露 | #733 | 把 Hermes WebUI 作为 MCP server 供 agent 直接集成 |
| Teams / agents 管理面板 | #719 | 可编辑名称、角色、指派 |
| WebUI profile ↔ Hermes 运行时模型对齐 | #749 | WebUI profile 与运行时模型之间的设计对齐 |
| 添加 agent / 替换模型模态框 | #698 | 面向 agent + 模型管理的专用模态框 |
积压(推迟,列出以便可见)
- Insights / 监控套件——数据标签页 / 实时集成(#722)、监控仪表盘概念(#721);
- 代码执行内联单元格——聊天内的 Jupyter 风格单元格渲染;
- 共享 / 公开会话 URL——需要带访问控制的托管后端(自托管场景超范围)。
明确不做(Intentionally Not Planned)
- 前端完整 SwiftUI/native 重写——WebView 壳已拿到约 95% 的原生收益,维护成本却低得多;
- 桌面应用上架 App Store——沙盒会破坏本地服务器模型;
- 实时多人协作——整个项目基于单用户假设;
- 多租户 / 白标托管——项目定位是单用户/多 profile,不是多租户;
- Anthropic / Claude 专有功能(Projects AI 记忆、Claude artifacts 同步)——不可复现。
路线图还留了一条修正记录:插件/扩展市场曾经属于"明确不做"——这个缺口现在由扩展系统 + 审核库仓库补上了,在不引入重型依赖系统的前提下覆盖了定制化面。
冲刺历史(Sprint History)
逐版本细节在 CHANGELOG.md;下表是主要冲刺主题的高层编年史,单条 PR/修复细节保留在 CHANGELOG 中以保证本文件可读性:
| 范围 | 主题 | 亮点 |
|---|---|---|
| Sprints 1–6 | 基础 + 工作区 | server/static 拆分、JS 模块拆分、工作区 CRUD、文件编辑器、消息队列 + INFLIGHT、隔离测试环境 |
| Sprint 7 | Wave 2 核心 | Cron / 技能 / 记忆 CRUD、会话内容搜索、健康端点、git 初始化 |
| Sprint 8 | 日常驱动完成线 | 编辑 + 重新生成、重新生成最后回复、清空对话、Prism.js、队列 + INFLIGHT 打磨 |
| Sprints 9–10 | 代码库健康 + 运维打磨 | app.js→ 6 个模块、server.py →api/模块、工具卡片 UX、后台任务取消、回归测试 |
| Sprint 11 | 多提供商模型 + 流式 | 动态模型下拉、平滑滚动钉住、路由抽取到api/routes.py |
| Sprint 12 | 设置 + 可靠性 + 会话 QoL | 设置面板、SSE 自动重连、会话置顶、JSON 导入 |
| Sprint 13 | 提醒 + 打磨 | Cron 提醒、后台错误横幅、会话复制、浏览器标签标题 |
| Sprint 14 | 视觉打磨 + 工作区操作 | Mermaid、消息时间戳、文件重命名、文件夹创建、会话标签、归档 |
| Sprint 15 | 会话项目 + 代码复制 | 项目/文件夹、代码复制按钮、工具卡片展开/折叠 |
| Sprint 16 | 侧边栏视觉打磨 | SVG 图标、操作下拉、置顶指示、项目边框、安全 HTML 渲染 |
| Sprint 17 | 工作区打磨 + 斜杠命令 | 面包屑导航、斜杠命令自动补全、发送键设置(#26) |
| Sprint 18 | 思考展示 + 工作区树 | 文件预览自动关闭、思考/推理卡片、可展开目录树(#22) |
| Sprint 19 | 认证 + 安全加固 | 密码认证、登录页、安全头、body 限制(#23) |
| Sprint 20 | 语音输入 + 发送按钮 | Web Speech API 语音、发送按钮打磨 |
| Sprint 21 | 移动响应式 + Docker | 汉堡侧边栏、移动导航、slide-over 文件、Docker 支持(#21、#7) |
| Sprint 22 | 多 profile 支持 | Profile 选择器、管理面板、无感切换、每会话追踪(#28) |
| Sprint 23 | agent 透明度 | Token / 成本展示、子 agent 卡片、cron 中的技能选择器、profile 本地存储 |
| Sprint 24 | Web 打磨 | rAF 流式、git 检测、可折叠日期分组、上下文圆环(#80–#83) |
| Sprint 25 | macOS 桌面应用 | 原生 Swift + WKWebView 壳、通用 DMG、Sparkle 2 自动更新 |
| Sprint 26 | 可插拔主题 | Light / Slate / Solarized / Monokai / Nord、设置未保存变更守卫、/theme |
| Sprint 27 | 主题打磨 | 30+ 硬编码颜色 → CSS 变量、亮色主题最终打磨 |
| Sprint 28 | 安全加固 | 环境变量竞态修复、随机签名密钥、上传穿越、PBKDF2 |
| Sprints 29–32 | 模型路由 + 自定义端点 + 推理 | 按提供商前缀的模型路由、自定义端点 URL 修复、OLED 主题、顶层推理、message_count 同步 |
| Sprint 33 | 审批卡片 + Lucide 图标 | 审批提示浮出、emoji → SVG、登录 CSP 修复、更新诊断 |
| Sprint 34 | v0.50.0 UI 改版 | Composer 中心化控制、Control Center 模态框、工作区状态机、可折叠日期分组、rAF 节流、上下文圆环 |
| Sprints 35–37 | 引导 + i18n | 首运行向导、提供商配置、西班牙语语言包、Docker 双容器、移动端 Profile 按钮 |
| Sprints 38–40 | 会话 + UI 打磨 | 五 bug 清理、侧边栏时间戳、测试端口隔离 |
| Sprints 41–42 | 渲染器加固 + KaTeX + 交接 | 上下文圆环实时用量、renderMd 链接/图片/代码暂存链、MEDIA: 图片渲染、网关交接基础 |
| Sprints 43+ | 持续贡献者冲刺 | 自定义提供商、更多语言包、IME 修复、模型切换 toast、审批队列多槽位、profile 打磨、字号 CSS、贡献者波次 |
| Ongoing | 生态扩张 + 可靠性 | 扩展系统 + 库、Rust/Android/iOS 原生客户端、StewardOS、网关平台扩张(Signal/SMS/WeChat)、Transparent Stream、移动滚动加固、会话加载性能、测试隔离 flake 消除 |
版本约定(Versioning Conventions)
路线图定义了明确的语义化版本规则:
- Patch(
v0.51.X)——小批量、贡献者 PR 发布、热修复; - Minor(
v0.X.0)——冲刺完成、新功能面、架构里程碑; - Major(
v1.0.0)——在功能面稳定且所有客户端的可靠性达到稳态时宣布。
逐版本细节与贡献者署名在 CHANGELOG.md。
小结
ROADMAP.md 的信息量集中体现在三点:状态快照回答"现在做到哪了"(12 个产品面全绿,重心已转向可靠性与分发);功能对齐清单回答"具体包含什么"(20 余个维度逐项可核对);前瞻工作回答"边界在哪里"(8 个候选项、3 个推迟项、5 条明确的"不做")。配合 ARCHITECTURE.md 的模块地图与 CHANGELOG.md 的版本细节,以及 tests/_pytest_port.py、Dockerfile、static/boot.js、mcp_server.py 等可直接核对的源码证据,构成了一份少见的"承诺—实现—证据"三层自洽的项目规划文档。对读者而言,它既是 Hermes WebUI 能力边界的事实清单,也是"薄 Python 服务端 + 原生 JS + 多端壳 + 自治维护"这套架构取舍的完整陈述。
【免费下载链接】hermes-webuiHermes WebUI: The best way to use Hermes Agent from the web or from your phone!项目地址: https://gitcode.com/GitHub_Trending/he/hermes-webui
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考