
Il tuo agente di intelligence personale. Monitora il mondo da molteplici fonti di dati e ti avvisa quando qualcosa cambia.
Il tuo terminale d'intelligenza personale. 27 fonti. Un comando. Zero cloud.
Entra nella Signal Network

| Sequenza di avvio | Mappa del mondo |
|---|---|
![]() | ![]() |
Sito live: https://www.crucix.live/ Esplora prima la demo pubblica, poi clona il repository per eseguire Crucix in locale.
Crucix raccoglie il rilevamento degli incendi via satellite, il tracciamento dei voli, il monitoraggio delle radiazioni, il tracciamento delle costellazioni satellitari, gli indicatori economici, i prezzi di mercato in tempo reale, i dati sui conflitti, le liste di sanzioni e il sentiment sociale da 27 feed di intelligence open source — in parallelo, ogni 15 minuti — e visualizza tutto su un unico dashboard autonomo in stile Jarvis.
Collegalo a un LLM e diventa un assistente di intelligence bidirezionale — invia avvisi su più livelli a Telegram e Discord quando qualcosa di significativo cambia, risponde a comandi come /brief e /sweep dal tuo telefono e genera idee di trading attuabili basate su dati reali provenienti da più domini. Il tuo analista personale che veglia sul mondo mentre dormi.
Prova prima la demo live su https://www.crucix.live/, poi clona il repository quando vuoi l'intera soluzione locale.
Niente cloud. Niente telemetria. Niente abbonamenti. Basta node server.mjs e sei operativo.
[!WARNING] Crucix non ha lanciato alcun token, moneta, NFT, airdrop, prevendita o altro asset basato su blockchain. Qualsiasi token o asset digitale che utilizzi il nome, il logo o il marchio Crucix non è affiliato né approvato da Crucix. Non acquistarlo, non promuoverlo, non collegare un wallet per rivendicarlo, non firmare transazioni e non inviare fondi sulla base di post, DM o siti web di terze parti.
La maggior parte dell'intelligence in tempo reale disponibile nel mondo — immagini satellitari, livelli di radiazioni, eventi di conflitto, indicatori economici, tracciamento dei voli, attività marittima — è pubblicamente accessibile. È semplicemente dispersa tra decine di API governative, istituti di ricerca e feed di dati aperti che nessuno ha il tempo di controllare singolarmente.
Crucix riunisce tutto in un unico posto. Non dietro un paywall, non bloccato in una piattaforma aziendale, non richiede alcuna autorizzazione di sicurezza. Solo dati aperti, aggregati e correlati sulla tua macchina, aggiornati ogni 15 minuti.
È stato creato per chiunque voglia capire cosa sta realmente accadendo nel mondo in questo momento — ricercatori, giornalisti, trader, analisti OSINT, o semplicemente persone curiose che credono che l'accesso alle informazioni non dovrebbe dipendere dal tuo budget.
git clone https://github.com/calesthio/Crucix.git cd Crucix
npm install
cp .env.example .env
npm run dev
> **Se `npm run dev` fallisce silenziosamente** (termina senza alcun output), esegui Node direttamente:
> ```bash
> node --trace-warnings server.mjs
> ```
> Questo bypassa il runner di script di npm, che può inghiottire gli errori su alcuni sistemi (in particolare PowerShell su Windows). Puoi anche eseguire `node diag.mjs` per diagnosticare esattamente il problema — verifica la versione di Node, testa ogni import di modulo singolarmente e controlla la disponibilità delle porte. Vedi [Risoluzione dei problemi](#troubleshooting) per maggiori informazioni.
La dashboard si apre automaticamente all'indirizzo `http://localhost:3117` e avvia immediatamente la sua prima scansione di intelligence. Questa scansione iniziale interroga tutte le 27 fonti in parallelo e richiede in genere 30–60 secondi — la dashboard apparirà vuota finché la scansione non viene completata e non viene inviato il primo aggiornamento dati. Dopodiché, si auto-aggiorna ogni 15 minuti tramite SSE (Server-Sent Events). Non è necessario alcun aggiornamento manuale della pagina.
**Requisiti:** Node.js 22+ (usa `fetch` nativo, `await` di primo livello, ESM)
### Docker```bash
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.
A self-contained Jarvis-style HUD with:
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:
VISUALS LITE also forces the dashboard into flat map mode if you are currently on the globeThe preference is saved in browser local storage, so the UI will remember your last setting.
The server runs a sweep cycle every 15 minutes (configurable). Each cycle:
Crucix doubles as an interactive Telegram bot. Beyond sending alerts, it responds to commands directly from your chat:
This requires TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID in .env. The bot polls for messages every 5 seconds (configurable via TELEGRAM_POLL_INTERVAL).
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 |
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.
Connect any of 8 LLM providers for enhanced analysis:
Copy .env.example to .env at the project root:```bash
cp .env.example .env
### Richiesti per risultati ottimali (tutti gratuiti)
| Key | Source | How to Get |
|-----|--------|------------|
| `FRED_API_KEY` | Federal Reserve Economic Data | [fred.stlouisfed.org](https://fred.stlouisfed.org/docs/api/api_key.html) — immediato, gratuito |
| `FIRMS_MAP_KEY` | NASA FIRMS (dati satellitari sugli incendi) | [firms.modaps.eosdis.nasa.gov](https://firms.modaps.eosdis.nasa.gov/api/area/) — immediato, gratuito |
| `EIA_API_KEY` | US Energy Information Administration | [api.eia.gov](https://www.eia.gov/opendata/register.php) — immediato, gratuito |
Questi tre sbloccano i dati economici e satellitari più preziosi. La registrazione richiede circa 60 secondi per ciascuno.
### Opzionali (attivano fonti aggiuntive)
| Key | Source | How to Get |
|-----|--------|------------|
| `ACLED_EMAIL` + `ACLED_PASSWORD` | Dati sugli eventi di conflitto armato | [acleddata.com/register](https://acleddata.com/register/) — gratuito, OAuth2 |
| `AISSTREAM_API_KEY` | Tracciamento marittimo AIS delle navi | [aisstream.io](https://aisstream.io/) — gratuito |
| `ADSB_API_KEY` | Tracciamento aereo senza filtri | [RapidAPI](https://rapidapi.com/adsbexchange/api/adsbexchange-com1) — ~$10/mese |
### Provider LLM (opzionale, per idee potenziate con l'IA)
Imposta `LLM_PROVIDER` su uno dei seguenti valori: `anthropic`, `openai`, `gemini`, `codex`, `openrouter`, `minimax`, `mistral`, `grok`
| Provider | Chiave richiesta | Modello predefinito |
|----------|-------------|---------------|
| `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` | Nessuna (usa `~/.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 |
Per Codex, esegui `npx @openai/codex login` per autenticarti tramite il tuo abbonamento ChatGPT.
### Bot Telegram + Avvisi (opzionale)
| Key | How to Get |
|-----|------------|
| `TELEGRAM_BOT_TOKEN` | Crea tramite [@BotFather](https://t.me/BotFather) su Telegram |
| `TELEGRAM_CHAT_ID` | Ottieni tramite [@userinfobot](https://t.me/userinfobot) |
| `TELEGRAM_CHANNELS` | *(Opzionale)* ID di canali aggiuntivi separati da virgola da monitorare oltre ai 17 canali integrati |
| `TELEGRAM_POLL_INTERVAL` | *(Opzionale)* Intervallo di polling dei comandi del bot in ms (predefinito: 5000) |
### Bot Discord + Avvisi (opzionale)
| Key | How to Get |
|-----|------------|
| `DISCORD_BOT_TOKEN` | Crea su [Portale per sviluppatori di Discord](https://discord.com/developers/applications) → Bot → Token |
| `DISCORD_CHANNEL_ID` | Fai clic con il tasto destro sul canale in Discord (Modalità sviluppatore attiva) → Copia ID canale |
| `DISCORD_GUILD_ID` | *(Opzionale)* Fai clic con il tasto destro sul server → Copia ID server. Abilita la registrazione immediata dei comandi slash (altrimenti richiede fino a 1 ora per i comandi globali) |
| `DISCORD_WEBHOOK_URL` | *(Opzionale)* Impostazioni canale → Integrazioni → Webhook → Nuovo webhook → Copia URL. Usa questa modalità solo avvisi senza bot |
**Configurazione del bot Discord:**
1. Vai al [Portale per sviluppatori di Discord](https://discord.com/developers/applications) e crea una nuova applicazione
2. Vai su **Bot** → fai clic su **Reset Token** → copia il token in `DISCORD_BOT_TOKEN`
3. Nella sezione **Privileged Gateway Intents**, abilita **Message Content Intent**
4. Vai su **OAuth2** → **URL Generator** → seleziona gli scope `bot` + `applications.commands` → seleziona i permessi `Send Messages` + `Embed Links`
5. Copia l'URL generato e aprilo nel browser per invitare il bot sul tuo server
6. Installa la dipendenza: `npm install discord.js`
Gli avvisi funzionano con o senza un LLM sia su Telegram che su Discord. Con un LLM configurato, la valutazione dei segnali è più ricca e sensibile al contesto. Senza, un motore a regole deterministico valuta i segnali in base a gravità, correlazione tra domini e numero di segnali.
### Senza alcuna chiave
Crucix funziona ancora con zero chiavi API. 18+ fonti non richiedono alcuna autenticazione. Le fonti che richiedono chiavi restituiscono errori strutturati e il resto della scansione prosegue normalmente.
---
## Architettura```
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)
.mjs con import esplicitidiscord.js è opzionale (per il bot Discord). I provider LLM usano fetch() grezzo, niente SDK.Promise.allSettled() attiva tutte le 27 sorgenti simultaneamentenode apis/sources/gdelt.mjs per testare qualsiasi sorgente in modo indipendente| Sorgente | Cosa traccia | Auth |
|---|---|---|
| CelesTrak | Lanci di satelliti, tracciamento ISS, costellazioni militari, conteggi Starlink/OneWeb | Nessuna |
| Sorgente | Cosa traccia | Auth |
|---|---|---|
| Yahoo Finance | Prezzi in tempo reale: SPY, QQQ, BTC, Oro, WTI, VIX + altri 9 | Nessuna |
Tutte le impostazioni sono in .env con valori predefiniti sensati:
Le soglie del motore delta (quanto è sensibile il sistema ai cambiamenti tra le scansioni) possono essere personalizzate in crucix.config.mjs nella sezione delta.thresholds. I valori predefiniti sono calibrati per filtrare il rumore cogliendo movimenti significativi.
Quando esegui npm run dev:
| Endpoint | Descrizione |
|---|---|
GET / | Dashboard Jarvis HUD |
GET /api/data |
npm run dev termina silenziosamente (nessun output, nessun errore)Questo è un problema noto per cui lo script runner di npm può ingoiare gli errori, in particolare su Windows PowerShell. Prova nell'ordine:
1. Esegui Node direttamente (bypassa npm):```bash node --trace-warnings server.mjs
Questo è funzionalmente identico a `npm run dev` ma fornisce l'output completo degli errori.
**2. Esegui lo script diagnostico:**```bash
node diag.mjs
Questo testa ogni import uno per uno, controlla la versione del tuo Node.js e verifica che la porta 3117 sia disponibile. Ti dirà esattamente cosa sta fallendo.
3. Controlla se la porta 3117 è già in uso:
Un'istanza precedente di Crucix potrebbe essere ancora in esecuzione in background.```powershell
netstat -ano | findstr 3117 taskkill /F /PID <the_PID_from_above>
taskkill /F /IM node.exe
Il contenuto del chunk non è stato fornito: la sezione INPUT risulta vuota. Non è possibile tradurre testo assente.```bash
# macOS / Linux
lsof -ti:3117 | xargs kill
Quindi prova a riavviare. Puoi anche cambiare la porta impostando PORT=3118 nel tuo file .env.
4. Controlla la versione di Node.js:```bash node --version
Crucix richiede Node.js 22 o successivo. Se hai una versione precedente, scarica l'ultima LTS da [nodejs.org](https://nodejs.org/).
### La dashboard mostra pannelli vuoti dopo il primo avvio
È normale: la prima scansione impiega 30–60 secondi per interrogare tutte le 27 sorgenti. La dashboard si popolerà automaticamente al termine della scansione. Controlla il terminale per i log di avanzamento della scansione.
### Alcune sorgenti mostrano errori
Comportamento previsto. Le sorgenti che richiedono chiavi API restituiranno errori strutturati se la chiave non è impostata. Il resto della scansione continua normalmente. Controlla la sezione Source Integrity nella dashboard (o i log del server) per vedere quali sorgenti hanno fallito e perché. Le 3 chiavi gratuite più impattanti da aggiungere sono `FRED_API_KEY`, `FIRMS_MAP_KEY` e `EIA_API_KEY`.
OpenSky può anche restituire `HTTP 429` quando i suoi hotspot pubblici vengono interrogati in modo troppo aggressivo. Crucix non tenta di eludere questo limite. Espone invece la limitazione/l'errore nello stato di salute della sorgente e conserva lo snapshot non vuoto più recente del traffico aereo da `runs/`, così il layer dei voli della dashboard non diventa improvvisamente vuoto durante una scansione limitata.
### Il bot Telegram non risponde ai comandi
Assicurati che sia `TELEGRAM_BOT_TOKEN` che `TELEGRAM_CHAT_ID` siano impostati in `.env`. Il bot risponde solo ai messaggi provenienti dall'ID chat configurato (misura di sicurezza). Dovresti vedere `[Crucix] Telegram alerts enabled` e `[Crucix] Bot command polling started` nei log del server all'avvio. In caso contrario, ricontrolla il tuo token con `curl https://api.telegram.org/bot<YOUR_TOKEN>/getMe`.
### Il bot Discord non risponde ai comandi slash
Controlla questi punti in ordine:
1. Assicurati che `DISCORD_BOT_TOKEN` e `DISCORD_CHANNEL_ID` siano impostati in `.env`
2. Verifica che `discord.js` sia installato: `npm ls discord.js`. Se manca, esegui `npm install discord.js`
3. Se i comandi slash non compaiono, imposta `DISCORD_GUILD_ID` — senza di esso, i comandi globali possono impiegare fino a 1 ora per propagarsi. I comandi specifici per guild si registrano istantaneamente
4. Conferma che il bot sia stato invitato con gli scope `bot` + `applications.commands` e abbia i permessi `Send Messages` + `Embed Links` nel canale di destinazione
5. Controlla i log del server per `[Discord] Bot logged in as ...` all'avvio. Se vedi `[Discord] discord.js not installed`, installalo e riavvia
6. **Fallback solo webhook:** Se vuoi solo gli alert senza comandi slash, imposta `DISCORD_WEBHOOK_URL` invece del token del bot. Non è necessario `discord.js`.
---
## Schermate
La cartella `docs/` contiene gli screenshot della dashboard citati in questo README:
| File | Description |
|------|-------------|
| `docs/dashboard.png` | Dashboard completa — immagine hero in cima a questo README |
| `docs/boot.png` | Animazione cinematografica della sequenza di avvio |
| `docs/map.png` | Mappa mondiale D3 con tipi di marker e archi di volo |
| `docs/globe.png` | Vista 3D del globo WebGL con bagliore atmosferico e marker |
Per aggiornarli: esegui la dashboard, attendi il completamento di una scansione, poi usa i DevTools del tuo browser (`F12` → `Ctrl+Shift+P` → "Capture full size screenshot") o uno strumento come [LICEcap](https://www.cockos.com/licecap/) per GIF.
---
## Contribuire
Trovato un bug? Vuoi aggiungere una 28ª sorgente? Le PR sono benvenute. Ogni sorgente è un modulo autonomo in `apis/sources/` — basta esportare una funzione `briefing()` che restituisce dati strutturati e aggiungerla all'orchestratore in `apis/briefing.mjs`.
Se lo trovi utile, una stella aiuta anche altri a trovarlo.
Per le linee guida sui contributi, le aspettative di review e le regole per l'aggiunta di sorgenti, consulta `CONTRIBUTING.md`. Per le segnalazioni di sicurezza, consulta `SECURITY.md`.
## Contatti
Per partnership, integrazioni o altre richieste che non siano problemi, puoi contattarmi all'indirizzo `[email protected]`.
Per bug e richieste di funzionalità, utilizza GitHub Issues così la discussione rimane visibile e attuabile.
---
## Cronologia delle stelle
<a href="https://www.star-history.com/?repos=calesthio%2FCrucix&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/image?repos=calesthio/Crucix&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/image?repos=calesthio/Crucix&type=date&legend=top-left" />
<img alt="Grafico della cronologia delle stelle" src="https://assets.kitploit.com/production/public/readmes/41561/7cd00fa07216305d19bb2b6ece0de2b2dd36eeb2786d065aef0359159e4598a8/43d9ce4f0049392bf903058716bccb8009e9bdf415dc7e9e892487d4c1f75365-display-v1.webp" />
</picture>
</a>
---
## Licenza
AGPL-3.0
| Vista globo 3D |
|---|
![]() |
| 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 |
| Trigger a manual sweep cycle |
/brief | Compact text summary of the latest intelligence |
/portfolio | Portfolio status (if Alpaca connected) |
| Sorgente | Cosa traccia | Auth |
|---|
| GDELT | Eventi di cronaca globale, mappatura dei conflitti (100+ lingue) | Nessuna |
| OpenSky | Tracciamento aereo ADS-B in tempo reale su 6 regioni critiche | Nessuna |
| NASA FIRMS | Rilevamento satellitare di incendi/anomalie termiche (latenza 3 ore) | Chiave gratuita |
| Marittimo/AIS | Tracciamento delle navi, navi oscurate, elusione delle sanzioni | Chiave gratuita |
| Safecast | Monitoraggio delle radiazioni da scienza dei cittadini vicino a 6 siti nucleari | Nessuna |
| ACLED | Eventi di conflitto armato: battaglie, esplosioni, proteste | Gratuita (OAuth2) |
| ReliefWeb | Monitoraggio delle crisi umanitarie dell'ONU | Nessuna |
| OMS | Focolai di malattie ed emergenze sanitarie | Nessuna |
| OFAC | Sanzioni del Tesoro USA (lista SDN) | Nessuna |
| OpenSanctions | Sanzioni globali aggregate (30+ sorgenti) | Parziale |
| ADS-B Exchange | Tracciamento aereo non filtrato, incluso l'ambito militare | A pagamento |
| Sorgente | Cosa traccia | Auth |
|---|
| FRED | 22 indicatori chiave: curva dei rendimenti, CPI, VIX, tasso dei fed funds, M2 | Chiave gratuita |
| Tesoro USA | Debito nazionale, rendimenti, dati fiscali | Nessuna |
| BLS | CPI, disoccupazione, buste paga non agricole, PPI | Nessuna |
| EIA | Greggio WTI/Brent, gas naturale, scorte | Chiave gratuita |
| GSCPI | Indice della pressione sulla catena di approvvigionamento globale della Fed di New York | Nessuna |
| USAspending | Spesa federale e contratti per la difesa | Nessuna |
| UN Comtrade | Flussi commerciali di materie prime strategiche tra le grandi potenze | Nessuna |
| Sorgente | Cosa traccia | Auth |
|---|
| NOAA/NWS | Allerte meteo USA attive | Nessuna |
| EPA RadNet | Monitoraggio delle radiazioni del governo USA | Nessuna |
| Brevetti USPTO | Depositi di brevetti in 7 aree tecnologiche strategiche | Nessuna |
| Bluesky | Sentiment sociale su temi geopolitici/di mercato | Nessuna |
| Sentiment sociale dai principali subreddit | OAuth | |
| Telegram | 17 canali curati OSINT/conflitti/finanza (web scraping, espandibile via config) | Nessuna |
| KiwiSDR | Rete globale di ricevitori radio HF (~600 ricevitori) | Nessuna |
| Script | Comando | Descrizione |
|---|
npm run dev | node --trace-warnings server.mjs | Avvia la dashboard con auto-aggiornamento |
npm run sweep | node apis/briefing.mjs | Esegue una singola scansione, output JSON su stdout |
npm run inject | node dashboard/inject.mjs | Inietta i dati più recenti nell'HTML statico |
npm run brief:save | node apis/save-briefing.mjs | Esegue la scansione + salva JSON con timestamp |
npm run diag | node diag.mjs | Esegue la diagnostica (versione Node, import, controllo porta) |
| Variabile | Predefinito | Descrizione |
|---|
PORT | 3117 | Porta del server dashboard |
REFRESH_INTERVAL_MINUTES | 15 | Intervallo di auto-aggiornamento |
LLM_PROVIDER | disabilitato | anthropic, openai, gemini, codex, openrouter, minimax, mistral o grok |
LLM_API_KEY | — | Chiave API (non necessaria per codex) |
LLM_MODEL | predefinito per provider | Sovrascrive la selezione del modello |
TELEGRAM_BOT_TOKEN | disabilitato | Per avvisi Telegram + comandi bot |
TELEGRAM_CHAT_ID | — | Il tuo ID chat Telegram |
TELEGRAM_CHANNELS | — | ID canali extra da monitorare (separati da virgola) |
TELEGRAM_POLL_INTERVAL | 5000 | Intervallo di polling dei comandi bot (ms) |
DISCORD_BOT_TOKEN | disabilitato | Per avvisi Discord + comandi slash |
DISCORD_CHANNEL_ID | — | Canale Discord per gli avvisi |
DISCORD_GUILD_ID | — | ID server (registrazione immediata dei comandi slash) |
DISCORD_WEBHOOK_URL | — | URL webhook (fallback solo avvisi, nessun bot necessario) |
| Dati di intelligence sintetizzati correnti (JSON) |
GET /api/health | Stato del server, uptime, numero di sorgenti, stato LLM |
GET /events | Stream SSE per aggiornamenti push in tempo reale |