乐于分享
好东西不私藏

OpenClaw+? 全自动情报看板:数据从 Cron 到浏览器,全程无人值守

OpenClaw+? 全自动情报看板:数据从 Cron 到浏览器,全程无人值守

一、背景与方案设计

我有个Agent,每天早中晚帮我做三件事:搜情报动态、看待办、研究项进度、等等乱七八糟的。但目前输出渠道一直是 Telegram——信息到了,瞟一眼,然后就没了。

我想要一个借助OpenClaw的自动化,能展现更多信息的Dashboard,打开能看到行业、市场哪些技能在涨、研究任务进度到哪里了、今天有哪些技术要关注——像战术面板一样,无论在PC还是手机上都能一目了然。

但我不想写后端,不想管服务器。

所以整个方案的核心决策只有一句话:不做后端,数据就是文件。

Agent 采集信息 → 写成 JSON/MD 文件 → git push    → Cloudflare 自动部署 → 浏览器读取文件 → 渲染看板
没有服务器,没有数据库,没有 API 接口。数据由 Agent 生产,前端只负责读和展示。两边通过文件格式"签约"——Agent 按约定写,前端按约定读,谁也不依赖谁。
所以成品大概是这样,先看效果:
再看架构:
涉及到啥
方案选型
理由
前端框架
Vue 3 + Vite
熟悉,生态好
UI 组件
Naive UI
暗色主题更专业,自定义性强
数据源
静态 JSON 文件
零运维,与 OpenClaw 解耦合
部署平台
Cloudflare Pages
内置 Access 权限管控,无限带宽,免费
部署方式
GitHub Push 触发自动构建
最简单,Cloudflare 原生集成,免费
认证方式
Deploy Key + ssh2
更小权限范围,只影响一个无敏感信息的前端仓库
SSH 客户端
Node.js ssh2
沙箱无 ssh 二进制
移动端适配
CSS HUD 风格 + 三档断点
一套代码覆盖两端

二、完整链路

全链路从触发到展示,总共经过 6 个环节:

三个定时任务(08:00 / 09:00 / 09:38    ↓ 各自采集整理成 JSON / Markdown    ↓ 写入Vue3前端项目public/data/ 目录    ↓ git commit + pushGitHub 仓库    ↓ 自动构建Cloudflare Pages CDN    ↓ 读取文件浏览器 HUD 看板
前端:四个页面的情报看板

Vue 3 + 一个叫 Naive UI 的组件库,暗色主题。风格偏战术 HUD——黑底、青色发光线条、面板四角带斜切角。四个页面:研究待办总览、技能雷达图、安全情报、市场动态。

所有页面只做一件事:页面加载时 fetch('/data/xxx.json'),拿到数据按模板渲染。

数据契约:两边按格式签约

Agent 和前端之间不传参、不调接口,靠的是事先约定好的 JSON 结构。比如技能雷达的数据长这样:

// 这不是后端返回的,这是一个静态文件{  generatedAt: "2026-05-04T14:35:00+08:00",  topSkills: [    { rank: 1, skill: "Python", count: 38, change: "▲2" },    { rank: 2, skill: "Linux内核安全", count: 34, change: "▲9" }  ],  totalJobs: 48,  shanghaiCount: 10}

约定写在代码的类型定义里——Agent 生成时必须满足,前端渲染时按这个结构解析。两边各管各的,不出错。

部署:$0

代码推到 GitHub,Cloudflare Pages 自动检测到 push,执行 npm run build,把打包结果发布到 CDN。免费套餐无限带宽,每个月 500 次构建,完全够用。

额外加了一层 Cloudflare Access(零信任网关),打开网页先跳转 Google 登录,不是公开的。


三、特别注意:如果你的沙箱里没有 ssh

Agent 跑在 Docker 沙箱里。沙箱有 Node.js、有 npm、有 git,但没有 ssh 命令。没有 ssh,就没办法 git push。连最基础的操作都做不了。

解法分两层。

第一层:换一种认证方式。

GitHub 提供了一种叫 Deploy Key 的认证方式——它不是绑到你的 GitHub 账号,而是绑到某一个仓库。这把 key 只能读写这一个仓库,泄露了也动不了其他仓库和个人资料。权限范围比 Personal Access Token 小得多。

生成一对密钥,公钥加到仓库的 Deploy Keys,私钥留在项目本地(确保不进版本控制)。

第二层:用 Node.js 替代 ssh 命令。

有私钥了,但沙箱里没有 ssh 程序来用它。装了一个叫 ssh2 的 npm 包,它用纯 JavaScript 实现了 SSH 协议。写了一个几十行的脚本封装它,通过 GIT_SSH_COMMAND 环境变量让 git 调用这个脚本代替系统 ssh。

结果就是:在一台连 ssh 命令都没有的机器上,git push 正常工作,而且只认那一个仓库。


四、安全底线:先拦住坏数据,再谈自动化

能自动推送了,但还有一个问题:如果 Agent 生成的 JSON 格式有误,推上线后前端会白屏。

所以在 git commit 之前加了一道校验:

  • 研究待办数据:summary.total 必须等于 items.length,状态值必须在合法范围内,progress 必须在 0-100
  • 技能雷达数据:topSkills 不能为空,每个字段类型必须正确
  • 日报文件:非空、不超过 50KB
校验不通过,拒绝 commit,输出具体错误。数据有问题是正常现象,但有问题的数据不上线才是系统设计。

这道校验跑在每次部署之前,不需要任何人盯着。

关于定时任务

最终有三条 cron 驱动整条管道:

时间
任务
产出文件
08:00
采集岗位信息,分析技能热度
skill-radar.json
09:00
扫描待办进度,更新状态
dashboard.json
09:38
采集行业趋势、安全动态新闻,写日报
digest-YYYY-MM-DD.md

每个 job 的执行顺序一样:采集 → 整理 → 写入 → 自动部署 → Telegram 推送。deploy 那一步就是一行命令,把所有事做完。


五、最终效果

这套东西跑通之后,日常变成了这样的:

早上 8 点,打开Cloudflare给你链接,相关技能的排名已经更新了。上周还在榜尾的”Linux 内核安全”,因为 CVE-2026-31431(一个被标记为 Copy Fail 的内核提权漏洞)热度飙升到第二名。

9 点 38 分,今天的日报有了——Copy Fail 的详细分析、Trellix 源代码仓库被入侵、全球联合打击加密货币诈骗逮捕 276 人。

整个过程中,没有人打开终端,没有人按部署按钮。


六、几条经验与改进点

1. 能不用后端就别用后端。
静态文件驱动的方式,省掉了服务器、数据库、API、运维这一整面。代价是前端不能做写操作——但对于看板类场景,根本不需要写。

2. 先定义数据契约,再做 UI。
先定好 JSON 结构,Agent 按它写,前端按它读。两边完全解耦,各改各的。如果先做页面再对接,大概率会陷入”前端要什么 → Agent 改产出”的反复拉扯。

3. 自动化链路要一层层打通。
我的顺序:本地 JSON 能渲染 → git push 能自动部署 → Agent 能写文件 → Agent 能 git push → 加校验 → 加 cron。每一步可验证,出问题能精准定位。

4. 权限越小越好。
Deploy Key 只绑一个仓库,不是绑个人账号。就算泄露了,损失也控制在一个项目内。这个原则在安全产品里天天讲,但在自己搭东西的时候也很容易忘。

5. 可继续改进的点:

    数据采集还不够稳 — 搜索能力受限于可用工具,中文内容的覆盖率有时不够理想失败告警还没做 — 如果某次自动部署挂了,目前没有主动通知机制数据时效无标记 — 网页上不会告诉你"这是今天的还是昨天的",全靠看数据时间戳回滚靠 git revert — 操作不复杂,但没写进文档,急的时候可能手忙脚乱