crucix-intelligence-dashboard
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCrucix 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:3117Docker:
bash
cp .env.example .env
docker compose up -dbash
git clone https://github.com/calesthio/Crucix.git
cd crucix
npm install # 安装Express(唯一的硬依赖)
cp .env.example .env # 然后编辑.env文件,填入你的API密钥
npm run dev # 仪表板地址:http://localhost:3117Docker部署:
bash
cp .env.example .env
docker compose up -dsweep 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环境配置(.env
)
.envdotenv
undefineddotenv
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
核心命令
| Command | Description |
|---|---|
| Start dashboard with auto-reload |
| Start directly (bypasses npm script runner) |
| Diagnose setup issues |
| Run in background with Docker |
| Authenticate Codex LLM via ChatGPT subscription |
| 命令 | 描述 |
|---|---|
| 启动仪表板并启用自动重载 |
| 直接启动(绕过npm脚本运行器) |
| 诊断安装问题 |
| 使用Docker在后台运行 |
| 通过ChatGPT订阅验证Codex LLM |
Telegram Bot Commands
Telegram机器人命令
Once and are set, the bot responds to:
TELEGRAM_BOT_TOKENTELEGRAM_CHAT_ID| Command | What It Does |
|---|---|
| System health, last sweep time, source/LLM status |
| Trigger a manual intelligence sweep immediately |
| Compact text summary: direction, key metrics, top OSINT |
| Portfolio status (requires Alpaca keys) |
| Recent alert history with tier labels |
| Silence alerts for 1h or custom duration |
| Resume alerts |
| List all commands |
配置好和后,机器人可响应以下命令:
TELEGRAM_BOT_TOKENTELEGRAM_CHAT_ID| 命令 | 功能 |
|---|---|
| 系统健康状态、上次扫描时间、数据源/LLM状态 |
| 立即触发手动情报扫描 |
| 精简文本摘要:趋势方向、关键指标、顶级开源情报 |
| 投资组合状态(需配置Alpaca密钥) |
| 带优先级标签的近期告警历史 |
| 静默告警1小时或自定义时长 |
| 恢复告警 |
| 列出所有命令 |
Discord Bot Commands
Discord机器人命令
Install for full bot mode; otherwise Crucix auto-falls back to webhook-only:
discord.jsbash
npm install discord.js # optional: enables slash commands + rich embedsSlash commands available: , , ,
/status/sweep/brief/portfolioAlert embeds are color-coded: 🔴 red = FLASH, 🟡 yellow = PRIORITY, 🔵 blue = ROUTINE.
Webhook-only mode (no , no slash commands):
discord.jsdotenv
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKEN安装以启用完整机器人模式;否则Crucix会自动回退到仅Webhook模式:
discord.jsbash
npm install discord.js # 可选:启用斜杠命令+富嵌入消息可用斜杠命令:, , ,
/status/sweep/brief/portfolio告警嵌入消息采用颜色编码:🔴 红色=紧急(FLASH)、🟡 黄色=优先(PRIORITY)、🔵 蓝色=常规(ROUTINE)。
仅Webhook模式(无需,无斜杠命令):
discord.jsdotenv
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKENLLM Provider Setup
LLM提供商配置
Anthropic Claude
Anthropic Claude
dotenv
LLM_PROVIDER=anthropic
LLM_API_KEY=$ANTHROPIC_API_KEYdotenv
LLM_PROVIDER=anthropic
LLM_API_KEY=$ANTHROPIC_API_KEYOpenAI
OpenAI
dotenv
LLM_PROVIDER=openai
LLM_API_KEY=$OPENAI_API_KEYdotenv
LLM_PROVIDER=openai
LLM_API_KEY=$OPENAI_API_KEYGoogle Gemini
Google Gemini
dotenv
LLM_PROVIDER=gemini
LLM_API_KEY=$GEMINI_API_KEYdotenv
LLM_PROVIDER=gemini
LLM_API_KEY=$GEMINI_API_KEYOpenAI Codex (ChatGPT subscription — no API key needed)
OpenAI Codex(需ChatGPT订阅——无需API密钥)
bash
npx @openai/codex login # authenticate oncedotenv
LLM_PROVIDER=codexbash
npx @openai/codex login # 完成一次验证dotenv
LLM_PROVIDER=codexLLM_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:
- Parallel fetch — all 27 sources queried simultaneously (~30–60s)
- Synthesis — raw data normalized into dashboard format
- Delta computation — what changed, escalated, or de-escalated vs. previous run
- LLM analysis — 5–8 trade ideas generated (or rule-based fallback)
- Alert evaluation — FLASH / PRIORITY / ROUTINE tiering with semantic dedup
- Push — SSE update to all connected browsers + Telegram/Discord if configured
- Persistence — sweep written to directory
./runs/
每15分钟的扫描周期包含以下步骤:
- 并行拉取 — 同时查询所有27个数据源(约30–60秒)
- 数据合成 — 将原始数据标准化为仪表板展示格式
- 差异计算 — 对比上一次运行,识别变化、升级或降级的内容
- LLM分析 — 生成5–8个交易思路(或回退到基于规则的分析)
- 告警评估 — 为告警划分紧急/优先/常规等级,并进行语义去重
- 推送更新 — 向所有连接的浏览器发送SSE更新,若已配置则推送至Telegram/Discord
- 数据持久化 — 将扫描结果保存至目录
./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
undefinedbash
undefinedWorks 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
undefinednpm run dev
undefinedMaximum Free Coverage
最大化免费覆盖范围
dotenv
undefineddotenv
undefinedRegister 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
undefinedFRED_API_KEY= # fred.stlouisfed.org — 60秒注册
FIRMS_MAP_KEY= # firms.modaps.eosdis.nasa.gov — 60秒注册
EIA_API_KEY= # eia.gov/opendata/register.php — 60秒注册
undefinedTelegram Alerts Only (no LLM)
仅启用Telegram告警(无LLM)
dotenv
TELEGRAM_BOT_TOKEN=your_token_from_botfather
TELEGRAM_CHAT_ID=your_chat_id_from_userinfobotdotenv
TELEGRAM_BOT_TOKEN=your_token_from_botfather
TELEGRAM_CHAT_ID=your_chat_id_from_userinfobotLLM_PROVIDER intentionally omitted — rule-based alerts still fire
故意不配置LLM_PROVIDER——基于规则的告警仍会触发
undefinedundefinedFull 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 registrationdotenv
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
undefineddotenv
undefinedComma-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 devbash
node --trace-warnings server.mjs启动后仪表板为空:
属于正常现象——首次扫描需30–60秒查询所有27个数据源。等待扫描完成后即可看到数据。
npm run devbash
node --trace-warnings server.mjsor run the diagnostic tool:
或运行诊断工具:
node diag.mjs
**Port already in use:**
```bashnode diag.mjs
**端口已被占用:**
```bashDefault 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部署中该目录已挂载卷,数据可在容器重启后保留。