{/* This page is auto-generated from the skill's SKILL.md by website/scripts/generate-skill-docs.py. Edit the source SKILL.md, not this page. */}
Live Dashboard
从实时数据源构建自动更新的仪表盘。
Skill 元数据
| 来源 | 可选——使用 hermes skills install official/productivity/live-dashboard 安装 |
| 路径 | optional-skills/productivity/live-dashboard |
| 版本 | 0.2.0 |
| 作者 | Teknium (teknium1), Hermes Agent |
| 许可证 | MIT |
| 平台 | linux, macos, windows |
| 标签 | dashboards, monitoring, status, automation, reporting |
| 相关 skill | product-price-monitor、competitor-news-monitor、email-inbox-triage、google-workspace |
参考:完整 SKILL.md
以下是 Hermes 在触发此 skill 时加载的完整 skill 定义。这是 skill 激活时 agent 所看到的指令内容。
Live Dashboard
把一句话——"给我们的签证申请做个仪表盘,每天从邮件线程和案件状态网站更新"——变成一个持久、自刷新的状态页。用户描述想看什么;你来定义数据契约,构建一个自包含的 HTML 仪表盘,验证一次实时刷新,然后排上周期性节拍。
配置在前台运行一次;周期性刷新作为 cronjob 节拍运行。安装本 skill 会通过 /suggestions 提供一次每日全仪表盘扫描(frontmatter 蓝图)。
使用时机
- "给 <项目/流程> 做个仪表盘并保持更新。"
- "我想在一处看到 <交易 / 申请 / bug / 货运> 的状态。"
- "跨我的邮件和 <网站> 跟踪 <某事物>,告诉我它现在到哪了。"
- "给我看 <slug> 仪表盘。"(重渲染/预览已有的)
- 一个 cron 节拍为已有仪表盘触发(第 5-7 步)。
不要用于:一次性状态问题(直接答)、单个物品的价格/库存阈值(用 product-price-monitor)、公司新闻跟踪(用 competitor-news-monitor)。
前提条件
- 至少一个仪表盘要读取的数据源连接器:邮件/日历通过
himalaya或google-workspace,网站通过web_extract或browser_navigate,本地文件通过read_file。如果一个都没配,在写任何产物之前于第 1 步重新敲定数据源。 cronjob用于周期性节拍。- 可选:
desktop_preview工具(Hermes 桌面应用会话)。当它在工具集里时,仪表盘渲染在应用内预览面板;否则把文件路径给用户。
流程——配置(前台,一次)
1. 定义仪表盘契约
从用户的那句话里敲定:仪表盘一句话的目的、被跟踪的实体(行)、每个实体的字段(列/指标)、"需要关注"意味着什么、每个字段从哪个源读取、以及刷新节奏。含糊的地方要问——跟踪错粒度的仪表盘一文不值。当仪表盘上每个字段都指名了它将从哪个源读取时,就算完成。
2. 用一次实时读取验证每个源
对每个源,现在在前台做一次有界读取:邮件/日历通过连接器 skill(himalaya、google-workspace),网站通过 web_extract 或 browser_navigate,本地文件通过 read_file。记录实际能取到什么——认证墙、缺失权限或空结果在这里暴露,而不是在第一次计划运行时。失败的源丢弃或替换。当每个字段的源都返回了真实数据、或已与用户明确重新商定,就算完成。
3. 构建仪表盘产物
在 Hermes 主目录的 dashboards/<slug>/ 下写两个文件(与 config.yaml 同一目录;不要假定固定位置):
dashboard.json——契约加当前状态:目的、实体、每字段值、每字段源 + 检索时间戳、一个needs_attention列表、以及一份变更日志(只追加,最新在前)。index.html——单个自包含 HTML 页(内联 CSS,无外部请求),渲染状态:带目的和最后更新时间的头部、顶部的"需要关注"区、实体表格、以及最近变更列表。每次刷新都从dashboard.json重新生成;绝不要手改 HTML 状态。
用第 2 步的读取填充两者,然后展示结果(第 8 步)。当页面渲染实时数据、且上面每个值在 dashboard.json 里都带检索时间戳时,就算完成。
4. 安排刷新
仅在第 3 步成功后,才安排节拍。如果 /suggestions 的每日全仪表盘扫描已经排上、且节奏合适,它会自动纳入这个仪表盘——说明这一点并停下。否则创建一个按仪表盘的任务,其 prompt 指名状态文件:
cronjob(action="create",
schedule=<契约里的节奏,例如 "0 8 * * *">,
prompt="加载 live-dashboard skill,为位于 <dashboards/<slug>/dashboard.json 的绝对路径> 的仪表盘运行刷新节拍。",
deliver=<用户的接收目的地>)
选一个尊重源限流的节奏。当存在覆盖此仪表盘的任务、且其 prompt 指名了状态文件路径(或扫描)时,就算完成。
流程——节拍(每次计划运行)
5. 重读源并做 diff
加载 dashboard.json(扫描时:逐个加载每个 dashboards/*/dashboard.json),从指名的源重读每个字段,对存储的状态计算字段级 diff。源读取失败意味着未知状态:保留最后一个好值,用失败时间把该字段标记为陈旧,绝不用错误覆盖好数据。当每个字段都要么已更新、要么未变、要么被明确标记陈旧时,就算完成。
6. 更新状态并重渲染
把 diff 应用到 dashboard.json:更新值和时间戳,把实质性变更追加到变更日志,按契约的关注规则重算 needs_attention。从更新后的状态重新生成 index.html,然后展示结果(第 8 步)。当 JSON 和 HTML 一致、且本次运行的变更日志条目存在(或本次运行记录为无变更)时,就算完成。
7. 有实质变更才投递,否则保持静默
如果 diff 包含实质变更或新的需要关注项,投递一条简短摘要:变了什么、需要关注什么、仪表盘在哪。否则回复 [SILENT]——除非用户要周期性摘要,否则不要"仍在监视"的噪音。当投递与 diff 相符时,就算完成。
流程——展示仪表盘(每次构建或重渲染后,以及被要求时)
8. 渲染到用户能看到的地方
- 桌面/GUI 会话(工具集里有
desktop_preview):desktop_preview(action="open", url=<index.html 绝对路径>, label=<仪表盘目的>),让页面在聊天旁的预览面板里实时渲染;每次重渲染后重新打开,让面板显示新状态。 - 其他会话(CLI、messenger、没有 GUI 的 cron 节拍):报告
index.html的绝对路径,并在平台允许时主动打开。
当用户要么看到了渲染的页面、要么被告知它确切在哪时,就算完成。
常见陷阱
- 在验证源之前就先把页面做出来——认证失败就会在无人值守的运行上暴露。
- 用错误页或空读取覆盖最后已知的好值。
- 只把状态渲染进 HTML——
dashboard.json才是事实来源;HTML 只是投影。 - 每次刷新都告警,而不是只在实质变更时。
- 跟踪错粒度(用户按应用想,你却按线程记)。
- 硬编码 Hermes 主目录路径——从运行中的安装解析(持有
config.yaml的目录),并把绝对路径写进 cron prompt。 - 在桌面会话之外调用
desktop_preview——它只在 GUI 会话的工具集里;回退到路径。
验证
- 每个仪表盘字段都指名了它的源,且每个源在安排前都通过了一次前台读取。
-
dashboard.json和index.html存在且一致;每个值都带检索时间戳。 - 失败读取把字段标记陈旧,但不破坏最后已知好状态。
- 节拍只在实质变更时投递;无变更运行是
[SILENT]。 - 变更日志仅凭状态文件即可回放仪表盘历史。
- 仪表盘已在预览面板展示(桌面)或已报告其路径(其他)。