一个自托管的全源实时 OSINT 情报平台,聚合全球航空、海事、地震、冲突、加密货币等数十类公开数据,并通过本地 LLM 进行态势预测,同时以 MCP 接口为 AI agent 提供全球实时快照。
# ⬡ CASSANDRA
### 全球情报、侦察与 AI 预测
[](https://nextjs.org)
[](https://typescriptlang.org)
[](https://maplibre.org)
[](LICENSE)
**一个实时全球情报仪表盘,将实时航班追踪、CCTV 网络、地震监测、冲突地区地图绘制和 24/7 新闻源聚合到一个 GPU 加速的界面中——然后完全在你自己的硬件上预测接下来会发生什么。**
**正在构建 agent?** 一次本地调用即可让它获取整个地球的实时状态以及这些预测,并且该接口通过 MCP 作为原生工具暴露出来。 → [面向 agent](#for-agents--give-your-agent-eyes-on-the-planet)
最初 fork 自 [simplifaisoul/osiris](https://github.com/simplifaisoul/osiris) (MIT) 并现已独立开发——请参阅下方的[起源与致谢](#origin--attribution)。与上游项目的在线演示、Patreon 或 Discord 无关。
## 概述
Cassandra 是一个生产级的 OSINT 平台,可提供跨多个情报领域的态势感知——以及 AI 驱动的预测。它基于 Next.js 16 和 MapLibre GL 构建,每一个数据点均通过 WebGL 渲染,即使屏幕上存在数千个并发实体,也能保持 60fps 的性能。
### 核心功能
| 领域 | 数据点 | 来源 |
|--------|------------|---------|
| **航空** | 商业、私人、军用、喷气式飞机 | OpenSky Network |
| **海事** | 实时 AIS 船只,39 个全球港口,10 个咽喉要道 | aisstream.io(需密钥)+ 静态海军情报 |
| **CCTV** | 2,000+ 个摄像头 | TfL, WSDOT, Caltrans, NYC DOT, VicRoads 等 |
| **地震** | 实时 M2.5+ | USGS 地震 API |
| **火灾** | 活跃热点 | NASA FIRMS |
| **新闻** | 24/7 直播流 + 地理定位通讯社报道 | 25+ 个全球广播机构,GDELT |
| **天气** | 恶劣天气,美国多边形预警,空气质量 | NASA EONET, NWS, OpenAQ |
| **太空** | 太阳能天气,卫星 | NOAA SWPC, N2YO |
| **网络** | CVE 威胁,恶意软件与勒索软件受害者,漏洞扫描 | NVD, ransomware.live, 自定义扫描器 |
| **冲突** | 13 个活跃战区,乌克兰前线动向 | 静态 OSINT 情报,[DeepStateMap](https://deepstatemap.live) |
| **加密货币** | BTC + ETH 钱包追踪,OFAC SDN 匹配 | blockstream.info, Blockscout, OpenSanctions |
| **制裁** | 个人/组织/船只 SDN 搜索 | OpenSanctions(US OFAC SDN 镜像) |
| **Telegram OSINT** | 来自公共频道的地理解析帖子 | `t.me/s/
` 网页预览 |
| **网络连通性** | 互联网中断检测(国家级) | [IODA](https://ioda.live) (CAIDA / 佐治亚理工学院研究所) |
| **市场** | 股票、大宗商品、加密货币、预测市场赔率 | Yahoo 风格报价,Polymarket |
| **人道主义** | 流离失所、粮食安全、疾病爆发、内乱 | UNHCR, WFP HungerMap, WHO, GDELT |
| **经济** | GDP 增长、失业率、贫困率 | 世界银行 |
| **审查** | 网络干扰测量 | OONI |
| **预测** | 使用 4 角色群体进行 24小时/每周/每月/每年预测 | 本地 LLM(见下文) |
## 架构
```
┌─────────────────────────────────────────────────┐
│ CASSANDRA CLIENT │
│ ┌──────────┐ ┌──────────┐ ┌───────────────┐ │
│ │ MapLibre │ │ HUD │ │ RECON Toolkit│ │
│ │ GL (GPU) │ │ Panels │ │ Port Scan │ │
│ │ WebGL │ │ Layers │ │ DNS / WHOIS │ │
│ │ Render │ │ Controls │ │ Vuln Scanner │ │
│ └──────────┘ └──────────┘ └───────────────┘ │
├─────────────────────────────────────────────────┤
│ NEXT.JS API ROUTES │
│ Live layers │
│ /api/flights /api/earthquakes /api/cctv │
│ /api/news /api/fires /api/maritime │
│ /api/gdelt /api/satellites /api/weather │
│ /api/markets /api/ransomware /api/unrest │
│ /api/frontlines /api/displacement … │
│ RECON /api/osint/* /api/scanner │
│ Oracle /api/oracle/* (predict · chat · │
│ scorecard · state/stream SSE) │
│ Agent /api/agent/view /api/agent/events │
│ Worker /api/events /api/watchlists │
├─────────────────────────────────────────────────┤
│ MCP SERVER (stdio, mcp/) │
│ 7 tools over the Agent + Oracle routes │
├─────────────────────────────────────────────────┤
│ EXTERNAL DATA SOURCES │
│ OpenSky · USGS · NASA · NOAA · TfL · NVD │
│ GDACS · EONET · FIRMS · N2YO · RSS Feeds │
│ blockstream.info · Blockscout · OpenSanctions │
│ t.me public previews │
└─────────────────────────────────────────────────┘
```
## 功能特性
### AI Oracle —— 不仅是监控,更是预测
Cassandra 将所有实时源整合为一份单一的世界简报,将其交给**本地** LLM,并询问它在四个时间跨度内接下来会发生什么:**24小时、每周、每月和每年**。每一项预测都包含一个概率、基于该快照的一句话推理,以及绘制在地图上的位置。
随后,预测将由一个**四角色群体**重新评判——战略家(地缘政治)、经济学家(市场)、自然主义者(灾害与健康)和怀疑论者(基础概率,即校准制动器)。每位角色通过其自身的视角独立投票,共识将取代基础估计。当他们出现 20 个百分点以上的分歧时,该预测会被标记为 **SPLIT**,因此可见的分歧是一项功能,而不是被平均化的东西。每个角色都可以通过 `SWARM_MODELS` 运行不同的本地模型。
**Brier 记分卡**会跟踪每个角色的校准情况。只有 24 小时预测会自动结算,这是通过对 Cassandra 自身的事件日志进行关键字重叠检查来实现的——这是一种诚实的自洽性启发式方法,刻意*不*声称是外部真实标准。更长跨度的预测将保持待定状态,直到被手动结算。
它可以运行在任何兼容 OpenAI 的 endpoint 上,因此 **[Ollama](https://ollama.com) 和 [LM Studio](https://lmstudio.ai) 均可直接使用,无需更改代码**——只需将 `OSIRIS_ORACLE_BASE_URL` 指向其中任意一个即可。没有任何数据会离开本机。
### 面向 agent —— 让你的 agent 拥有全球视野
大多数 agent 对真实世界视而不见。将一个 agent 指向 Cassandra,它就能作为原生工具获取地球的实时状态以及上述预测。
**一次调用即可获取所有内容:**
```
curl http://localhost:4000/api/agent/view
```
这将返回一段文本摘要、按领域分组且带有坐标的每个实时事件、活跃的领域以及当前的预测。
**或者使用过滤器查询事件**,而不是拉取整个世界并自己进行过滤:
```
curl 'http://localhost:4000/api/agent/events?domain=conflict&min_salience=0.7&limit=20'
```
过滤器包括 `domain`、`source`、`min_salience`、`since` (epoch ms) 和 `limit`。每个响应都带有 `domains_available` 和 `sources_available`,因此 agent 可以发现它能过滤哪些内容,而不是靠猜。
**MCP server** —— 整个接口也通过 stdio 暴露出来,因此 Claude Code、Claude Desktop、Codex 或任何 MCP 客户端都能将 Cassandra 作为原生工具:`world_brief`、`get_events`、`get_predictions`、`ask_oracle`、`get_scorecard`、`predict_now`、`resolve_prediction`。
```
claude mcp add --scope user cassandra -- node /path/to/cassandra/mcp/server.mjs
```
任何其他客户端都采用相同的 command/args 对;使用 `CASSANDRA_URL` 将其指向其他地方。该服务器是一个轻量级代理,因此 Cassandra 本身必须处于运行状态。
世界快照会被**缓存并保持预热**——冷构建会分散到所有数据源并花费几秒钟,但后续读取大约在 10ms 内完成,并且在后台刷新时会立即提供过期的缓存。并发调用者共享一次刷新,因此轮询的 agent 不会对上游数据源造成雪崩效应。Oracle 的运行有意绕过缓存,并始终读取实时数据。
### 后台 worker —— 警报、关注列表、每日简报
在唯一一个实例上设置 `OSIRIS_WORKER=1`,以启用 serverless 模型无法运行的持久循环:
- **事件日志** —— 轮询数据源,进行去重,并写入本地 SQLite,为 `/api/events` 提供时序回放源 (`?since=24h&bbox=…`)
- **关注列表** —— 通过 `/api/watchlists` 设定关注的地理区域;匹配到新摄入事件时即触发警报
- **每日简报** —— 每天编写一份 AI 情报简报,可通过 [ntfy](https://ntfy.sh) 发送到你的手机
- **世界缓存预热** —— 保持 agent 快照热度
### 情报图层
- **31 个可切换的数据图层**,带有实时实体计数
- **GPU 加速渲染** —— 所有地图数据均通过 WebGL 渲染,而非 DOM
- **渐进式加载** —— 激活图层时按需获取数据
- **视口感知** —— 仅加载可见区域的相关数据
### RECON 工具包
一个面板内集成了十七款工具。除非另有说明,以下所有工具均**无需密钥**。
**基础设施**
- **端口扫描器** —— 带有服务指纹识别的 TCP connect 扫描*(需要扫描器后端)*
- **IP 扫描** —— 针对活跃主机的范围扫描*(需要扫描器后端)*
- **DNS 查询** —— 完整记录解析 (A, AAAA, MX, NS, TXT, CNAME)
- **子域名** —— 子域名枚举
- **WHOIS** —— 域名/IP 注册数据(自动与 OFAC SDN 交叉核对)
- **BGP / ASN 路由** —— 通过 [bgpview.io](https://bgpview.io) 进行前缀、ASN 和上游查找
- **SSL/TLS 检查器** —— 证书链分析
- **证书透明度** —— 通过 [crt.sh](https://crt.sh) 获取某个域名的所有已签发证书,这是一种挖掘被遗忘子域名的快捷方式
- **HTTP Headers** —— 安全头检查
- **技术探测** —— 技术栈指纹识别
**威胁与暴露**
- **IP 情报** —— 地理定位、ASN、威胁声誉(自动与 OFAC SDN 交叉核对)
- **Shodan InternetDB** —— 通过 Shodan 免费的 [InternetDB](https://internetdb.shodan.io) 获取某个 IP 的开放端口、CVE 和标签(无需 Shodan 密钥)
- **漏洞扫描器** —— 针对 NVD 数据库进行 CVE 查找
- **威胁源** —— 声誉与 IOC 匹配
- **数据泄露** —— 通过 [XposedOrNot](https://xposedornot.com) 查询电子邮件的泄露暴露情况
**身份与归属**
- **GitHub 侦察** —— 账户资料、最近的仓库和活动
- **电话情报** —— 号码验证、运营商和地区 (libphonenumber + 区号地理定位)
- **MAC 地址** —— 通过 [macvendors.co](https://macvendors.co) 进行 OUI 供应商查询
- **加密钱包追踪** —— BTC + ETH 查询(余额、交易历史、OFAC SDN 制裁标记)
- **OFAC 制裁搜索** —— 查询美国 OFAC SDN 名单中的个人、组织、船只和飞机
### 实时广播网络
- **来自全球广播机构的 25+ 个实时 24/7 新闻源**
- 点击地图上的任何新闻点即可打开实时流
- 来自 NBC、CBS、ABC、Sky News、Al Jazeera、France 24、NHK、WION 等的源
### Telegram OSINT 图层
- 从无需身份验证的 `t.me/s/` 网页预览中抓取的**公共频道源** —— 无需 Bot API token,无需 MTProto
- 默认精选了 5 个频道(英语 + 俄语/乌克兰语战争报道),可通过 `OSIRIS_TELEGRAM_CHANNELS` 覆盖
- 帖子根据多语言地名词典(英语 + 西里尔字母 + 阿拉伯语)进行地理解析,并绘制在地图上
- 点击任何青色圆点即可阅读帖子,并跳转至 Telegram 上的原文
### 加密钱包情报
- **BTC** 查询通过 [blockstream.info](https://blockstream.info)(Esplora API,无需密钥)
- **ETH** 查询通过 [Blockscout](https://github.com/blockscout/blockscout) 的公共 ETH 实例 (`eth.blockscout.com`,无需密钥)
- 每次查询都会与 OFAC SDN 制裁地址列表进行交叉核对(镜像自 [`0xB10C/ofac-sanctioned-digital-currency-addresses`](https://github.com/0xB10C/ofac-sanctioned-digital-currency-addresses))
- 受制裁的钱包在 RECON 面板中会显示一个红色的 **SANCTIONED — OFAC SDN** 徽章
### OFAC SDN 交叉核对
- RECON 工具包中的独立 `SANCTIONS` 标签页 —— 对个人、组织、船只和飞机进行全文搜索
- WHOIS 和 IP 情报路由会自动将注册人/ASN 所有者名称与 SDN 列表进行交叉核对,并显示内联警报
- 数据来源于 [OpenSanctions](https://www.opensanctions.org) (CC-BY 4.0) —— 无需密钥,约 7 MB 在内存中缓存 24 小时
### 区域档案
右键点击地图上的任意位置,即可将该坐标解析为国家,并提取一份即时档案——通过 [RestCountries](https://restcountries.com) 获取名称、首都、人口、面积和地区,并连同当前在该区域活跃的所有实时信号汇集在一起。
供应链风险图层
将实时灾害(地震、火灾、冲突地区)与静态的 Tier 1/2 供应商坐标进行交叉比对,找出当前处于活跃威胁半径内的供应商。
### Polybolos SDK —— 接入你自己的实体
外部系统可以将其自身的轨迹合并到通用作战态势图中,而不仅仅是消耗 Cassandra 的数据:
- `POST /api/sdk/ingest` —— 推送实体 (`{ source, apiKey, entities[] }`,每个实体包含 `id` 和 `position`)
- `GET /api/sdk/stream` —— 标准化实体的 Server-Sent Events 流
数据摄入是**故障关闭**的:在未设置 `SDK_INGEST_KEY` 的情况下,该 endpoint 会返回 `503` 并且不接受任何数据。
### 冲突地区监控
- **13 个活跃的冲突/紧张地区**,带有严重程度颜色编码的警告标记
- 活跃战争:乌克兰、加沙、苏丹、缅甸、刚果民主共和国、也门
- 高度紧张:叙利亚、黎巴嫩、萨赫勒、索马里、红海
- 风险升高:台湾海峡、朝鲜非军事区
### 性能优化
- 与初始版本相比,**边缘请求减少了 75%**
- 激进的轮询放宽(对稳定数据采用 15-30 分钟的间隔)
- 静态数据从内存中提供(新闻源零外部 API 调用)
- `layerFetchedRef` 防止重复的 API 请求
## 快速开始
```
git clone https://github.com/toshon-jennings/cassandra.git
cd cassandra
npm install
npm run dev
```
打开 [http://localhost:3000](http://localhost:3000)
### Docker / 自托管
```
git clone https://github.com/toshon-jennings/cassandra.git
cd cassandra
cp .env.example .env # optional — configure keys / port
docker compose up -d
```
打开 [http://localhost:3000](http://localhost:3000)。该镜像是一个多阶段
`node:22-alpine` 独立构建版本(约 220 MB,非 root 用户)。compose 文件还
包含 CasaOS 应用元数据 (`x-casaos:`),可实现一键安装在
[CasaOS](https://casaos.io) 上。请参阅 **[DOCKER.md](DOCKER.md)** 获取完整的 Docker、
CasaOS 和 API 密钥指南。
**自定义端口** —— 容器始终监听 `3000`;在
`.env` 中设置 `OSIRIS_PORT` 即可更改发布的主机端口(例如 `OSIRIS_PORT=3005`),而无需
编辑 compose 文件。
### 环境变量
Cassandra **在没有 API 密钥的情况下也能部分工作** —— 所有核心源都使用公共的、
无需密钥的来源。将 [`.env.example`](.env.example) 复制到 `.env` 并仅设置
你所需的内容:
```
# 已发布的主机端口(容器始终监听 3000)。默认值:3000
OSIRIS_PORT=3000
# RECON scanner 后端。
# SCANNER_KEY 必须与后端的 OSIRIS_KEY 匹配 — 使用以下命令生成:openssl rand -hex 32
SCANNER_URL=
SCANNER_KEY=
# 可选,用于提高速率限制 / 未来来源(注册链接请参见 DOCKER.md)
FIRMS_API_KEY= # NASA FIRMS — firms.modaps.eosdis.nasa.gov/api/map_key/
OPENSKY_CLIENT_ID= # OpenSky OAuth2 (since Mar 2025) — opensky-network.org
OPENSKY_CLIENT_SECRET=
N2YO_API_KEY= # N2YO satellites — n2yo.com (Profile → API key)
AIS_API_KEY= # aisstream.io maritime
# ── AI Oracle(任何兼容 OpenAI 的端点;数据不会离开本机) ──
OSIRIS_ORACLE_BASE_URL=http://localhost:11434/v1 # Ollama default; LM Studio is :1234/v1
OSIRIS_ORACLE_API_KEY=ollama # LM Studio ignores the value
OSIRIS_ORACLE_MODEL=llama3.1 # must be a model you actually have
OSIRIS_ORACLE_TIMEOUT_SEC=300 # local CPU inference is slow
OSIRIS_ORACLE_PREDICTIONS_PER_HORIZON=3
OSIRIS_ORACLE_SWARM_MAX_TOKENS=3000 # see note below
SWARM_MODELS= # e.g. Strategist:llama3.1:70b,Skeptic:qwen3:8b
# ── Agent API ──
CASSANDRA_WORLD_TTL_SEC=300 # how long the cached world snapshot stays servable
# ── 后台工作进程(仅在一个实例上设置) ──
OSIRIS_WORKER=1
ALERT_WEBHOOK_URL= # where alerts + the daily briefing get POSTed (ntfy works)
# ── Polybolos SDK 数据接入(故障关闭:未设置 = 端点禁用,返回 503) ──
SDK_INGEST_KEY= # generate with: openssl rand -hex 32
```
## 技术栈
| 层级 | 技术 |
|-------|-----------|
| 框架 | Next.js 16 (App Router, Turbopack, `output: 'standalone'`) |
| 语言 | TypeScript 5 |
| 地图引擎 | MapLibre GL JS (WebGL) |
| 动画 | Framer Motion |
| 图标 | Lucide React |
| 样式 | 自定义 CSS 设计系统 |
| 持久化 | SQLite (`node:sqlite`) —— 事件日志、oracle 运行、预测分数 |
| AI | 任何兼容 OpenAI 的本地 endpoint(Ollama, LM Studio) |
| Agent 接口 | Model Context Protocol (stdio) |
| 部署 | Docker / CasaOS 自托管,或任何 Node 宿主 |
## 键盘快捷键
| 按键 | 操作 |
|-----|--------|
| `F` | 全屏 |
| `L` | 图层面板 |
| `M` | 市场面板 |
| `I` | 实体情报面板 |
| `C` | 供应链风险面板 |
| `S` | 搜索 |
| `R` | 重置视图 |
| `G` | 切换地球仪/平面投影 |
| `Ctrl`/`Cmd` + `F` | 查找 |
| `Escape` | 关闭面板 |
## 许可证
MIT —— 详情请参阅 [LICENSE](LICENSE)。
## 起源与致谢
本项目最初是 [simplifaisoul/osiris](https://github.com/simplifaisoul/osiris) 的一个 fork,基于 MIT 许可证发布。非常感谢原作者提供的初始仪表盘、RECON 工具包和数据层架构。
自 fork 以来,本代码库已发展出自身的功能集(AI 预测/oracle 层、服务器端 API 密钥管理、额外的世界指标数据源等)并且独立进行维护。它与上游项目的在线演示、Patreon 或 Discord **没有任何关联、背书或支持**——请不要将针对此 fork 的支持请求或捐赠引向这些渠道。
如果你正在寻找原始项目、其在线演示或其社区,请访问 [github.com/simplifaisoul/osiris](https://github.com/simplifaisoul/osiris)。