crucix-intelligence-dashboard

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Crucix Intelligence Dashboard

Crucix 智能情报仪表板

Skill by ara.so — Daily 2026 Skills collection.
Crucix is a self-hosted intelligence terminal that pulls from 27 open-source data feeds (satellite fire detection, flight tracking, radiation monitoring, conflict data, market prices, maritime AIS, economic indicators, and more) every 15 minutes, renders everything on a WebGL globe dashboard, and optionally pushes alerts to Telegram/Discord with LLM-enhanced analysis.

ara.so开发的Skill——2026每日技能合集。
Crucix是一款自托管的智能情报终端,每15分钟从27个开源数据馈源(卫星火灾探测、航班跟踪、辐射监测、冲突数据、市场价格、海事AIS、经济指标等)拉取数据,在WebGL地球仪仪表板上展示所有信息,还可通过Telegram/Discord推送经LLM增强分析的告警信息。

Installation

安装

bash
git clone https://github.com/calesthio/Crucix.git
cd crucix
npm install          # installs Express (only hard dependency)
cp .env.example .env # then edit .env with your API keys
npm run dev          # dashboard at http://localhost:3117
Docker:
bash
cp .env.example .env
docker compose up -d
bash
git clone https://github.com/calesthio/Crucix.git
cd crucix
npm install          # 安装Express(唯一的硬依赖)
cp .env.example .env # 然后编辑.env文件,填入你的API密钥
npm run dev          # 仪表板地址:http://localhost:3117
Docker部署:
bash
cp .env.example .env
docker compose up -d

sweep data persists in ./runs/ via volume mount

扫描数据通过卷挂载持久化存储在./runs/目录中


**Requirements:** Node.js 22+ (uses native `fetch`, top-level `await`, ESM modules)

**If `npm run dev` exits silently:**
```bash
node --trace-warnings server.mjs   # bypasses npm script runner (useful on Windows PowerShell)
node diag.mjs                       # diagnoses Node version, module imports, port availability


**系统要求:** Node.js 22+(使用原生`fetch`、顶级`await`、ESM模块)

**如果`npm run dev`静默退出:**
```bash
node --trace-warnings server.mjs   # 绕过npm脚本运行器(在Windows PowerShell中适用)
node diag.mjs                       # 诊断Node版本、模块导入、端口可用性

Environment Configuration (
.env
)

环境配置(
.env

dotenv
undefined
dotenv
undefined

── Core Free APIs (highly recommended) ──────────────────────────────────────

── 核心免费API(强烈推荐配置) ──────────────────────────────────────

FRED_API_KEY= # Federal Reserve economic data — fred.stlouisfed.org FIRMS_MAP_KEY= # NASA satellite fire detection — firms.modaps.eosdis.nasa.gov EIA_API_KEY= # US Energy Info Admin — eia.gov/opendata/register.php
FRED_API_KEY= # 美联储经济数据 — fred.stlouisfed.org FIRMS_MAP_KEY= # NASA卫星火灾探测 — firms.modaps.eosdis.nasa.gov EIA_API_KEY= # 美国能源信息署 — eia.gov/opendata/register.php

── Optional Data Sources ─────────────────────────────────────────────────────

── 可选数据源 ─────────────────────────────────────────────────────

ACLED_EMAIL= # Armed conflict data — acleddata.com/register ACLED_PASSWORD= AISSTREAM_API_KEY= # Maritime vessel tracking — aisstream.io (free) ADSB_API_KEY= # Unfiltered flight tracking — RapidAPI (~$10/mo)
ACLED_EMAIL= # 武装冲突数据 — acleddata.com/register ACLED_PASSWORD= AISSTREAM_API_KEY= # 海事船舶跟踪 — aisstream.io(免费) ADSB_API_KEY= # 无过滤航班跟踪 — RapidAPI(约10美元/月)

── LLM Provider (pick one) ───────────────────────────────────────────────────

── LLM提供商(选择其一) ───────────────────────────────────────────────────

LLM_PROVIDER= # anthropic | openai | gemini | codex LLM_API_KEY= # not needed for codex (uses ~/.codex/auth.json)
LLM_PROVIDER= # anthropic | openai | gemini | codex LLM_API_KEY= # 使用codex时无需配置(读取~/.codex/auth.json)

── Telegram Bot ─────────────────────────────────────────────────────────────

── Telegram机器人 ─────────────────────────────────────────────────────────────

TELEGRAM_BOT_TOKEN= # from @BotFather TELEGRAM_CHAT_ID= # from @userinfobot TELEGRAM_CHANNELS= # optional: extra channel IDs beyond 17 built-in TELEGRAM_POLL_INTERVAL= # ms between command polls, default 5000
TELEGRAM_BOT_TOKEN= # 从@BotFather获取 TELEGRAM_CHAT_ID= # 从@userinfobot获取 TELEGRAM_CHANNELS= # 可选:除17个内置频道外的额外频道ID TELEGRAM_POLL_INTERVAL= # 命令轮询间隔(毫秒),默认5000

── Discord Bot ───────────────────────────────────────────────────────────────

── Discord机器人 ───────────────────────────────────────────────────────────────

DISCORD_BOT_TOKEN= # Discord Developer Portal → Bot → Token DISCORD_CHANNEL_ID= # right-click channel → Copy Channel ID DISCORD_GUILD_ID= # optional: instant slash command registration DISCORD_WEBHOOK_URL= # optional: alert-only mode, no discord.js needed
DISCORD_BOT_TOKEN= # Discord开发者门户 → Bot → Token DISCORD_CHANNEL_ID= # 右键频道 → 复制频道ID DISCORD_GUILD_ID= # 可选:即时注册斜杠命令 DISCORD_WEBHOOK_URL= # 可选:仅告警模式,无需discord.js

── Trading (optional) ────────────────────────────────────────────────────────

── 交易功能(可选) ────────────────────────────────────────────────────────

ALPACA_API_KEY= ALPACA_SECRET_KEY=

---
ALPACA_API_KEY= ALPACA_SECRET_KEY=

---

Key Commands

核心命令

CommandDescription
npm run dev
Start dashboard with auto-reload
node server.mjs
Start directly (bypasses npm script runner)
node diag.mjs
Diagnose setup issues
docker compose up -d
Run in background with Docker
npx @openai/codex login
Authenticate Codex LLM via ChatGPT subscription

命令描述
npm run dev
启动仪表板并启用自动重载
node server.mjs
直接启动(绕过npm脚本运行器)
node diag.mjs
诊断安装问题
docker compose up -d
使用Docker在后台运行
npx @openai/codex login
通过ChatGPT订阅验证Codex LLM

Telegram Bot Commands

Telegram机器人命令

Once
TELEGRAM_BOT_TOKEN
and
TELEGRAM_CHAT_ID
are set, the bot responds to:
CommandWhat It Does
/status
System health, last sweep time, source/LLM status
/sweep
Trigger a manual intelligence sweep immediately
/brief
Compact text summary: direction, key metrics, top OSINT
/portfolio
Portfolio status (requires Alpaca keys)
/alerts
Recent alert history with tier labels
/mute
/
/mute 2h
Silence alerts for 1h or custom duration
/unmute
Resume alerts
/help
List all commands

配置好
TELEGRAM_BOT_TOKEN
TELEGRAM_CHAT_ID
后,机器人可响应以下命令:
命令功能
/status
系统健康状态、上次扫描时间、数据源/LLM状态
/sweep
立即触发手动情报扫描
/brief
精简文本摘要:趋势方向、关键指标、顶级开源情报
/portfolio
投资组合状态(需配置Alpaca密钥)
/alerts
带优先级标签的近期告警历史
/mute
/
/mute 2h
静默告警1小时或自定义时长
/unmute
恢复告警
/help
列出所有命令

Discord Bot Commands

Discord机器人命令

Install
discord.js
for full bot mode; otherwise Crucix auto-falls back to webhook-only:
bash
npm install discord.js   # optional: enables slash commands + rich embeds
Slash commands available:
/status
,
/sweep
,
/brief
,
/portfolio
Alert embeds are color-coded: 🔴 red = FLASH, 🟡 yellow = PRIORITY, 🔵 blue = ROUTINE.
Webhook-only mode (no
discord.js
, no slash commands):
dotenv
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKEN

安装
discord.js
以启用完整机器人模式;否则Crucix会自动回退到仅Webhook模式:
bash
npm install discord.js   # 可选:启用斜杠命令+富嵌入消息
可用斜杠命令:
/status
,
/sweep
,
/brief
,
/portfolio
告警嵌入消息采用颜色编码:🔴 红色=紧急(FLASH)、🟡 黄色=优先(PRIORITY)、🔵 蓝色=常规(ROUTINE)。
仅Webhook模式(无需
discord.js
,无斜杠命令):
dotenv
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKEN

LLM Provider Setup

LLM提供商配置

Anthropic Claude

Anthropic Claude

dotenv
LLM_PROVIDER=anthropic
LLM_API_KEY=$ANTHROPIC_API_KEY
dotenv
LLM_PROVIDER=anthropic
LLM_API_KEY=$ANTHROPIC_API_KEY

OpenAI

OpenAI

dotenv
LLM_PROVIDER=openai
LLM_API_KEY=$OPENAI_API_KEY
dotenv
LLM_PROVIDER=openai
LLM_API_KEY=$OPENAI_API_KEY

Google Gemini

Google Gemini

dotenv
LLM_PROVIDER=gemini
LLM_API_KEY=$GEMINI_API_KEY
dotenv
LLM_PROVIDER=gemini
LLM_API_KEY=$GEMINI_API_KEY

OpenAI Codex (ChatGPT subscription — no API key needed)

OpenAI Codex(需ChatGPT订阅——无需API密钥)

bash
npx @openai/codex login   # authenticate once
dotenv
LLM_PROVIDER=codex
bash
npx @openai/codex login   # 完成一次验证
dotenv
LLM_PROVIDER=codex

LLM_API_KEY not required

无需配置LLM_API_KEY


LLM failures are non-fatal — Crucix automatically falls back to rule-based alert evaluation without crashing the sweep cycle.

---

LLM故障不会导致程序崩溃——Crucix会自动回退到基于规则的告警评估,继续执行扫描周期。

---

Architecture & Data Flow

架构与数据流

Each 15-minute sweep cycle:
  1. Parallel fetch — all 27 sources queried simultaneously (~30–60s)
  2. Synthesis — raw data normalized into dashboard format
  3. Delta computation — what changed, escalated, or de-escalated vs. previous run
  4. LLM analysis — 5–8 trade ideas generated (or rule-based fallback)
  5. Alert evaluation — FLASH / PRIORITY / ROUTINE tiering with semantic dedup
  6. Push — SSE update to all connected browsers + Telegram/Discord if configured
  7. Persistence — sweep written to
    ./runs/
    directory

每15分钟的扫描周期包含以下步骤:
  1. 并行拉取 — 同时查询所有27个数据源(约30–60秒)
  2. 数据合成 — 将原始数据标准化为仪表板展示格式
  3. 差异计算 — 对比上一次运行,识别变化、升级或降级的内容
  4. LLM分析 — 生成5–8个交易思路(或回退到基于规则的分析)
  5. 告警评估 — 为告警划分紧急/优先/常规等级,并进行语义去重
  6. 推送更新 — 向所有连接的浏览器发送SSE更新,若已配置则推送至Telegram/Discord
  7. 数据持久化 — 将扫描结果保存至
    ./runs/
    目录

Dashboard Features

仪表板功能

  • 3D WebGL globe (Globe.gl) with atmosphere, star field, rotation + flat map toggle
  • 9 marker types: fires, aircraft, radiation, maritime chokepoints, SDR receivers, OSINT events, health alerts, geolocated news, conflict events
  • Animated 3D flight arcs between air traffic hotspots
  • Region filters: World, Americas, Europe, Middle East, Asia Pacific, Africa
  • Live markets: indexes, crypto, energy, commodities (Yahoo Finance, no key needed)
  • Risk gauges: VIX, high-yield spread, supply chain pressure index
  • OSINT feed: 17 built-in Telegram intelligence channels
  • Sweep Delta panel: live diff of what changed this cycle
  • Nuclear watch: Safecast + EPA RadNet radiation readings
  • Space watch: CelesTrak satellite tracking — ISS, Starlink, military constellations

  • 3D WebGL地球仪(基于Globe.gl),支持大气层、星场、旋转及平面地图切换
  • 9种标记类型:火灾、飞行器、辐射、海上咽喉要道、SDR接收器、开源情报事件、健康告警、地理定位新闻、冲突事件
  • 动态3D飞行轨迹:展示空中交通热点间的航线
  • 区域筛选:全球、美洲、欧洲、中东、亚太、非洲
  • 实时市场数据:指数、加密货币、能源、大宗商品(基于Yahoo Finance,无需密钥)
  • 风险指标:VIX波动率指数、高收益利差、供应链压力指数
  • 开源情报馈源:17个内置Telegram情报频道
  • 扫描差异面板:实时展示本次周期的变化内容
  • 核辐射监测:Safecast + EPA RadNet辐射读数
  • 太空监测:CelesTrak卫星跟踪——国际空间站、星链、军用星座

Common Patterns

常见配置方案

Minimal Setup (no API keys)

最小化配置(无需API密钥)

bash
undefined
bash
undefined

Works out of the box — sources without keys still populate:

开箱即用——未配置密钥的数据源仍会填充数据:

Yahoo Finance markets, CelesTrak satellites, GDELT news, RSS feeds,

Yahoo Finance市场数据、CelesTrak卫星数据、GDELT新闻、RSS馈源、

OpenSky flight tracking (public tier), Safecast radiation

OpenSky公共层级航班跟踪、Safecast辐射数据

npm run dev
undefined
npm run dev
undefined

Maximum Free Coverage

最大化免费覆盖范围

dotenv
undefined
dotenv
undefined

Register all three free keys (~3 minutes total):

注册三个免费密钥(总计约3分钟):

FRED_API_KEY= # fred.stlouisfed.org — 60 sec signup FIRMS_MAP_KEY= # firms.modaps.eosdis.nasa.gov — 60 sec signup EIA_API_KEY= # eia.gov/opendata/register.php — 60 sec signup
undefined
FRED_API_KEY= # fred.stlouisfed.org — 60秒注册 FIRMS_MAP_KEY= # firms.modaps.eosdis.nasa.gov — 60秒注册 EIA_API_KEY= # eia.gov/opendata/register.php — 60秒注册
undefined

Telegram Alerts Only (no LLM)

仅启用Telegram告警(无LLM)

dotenv
TELEGRAM_BOT_TOKEN=your_token_from_botfather
TELEGRAM_CHAT_ID=your_chat_id_from_userinfobot
dotenv
TELEGRAM_BOT_TOKEN=your_token_from_botfather
TELEGRAM_CHAT_ID=your_chat_id_from_userinfobot

LLM_PROVIDER intentionally omitted — rule-based alerts still fire

故意不配置LLM_PROVIDER——基于规则的告警仍会触发

undefined
undefined

Full Stack with LLM + Both Bots

全栈配置(含LLM+双机器人)

dotenv
FRED_API_KEY=...
FIRMS_MAP_KEY=...
EIA_API_KEY=...
LLM_PROVIDER=anthropic
LLM_API_KEY=...
TELEGRAM_BOT_TOKEN=...
TELEGRAM_CHAT_ID=...
DISCORD_BOT_TOKEN=...
DISCORD_CHANNEL_ID=...
DISCORD_GUILD_ID=...   # for instant slash command registration
dotenv
FRED_API_KEY=...
FIRMS_MAP_KEY=...
EIA_API_KEY=...
LLM_PROVIDER=anthropic
LLM_API_KEY=...
TELEGRAM_BOT_TOKEN=...
TELEGRAM_CHAT_ID=...
DISCORD_BOT_TOKEN=...
DISCORD_CHANNEL_ID=...
DISCORD_GUILD_ID=...   # 用于即时注册斜杠命令

Adding Extra Telegram OSINT Channels

添加额外Telegram开源情报频道

dotenv
undefined
dotenv
undefined

Comma-separated channel IDs beyond the 17 built-in channels

17个内置频道之外的逗号分隔频道ID

TELEGRAM_CHANNELS=-1001234567890,-1009876543210

---
TELEGRAM_CHANNELS=-1001234567890,-1009876543210

---

Troubleshooting

故障排除

Dashboard empty after startup: Normal — the first sweep takes 30–60 seconds to query all 27 sources. Wait for it to complete before expecting data.
npm run dev
exits silently (especially Windows PowerShell):
bash
node --trace-warnings server.mjs
启动后仪表板为空: 属于正常现象——首次扫描需30–60秒查询所有27个数据源。等待扫描完成后即可看到数据。
npm run dev
静默退出(尤其在Windows PowerShell中):
bash
node --trace-warnings server.mjs

or run the diagnostic tool:

或运行诊断工具:

node diag.mjs

**Port already in use:**
```bash
node diag.mjs

**端口已被占用:**
```bash

Default port is 3117 — check if something else is using it:

默认端口为3117——检查是否有其他程序在使用:

lsof -i :3117 # macOS/Linux netstat -ano | findstr :3117 # Windows

**Telegram bot not receiving commands:**
- Verify `TELEGRAM_BOT_TOKEN` and `TELEGRAM_CHAT_ID` are both set
- Confirm the chat ID is your personal chat, not a group (use @userinfobot)
- Default poll interval is 5000ms — set `TELEGRAM_POLL_INTERVAL=2000` for faster response

**Discord slash commands not appearing:**
- Set `DISCORD_GUILD_ID` for instant registration (vs. up to 1 hour for global)
- Ensure the bot invite URL includes both `bot` and `applications.commands` scopes
- Check **Message Content Intent** is enabled in the Developer Portal

**LLM errors crashing sweeps:**
They won't — LLM failures are caught and the sweep continues with rule-based fallback. Check logs for the specific provider error (invalid key, rate limit, etc.).

**ACLED conflict data missing:**
ACLED uses OAuth2 with email/password — both `ACLED_EMAIL` and `ACLED_PASSWORD` must be set together.

**Sweep data persistence:**
All runs are saved to `./runs/`. In Docker, this is volume-mounted so data survives container restarts.
lsof -i :3117 # macOS/Linux netstat -ano | findstr :3117 # Windows

**Telegram机器人无响应:**
- 确认`TELEGRAM_BOT_TOKEN`和`TELEGRAM_CHAT_ID`均已配置
- 确保聊天ID是个人聊天而非群组(使用@userinfobot获取)
- 默认轮询间隔为5000毫秒——设置`TELEGRAM_POLL_INTERVAL=2000`可加快响应速度

**Discord斜杠命令未显示:**
- 配置`DISCORD_GUILD_ID`可实现即时注册(全局注册最长需1小时)
- 确保机器人邀请链接包含`bot`和`applications.commands`两个权限范围
- 检查开发者门户中是否启用了**消息内容权限**

**LLM错误导致扫描崩溃:**
不会出现这种情况——LLM故障会被捕获,扫描会继续执行基于规则的回退分析。查看日志获取具体提供商错误(无效密钥、速率限制等)。

**ACLED冲突数据缺失:**
ACLED使用邮箱/密码的OAuth2认证——必须同时配置`ACLED_EMAIL`和`ACLED_PASSWORD`。

**扫描数据持久化:**
所有扫描结果均保存至`./runs/`目录。Docker部署中该目录已挂载卷,数据可在容器重启后保留。