Crucix README

The project's README from github.com/calesthio/Crucix. As one markdown file: README.md.

Crucix

Your own intelligence terminal. 27 sources. One command. Zero cloud.

Visit The Live Site: crucix.live

Live Website Open Demo

Node.js 22+ License: AGPL v3 Dependencies Sources Docker

Enter The Signal Network

Signal Wire Ops Room

Crucix Dashboard

More screenshots
Boot Sequence World Map
Boot Map
3D Globe View
Globe

Live website: https://www.crucix.live/ Explore the public demo first, then clone the repo to run Crucix locally.

Crucix pulls satellite fire detection, flight tracking, radiation monitoring, satellite constellation tracking, economic indicators, live market prices, conflict data, sanctions lists, and social sentiment from 27 open-source intelligence feeds — in parallel, every 15 minutes — and renders everything on a single self-contained Jarvis-style dashboard.

Hook it up to an LLM and it becomes a two-way intelligence assistant — pushing multi-tier alerts to Telegram and Discord when something meaningful changes, responding to commands like /brief and /sweep from your phone, and generating actionable trade ideas grounded in real cross-domain data. Your own analyst that watches the world while you sleep.

Try the live demo first at https://www.crucix.live/, then clone the repo when you want the full local stack.

No cloud. No telemetry. No subscriptions. Just node server.mjs and you're running.

Token / Asset Warning

[!WARNING] Crucix has not launched any official token, coin, NFT, airdrop, presale, or other blockchain-based asset. Any token or digital asset using the Crucix name, logo, or branding is not affiliated with or endorsed by Crucix. Do not buy it, promote it, connect a wallet to claim it, sign transactions, or send funds based on third-party posts, DMs, or websites.


Why This Exists

Most of the world's real-time intelligence — satellite imagery, radiation levels, conflict events, economic indicators, flight tracking, maritime activity — is publicly available. It's just scattered across dozens of government APIs, research institutions, and open data feeds that nobody has time to check individually.

Crucix brings it all into one place. Not behind a paywall, not locked in an enterprise platform, not requiring a security clearance. Just open data, aggregated and cross-correlated on your own machine, updated every 15 minutes.

It was built for anyone who wants to understand what's actually happening in the world right now — researchers, journalists, traders, OSINT analysts, or just curious people who believe access to information shouldn't depend on your budget.


Quick Start

# 1. Clone the repo
git clone https://github.com/calesthio/Crucix.git
cd Crucix

# 2. Install dependencies (just Express)
npm install

# 3. Copy env template and add your API keys (see below)
cp .env.example .env

# 4. Start the dashboard
npm run dev

If npm run dev fails silently (exits with no output), run Node directly instead:

node --trace-warnings server.mjs

This bypasses npm's script runner, which can swallow errors on some systems (particularly PowerShell on Windows). You can also run node diag.mjs to diagnose the exact issue — it checks your Node version, tests each module import individually, and verifies port availability. See Troubleshooting for more.

The dashboard opens automatically at http://localhost:3117 and immediately begins its first intelligence sweep. This initial sweep queries all 27 sources in parallel and typically takes 30–60 seconds — the dashboard will appear empty until the sweep completes and pushes the first data update. After that, it auto-refreshes every 15 minutes via SSE (Server-Sent Events). No manual page refresh needed.

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

Docker

git clone https://github.com/calesthio/Crucix.git
cd Crucix
cp .env.example .env    # add your API keys
docker compose up -d

Dashboard at http://localhost:3117. Sweep data persists in ./runs/ via volume mount. Includes a health check endpoint.


What You Get

Live Dashboard

A self-contained Jarvis-style HUD with:

Performance Modes

The VISUALS FULL / VISUALS LITE button in the top bar only changes rendering behavior - it does not remove data sources or reduce sweep coverage.

When you switch to VISUALS LITE, the dashboard:

Mobile-specific behavior:

The preference is saved in browser local storage, so the UI will remember your last setting.

Auto-Refresh

The server runs a sweep cycle every 15 minutes (configurable). Each cycle:

  1. Queries all 27 sources in parallel (~30s)
  2. Synthesizes raw data into dashboard format
  3. Computes delta from previous run (what changed, escalated, de-escalated) — visible in the Sweep Delta panel on the dashboard
  4. Generates LLM trade ideas (if configured)
  5. Evaluates breaking news alerts — multi-tier (FLASH / PRIORITY / ROUTINE) with semantic dedup. Sends to Telegram and/or Discord if configured. Works with LLM evaluation or falls back to rule-based alerting when LLM is unavailable.
  6. Pushes update to all connected browsers via SSE

Telegram Bot (Two-Way)

Crucix doubles as an interactive Telegram bot. Beyond sending alerts, it responds to commands directly from your chat:

Command What It Does
/status System health, last sweep time, source status, LLM status
/sweep Trigger a manual sweep cycle
/brief Compact text summary of the latest intelligence (direction, key metrics, top OSINT)
/portfolio Portfolio status (if Alpaca connected)
/alerts Recent alert history with tiers
/mute / /mute 2h Silence alerts for 1h (or custom duration)
/unmute Resume alerts
/help Show all available commands

This requires TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID in .env. The bot polls for messages every 5 seconds (configurable via TELEGRAM_POLL_INTERVAL).

Discord Bot (Two-Way)

Crucix also supports Discord as a full-featured bot with slash commands and rich embed alerts. It mirrors the Telegram bot's capabilities with Discord-native formatting.

Command What It Does
/status System health, last sweep time, source status, LLM status
/sweep Trigger a manual sweep cycle
/brief Compact text summary of the latest intelligence
/portfolio Portfolio status (if Alpaca connected)

Alerts are delivered as rich embeds with color-coded sidebars: red for FLASH, yellow for PRIORITY, blue for ROUTINE. Each embed includes signal details, confidence scores, and cross-domain correlations.

Setup requires: DISCORD_BOT_TOKEN, DISCORD_CHANNEL_ID, and optionally DISCORD_GUILD_ID for instant slash command registration. See API Keys Setup for details.

Webhook fallback: If you don't want to run a full bot, set DISCORD_WEBHOOK_URL instead. This enables one-way alerts (no slash commands) with zero dependencies — no discord.js needed.

Optional dependency: The full bot requires discord.js. Install it with npm install discord.js. If it's not installed, Crucix automatically falls back to webhook-only mode.

Optional LLM Layer

Connect any of 8 LLM providers for enhanced analysis:


API Keys Setup

Copy .env.example to .env at the project root:

cp .env.example .env

Required for Best Results (all free)

Key Source How to Get
FRED_API_KEY Federal Reserve Economic Data fred.stlouisfed.org — instant, free
FIRMS_MAP_KEY NASA FIRMS (satellite fire data) firms.modaps.eosdis.nasa.gov — instant, free
EIA_API_KEY US Energy Information Administration api.eia.gov — instant, free

These three unlock the most valuable economic and satellite data. Each takes about 60 seconds to register.

Optional (enable additional sources)

Key Source How to Get
ACLED_EMAIL + ACLED_PASSWORD Armed conflict event data acleddata.com/register — free, OAuth2
AISSTREAM_API_KEY Maritime AIS vessel tracking aisstream.io — free
ADSB_API_KEY Unfiltered flight tracking RapidAPI — ~$10/mo

LLM Provider (optional, for AI-enhanced ideas)

Set LLM_PROVIDER to one of: anthropic, openai, gemini, codex, openrouter, minimax, mistral, grok

Provider Key Required Default Model
anthropic LLM_API_KEY claude-sonnet-4-6
openai LLM_API_KEY gpt-5.4
gemini LLM_API_KEY gemini-3.1-pro
openrouter LLM_API_KEY openrouter/auto
codex None (uses ~/.codex/auth.json) gpt-5.3-codex
minimax LLM_API_KEY MiniMax-M2.5
mistral LLM_API_KEY mistral-large-latest
grok LLM_API_KEY grok-4-latest

For Codex, run npx @openai/codex login to authenticate via your ChatGPT subscription.

Telegram Bot + Alerts (optional)

Key How to Get
TELEGRAM_BOT_TOKEN Create via @BotFather on Telegram
TELEGRAM_CHAT_ID Get via @userinfobot
TELEGRAM_CHANNELS (Optional) Comma-separated extra channel IDs to monitor beyond the 17 built-in channels
TELEGRAM_POLL_INTERVAL (Optional) Bot command polling interval in ms (default: 5000)

Discord Bot + Alerts (optional)

Key How to Get
DISCORD_BOT_TOKEN Create at Discord Developer Portal → Bot → Token
DISCORD_CHANNEL_ID Right-click channel in Discord (Developer Mode on) → Copy Channel ID
DISCORD_GUILD_ID (Optional) Right-click server → Copy Server ID. Enables instant slash command registration (otherwise takes up to 1 hour for global commands)
DISCORD_WEBHOOK_URL (Optional) Channel Settings → Integrations → Webhooks → New Webhook → Copy URL. Use this for alert-only mode without a bot

Discord bot setup:

  1. Go to Discord Developer Portal and create a new application
  2. Go to Bot → click Reset Token → copy the token to DISCORD_BOT_TOKEN
  3. Under Privileged Gateway Intents, enable Message Content Intent
  4. Go to OAuth2 → URL Generator → select bot + applications.commands scopes → select Send Messages + Embed Links permissions
  5. Copy the generated URL and open it in your browser to invite the bot to your server
  6. Install the dependency: npm install discord.js

Alerts work with or without an LLM on both Telegram and Discord. With an LLM configured, signal evaluation is richer and more context-aware. Without one, a deterministic rule engine evaluates signals based on severity, cross-domain correlation, and signal counts.

Without Any Keys

Crucix still works with zero API keys. 18+ sources require no authentication at all. Sources that need keys return structured errors and the rest of the sweep continues normally.


Architecture

crucix/
├── server.mjs                 # Express dev server (SSE, auto-refresh, LLM, bot commands)
├── crucix.config.mjs          # Configuration with env var overrides + delta thresholds
├── diag.mjs                   # Diagnostic script — run if server fails to start
├── .env.example               # All documented env vars
├── package.json               # Runtime: express | Optional: discord.js
├── docs/                      # Screenshots for README
│
├── apis/
│   ├── briefing.mjs           # Master orchestrator — runs all 27 sources in parallel
│   ├── save-briefing.mjs      # CLI: save timestamped + latest.json
│   ├── BRIEFING_PROMPT.md     # Intelligence synthesis protocol
│   ├── BRIEFING_TEMPLATE.md   # Briefing output structure
│   ├── utils/
│   │   ├── fetch.mjs          # safeFetch() — timeout, retries, abort, auto-JSON
│   │   └── env.mjs            # .env loader (no dotenv dependency)
│   └── sources/               # 27 self-contained source modules
│       ├── gdelt.mjs          # Each exports briefing() → structured data
│       ├── fred.mjs           # Can run standalone: node apis/sources/fred.mjs
│       ├── space.mjs          # CelesTrak satellite tracking
│       ├── yfinance.mjs       # Yahoo Finance — free live market data
│       └── ...                # 23 more
│
├── dashboard/
│   ├── inject.mjs             # Data synthesis + standalone HTML injection
│   └── public/
│       └── jarvis.html        # Self-contained Jarvis HUD
│
├── lib/
│   ├── llm/                   # LLM abstraction (8 providers, raw fetch, no SDKs)
│   │   ├── provider.mjs       # Base class
│   │   ├── anthropic.mjs      # Claude
│   │   ├── openai.mjs         # GPT
│   │   ├── gemini.mjs         # Gemini
│   │   ├── grok.mjs           # Grok
│   │   ├── openrouter.mjs     # OpenRouter (Unified API)
│   │   ├── codex.mjs          # Codex (ChatGPT subscription)
│   │   ├── minimax.mjs        # MiniMax (M2.5, 204K context)
│   │   ├── mistral.mjs        # Mistral AI
│   │   ├── ideas.mjs          # LLM-powered trade idea generation
│   │   └── index.mjs          # Factory: createLLMProvider()
│   ├── delta/                 # Change tracking between sweeps
│   │   ├── engine.mjs         # Delta computation — semantic dedup, configurable thresholds, severity scoring
│   │   ├── memory.mjs         # Hot memory (3 runs, atomic writes) + cold storage (daily archives)
│   │   └── index.mjs          # Re-exports
│   └── alerts/
│       ├── telegram.mjs       # Multi-tier alerts (FLASH/PRIORITY/ROUTINE) + two-way bot commands
│       └── discord.mjs        # Discord bot (slash commands, rich embeds) + webhook fallback
│
└── runs/                      # Runtime data (gitignored)
    ├── latest.json            # Most recent sweep output
    └── memory/                # Delta memory (hot.json + cold/YYYY-MM-DD.json)

Design Principles


Data Sources (27)

Tier 1: Core OSINT & Geopolitical (11)

Source What It Tracks Auth
GDELT Global news events, conflict mapping (100+ languages) None
OpenSky Real-time ADS-B flight tracking across 6 hotspot regions None
NASA FIRMS Satellite fire/thermal anomaly detection (3hr latency) Free key
Maritime/AIS Vessel tracking, dark ships, sanctions evasion Free key
Safecast Citizen-science radiation monitoring near 6 nuclear sites None
ACLED Armed conflict events: battles, explosions, protests Free (OAuth2)
ReliefWeb UN humanitarian crisis tracking None
WHO Disease outbreaks and health emergencies None
OFAC US Treasury sanctions (SDN list) None
OpenSanctions Aggregate

Crucix (calesthio/Crucix)

Searching Database…

12.1K ·GitHub
这是什么?Crucix 是一个可自行部署的个人情报仪表盘,汇集了 27 个开源情报数据源,包括卫星火点监测、航班追踪、辐射监测、冲突数据、市场价格以及 OSINT 社交信息流。数据每 15 分钟刷新一次。当有重要变化时,它可以通过 Telegram 或 Discord 向你发送提醒。
这是云服务,还是需要我自己运行的程序?这是一个可自行部署的 Node.js 网页应用。你可以在本地或 Docker 中运行服务器,它会在浏览器中呈现一个贾维斯风格的单页仪表盘。没有云端后端,也不需要订阅。
我该怎么把它跑起来?克隆仓库,然后使用 Node.js 22+ 运行 'node server.mjs'(或 'npm run dev')。仪表盘会自动打开,并开始对全部 27 个数据源进行首次 30–60 秒的扫描。项目还提供了 Docker/docker-compose 配置,通过挂载卷来保存扫描数据。
我需要 API 密钥才能获得有用的数据吗?仪表盘开箱即用,但三个免费密钥(FRED、NASA FIRMS、EIA)可以解锁最有价值的经济与卫星数据。可选密钥可以接入冲突事件(ACLED)、海上 AIS 和航班追踪。此外,来自八个服务商(Anthropic、OpenAI、Gemini、OpenRouter、Codex、MiniMax、Mistral、Grok)的大语言模型密钥,可以启用 AI 生成的交易思路,并让提醒分级更智能。
有什么需要特别留意的地方吗?项目明确表示没有官方代币或币种。任何使用 Crucix 名称的区块链资产都是骗局。另外,'npm run dev' 在某些系统上(尤其是 Windows PowerShell)可能会静默失败。遇到问题时,请直接运行 'node server.mjs',或使用 'node diag.mjs' 进行排查。
Telegram 和 Discord 机器人能做什么?两者都是双向机器人。除了推送 FLASH/PRIORITY/ROUTINE 级别的提醒外,你还可以直接在聊天中运行 /status、/sweep、/brief、/portfolio 和 /mute 2h 等命令,来控制和查询系统。
VISUALS FULL 和 VISUALS LITE 有什么区别?LITE 模式会去掉装饰性的模糊、扫描线和旋转动画以提升性能,并在移动设备上强制使用平面地图模式。它不会改变轮询哪些数据源,也不会改变轮询频率。
3D 地球仪到底显示什么?这是一个基于 Globe.gl 构建的 WebGL 地球仪,可标注 9 种标记类型:火点、航班、辐射站点、海上咽喉要道、SDR 接收器、OSINT 事件、健康警报、带地理位置的新闻以及冲突事件。同时提供平面地图切换作为另一种视图。
Crucix 能帮我下单交易吗?不能。它只会生成“可加杠杆”的交易思路:配置了大语言模型时由 AI 撰写,未配置时则基于信号关联生成。如果你连接了 Alpaca,还可以通过 /portfolio 查看投资组合状态,但它不会执行任何交易。
Creator
calesthio
Size
2.7 MB
Stars
12.1K
Updated
CommitMay 20
Age
7mo
Commits · 90 Days