Retour aux mises à jour
New releaseAug 6, 2026

Shadowbroker v0.9.84

Plateforme OSINT géospatiale en temps réel regroupant plus de 60 flux de télémétrie publics (ADS-B, AIS, satellites, CCTV) dans une carte unifiée, avec une boîte à outils de reconnaissance côté serveur, un canal d’agent IA et des communications maillées décentralisées.

Partager

🛰️ S H A D O W B R O K E R

Interception Globale des Menaces — Plateforme de Renseignement Géospatial en Temps Réel


ShadowBroker

ShadowBroker est une plateforme de renseignement décentralisée qui agrège, en temps réel, des données OSINT multi-domaines provenant de plus de 60 flux en direct sur une interface cartographique de type « dark ops ». Avions, navires, satellites, zones de conflit, réseaux de vidéosurveillance, brouillage GPS, appareils connectés à Internet, radios de police, nœuds maillés radio et événements géopolitiques majeurs — tous mis à jour en temps réel sur un seul écran, ainsi qu’un protocole de communication obscurci et une infrastructure d’échange d’informations.

🛰️ Description du Projet

Construit avec Next.js, MapLibre GL, FastAPI et Python. Plus de 40 couches de données activables, incluant la détection des changements au sol par SAR, l’OSINT Telegram (prévisualisation de canaux publics géoparcés sur la carte), une boîte à outils de reconnaissance côté serveur (DNS, WHOIS, sanctions, BGP, scan IP, etc.), des couches de risque liées à la chaîne d’approvisionnement, ainsi que des flux de menaces cyber (malwares/C2 et CISA KEV). Plusieurs modes visuels (DEFAULT / SATELLITE / FLIR / NVG / CRT). Clic droit sur n’importe quel point de la Terre pour obtenir un dossier pays, une fiche du chef d’État, une extension de graphe d’entités et la dernière photo satellite Sentinel-2. ShadowBroker n’a ni comptes, ni télémétrie, ni système d’analyse ; le tableau de bord communique avec votre backend auto-hébergé. Les requêtes sensibles de reconnaissance et de Shodan ne transitent jamais par des API tierces depuis le navigateur — elles sont relayées par le backend avec des gardes SSRF et une authentification d’opérateur local. Le canal de commande OpenClaw / agent expose les mêmes backends de reconnaissance ainsi qu’une recherche complète de télémétrie — aucune intégration API séparée n’est nécessaire.

Conçu pour les analystes, les chercheurs, les opérateurs radio et toute personne souhaitant voir à quoi ressemble le monde lorsque tous les signaux publics sont réunis sur une même carte.


🌍 Pourquoi Cela Existe

Une quantité surprenante de données mondiales sont déjà publiques — les signaux ADS-B des aéronefs, les signaux AIS maritimes, les données orbitales des satellites, les capteurs sismiques, les réseaux radio maillés, les flux de radios de police, les stations de surveillance environnementale, la télémétrie des infrastructures Internet, et bien plus encore. Ces données sont dispersées dans des dizaines d’outils et d’API. ShadowBroker les combine en une seule interface.

Le projet n’introduit pas de nouvelles capacités de surveillance — il agrège et visualise des ensembles de données publiques existants. Il est entièrement open source afin que chacun puisse auditer exactement quelles données sont consultées et comment. ShadowBroker n’inclut ni télémétrie de produit, ni systèmes d’analyse, ni comptes. Les clés fournies par l’opérateur restent dans votre déploiement local, mais les fonctionnalités OSINT en temps réel effectuent nécessairement des requêtes sortantes vers les fournisseurs de données publiques que vous activez ou interrogez.


📡 Shodan et Reconnaissance (sécurité d’abord)

ShadowBroker inclut un connecteur Shodan optionnel pour l’accès à l’API fournie par l’opérateur (SHODAN_API_KEY) et un panneau Boîte à outils de Reconnaissance pour les recherches OSINT sans clé. Les deux s’exécutent uniquement côté serveur : le navigateur appelle vos routes auto-hébergées /api/osint/* et /api/tools/shodan/* ; les requêtes sortantes sont effectuées par le backend après validation SSRF. La reconnaissance nécessite un accès opérateur local (même modèle de confiance que les toggles de couches et les routes d’administration). Les résultats Shodan s’affichent en tant que couche cartographique distincte et restent soumis aux conditions d’utilisation de Shodan.


🗺️ Cas d’Utilisation Intéressants
  • Suivre Air Force One, les jets privés des milliardaires et des dictateurs, ainsi que tous les pétroliers, avions ISR et chasseurs militaires diffusant du ADS-B. Air Force One et tous les avions présidentiels/vice-présidentiels qui l’accompagnent sont mis en évidence et surveillés dès leur décollage.
  • Connecter un agent IA comme co-analyste via le canal de commande agentique signé HMAC de ShadowBroker — compatible avec OpenClaw et tout autre agent parlant le protocole (Claude, GPT, LangChain, personnalisé). L’agent a un accès complet en lecture/écriture aux plus de 40 couches de données, une recherche inter-couche compacte (search_telemetry, search_news), la boîte à outils complète de reconnaissance (osint_lookup pour IP/DNS/WHOIS/sanctions/CVE, etc.), l’extension de graphe d’entités, le placement de marqueurs, le contrôle de la carte, la détection des changements au sol par SAR, le maillage réseau et la livraison d’alertes. Il voit tout ce que l’opérateur voit et peut agir sur la carte en temps réel.
  • Communiquer sur le testnet InfoNet — le premier maillage de renseignement décentralisé intégré à un outil OSINT. Messagerie obscurcie avec des personnages de porte, échange pair-à-pair via Dead Drop et un terminal CLI intégré. Pas de comptes, pas d’inscription. La confidentialité n’est pas encore garantie — il s’agit d’un testnet expérimental — mais le protocole est opérationnel et en cours de renforcement.
  • Clic droit n’importe où sur Terre pour obtenir un dossier pays (chef d’État, population, langues), un résumé Wikipédia et la dernière photo satellite Sentinel-2 à 10 m de résolution
  • Cliquer sur un nœud KiwiSDR et écouter en direct une radio shortwave directement dans le tableau de bord. Cliquer sur un flux de radio de police et écouter en un clic.
  • Regarder plus de 11 000 caméras de vidéosurveillance dans 6 pays — Londres, New York, Californie, Espagne, Singapour, etc. — en streaming en direct sur la carte
  • Voir les zones de brouillage GPS en temps réel — dérivées de l’analyse de la dégradation NAC-P des données des transpondeurs aériens
  • Surveiller les satellites en orbite colorés par type de mission — reconnaissance militaire, SIGINT, SAR, alerte précoce, stations spatiales — avec les réseaux de stations au sol SatNOGS et TinyGS
  • Suivre le trafic naval incluant plus de 25 000 navires AIS, l’activité de pêche via Global Fishing Watch et les superyachts des milliardaires
  • Suivre les séismes, les éruptions volcaniques, les incendies actifs (NASA FIRMS), les alertes météorologiques sévères et les relevés de qualité de l’air dans le monde entier
  • Cartographier les bases militaires, plus de 35 000 centrales électriques, 2 000 centres de données et les zones de panne Internet — recoupés automatiquement
  • Se connecter aux nœuds radio maillés Meshtastic et aux réseaux radioamateurs APRS — visibles sur la carte et intégrés dans Mesh Chat
  • Détecter les changements au sol à travers la couverture nuageuse avec le SAR (Radar à Synthèse d’Ouverture) — déformation du sol à l’échelle millimétrique, étendue des inondations, perturbations de la végétation et évaluations des dommages depuis NASA OPERA et Copernicus EGMS. Définissez vos propres zones de surveillance et recevez des alertes d’anomalie. Gratuit avec un compte NASA Earthdata.
  • Changer de mode visuel — DEFAULT, SATELLITE, FLIR (thermique), NVG (vision nocturne), CRT (terminal rétro) — via le bouton STYLE
  • Suivre les trains aux États-Unis (Amtrak) et en Europe (DigiTraffic) en temps réel
  • Estimer où se trouvent les porte-avions américains grâce au scraping automatisé des actualités GDELT — aucun autre outil open source ne le fait
  • Rechercher des appareils connectés à Internet dans le monde entier via Shodan — caméras, systèmes SCADA, bases de données — affichés en tant que couche en direct sur la carte
  • Exécuter une boîte à outils de reconnaissance complète depuis la barre latérale gauche — géolocalisation IP, DNS, RDAP/WHOIS, transparence des certificats, BGP/ASN, recherche de sanctions OFAC, recherche de CVEs, vérifications de menaces Tor/OTX et balayage de sous-réseaux (InternetDB proxé côté serveur)
  • Développer un graphe d’entités lorsque vous sélectionnez un aéronef, un navire, une entreprise ou une adresse IP — Wikidata + OFAC + liens intersites en temps réel affichés dans le panneau de Graphe d’Entités
  • Surveiller le risque de la chaîne d’approvisionnement — usines de semi-conducteurs et de batteries des niveaux 1/2 évaluées en fonction des séismes, incendies et conflits à proximité (panneau SCM)
  • Activer les points chauds de C2 malwares — flux abuse.ch Feodo Tracker + URLhaus cartographiés par pays (couche optionnelle)
  • Surveiller les canaux OSINT Telegram — flux de guerre/conflit publics t.me/s (OSINTdefender, NEXTA, etc.) scrapés toutes les heures, notés selon le risque, géoparcés vers des ancres métropolitaines et affichés sous forme de marqueurs cliquables avec médias intégrés
  • Superposer les câbles sous-marins mondiaux — itinéraires statiques dérivés de TeleGeography (couche optionnelle)

⚡ Démarrage Rapide (Docker)

Depuis GitHub (par défaut — utilise les images GHCR)```bash

git clone https://github.com/bigbodycobain/Shadowbroker.git cd Shadowbroker docker compose pull docker compose up -d

### Depuis GitLab (utilise GitLab Container Registry)```bash
git clone https://gitlab.com/bigbodycobain/Shadowbroker.git
cd Shadowbroker
docker compose -f docker-compose.yml -f docker-compose.gitlab.yml pull
docker compose -f docker-compose.yml -f docker-compose.gitlab.yml up -d

Les deux chemins produisent des conteneurs identiques — même source, même CI, mêmes images octet pour octet. Choisissez l'écosystème que vous utilisez déjà.

Ouvrez http://localhost:3000 pour voir le tableau de bord ! (Nécessite Docker Desktop ou Docker Engine)

Rejoignez l'essaim privé InfoNet (sb-testnet-0) : Cliquez sur NŒUD dans le tableau de bord, ou exécutez ./meshnode.sh pour un participant sans interface. Pas de liste manuelle de pairs — les valeurs par défaut de la flotte découvrent le seed et récupèrent le manifeste signé automatiquement. Définissez MESH_INFONET_FLEET_JOIN=false dans .env pour un nœud solo privé.

Port du backend déjà utilisé ? Le navigateur a besoin uniquement du port 3000, mais l'API backend est également publiée sur le port hôte 8000 pour les diagnostics locaux. Si une autre application utilise déjà 8000, créez ou modifiez .env à côté de docker-compose.yml et définissez BACKEND_PORT=8001, puis exécutez docker compose up -d.

Nouvelles/UAP/bases/eaux usées vides après plusieurs minutes ? Vérifiez les redémarrages du backend pour cause de OOM avec docker events --since 30m --filter container=shadowbroker-backend --filter event=oom. Le fichier compose par défaut donne 4 Go au backend ; si votre hôte a moins de mémoire, réduisez les flux activés ou définissez BACKEND_MEMORY_LIMIT=3G et attendez-vous à ce que les couches plus lourdes/lentes se réchauffent plus progressivement.

Utilisateurs Podman : Podman fonctionne, mais podman compose est une surcouche et nécessite encore un fournisseur Compose installé. Sur Windows/WSL, si vous voyez looking up compose provider failed, installez podman-compose et exécutez podman-compose pull suivi de podman-compose up -d depuis le dossier cloné Shadowbroker. Sur les shells Linux/macOS/WSL, vous pouvez aussi utiliser ./compose.sh --engine podman pull et ./compose.sh --engine podman up -d.


🔄 Comment mettre à jour

ShadowBroker utilise des images Docker pré-construites — aucune construction locale requise. La mise à jour prend quelques secondes :```bash docker compose pull docker compose up -d

C'est tout. `pull` récupère les dernières images, `up -d` redémarre les conteneurs.

> **Vous venez d'une version plus ancienne ?** Récupérez d'abord le dernier code du dépôt, puis les images :
>
> ```bash
> git pull origin main
> docker compose down
> docker compose pull
> docker compose up -d
> ```
>
> Les utilisateurs de Podman doivent exécuter la commande équivalente de leur fournisseur, par exemple `podman-compose pull` et `podman-compose up -d`, ou utiliser `./compose.sh --engine podman pull` et `./compose.sh --engine podman up -d` depuis un shell compatible bash.

### Intégrité des mises à jour

Les mises à jour Docker sont distribuées via des registres de conteneurs signés. Le programme de mise à jour automatique ZIP hérité vérifie les archives de version via cette chaîne, dans l'ordre :

* `MESH_UPDATE_SHA256` lorsqu'un opérateur définit explicitement un condensé.
* `backend/data/release_digests.json` pour les condensés de version fournis.
* Le fichier `SHA256SUMS.txt` de la version sur GitHub lorsqu'aucun condensé fourni n'est présent.

Les responsables de version doivent exécuter `python backend/scripts/release_helper.py hash <ShadowBroker_vX.Y.Z.zip>` avant de publier, puis publier `SHA256SUMS.txt` et mettre à jour `backend/data/release_digests.json` lors de la livraison d'une cible de mise à jour ZIP. Le programme de mise à jour conserve le chemin de remplacement de l'opérateur intact au lieu d'échouer en cas d'absence de condensés fournis, afin que les installations existantes ne soient pas bloquées par une erreur dans le processus de publication.

### Durcissement CSP

Le frontend de production est livré avec un CSP compatible avec l'hydratation et un CSP strict à nonce uniquement dans `Content-Security-Policy-Report-Only`. Définissez `SHADOWBROKER_STRICT_CSP=1` uniquement après avoir vérifié que la construction exacte s'hydrate correctement dans votre déploiement. Les polices Google d'exécution ne sont pas nécessaires ; le pipeline de polices Next intégré sert la police du tableau de bord depuis la construction de l'application.

### ⚠️ **Bloqué sur l'ancienne version ?**

**Si `git pull` échoue ou que `docker compose up` continue de construire à partir des sources au lieu de récupérer les images**, votre clone est antérieur à une migration du dépôt de mars 2026 qui a réécrit l'historique des commits. Un `git pull` normal ne peut pas résoudre ce problème. Exécutez :```bash
# Back up any local config you want to keep (.env, etc.)
cd ..
rm -rf Shadowbroker
git clone https://github.com/bigbodycobain/Shadowbroker.git
cd Shadowbroker
docker compose pull
docker compose up -d

Comment savoir si vous êtes concerné : Si docker compose up affiche RUN apt-get, RUN npm ci ou RUN pip install — cela signifie qu'il construit à partir des sources au lieu de télécharger des images pré-construites. Vous avez besoin d'un nouveau clone.

Autre dépannage :

  • Forcer le re-téléchargement : docker compose pull --no-cache
  • Nettoyer les anciennes images : docker image prune -f
  • Vérifier les logs : docker compose logs -f backend

☸️ Kubernetes / Helm (Avancé)

Pour les déploiements haute disponibilité ou les clusters de laboratoire domestique, ShadowBroker prend en charge le déploiement via Helm. Ce chart est basé sur le template bjw-s-labs et offre une configuration robuste et modulaire pour le backend et le frontend.

1. Ajouter le dépôt :```bash helm repo add bjw-s-labs https://bjw-s-labs.github.io/helm-charts/ helm repo update

**2. Installer le Chart :**```bash
# Default — pulls images from GHCR
helm install shadowbroker ./helm/chart --create-namespace --namespace shadowbroker

# GitLab registry variant
helm install shadowbroker ./helm/chart --create-namespace --namespace shadowbroker \
  -f helm/chart/values.yaml \
  -f helm/chart/values-gitlab.yaml

3. Fonctionnalités Clés :

  • Architecture Modulaire : Évolutivité indépendante du backend d’intelligence et du frontend HUD.
  • Contexte de Sécurité : Fonctionne avec des UIDs restreints (1001) pour le durcissement des conteneurs.
  • Prêt pour l’Ingress : Compatible avec Traefik, Cert-Manager et Gateway API pour un accès sécurisé et externe à votre nœud d’intelligence.

Remerciements particuliers à @chr0n1x pour avoir contribué à l’architecture Kubernetes initiale.


🌐 Testnet Expérimental — Aucune Garantie de Confidentialité

ShadowBroker v0.9.7 embarque InfoNet (maillage d’intelligence décentralisé + économie de gouvernance Sovereign Shell), un canal de commandement IA agentique (prend en charge OpenClaw et tout agent signant en HMAC), la lecture de snapshots Time Machine et la détection de changements au sol par SAR satellite. Il s’agit d’un testnet expérimental — ni un messager privé, ni un système de gouvernance de production.

CanalStatut de ConfidentialitéDétails
Meshtastic / APRSPUBLICLes transmissions radio RF sont publiques et interceptables par conception.
Gate Chat InfoNetOBFUSCATIONLes messages sont obfusqués avec des personas de gate et une signature canonique du payload, mais PAS de chiffrement de bout en bout. Les métadonnées ne sont pas masquées bien que conçues via Tor et Reticulum (Travail en cours).
MPs Dead DropVOIE ACTUELLE LA PLUS FORTEBoîte aux lettres par époque basée sur un jeton avec vérification par mot SAS. Voie la plus forte dans cette version, mais pas encore confidentielle avec certitude.
Gouvernance Sovereign ShellREGISTRE PUBLICPétitions, votes, hachages de mise à jour et mises en jeu de litige sont des événements signés sur une chaîne de hachage publique. Pseudonyme via le persona de gate, mais les actions de gouvernance sont intentionnellement observables.
Primitives de confidentialité (RingCT / stealth / DEX)PAS ENCORE CÂBLÉESLes contrats de protocole verrouillés sont en place, mais le schéma cryptographique n’a pas été choisi. La crate Rust privacy-core est la cible d’intégration pour un futur sprint.

Ne transmettez rien de sensible sur aucun canal. Considérez toutes les voies comme ouvertes et publiques pour l’instant. Le chiffrement E2E et un durcissement natif/Tauri plus profond sont les prochains jalons. Si vous fork ce projet, conservez ces étiquettes intactes et ne formulez pas de revendications de confidentialité plus fortes que ce que l’implémentation permet.

Pour une image complète de ce contre quoi le maillage se défend réellement et de ce contre quoi il ne se défend pas, lisez le modèle de menace et la réconciliation de revendications. Chaque phrase ci-dessus y est mappée au chemin de code qui l’applique (ou pas).


✨ Fonctionnalités

🧅 InfoNet — Maillage d’Intelligence Décentralisé + Sovereign Shell (étendu dans v0.9.7)

La première couche de communication d’intelligence et de gouvernance décentralisée intégrée directement dans une plateforme OSINT. Pas de comptes, pas d’inscription, pas d’identité requise. v0.9.7 élève InfoNet d’une couche de chat à une économie de gouvernance complète avec une voie claire vers une plateforme d’intelligence décentralisée préservant la confidentialité.

Couche de communication (depuis v0.9.6) :

  • Testnet Expérimental InfoNet — Relais de messages global et obfusqué utilisant Tor et Reticulum. Toute personne exécutant ShadowBroker peut émettre et recevoir sur InfoNet. Les messages traversent une couche de relais Wormhole avec des personas de gate, une signature canonique du payload Ed25519 et une obfuscation du transport.
  • Panneau de Chat Maillé — Interface à trois onglets : INFONET (gate chat avec transport obfusqué), MESH (intégration radio Meshtastic), DEAD DROP (échange de messages pair-à-pair avec boîtes aux lettres par époque basées sur un jeton — voie actuelle la plus forte).
  • Système de Persona de Gate — Identités pseudonymes avec clés de signature Ed25519, bundles de pré-clés, vérification de contact par mot SAS et signalement d’abus.
  • Terminal Maillé — CLI intégré : send, dm, commandes de marché, inspection de l’état de la gate. Panneau déplaçable, se réduit dans la barre du haut. Tapez help pour voir toutes les commandes.
  • Stack Cryptographique — Signature Ed25519, Diffie-Hellman X25519, chiffrement AESGCM avec dérivation de clé HKDF, système d’engagement par chaîne de hachage. Échafaudage du double ratchet DM en cours.

Sovereign Shell — économie de gouvernance (NOUVEAU dans v0.9.7) :

  • Pétitions + DSL de Gouvernance — Modifications de paramètres on-chain via des pétitions signées. Exécuteur de payload type-safe pour UPDATE_PARAM, BATCH_UPDATE_PARAMS, ENABLE_FEATURE et DISABLE_FEATURE. Des boutons réglables changent par vote — aucun déploiement de code requis.
  • Gouvernance par Hachage de Mise à Jour — Les mises à jour de protocole nécessitant une nouvelle logique (pas seulement des changements de paramètres) votent sur un hachage SHA-256 de la version vérifiée. Super-majorité de 80 %, quorum de 40 %, activation par nœud lourd à 67 %. Cycle : signatures → vote → fenêtre de contestation → en attente de préparation → activé.
  • Marchés de Résolution et de Litige — Mise en jeu sur les résultats de résolution de marché (oui / non / données_indisponibles), ouverture de litiges avec preuve sous caution, et mise en jeu sur la confirmation ou l’annulation du litige. L’état de soumission par ligne reste isolé, de sorte que les actions simultanées ne partagent pas un emplacement en vol.
  • Soumission de Preuve — Lots de preuves sous caution avec canonicalisation SHA-256 côté client correspondant exactement à repr() de Python, afin que les hachages transitent proprement dans la chaîne.
  • Suspension / Arrêt / Appels de Gate — Formulaires de dépôt pour suspendre ou arrêter une gate, avec un flux d’appel réutilisable ciblant automatiquement la pétition en attente.
  • Bootstrap Nœud Éligible-Un-Vote — Les 100 premiers marchés se résolvent via un vote par nœud éligible au lieu d’une résolution pondérée par la mise. Éligibilité : âge de l’identité ≥ 3 jours, pas dans l’ensemble d’exclusion des prédicteurs, PoW Argon2id valide (nœud lourd uniquement). Transition vers la résolution mise en jeu à 1000 nœuds.
  • État à Deux Niveaux + Finalité d’Époque — Les événements de niveau 1 se propagent à la manière CRDT pour une latence faible ; les événements de niveau 2 nécessitent une finalité d’époque avant de pouvoir être traités. Rotation d’identité, pénalités progressives, jalons de montée en puissance et invariants constitutionnels appliqués via MappingProxyType.
  • Sondage Adaptatif — Les vues Sovereign Shell sondent toutes les 8 secondes pendant les phases actives de vote / contestation / activation, toutes les 30 à 60 secondes lorsqu’elles sont inactives. Le vote semble vivant sans couche websocket.
  • Diagnostics Textuels — Chaque bouton d’écriture affiche la raison de rejet textuelle du backend. Pas de toasts opaques « refusé ».

Piste de primitives de confidentialité (NOUVEAU dans v0.9.7) :

  • Fonctions Clés — Échafaudage de Justificatifs Anonymes — La plomberie est en place pour les nullifieurs, le défi-réponse, les reçus de validation en deux phases, les codes de refus énumérés et le règlement par lots. Le défi-réponse actuel est un espace réservé basé sur HMAC pour les tests d’intégration, pas une preuve de citoyenneté anonyme ou à divulgation nulle de production. La délivrance véritablement non liable attend toujours une décision sur la primitive (signatures aveugles RSA vs BBS+ vs U-Prove vs Idemix).
  • Contrats de Protocole Verrouillés — Interfaces stables dans services/infonet/privacy/contracts.py pour les signatures en anneau, les adresses furtives, les engagements Pedersen, les preuves de plage et l’appariement DEX. La crate Rust privacy-core est la cible d’intégration — aucun appelant du module de confidentialité n’a besoin de savoir quel schéma est actif.
  • Chemin Sprint 11+ — Lorsque le schéma cryptographique sera choisi, les primitives se brancheront dans les protocoles verrouillés sans changement d’API.

Testnet Expérimental — Aucune Garantie de Confidentialité : Les messages InfoNet sont obfusqués mais PAS chiffrés de bout en bout. Le réseau maillé (Meshtastic/APRS) n’est PAS privé — les transmissions radio sont intrinsèquement publiques. Les contrats de primitive de confidentialité sont échafaudés mais pas encore câblés. N’envoyez rien de sensible sur aucun canal. Considérez tous les canaux comme ouverts et publics pour l’instant.

🔍 Toolkit de Reconnaissance et Shodan (dérivé d’Osiris, sécurité avant tout)

Adapté de la stack de reconnaissance OSIRIS (MIT) avec le modèle de proxy de ShadowBroker. Attribution : backend/third_party/osiris/NOTICE.md.

Toolkit de Reconnaissance (barre latérale gauche — opérateur local uniquement) :

  • IP / DNS / WHOIS — Géolocalisation ip-api.com, DNS-over-HTTPS Google, données de déclarant RDAP avec notation optionnelle des en-têtes de sécurité HTTP
  • Certificats et BGP — Découverte de sous-domaines crt.sh, recherches ASN/préfixes bgpview.io
  • Renseignement sur les menaces — Impulsions AlienVault OTX, vérifications des nœuds de sortie Tor, réputation optionnelle par IP/domaine
  • Sanctions — Index us_ofac_sdn d’OpenSanctions (CC-BY) ; recoupements sur les entités WHOIS et les chaînes ISP/org des IP
  • CVE / MAC / GitHub / fuites — API MITRE CVE, recherche de fournisseur MAC, reconnaissance de profil GitHub, vérifications de fuites publiques
  • Balayage IP/api/osint/sweep/scan géolocalise une cible /24–/32 et proxy la découverte d’hôte InternetDB Shodan côté serveur (le navigateur ne contacte jamais InternetDB directement)
  • Protection SSRF — Les noms d’hôte privés, de boucle locale, de liaison locale et de métadonnées sont bloqués avant toute récupération fournie par l’utilisateur

Graphe d’entités — Sélectionnez n’importe quelle entité cartographique pour ouvrir le panneau Graphe d’entités (GET /api/entity/expand). Résout les aéronefs, navires, entreprises, personnes, adresses IP et pays en un graphe nœuds/liens (Wikidata SPARQL + OFAC + magasin en mémoire de vols/navires).

Accès OpenClaw / agent — Les mêmes backends de reconnaissance sont disponibles sur le canal de commandement HMAC (pas de gate d’opérateur local navigateur) : osint_lookup (IP/DNS/WHOIS/certs/BGP/sanctions/CVE/MAC/GitHub/leaks/menaces passif), entity_expand (graphe de relations) et osint_sweep (scan actif de sous-réseau — niveau d’accès complet uniquement). Appelez osint_tools pour lister les types de recherche pris en charge. Package de compétences : openclaw-skills/shadowbroker/ (SKILL.md + sb_query.py).

Superposition Shodan (inchangé) :

  • Recherche d’Appareils Internet — Interrogez Shodan avec votre propre clé API ; résultats tracés comme une superposition en direct
  • Marqueurs Configurables — Personnalisation de la forme, de la couleur et de la taille pour les résultats Shodan

🛩️ Suivi Aérien

  • Vols Commerciaux — Positions en temps réel via OpenSky Network (~5 000+ aéronefs)
  • Aéronefs Privés — Aviation légère, turbopropulseurs, jets d’affaires suivis séparément
  • Jets Privés — Aéronefs de particuliers fortunés avec identification du propriétaire
  • Vols Militaires — Ravitailleurs, ISR, chasseurs, transports via le point d’accès militaire adsb.lol
  • Accumulation de Traces de Vol — Traînées de miettes de pain persistantes pour tous les aéronefs suivis
  • Détection de Circuit d’Attente — Signale automatiquement les aéronefs en cercle (>300° de virage total)
  • Classification des Aéronefs — Icônes SVG précises : avions de ligne, turbopropulseurs, jets d’affaires, hélicoptères
  • Détection au Sol — Aéronefs sous 100ft AGL rendus avec des icônes grises

🚢 Suivi Maritime

  • Flux de Navires AIS — 25 000+ navires via WebSocket aisstream.io (temps réel)
  • Classification des Navires — Cargo, pétrolier, passager, yacht, types de navires militaires avec icônes codées par couleur
  • Suivi des Groupes Aéronavals — Les 11 porte-avions actifs de l’US Navy avec positions estimées par OSINT. Aucun autre outil open source ne fait cela.
    • Scraping automatisé des actualités GDELT pour analyser les rapports de mouvement des porte-avions et estimer les positions
    • 50+ correspondances région géographique ↔ coordonnées (ex. « Méditerranée orientale » → lat/lng)
    • Positions mises en cache sur disque, actualisation automatique à 00:00 et 12:00 UTC
  • Navires de Croisière et Passagers — Couche dédiée aux paquebots et ferries
  • Activité de Pêche — Événements de navires Global Fishing Watch (NOUVEAU)
  • Affichage par Grappes — Les navires se regroupent à faible zoom avec des compteurs, se dispersent en zoomant

🚆 Suivi Ferroviaire (NOUVEAU dans v0.9.6)

  • Trains Amtrak — Positions en temps réel des trains Amtrak aux États-Unis avec vitesse, cap, itinéraire et statut
  • Rails Européens — Intégration DigiTraffic pour les positions des trains européens

🛰️ Espace et Satellites

  • Suivi Orbital — Positions satellites en temps réel via les données TLE CelesTrak + propagation SGP4 (2 000+ satellites actifs, aucune clé API requise)
  • Classification par Type de Mission — Codé par couleur selon la mission : reconnaissance militaire (rouge), SAR (cyan), SIGINT (blanc), navigation (bleu), alerte précoce (magenta), imagerie commerciale (vert), station spatiale (or)
  • Stations au Sol SatNOGS — Réseau de stations au sol de satellites amateurs avec données d’observation en direct (NOUVEAU)
  • Satellites LoRa TinyGS — Suivi de la constellation de satellites LoRa (NOUVEAU)

🌍 Géopolitique et Conflits

  • Incidents Mondiaux — Agrégation d’événements de conflit via GDELT (8 dernières heures, ~1 000 événements)
  • Ligne de Front Ukraine — Ligne de front en direct GeoJSON depuis DeepState Map
  • Alertes Aériennes Ukraine — Alertes régionales de raid aérien en temps réel (NOUVEAU)
  • Flux d’Actualités SIGINT/RISINT — Agrégation RSS en temps réel de multiples sources axées sur le renseignement avec flux personnalisables (jusqu’à 20 sources, poids de priorité configurables de 1 à 5)
  • Dossier Régional — Clic droit n’importe où sur Terre pour un briefing instantané de renseignement :
    • Profil du pays (population, capitale, langues, monnaies, superficie)
    • Chef d’État actuel et type de gouvernement (requête SPARQL Wikidata en direct)
    • Résumé Wikipedia local avec vignette
    • Dernière photo satellite Sentinel-2 avec date de capture et couverture nuageuse (résolution 10 m)

🛰️ Imagerie Satellitaire

  • NASA GIBS (MODIS Terra) — Superposition d’imagerie satellite couleur réelle quotidienne avec curseur temporel de 30 jours, animation lecture/pause et contrôle de l’opacité (~250 m/pixel)
  • Haute Résolution Satellite (Esri) — Imagerie sub-métrique via Esri World Imagery — zoomez sur les détails des bâtiments et du terrain (zoom 18+)
  • Carte de Renseignement Sentinel-2 — Clic droit n’importe où sur la carte pour une carte de renseignement flottante montrant la dernière photo satellite Sentinel-2 avec date de capture, % de couverture nuageuse et image plein écran cliquable (résolution 10 m, mise à jour tous les ~5 jours)
  • API de Processus Sentinel Hub — Imagerie satellite Copernicus CDSE avec flux de jeton OAuth2 (NOUVEAU)
  • Lumières Nocturnes VIIRS — Superposition de détection de changement de lumière nocturne (NOUVEAU)
  • 5 Modes Visuels — Basculez toute l’esthétique de la carte via le bouton STYLE :
    • DEFAUT — Carte de fond CARTO sombre
    • SATELLITE — Imagerie Esri World Imagery sub-métrique
    • FLIR — Esthétique d’imagerie thermique (échelle de gris inversée)
    • NVG — Phosphore vert de vision nocturne
    • CRT — Superposition de lignes de balayage de terminal rétro

🛰️ Détection de Changements au Sol par SAR (NOUVEAU)

  • Couche Radar à Synthèse d’Ouverture — Détecte les changements au sol à travers la couverture nuageuse, de nuit, n’importe où sur Terre. Deux modes, tous deux gratuits :
    • Mode A (Catalogue) — Métadonnées de scène Sentinel-1 gratuites depuis Alaska Satellite Facility. Aucun compte requis. Indique quand les passages radar ont eu lieu sur vos zones d’intérêt et quand le prochain passage arrive.
    • Mode B (Anomalies Complètes) — Alertes de changement au sol en temps réel depuis NASA OPERA (DISP, DSWx, DIST-ALERT) et Copernicus EGMS. Nécessite un compte gratuit NASA Earthdata — l’assistant intégré vous guide dans la configuration en moins d’une minute.
  • Types d’Anomalies — Déformation du sol (affaissement à l’échelle millimétrique, glissements de terrain), changement de l’eau de surface (étendue des inondations), perturbation de la végétation (déforestation, cicatrices de brûlure, cratères d’explosion), évaluations des dommages (UNOSAT/Copernicus EMS vérifié) et détection de changement de cohérence
  • Visualisation Cartographique — Épingles d’anomalie codées par couleur selon le type (orange pour déformation, cyan pour eau, vert pour végétation, rouge pour dommage, violet pour cohérence). Limites des zones d’intérêt tracées sous forme de polygones en pointillés avec un code couleur basé sur la catégorie. Cliquez sur une épingle pour une fenêtre contextuelle détaillée avec magnitude, confiance, solveur, nombre de scènes et lien de provenance.
  • Éditeur de Zones d’Intérêt — Définissez des zones d’intérêt directement depuis la carte. Cliquez sur le bouton « ÉDITER ZI » lorsque la couche SAR est active, puis utilisez l’outil en croix pour cliquer-déposer un centre de zone d’intérêt sur la carte. Définissez le nom, le rayon (1–500 km) et la catégorie. Les zones d’intérêt apparaissent immédiatement sur la carte.
  • Intégration OpenClaw — L’agent IA peut inspecter les détails d’une anomalie SAR (sar_pin_click) et déplacer la carte de l’opérateur vers n’importe quel centre de zone d’intérêt (sar_focus_aoi) — permettant des flux de travail collaboratifs d’analystes.
  • Panneau de Paramètres — Onglet SAR dédié dans Paramètres montrant le statut Mode A/B, l’état d’intégration OpenClaw et permet de révoquer les identifiants Earthdata en un clic.

📻 Radio Logicielle et SIGINT

  • Récepteurs KiwiSDR — 500+ récepteurs SDR publics tracés dans le monde avec des marqueurs ambrés en grappes
  • Accord Radio en Direct — Cliquez sur un nœud KiwiSDR pour ouvrir un accord SDR intégré directement dans le panneau SIGINT
  • Affichage des Métadonnées — Nom du nœud, emplacement, type d’antenne, bandes de fréquences, utilisateurs actifs
  • Radio Maillée Meshtastic — Intégration radio maillée basée sur MQTT avec carte de nœuds, intégrée dans Mesh Chat (NOUVEAU)
  • Intégration APRS — Positionnement radioamateur via le flux TCP APRS-IS (NOUVEAU)
  • Détection de Brouillage GPS — Analyse en temps réel des valeurs NAC-P (Navigation Accuracy Category) des aéronefs
    • Agrégation par grille pour identifier les zones d’interférence
    • Carrés de superposition rouges avec étiquettes de sévérité « GPS JAM XX% »
  • Panneau d’Interception Radio — UI de type scanner avec flux de la police/pompiers OpenMHZ. Cliquez sur n’importe quel système pour écouter en direct. Le mode scan parcourt automatiquement les flux actifs. Écoutez en cliquant sur les communications d’urgence réelles.

📷 Surveillance

  • Maillage CCTV — 22 000+ caméras de trafic en direct provenant de 21 ingesteurs dans 10 pays (États-Unis, Royaume-Uni, Canada, Australie, Autriche, Espagne, Singapour, Pays-Bas lorsque le flux NDW est actif, plus OSM) :
    • 🇬🇧 Transport for London JamCams
    • 🇺🇸 NYC DOT, Austin TX (TxDOT)
    • 🇺🇸 Californie (12 districts Caltrans), État de Washington (WSDOT), Georgia DOT, Illinois DOT, Michigan DOT
    • 🇪🇸 DGT National Espagne (20 villes), Ville de Madrid (357 caméras via KML)
    • 🇦🇹 Webcams autoroutières ASFINAG Autriche
    • 🇸🇬 LTA Singapour
    • 🌍 Windy Webcams
  • Rendu des Flux — Détection et rendu automatiques des flux vidéo, MJPEG, HLS, intégrés, tuiles satellites et images
  • Affichage Cartographique en Grappes — Points verts regroupés avec compteurs, dispersion en zoomant

🔥 Surveillance Environnementale et des Dangers

  • Points Chauds d’Incendie NASA FIRMS (24h) — 5 000+ anomalies thermiques mondiales du satellite NOAA-20 VIIRS, mises à jour à chaque cycle. Icônes en forme de flamme codées par couleur selon la puissance radiative du feu (FRP) : jaune (faible), orange, rouge, rouge foncé (intense). Regroupés à faible zoom avec des marqueurs de grappe en forme de flamme.
  • Volcans — Volcans de l’Holocène du Programme de Volcanisme Mondial Smithsonian tracés dans le monde entier (NOUVEAU)
  • Alertes Météo — Polygones de conditions météorologiques sévères avec indicateurs d’urgence/gravité (NOUVEAU)
  • Qualité de l’Air (PM2.5) — Stations OpenAQ dans le monde avec relevés de particules en temps réel (NOUVEAU)
  • Séismes (24h) — Flux sismique en temps réel USGS avec marqueurs à l’échelle de la magnitude
  • Badge Météo Spatiale — Indicateur d’orage géomagnétique NOAA en direct dans la barre d’état inférieure. Indice Kp codé par couleur : vert (calme), jaune (actif), rouge (tempête G1–G5). Données du flux de l’indice K planétaire SWPC à 1 minute.

🏗️ Surveillance des Infrastructures* Surveillance des pannes Internet — Alertes régionales de connectivité Internet de Georgia Tech IODA. Marqueurs gris dans les régions touchées avec pourcentage de gravité. Utilise uniquement des sources de données fiables (tables de routage BGP, sondage ping actif) — pas de télescope ni de données interpolées.

  • Cartographie des centres de données — Plus de 2 000 centres de données mondiaux tracés à partir d'un jeu de données sélectionné. Marqueurs violets groupés avec icônes de baies de serveurs. Cliquez pour l'opérateur, l'emplacement et le recoupement automatique des pannes Internet par pays.
  • Bases militaires — Base de données mondiale des installations militaires et des sites de missiles (NOUVEAU)
  • Centrales électriques — Plus de 35 000 centrales électriques mondiales provenant de la base de données WRI (NOUVEAU)
  • Câbles sous-marins — Routes mondiales de câbles sous-marins à partir d'un GeoJSON statique dérivé de TeleGeography (frontend/public/data/submarine-cables.json). Superposition de lignes optionnelle.
  • Couche C2 de malwares — Serveurs C2 de botnets (Feodo Tracker) et URL récentes de malwares (URLhaus) provenant d'abuse.ch, actualisées sur le palier lent lorsque la couche est activée.
  • Risque fournisseur SCM — Usines de niveau 1/2 et usines de batteries (TSMC, Samsung, CATL, etc.) recoupées avec les tremblements de terre, les incendies FIRMS et la proximité des conflits GDELT. Alertes dans le panneau SCM ; couche cartographique optionnelle.
  • Flux de menaces cybernétiques — Entrées récentes des vulnérabilités connues exploitées (KEV) de la CISA exposées via /api/cyber-threats et le basculement de couche.
  • Indice de risque par pays — Scores de risque géopolitique statiques avec enrichissement sismique USGS via /api/country-risk.
  • OSINT Telegram — Aperçus web de chaînes publiques (t.me/s/*) à partir de flux configurables guerre/OSINT. Fusion incrémentielle horaire (pas de ré-indexation redondante), notation de risque par mot-clé, alias de lieux cyrilliques/arabes, géocodage par ancre de métro (séparé des centroïdes d'actualités), photo/vidéo en ligne via proxy /api/telegram/media. Clé de couche : telegram_osint.

🌐 Couches et outils supplémentaires

  • Cycle jour/nuit — Superposition du terminateur solaire montrant la lumière/obscurité mondiale
  • Ticker des marchés mondiaux — Indices boursiers en direct (réductible)
  • Outil de mesure — Mesure de distance et d'azimut point à point sur la carte
  • Barre LOCATE — Recherche par coordonnées (31.8, 34.8) ou nom de lieu (Téhéran, Détroit d'Ormuz) pour se rendre directement à n'importe quel emplacement — géocodé via OpenStreetMap Nominatim

Gaza

🤖 Canal de commande IA agentique — OpenClaw et agents compatibles (étendu dans v0.9.7)

ShadowBroker expose un canal de commande IA agentique bidirectionnel — un pont signé et limité par paliers qui donne à tout agent IA compatible un accès complet en lecture/écriture à la plateforme de renseignement. OpenClaw est l'agent de référence, mais le canal est un protocole ouvert : tout agent piloté par LLM qui signe les requêtes avec HMAC-SHA256 (Claude Code, GPT, LangChain, clients Python/TypeScript personnalisés, ou votre propre intégration) peut se connecter en tant qu'analyste voyant les mêmes données que l'opérateur et pouvant agir sur la carte. ShadowBroker n'inclut pas de LLM, d'environnement d'exécution d'agent ou de poids de modèle — il fournit la surface ; vous apportez l'agent.

v0.9.7 transforme ShadowBroker d'un tableau de bord qu'un humain regarde en une surface de renseignement sur laquelle tout agent peut agir.

Transport du canal (NOUVEAU dans v0.9.7) :

  • Canal de commande uniquePOST /api/ai/channel/command accepte {cmd, args} et distribue à tout outil enregistré.
  • Exécution concurrente par lotsPOST /api/ai/channel/batch accepte jusqu'à 20 commandes dans une seule requête. Le backend les exécute de manière concurrente et renvoie une carte de résultats fan-out. Réduit la latence de l'agent d'un ordre de grandeur par rapport aux appels séquentiels.
  • Accès limité par paliersOPENCLAW_ACCESS_TIER contrôle les commandes que l'agent peut appeler : restricted expose l'ensemble en lecture seule, full ajoute les écritures et l'injection. Le point de terminaison de découverte renvoie available_commands afin que l'agent puisse inspecter ses propres capacités.
  • Signature HMAC-SHA256 — Chaque commande est signée HMAC-SHA256(secret, METHOD|path|timestamp|nonce|sha256(body)) avec protection anti-rejeu par timestamp + nonce et intégrité de la requête. Prend en charge le mode local (sans configuration) et le mode distant (agent sur une machine différente / VPS).

Capacités :

  • Accès complet à la télémétrie — L'agent interroge les 40+ couches de données : vols, navires, satellites, SIGINT, événements de conflit, tremblements de terre, incendies, eaux usées, OSINT Telegram, malwares/C2, menaces cybernétiques CISA KEV, superpositions SCM, activité de pêche (GFW), marchés prédictifs, etc. Les points de terminaison des paliers rapide et lent renvoient des données enrichies avec coordonnées géographiques, horodatages et attribution de source.
  • Recherche compacte (préférée aux vidages complets)get_summaryget_layer_slice avec since_layer_versions par couche (la poussée SSE layer_changed indique exactement à l'agent quelles couches ont été mises à jour). search_telemetry est l'index de mots-clés inter-couches de type Google. search_news couvre les actualités, GDELT, CrowdThreat, LiveUAMap, les lignes de front et les messages Telegram. entities_near, brief_area, find_flights/find_ships/find_entity et correlate_entity répondent à des questions ciblées sans extractions de plusieurs mégaoctets.
  • Boîte à outils de reconnaissance sur le canalosint_lookup exécute les mêmes backends protégés par SSRF que le panneau Recon (ip, dns, whois, certs, bgp, sanctions, cve, mac, github, leaks, threats, sweep_init). entity_expand construit des graphes de relations Wikidata + OFAC. osint_sweep exécute la découverte de sous-réseaux Shodan InternetDB (palier full). Alias de couches : telegram, malware/botnet, cyber/cisa/kev, scm/suppliers, gfw/fishing.
  • Épingles de renseignement IA — Placez des marqueurs d'investigation codés par couleur directement sur la carte de l'opérateur. 14 catégories d'épingles (menace, anomalie, militaire, maritime, aviation, SIGINT, infrastructure, etc.) avec scores de confiance, expiration TTL, URL sources et placement par lots jusqu'à 100 épingles à la fois.
  • Contrôle de la carte — Déplacez la vue de la carte de l'opérateur vers n'importe quelle coordonnée, déclenchez des recherches d'imagerie satellite et ouvrez des dossiers de région. L'agent peut diriger l'attention de l'opérateur vers des emplacements spécifiques en temps réel.
  • Changement de sol SAR — Interrogez les flux d'anomalies SAR, inspectez les détails des épingles, gérez les AOI et déplacez la carte pour surveiller les zones. L'agent peut surveiller la déformation du sol, l'étendue des inondations ou les dommages et promouvoir les anomalies en épingles.
  • Injection de couche native — Poussez des données personnalisées directement dans les couches natives de ShadowBroker (caméras CCTV, navires, nœuds SIGINT, bases militaires, etc.) afin que les sources découvertes par l'agent soient rendues aux côtés des flux réels.
  • Participation au maillage Wormhole — L'agent peut rejoindre l'InfoNet décentralisé, poster des messages signés, rejoindre des canaux de passerelle chiffrés, envoyer/recevoir des messages directs chiffrés et interagir avec la radio Meshtastic et les Dead Drops — fonctionnant comme un pair de maillage complet.
  • Participation à Sovereign Shell (v0.9.7) — Déposer des pétitions, signer et voter sur des changements de gouvernance, miser sur des résolutions et des litiges, signaler la préparation Heavy-Node pour les mises à niveau — le tout par programmation, le tout limité par palier et HMAC. Les agents deviennent des participants de premier ordre dans l'économie de renseignement décentralisée.
  • Géocodage et scans de proximité — Résolvez les noms de lieux en coordonnées, puis scannez toutes les couches dans un rayon pour un résumé complet de proximité.
  • Actualités et GDELT près d'un emplacement — Extrayez les événements de conflit GDELT et les articles d'actualités agrégés près de n'importe quelle coordonnée pour une connaissance situationnelle régionale.
  • Livraison d'alertes — Envoyez des briefs de renseignement, des avertissements et des notifications de menace personnalisés à des webhooks Discord et des canaux Telegram.
  • Rapports de renseignement — Générez des rapports structurés avec des statistiques récapitulatives, les principaux vols militaires, corrélations, activité sismique, comptes SIGINT et inventaires d'épingles.
  • Auditable — Chaque appel de canal est enregistré ; l'opérateur peut inspecter ce que l'agent a fait.

Connecter un agent : Ouvrez le panneau AI Intel dans la barre latérale gauche, cliquez sur Connect Agent, et copiez le secret HMAC. À partir de là, pointez n'importe quel agent compatible vers le canal — pour OpenClaw, importez ShadowBrokerClient depuis openclaw-skills/shadowbroker/sb_query.py (voir SKILL.md pour des exemples) ; pour tout autre agent, utilisez le même contrat HMAC documenté ci-dessus (timestamp + nonce + digest du corps, limité par palier). Découverte : GET /api/ai/tools et GET /api/ai/capabilities. Le canal est le protocole, pas l'agent.

Docker Compose + agents distants : L'interface utilisateur du tableau de bord communique avec le backend via le pont privé de Docker (approuvé automatiquement). Un agent OpenClaw s'exécutant sur l'hôte (en dehors du conteneur) atteint http://localhost:8000 depuis l'adresse IP de la passerelle Docker — HMAC est requis là. Dans AI Intel → Connect Agent, cliquez sur Bootstrap puis Reveal, copiez SHADOWBROKER_HMAC_SECRET dans votre environnement d'agent, et redémarrez le backend une fois pour que data/openclaw.env sur le volume backend_data soit chargé. Test de fumée avec :```bash export SHADOWBROKER_URL=http://127.0.0.1:8000 export SHADOWBROKER_HMAC_SECRET= python openclaw-skills/shadowbroker/verify_hmac.py

Utilisez le port du backend (`:8000`), pas le port du tableau de bord Next.js (`:3000`). Les signataires personnalisés doivent hacher exactement les octets POST : `json.dumps(payload, separators=(",", ":"), sort_keys=True)`.

### ⏱️ Machine à remonter le temps — Lecture des instantanés (NOUVEAU dans v0.9.7)

Un transport de type média pour l'ensemble du flux de télémétrie. Traitez la carte en direct comme un enregistrement qui peut être parcouru, mis en pause et rejoué.

* **Basculement Live ↔ Snapshot** — Le passage en mode instantané met en pause la boucle de sondage globale instantanément ; le retour en mode Live invalide les ETags et force l'actualisation des niveaux rapide et lent afin que le tableau de bord rattrape son retard sans scintillement d'image obsolète.
* **Index horaire** — Chaque instantané capturé est indexé par son créneau horaire avec `count`, `latest_id`, `latest_ts` et la liste complète `snapshot_ids`. Accédez directement à n'importe quel horodatage capturé depuis le curseur de la chronologie.
* **Interpolation de trames** — Les entités en mouvement (avions, navires, satellites, vols militaires) s'interpolent en douceur entre les trames enregistrées pendant la lecture, de sorte que le mouvement reste continu même lorsque les instantanés sont rares.
* **Vitesse de lecture variable** — Avance pas à pas, lecture, avance rapide et retour arrière dans la télémétrie enregistrée à une vitesse réglable.
* **Conscient du profil** — Chaque instantané enregistre le profil de confidentialité qui était actif lors de sa capture, de sorte que la lecture soit fidèle à ce qu'un opérateur sur ce profil aurait vu.
* **Côté opérateur, pas côté serveur** — Les instantanés sont stockés localement dans le backend ; aucun tiers ne voit jamais la chronologie de lecture.

### 📦 Panneau des clés API — Priorité au chemin, lecture seule (NOUVEAU dans v0.9.7)

Paramètres → Clés API est désormais un registre en lecture seule. Les valeurs des clés n'atteignent jamais le processus du navigateur — pas même un préfixe obscurci. Le panneau affiche :

* Le chemin absolu vers le fichier `.env` du backend tel que résolu par `Path(__file__).resolve()` — fonctionne sur tous les OS, tous les lecteurs, tous les emplacements d'installation (Linux `/home/...`, macOS `/Users/...`, Windows sur n'importe quel lecteur, conteneurs Docker, VMs cloud).
* Indicateurs `[exists]` / `[will be created on first save]` / `[NOT WRITABLE — edit by hand]` sur le chemin lui-même.
* Le chemin vers le modèle `.env.example` afin que les utilisateurs puissent le copier et saisir leurs clés.
* Un badge binaire `CONFIGURED` / `NOT CONFIGURED` par clé, plus une ligne env copiable (par ex. `OPENSKY_CLIENT_ID=YOUR_VALUE`) que l'utilisateur peut placer manuellement dans le fichier.

Les identifiants de l'API OpenSky sont désormais une exigence **critical-warn** de l'environnement : la vérification de l'environnement au démarrage signale l'absence d'identifiants OAuth2 OpenSky avec un avertissement fort, et la fenêtre modale du journal des modifications renvoie directement à la page d'inscription gratuite. Sans eux, la couche des vols se rabat sur une couverture ADS-B uniquement avec des lacunes importantes en Afrique, en Asie et en Amérique latine.

</details>

---

<details>
<summary>🏗️ Architecture</summary>

ShadowBroker v0.9.7 est composé de trois plans empilés verticalement — l'**Operator UI**, le **Backend Service Plane** et le **Decentralized Layer (InfoNet)** — ainsi que deux ponts transversaux (la **Time Machine** et le **Agentic AI Channel**, qui est le protocole par lequel OpenClaw et tout autre agent compatible se connecte) et une crate Rust **Privacy Core** qui soutient à la fois le maillage hérité et les futurs travaux de pièce protégée / DEX.```
╔═════════════════════════════════════════════════════════════════════════════╗
║                       OPERATOR UI  (Next.js + MapLibre)                     ║
║                                                                             ║
║  ┌────────────────┐  ┌──────────┐  ┌────────────────┐  ┌────────────────┐   ║
║  │ MapLibre GL    │  │ NewsFeed │  │ Sovereign Shell│  │   Mesh Chat    │   ║
║  │  WebGL render  │  │  SIGINT  │  │  Petitions /   │  │  + Mesh Term.  │   ║
║  │  + clusters    │  │  GDELT   │  │  Upgrades /    │  │  (Infonet /    │   ║
║  │                │  │  Threat  │  │  Disputes /    │  │   Mesh /       │   ║
║  │                │  │          │  │  Gates /       │  │   Dead Drop)   │   ║
║  │                │  │          │  │  Bootstrap /   │  │                │   ║
║  │                │  │          │  │  Function Keys │  │                │   ║
║  └──────┬─────────┘  └────┬─────┘  └────────┬───────┘  └────────┬───────┘   ║
║         │                 │                 │                   │           ║
║  ┌──────┴─────────────────┴─────────────────┴───────────────────┴───────┐   ║
║  │  Time Machine ◀── snapshot playback ── snapshotMode toggle ──▶ Live │   ║
║  │  hourly index │ frame interpolation │ profile-aware │ per-tier ETag  │   ║
║  └──────────────────────────────────┬───────────────────────────────────┘   ║
║                                     │ REST  +  /api/[...path] proxy         ║
╠═════════════════════════════════════╪═══════════════════════════════════════╣
║                       BACKEND SERVICE PLANE  (FastAPI)                      ║
║                                     │                                       ║
║  ┌──────────────────────────────────┴────────────────────────────────────┐  ║
║  │              Data Fetcher  (APScheduler — fast / slow tiers)          │  ║
║  │                                                                       │  ║
║  │  ┌───────────┬───────────┬───────────┬───────────┬───────────┐        │  ║
║  │  │  OpenSky* │ adsb.lol  │ CelesTrak │   USGS    │   AIS WS  │        │  ║
║  │  │  Flights  │ Military  │   Sats    │  Quakes   │   Ships   │        │  ║
║  │  ├───────────┼───────────┼───────────┼───────────┼───────────┤        │  ║
║  │  │  Carrier  │   GDELT   │ CCTV (12) │ DeepState │   NASA    │        │  ║
║  │  │  Tracker  │ Conflict  │  Cameras  │ Frontline │   FIRMS   │        │  ║
║  │  ├───────────┼───────────┼───────────┼───────────┼───────────┤        │  ║
║  │  │   GPS     │  KiwiSDR  │  Shodan   │  Amtrak   │  SatNOGS  │        │  ║
║  │  │  Jamming  │   Radios  │  Devices  │ DigiTraf  │  TinyGS   │        │  ║
║  │  ├───────────┼───────────┼───────────┼───────────┼───────────┤        │  ║
║  │  │ Volcanoes │  Weather  │  Fishing  │ Mil Bases │   IODA    │        │  ║
║  │  │  Air Qual │  Alerts   │  Activity │ PwrPlants │  Outages  │        │  ║
║  │  ├───────────┼───────────┼───────────┼───────────┼───────────┤        │  ║
║  │  │ Sentinel  │   MODIS   │   VIIRS   │   Data    │ Meshtastic│        │  ║
║  │  │  Hub/STAC │   Terra   │ Nightlts  │  Centers  │   APRS    │        │  ║
║  │  ├───────────┴───────────┴───────────┴───────────┴───────────┤        │  ║
║  │  │  SAR (NEW v0.9.7)                                         │        │  ║
║  │  │   Mode A: ASF Search catalog (free, no account)           │        │  ║
║  │  │   Mode B: NASA OPERA / Copernicus EGMS / GFM / EMS /      │        │  ║
║  │  │           UNOSAT  ground-change anomalies (opt-in)        │        │  ║
║  │  └───────────────────────────────────────────────────────────┘        │  ║
║  │   * OpenSky: REQUIRED for global flight coverage                      │  ║
║  └───────────────────────────────────────────────────────────────────────┘  ║
║                                     │                                       ║
║  ┌──────────────────────────────────┴────────────────────────────────────┐  ║
║  │                   Snapshot Store  (Time Machine source)               │  ║
║  │   Hourly index  │  per-snapshot layer manifest  │  profile metadata   │  ║
║  └───────────────────────────────────────────────────────────────────────┘  ║
║                                                                             ║
║  ┌───────────────────────────────────────────────────────────────────────┐  ║
║  │   Agentic AI Channel  (HMAC-SHA256, tier-gated  —  OpenClaw + others) │  ║
║  │                                                                       │  ║
║  │   POST /api/ai/channel/command   →  one tool call                     │  ║
║  │   POST /api/ai/channel/batch     →  up to 20 concurrent tool calls    │  ║
║  │                                                                       │  ║
║  │   Tier:   restricted (read-only)   │   full (read + write + inject)   │  ║
║  │   Auth:   X-SB-Timestamp + X-SB-Nonce + X-SB-Signature                │  ║
║  │   Sig  =  HMAC-SHA256(secret, METHOD|path|ts|nonce|sha256(body))      │  ║
║  └───────────────────────────────────────────────────────────────────────┘  ║
╠═════════════════════════════════════════════════════════════════════════════╣
║                  DECENTRALIZED LAYER  (InfoNet Testnet — signed events)     ║
║                                                                             ║
║  ┌────────────────────────────┐    ┌──────────────────────────────────┐     ║
║  │    Mesh Hashchain          │    │   Sovereign Shell Governance     │     ║
║  │                            │    │                                  │     ║
║  │  Ed25519 signed events     │    │  Petitions  (DSL: UPDATE_PARAM,  │     ║
║  │  Public-key binding        │    │              ENABLE_FEATURE …)   │     ║
║  │  Replay / sequence guard   │    │  Upgrade-Hash voting (80% / 40%  │     ║
║  │  Two-tier finality         │    │             quorum / 67% Heavy)  │     ║
║  │   ├ Tier 1 (CRDT, fast)    │    │  Resolution & Dispute markets    │     ║
║  │   └ Tier 2 (epoch finality)│    │  Gate suspend / shutdown / appeal│     ║
║  │  Identity rotation         │    │  Bootstrap eligible-node-1-vote  │     ║
║  │  Constitutional invariants │    │   (Argon2id PoW, Heavy-Node only)│     ║
║  │  (MappingProxyType)        │    │  Function Keys (5 of 6 pieces)   │     ║
║  └─────────────┬──────────────┘    └─────────────┬────────────────────┘     ║
║                │                                 │                          ║
║                └──────────────┬──────────────────┘                          ║
║                               │                                             ║
║  ┌────────────────────────────┴──────────────────────────────────────┐      ║
║  │            Wormhole / InfoNet Relay  (transport layer)            │      ║
║  │   Gate personas │ canonical signing │ Dead Drop epoch mailboxes   │      ║
║  └───────────────────────────────────────────────────────────────────┘      ║
╠═════════════════════════════════════════════════════════════════════════════╣
║              PRIVACY CORE  (Rust crate — locked Protocol contracts)         ║
║                                                                             ║
║   privacy-core/  ─►  Argon2id │ Ed25519/X25519 │ AESGCM │ HKDF              ║
║                      Ring sigs* │ Stealth addrs* │ Pedersen* │ Bulletproofs*║
║                      Blind-sig issuance* (RSA / BBS+ / U-Prove / Idemix)    ║
║                                                                             ║
║   * = locked Protocol contract; cryptographic primitive lands Sprint 11+    ║
╚═════════════════════════════════════════════════════════════════════════════╝

   Distribution
   ────────────
     GitHub (primary):  ghcr.io/bigbodycobain/shadowbroker-{backend,frontend}
     GitLab (mirror):   registry.gitlab.com/bigbodycobain/shadowbroker/{backend,frontend}
     Multi-arch:        linux/amd64  +  linux/arm64  (Raspberry Pi 5 supported)
     Desktop:           Tauri shell  →  packaged backend-runtime  +  Next.js frontend

📊 Sources de données et API
SourceDonnéesFréquence de mise à jourClé API requise
OpenSky NetworkVols commerciaux et privés~60sOui
adsb.lolAéronefs militaires~60sNon
aisstream.ioPositions des navires AISWebSocket en temps réelOui
CelesTrakPositions orbitales des satellites (TLE + SGP4)~60sNon
USGS EarthquakeÉvénements sismiques mondiaux~60sNon
GDELT ProjectÉvénements de conflits mondiaux~6hNon
DeepState MapLigne de front ukrainienne~30 minNon
ShodanRecherche d'appareils connectés à InternetÀ la demandeOui
OpenSanctionsIndex des sanctions OFAC SDN (reconnaissance + graphe d'entités)Cache 24hNon
abuse.ch Feodo + URLhausURL de C2 / distribution de logiciels malveillants~5 min (couche optionnelle)Non
CISA KEVCVE exploitées connues~5 min (couche optionnelle)Non
ip-api.comGéolocalisation IP (reconnaissance, graphe d'entités)À la demandeNon
Google Public DNSRequêtes DNS-over-HTTPS (reconnaissance)À la demandeNon
RDAP.orgDonnées d'enregistrement de domaine (reconnaissance)À la demandeNon
crt.shTransparence des certificats (reconnaissance)À la demandeNon
bgpview.ioRoutage BGP/ASN (reconnaissance)À la demandeNon
TeleGeography (statique)Routes de câbles sous-marinsStatiqueNon
ASFINAGWebcams autoroutières autrichiennes~10 minNon
AmtrakPositions des trains américains~60sNon
DigiTrafficPositions des trains européens~60sNon
Global Fishing WatchÉvénements d'activité des navires de pêche~1hOui (GFW_API_TOKEN)
Aperçus publics TelegramMessages des chaînes guerre/OSINT (telegram_osint)~1hNon (facultatif TELEGRAM_OSINT_CHANNELS)
Transport for London, NYC DOT, TxDOTCaméras de vidéosurveillance (Royaume-Uni, États-Unis)~10 minNon
Caltrans, WSDOT, GDOT, IDOT, MDOTCaméras de vidéosurveillance (5 États américains)~10 minNon
DGT Espagne, Ville de MadridCaméras de vidéosurveillance (Espagne)~10 minNon
LTA SingapourCaméras de circulation à Singapour~10 minOui
Windy WebcamsWebcams mondiales~10 minNon
SatNOGSStations au sol satellites amateurs~30 minNon
TinyGSStations au sol satellites LoRa~30 minNon
Meshtastic MQTTPositions des nœuds radio maillésTemps réelNon
APRS-ISPositions radio amateurTCP en temps réelNon
KiwiSDREmplacements des récepteurs SDR publics~30 minNon
OpenMHZFlux scanners police/pompiersTemps réelNon
Smithsonian GVPVolcans de l'Holocène dans le mondeStatique (en cache)Non
OpenAQStations de qualité de l'air PM2.5~120sNon
NOAA / NWSAlertes météorologiques sévères et polygones~120sNon
WRI Global Power Plant DBPlus de 35 000 centrales électriquesStatique (en cache)Non
Ensembles de données des bases militairesInstallations militaires mondialesStatique (en cache)Non
NASA FIRMSPoints chauds incendie/thermiques NOAA-20 VIIRS~120sNon
NOAA SWPCIndice Kp météo spatiale et événements solaires~120sNon
IODA (Georgia Tech)Alertes de pannes internet régionales~120sNon
DC Map (GitHub)Emplacements des centres de données mondiauxStatique (cache 7j)Non
NASA GIBSImagerie satellite quotidienne MODIS TerraQuotidien (délai 24-48h)Non
Esri World ImageryFond de carte satellite haute résolutionStatique (mis à jour périodiquement)Non
MS Planetary ComputerScènes Sentinel-2 L2A (clic droit)À la demandeNon
Copernicus CDSEImagerie Sentinel Hub (API Process)À la demandeOui (gratuit)
Lumières nocturnes VIIRSDétection de changement de luminosité nocturneStatiqueNon
RestCountriesDonnées de profil des paysÀ la demande (cache 24h)Non
Wikidata SPARQLDonnées des chefs d'ÉtatÀ la demande (cache 24h)Non
API WikipediaRésumés de lieux et images d'aéronefsÀ la demande (en cache)Non
OSM NominatimGéocodage de noms de lieux (barre LOCATE)À la demandeNon
Tuiles de fond CARTOTuiles de carte sombreContinuNon

Confidentialité et audit des données sortantes (#348–#366) : Chaque installation auto-hébergée utilise sa propre adresse IP backend et un identifiant User-Agent par installation. Voir docs/OUTBOUND_DATA.md pour savoir ce qui contacte des tiers, les contrôles optionnels/env, et les compromis acceptés (Referer des caméras, CDN de fond de carte, LiveUAMap, etc.).


🚀 Pour commencer

🐳 Configuration Docker (Recommandée pour l'auto-hébergement)

Le dépôt inclut un fichier docker-compose.yml qui télécharge des images pré-construites depuis GitHub Container Registry.

```bash git clone https://github.com/BigBodyCobain/Shadowbroker.git cd Shadowbroker # Add your API keys in a repo-root .env file (optional — see Environment Variables below) docker compose pull docker compose up -d ``` Ouvrez `http://localhost:3000` pour voir le tableau de bord.

Déploiement public ou sur un LAN ? Aucune configuration nécessaire pour la plupart des configurations. Le frontend proxyfie tous les appels API via le serveur Next.js vers BACKEND_URL, qui par défaut est http://backend:8000 (réseau interne Docker). Le port hôte 8000 n'est publié que pour l'accès API/debug local (127.0.0.1:8000 dans docker-compose.yml). S'il entre en conflit avec un autre service, définissez BACKEND_PORT=8001 dans .env ; laissez BACKEND_URL à http://backend:8000 car c'est le port interne Docker.

Exécution du backend en dehors de Docker (cd backend && python main.py) : le serveur de développement se lie uniquement en boucle locale (127.0.0.1:8000) donc les autres machines sur votre LAN ne peuvent pas atteindre les routes admin/local-trust avec un ADMIN_KEY vide. Définissez SHADOWBROKER_DEV_BIND_ALL=true dans .env uniquement lorsque vous avez délibérément besoin de 0.0.0.0 et utilisez un ADMIN_KEY fort pour tout appelant non local. La limite de mémoire du backend est contrôlée par BACKEND_MEMORY_LIMIT et par défaut est de 4G. Si Docker signale des événements OOM, le backend redémarrera et les couches lentes peuvent sembler vides jusqu'à ce qu'elles se repeuplent.

Si votre backend s'exécute sur un hôte ou un port différent, définissez BACKEND_URL au moment de l'exécution — aucune reconstruction nécessaire :

# Linux / macOS
BACKEND_URL=http://myserver.com:9096 docker compose up -d

# Podman (via compose.sh wrapper)
BACKEND_URL=http://192.168.1.50:9096 ./compose.sh up -d

# Windows (PowerShell)
$env:BACKEND_URL="http://myserver.com:9096"; docker compose up -d

# Or add to a .env file next to docker-compose.yml:
# BACKEND_URL=http://myserver.com:9096

Utilisateurs de Podman : Ne passez pas l'URL GitHub à podman compose pull ; clonez d'abord le dépôt, cd Shadowbroker, puis exécutez compose à partir de ce dossier. podman compose nécessite également un fournisseur Compose. Si Podman signale looking up compose provider failed, installez-en un :```bash

Linux / macOS / WSL

python3 -m pip install --user podman-compose podman-compose pull podman-compose up -d

Veuillez fournir le contenu Markdown à traduire.```powershell
# Windows PowerShell
py -m pip install --user podman-compose
podman-compose pull
podman-compose up -d

Si vous êtes dans un shell compatible bash, le wrapper inclus peut détecter automatiquement Docker ou Podman :```bash ./compose.sh --engine podman pull ./compose.sh --engine podman up -d

</details>

---

<details>
<summary>🐋 Déploiement autonome (Portainer, Uncloud, NAS, etc.)</summary>

Pas besoin de cloner le dépôt. Utilisez les images pré-construites depuis le GitHub Container Registry. Les images du registre GitLab peuvent être utilisées comme miroir si vous les y publiez.

Créez un fichier `docker-compose.yml` avec le contenu suivant et déployez-le directement — collez-le dans l'éditeur de pile de Portainer, `uncloud deploy`, ou tout hôte Docker :```yaml
## Image registry — uncomment ONE line per service:
##   GitHub  (primary): ghcr.io/bigbodycobain/shadowbroker-backend:latest
##   GitLab  (mirror):  registry.gitlab.com/bigbodycobain/shadowbroker/backend:latest


services:
  backend:
    image: ghcr.io/bigbodycobain/shadowbroker-backend:latest
    # image: registry.gitlab.com/bigbodycobain/shadowbroker/backend:latest
    container_name: shadowbroker-backend
    ports:
      - "${BACKEND_PORT:-8000}:8000"
    environment:
      - AIS_API_KEY=your_aisstream_key          # Required — get one free at aisstream.io
      - OPENSKY_CLIENT_ID=                       # Optional — higher flight data rate limits
      - OPENSKY_CLIENT_SECRET=                   # Optional — paired with Client ID above
      - LTA_ACCOUNT_KEY=                         # Optional — Singapore CCTV cameras
      - SHODAN_API_KEY=                          # Optional — Shodan device search overlay
      - SH_CLIENT_ID=                            # Optional — Sentinel Hub satellite imagery
      - SH_CLIENT_SECRET=                        # Optional — paired with Sentinel Hub ID
      - CORS_ORIGINS=                            # Optional — comma-separated allowed origins
    volumes:
      - backend_data:/app/data
    restart: unless-stopped

  frontend:
    image: ghcr.io/bigbodycobain/shadowbroker-frontend:latest
    # image: registry.gitlab.com/bigbodycobain/shadowbroker/frontend:latest
    container_name: shadowbroker-frontend
    ports:
      - "3000:3000"
    environment:
      - BACKEND_URL=http://backend:8000   # Docker internal networking — no rebuild needed
    depends_on:
      - backend
    restart: unless-stopped

volumes:
  backend_data:

Comment ça fonctionne : Le conteneur frontal proxye toutes les requêtes /api/* via le serveur Next.js vers BACKEND_URL en utilisant le réseau interne de Docker. Le navigateur ne communique jamais qu'avec le port 3000. Le port hôte du backend est réservé à l'accès API/local de débogage et peut être modifié avec BACKEND_PORT=8001 sans changer BACKEND_URL.

BACKEND_URL est une simple variable d'environnement d'exécution (pas une variable NEXT_PUBLIC_* de construction), vous pouvez donc la modifier dans Portainer, Uncloud ou n'importe quel éditeur de compose sans reconstruire l'image. Définissez-la sur l'adresse à laquelle votre backend est accessible depuis l'intérieur du réseau Docker (par exemple http://backend:8000, http://192.168.1.50:8000).


📦 Démarrage rapide (aucun code requis)

Si vous souhaitez simplement exécuter le tableau de bord sans utiliser de commandes terminal :

  1. Allez dans l'onglet Releases sur le côté droit de cette page du dépôt.
  2. Téléchargez le dernier fichier .zip de la version.
  3. Extrayez le dossier sur votre ordinateur.
  4. Windows : Double-cliquez sur start.bat. Mac/Linux : Ouvrez le terminal, tapez chmod +x start.sh, dos2unix start.sh, puis exécutez ./start.sh.
  5. Tout sera automatiquement installé et le tableau de bord se lancera !

Remarques sur le lanceur local :

  • start.bat / start.sh exécutent l'application sans Docker — ils installent les dépendances et démarrent les deux serveurs directement.
  • Si les points de terminaison d'identité Wormhole ou de contact DM échouent après une mise à niveau, consultez le dossier docs/mesh/ pour le dépannage.
  • Pour le témoin racine DM, la transparence et le déploiement de la surveillance des opérateurs, commencez par docs/mesh/wormhole-dm-root-operations-runbook.md.
  • Pour des exemples d'actifs de pont d'opérations racine DM, consultez également scripts/mesh/poll-dm-root-health-alerts.mjs, scripts/mesh/export-dm-root-health-prometheus.mjs, scripts/mesh/publish-external-root-witness-package.mjs, scripts/mesh/smoke-external-root-witness-flow.mjs, scripts/mesh/smoke-root-transparency-publication-flow.mjs, scripts/mesh/smoke-dm-root-deployment-flow.mjs, scripts/mesh/sync-dm-root-external-assurance.mjs et docs/mesh/examples/.

💻 Configuration développeur

Si vous souhaitez modifier le code ou exécuter à partir des sources :

Prérequis

  • Node.js 18+ et npmnodejs.org
  • Python 3.10, 3.11 ou 3.12 avec pippython.org (cochez « Ajouter au PATH » lors de l'installation)
    • ⚠️ Python 3.13+ peut présenter des problèmes de compatibilité avec certaines dépendances. La version 3.11 ou 3.12 est recommandée.
  • Clés API pour : aisstream.io (obligatoire), et optionnellement opensky-network.org (OAuth2), lta.gov.sg

Installation```bash

Clone the repository

git clone https://github.com/BigBodyCobain/Shadowbroker.git cd Shadowbroker

Backend setup

cd backend python -m venv venv venv\Scripts\activate # Windows

source venv/bin/activate # macOS/Linux

pip install .

Optional helper scripts (creates venv + installs dev deps)

Windows PowerShell

.\backend\scripts\setup-venv.ps1

macOS/Linux

./backend/scripts/setup-venv.sh

Optional env check (prints warnings for missing keys)

Windows PowerShell

.\backend\scripts\check-env.ps1

macOS/Linux

./backend/scripts/check-env.sh

Create .env with your API keys

echo "AIS_API_KEY=your_aisstream_key" >> .env echo "OPENSKY_CLIENT_ID=your_opensky_client_id" >> .env echo "OPENSKY_CLIENT_SECRET=your_opensky_secret" >> .env

Frontend setup

cd ../frontend npm ci

### Exécution```bash
# From the frontend directory — starts both frontend & backend concurrently
npm run dev
  • Next.js frontend sur http://localhost:3000
  • FastAPI backend sur http://localhost:8000

Pre-commit (Optionnel)

Si vous utilisez pre-commit, installez les hooks une fois depuis la racine du dépôt :```bash pre-commit install

### Récepteur AIS local (Optionnel)

Vous pouvez injecter vos propres données AIS de navires dans ShadowBroker à l'aide d'un dongle RTL-SDR et d'[AIS-catcher](https://github.com/jvde-github/AIS-catcher), un décodeur AIS open-source. Cela vous donne une couverture en temps réel des navires dans votre zone locale — aucune clé API nécessaire.

1. Branchez un dongle RTL-SDR
2. Installez AIS-catcher ([releases](https://github.com/jvde-github/AIS-catcher/releases)) ou utilisez l'image Docker :   ```bash
   docker run -d --device /dev/bus/usb \
     ghcr.io/jvde-github/ais-catcher -H http://host.docker.internal:4000/api/ais/feed interval 10
  1. Ou exécuter nativement: ```bash AIS-catcher -H http://localhost:4000/api/ais/feed interval 10

AIS-catcher décode les signaux radio VHF sur 161.975 MHz et 162.025 MHz et envoie les données de navires décodées à ShadowBroker toutes les 10 secondes. Les navires détectés par votre antenne SDR apparaissent aux côtés du flux AIS mondial.

Docker (ARM/Raspberry Pi) : Consultez docker-shipfeeder pour une image Docker prête pour la production optimisée pour ARM.

Remarque : La portée AIS dépend de votre antenne — généralement 20 à 40 milles marins avec une configuration de base, 60+ nm avec une antenne VHF marine en hauteur.


🎛️ Couches de données

Les 41 couches sont activables/désactivables indépendamment depuis le panneau de gauche :

CouchePar défautDescription
Vols commerciaux✅ ONCompagnies aériennes, fret, aviation générale
Vols privés✅ ONAéronefs privés non commerciaux
Jets privés✅ ONJets d'affaires haut de gamme avec données propriétaires
Vols militaires✅ ONAéronefs militaires et gouvernementaux
Aéronefs suivis✅ ONListe de surveillance d'intérêt spécial
Brouillage GPS✅ ONZones de dégradation NAC-P
Porte-avions / Mil / Cargo✅ ONPorte-avions, cargos, pétroliers
Navires civils✅ ONYachts, bateaux de pêche, de plaisance
Croisière / Passagers✅ ONNavires de croisière et ferries
Yachts suivis✅ ONSuperyachts de milliardaires et oligarques
Activité de pêche✅ ONÉvénements de navires Global Fishing Watch
Trains✅ ONPositions Amtrak + trains européens
Satellites✅ ONActifs orbitaux par type de mission
SatNOGS✅ ONStations au sol satellites amateurs
TinyGS✅ ONStations au sol satellites LoRa
Tremblements de terre (24h)✅ ONÉvénements sismiques USGS
Points chauds d'incendie (24h)✅ ONAnomalies thermiques VIIRS NASA FIRMS
Volcans✅ ONVolcans de l'Holocène Smithsonian
Alertes météo✅ ONPolygones de conditions météorologiques sévères
Qualité de l'air (PM2.5)✅ ONStations OpenAQ dans le monde
Ligne de front Ukraine✅ ONPositions en direct du front de guerre
Alertes aériennes Ukraine✅ ONAlertes de raids aériens régionaux
Incidents mondiaux✅ ONÉvénements de conflit GDELT
Réseau de caméras✅ ONPlus de 11 000 caméras issues de 13 sources, 6 pays
Pannes Internet✅ ONAlertes de connectivité régionale IODA
Centres de données✅ ONEmplacements mondiaux de centres de données (2 000+)
Bases militaires✅ ONInstallations militaires mondiales
Récepteurs KiwiSDR✅ ONRécepteurs radio SDR publics
Nœuds Meshtastic✅ ONPositions des nœuds radio maillés
APRS✅ ONPositionnement radioamateur
Scanners✅ ONFlux de scanners police/pompiers
Cycle jour/nuit✅ ONSuperposition du terminateur solaire
MODIS Terra (quotidien)❌ OFFImagerie satellite quotidienne NASA GIBS
Satellite haute résolution❌ OFFImagerie satellite sub-métrique Esri
Sentinel Hub❌ OFFAPI de processus Copernicus CDSE
Lumières nocturnes VIIRS❌ OFFDétection de changements de lumières nocturnes
Centrales électriques❌ OFFPlus de 35 000 centrales électriques mondiales
Superposition Shodan❌ OFFRésultats de recherche de périphériques Internet
Tendances du fret routier❌ OFFTendances de mouvement de camions Sentinel-2 sur les grandes autoroutes (Analyser ici)
Câbles sous-marins❌ OFFRoutes mondiales de câbles sous-marins (GeoJSON statique)
C2 de malwares❌ OFFPoints de menace Feodo + URLhaus d'abuse.ch
Fournisseurs SCM❌ OFFMarqueurs de risque de chaîne d'approvisionnement de niveau 1/2 + alertes panneau
Menaces cyber❌ OFFEntrées récentes CISA KEV (statistiques dans la charge utile lente)
OSINT Telegram✅ ONCanaux Telegram publics de guerre/OSINT — collecte horaire, épingles géolocalisées
SAR✅ ONCatalogue radar à synthèse d'ouverture + alertes d'anomalies

Outils de reconnaissance et d'entités (pas des couches cartographiques — barre latérale gauche / sélection) :

OutilAccès tableau de bordCommande OpenClawDescription
Boîte à outils de reconnaissanceOpérateur local (/api/osint/*)osint_lookup, osint_sweepIP, DNS, WHOIS, certificats, BGP, sanctions, CVE, MAC, GitHub, fuites, menaces, balayage de sous-réseau
Graphe d'entitésOpérateur local (/api/entity/expand)entity_expandWikidata + OFAC + graphe de relations en magasin en direct
Panneau de risque SCMOpérateur local (/api/scm-suppliers)get_layer_slice(["scm_suppliers"])Synthèse des menaces fournisseurs + marqueurs cartographiques
Découverte d'outilsosint_toolsListe les types de recherche de reconnaissance et les schémas d'expansion d'entités

osint_sweep (scan actif InternetDB) nécessite OPENCLAW_ACCESS_TIER=full.


🔧 Performances

La plateforme est optimisée pour gérer des ensembles de données massifs en temps réel :

  • Compression Gzip — Les charges utiles API sont compressées d'environ 92 % (11,6 Mo → 915 Ko)
  • Mise en cache ETag — Les réponses 304 Not Modified évitent l'analyse JSON redondante
  • Écrêtage par fenêtre d'affichage — Seules les entités dans les limites visibles de la carte (+20% de tampon) sont rendues
  • Mises à jour impératives de la carte — Les couches à volume élevé (vols, satellites, incendies) contournent la réconciliation React via des appels directs setData()
  • Rendu par clusters — Les navires, caméras CCTV, tremblements de terre et centres de données utilisent le clustering MapLibre pour réduire le nombre d'entités
  • Mises à jour de la fenêtre d'affichage avec débounce — 300 ms de débounce pour éviter les à-coups de reconstruction GeoJSON lors du panoramique/zoom ; 2 s de débounce sur les couches denses (satellites, incendies)
  • Interpolation de position — Animation fluide de 10 s entre les rafraîchissements de données
  • React.memo — Les composants lourds sont enveloppés pour éviter des rendus inutiles
  • Précision des coordonnées — Lat/lng arrondies à 5 décimales (~1 m) pour réduire la taille du JSON

📁 Structure du projet

Les nouveaux contributeurs peuvent utiliser docs/contributor-map.md pour un guide d'orientation plus court.``` Shadowbroker/ ├── openclaw-skills/shadowbroker/ # OpenClaw skill — SKILL.md, sb_query.py client, alerts/monitor helpers ├── backend/ │ ├── main.py # FastAPI app, middleware, API routes (~4,000 lines) │ ├── cctv.db # SQLite CCTV camera database (auto-generated) │ ├── config/ │ │ └── news_feeds.json # User-customizable RSS feed list │ ├── services/ │ │ ├── data_fetcher.py # Core scheduler — orchestrates all data sources │ │ ├── ais_stream.py # AIS WebSocket client (25K+ vessels) │ │ ├── carrier_tracker.py # OSINT carrier position estimator (GDELT news scraping) │ │ ├── cctv_pipeline.py # 14-source CCTV camera ingestion pipeline │ │ ├── ssrf_guard.py # SSRF validation for operator recon fetches │ │ ├── sanctions/ofac.py # OpenSanctions OFAC SDN index │ │ ├── osint/lookups.py # Server-side recon lookups (Osiris port) │ │ ├── osint/openclaw_recon.py # OpenClaw dispatch for recon + entity_expand │ │ ├── osint_intel/resolve.py # Entity graph resolver (Wikidata + OFAC) │ │ ├── scm/suppliers.py # Supply-chain risk overlay │ │ ├── intel_feeds/ # Country risk index helpers │ │ ├── fetchers/malware.py # abuse.ch Feodo + URLhaus │ │ ├── fetchers/cyber_status.py # CISA KEV feed │ │ ├── fetchers/telegram_osint.py # Public Telegram channel scrape + geoparse │ │ ├── third_party/osiris/ # MIT attribution for Osiris-derived code │ │ ├── geopolitics.py # GDELT + Ukraine frontline + air alerts │ │ ├── region_dossier.py # Right-click country/city intelligence │ │ ├── radio_intercept.py # Police scanner feeds + OpenMHZ │ │ ├── kiwisdr_fetcher.py # KiwiSDR receiver scraper │ │ ├── sentinel_search.py # Sentinel-2 STAC imagery search │ │ ├── shodan_connector.py # Shodan device search connector │ │ ├── sigint_bridge.py # APRS-IS TCP bridge │ │ ├── network_utils.py # HTTP client with curl fallback │ │ ├── api_settings.py # API key management │ │ ├── news_feed_config.py # RSS feed config manager │ │ ├── fetchers/ │ │ │ ├── flights.py # OpenSky, adsb.lol, GPS jamming, holding patterns │ │ │ ├── geo.py # AIS vessels, carriers, GDELT, fishing activity │ │ │ ├── satellites.py # CelesTrak TLE + SGP4 propagation │ │ │ ├── earth_observation.py # Quakes, fires, volcanoes, air quality, weather │ │ │ ├── infrastructure.py # Data centers, power plants, military bases │ │ │ ├── trains.py # Amtrak + DigiTraffic European rail │ │ │ ├── sigint.py # SatNOGS, TinyGS, APRS, Meshtastic │ │ │ ├── meshtastic_map.py # Meshtastic MQTT + map node aggregation │ │ │ ├── military.py # Military aircraft classification │ │ │ ├── news.py # RSS intelligence feed aggregation │ │ │ ├── financial.py # Global markets data │ │ │ └── ukraine_alerts.py # Ukraine air raid alerts │ │ └── mesh/ # InfoNet / Wormhole protocol stack │ │ ├── mesh_protocol.py # Core mesh protocol + routing │ │ ├── mesh_crypto.py # Ed25519, X25519, AESGCM primitives │ │ ├── mesh_hashchain.py # Hash chain commitment system (~1,400 lines) │ │ ├── mesh_router.py # Multi-transport router (APRS, Meshtastic, WS) │ │ ├── mesh_wormhole_persona.py # Gate persona identity management │ │ ├── mesh_wormhole_dead_drop.py # Dead Drop token-based DM mailbox │ │ ├── mesh_wormhole_ratchet.py # Double-ratchet DM scaffolding │ │ ├── mesh_wormhole_gate_keys.py # Gate key management + rotation │ │ ├── mesh_wormhole_seal.py # Message sealing + unsealing │ │ ├── mesh_merkle.py # Merkle tree proofs for data commitment │ │ ├── mesh_reputation.py # Node reputation scoring │ │ ├── mesh_oracle.py # Oracle consensus protocol │ │ └── mesh_secure_storage.py # Secure credential storage │ ├── routers/ │ │ ├── osint.py # /api/osint/* recon routes (local operator) │ │ ├── entity_graph.py # /api/entity/expand │ │ ├── scm.py # /api/scm-suppliers │ │ └── intel_feeds.py # /api/malware, /api/cyber-threats, /api/telegram-feed, /api/country-risk ├── frontend/ │ ├── public/data/ │ │ └── submarine-cables.json # Static undersea cable GeoJSON │ ├── src/ │ │ ├── app/ │ │ │ └── page.tsx # Main dashboard — state, polling, layout │ │ └── components/ │ │ ├── MaplibreViewer.tsx # Core map — all GeoJSON layers │ │ ├── MeshChat.tsx # InfoNet / Mesh / Dead Drop chat panel │ │ ├── MeshTerminal.tsx # Draggable CLI terminal │ │ ├── NewsFeed.tsx # SIGINT feed + entity detail panels │ │ ├── WorldviewLeftPanel.tsx # Data layer toggles (40+ layers) │ │ ├── ShodanPanel.tsx # Shodan device search overlay │ │ ├── ReconPanel.tsx # Server-side OSINT recon toolkit │ │ ├── ScmPanel.tsx # Supply-chain risk command panel │ │ ├── EntityGraphPanel.tsx # Entity graph on map selection │ │ ├── MaplibreViewer/popups/TelegramOsintPopup.tsx # Threat-intercept styled Telegram pin popups │ │ ├── WorldviewRightPanel.tsx # Search + filter sidebar │ │ ├── AdvancedFilterModal.tsx # Airport/country/owner filtering │ │ ├── MapLegend.tsx # Dynamic legend with all icons │ │ ├── MarketsPanel.tsx # Global financial markets ticker │ │ ├── RadioInterceptPanel.tsx # Scanner-style radio panel │ │ ├── FindLocateBar.tsx # Search/locate bar │ │ ├── ChangelogModal.tsx # Version changelog popup (auto-shows on upgrade) │ │ ├── SettingsPanel.tsx # API Keys + News Feed + Shodan config │ │ ├── ScaleBar.tsx # Map scale indicator │ │ └── ErrorBoundary.tsx # Crash recovery wrapper │ └── package.json

</details>

---

<details>
<summary>🔑 Variables d'environnement</summary>

### Backend (`backend/.env`)```env
# Required for airplane telemetry (NEW in v0.9.7 — startup env check flags these as critical)
# Free registration: https://opensky-network.org/index.php?option=com_users&view=registration
OPENSKY_CLIENT_ID=your_opensky_client_id      # OAuth2 — global flight state vectors
OPENSKY_CLIENT_SECRET=your_opensky_secret     # OAuth2 — paired with Client ID above

# Optional (enhances data quality)
AIS_API_KEY=your_aisstream_key                # Maritime vessel tracking (aisstream.io) — ships layer empty without it
LTA_ACCOUNT_KEY=your_lta_key                  # Singapore CCTV cameras
SHODAN_API_KEY=your_shodan_key                # Shodan device search overlay
SH_CLIENT_ID=your_sentinel_hub_id             # Copernicus CDSE Sentinel Hub imagery
SH_CLIENT_SECRET=your_sentinel_hub_secret     # Paired with Sentinel Hub Client ID
MESH_SAR_EARTHDATA_USER=                      # NASA Earthdata user (SAR Mode B — OPERA products)
MESH_SAR_EARTHDATA_TOKEN=                     # NASA Earthdata token (paired with user above)
MESH_SAR_COPERNICUS_USER=                     # Copernicus Data Space user (SAR Mode B — EGMS / EMS)
MESH_SAR_COPERNICUS_TOKEN=                    # Copernicus token (paired with user above)
OPENCLAW_ACCESS_TIER=restricted               # OpenClaw agent tier: "restricted" (read-only) or "full"
# OPENCLAW_HMAC_SECRET=                         # Optional; UI Bootstrap persists to data/openclaw.env in Docker
GFW_API_TOKEN=your_gfw_token                  # Global Fishing Watch — fishing_activity layer (Settings → Maritime)
TELEGRAM_OSINT_ENABLED=true                   # Telegram OSINT layer (default on)
TELEGRAM_OSINT_CHANNELS=osintdefender,...     # Comma-separated public channel slugs (see .env.example)

# Private-lane privacy-core pinning (required when Arti or RNS is enabled)
PRIVACY_CORE_MIN_VERSION=0.1.0
PRIVACY_CORE_ALLOWED_SHA256=your_privacy_core_sha256
# Optional override if you load a non-default shared library path
PRIVACY_CORE_LIB=

Lorsque MESH_ARTI_ENABLED=true ou MESH_RNS_ENABLED=true, le démarrage du backend échoue désormais en mode sécurisé (fail closed) à moins que l'artefact privacy-core chargé ne rapporte une version parsable au moins égale à PRIVACY_CORE_MIN_VERSION et ne corresponde à l'un des hachages dans PRIVACY_CORE_ALLOWED_SHA256.

Générez le hachage à partir de l'artefact que vous avez l'intention de livrer :```powershell Get-FileHash .\privacy-core\target\release\privacy_core.dll -Algorithm SHA256

*   Adresse: `mqtt.google.com`
*   Port: `1883`
*   Nom d'utilisateur: `Google`
*   Mot de passe: `Google`
*   Sujet: `Fence`

Après vous être connecté au broker MQTT, cliquez sur le bouton **Click to Connect** puis cliquez sur **Click to Publish**. Pour tester si le bouton fonctionne correctement, appuyez sur le bouton côté matériel et vérifiez si les informations reçues sont correctes et si le bouton devient bleu.

Sélectionnez **Single Relay** et configurez les options suivantes:

*   `Relay 1` - Relais de test```bash
sha256sum ./privacy-core/target/release/libprivacy_core.so

Confirmez ensuite que les appels authentifiés GET /api/wormhole/status ou GET /api/settings/wormhole-status affichent les mêmes privacy_core.version, privacy_core.library_path et privacy_core.library_sha256.

Frontend

VariableOù définirObjectif
BACKEND_URLenvironment dans docker-compose.yml, ou variable d'environnement shellURL que le serveur Next.js utilise pour proxyfier les appels API vers le backend. Par défaut à http://backend:8000. Variable d'exécution — pas besoin de reconstruire.
BACKEND_PORT.env à la racine du dépôt ou variable d'environnement shell avant docker compose upPort hôte utilisé pour exposer l'API backend pour les diagnostics locaux. Par défaut à 8000 ; définissez BACKEND_PORT=8001 si le port 8000 est déjà utilisé. Ne change pas BACKEND_URL interne à Docker.

Fonctionnement : Le frontend proxyfie toutes les requêtes /api/* via le serveur Next.js vers BACKEND_URL en utilisant le réseau interne de Docker. Les navigateurs ne communiquent qu'avec le port 3000 ; le port hôte du backend est uniquement pour les diagnostics locaux. Pour le développement local sans Docker, BACKEND_URL par défaut à http://localhost:8000.


🤝 Contributeurs

ShadowBroker est construit en toute transparence. Ces personnes ont contribué du code concret :

QuiQuoiPR
@AlienmajikSupport Raspberry Pi 5 — packaging ARM64, notes de déploiement headless, réglages d'exécution pour du matériel de classe Pi
@wa1idCorrection d'ingestion CCTV — SQLite threadé, base de données persistante, initialisation au démarrage, cliquabilité des clusters#92
@AlborzNazariSources DGT Espagne + CCTV Madrid, export de renseignements sur les menaces STIX 2.1#91
@adust09Couche centrales électriques, couverture de renseignements Asie de l'Est (bases JSDF, enrichissement OACI, actualités Taïwan, classification militaire)#71, #72, #76, #77, #87
@XpirixAméliorations du style et des interactions de LocateBar#78
@imqdcrSéparation du bouton navires (4 catégories) + identifiants d'entité MMSI/indicatif stables
@csyspAlertes de menaces dissimulables + identifiants d'entité stables pour GDELT et actualités#48, #63
@suranyamiConstructions Docker multi-arch parallèles (11min → 3min) + correction BACKEND_URL à l'exécution#35, #44
@chr0n1xArchitecture Kubernetes / chart Helm pour déploiements haute disponibilité

⚠️ Avertissement

Cet outil est entièrement basé sur des données de renseignement open source (OSINT) disponibles publiquement. Aucune donnée classifiée, restreinte ou non publique n'est utilisée. Les positions des transporteurs sont des estimations fondées sur des rapports publics. L'interface utilisateur à thème militaire est purement esthétique.


📜 Licence

Ce projet est destiné à des fins éducatives et de recherche personnelle. Consultez les conditions d'utilisation de chaque fournisseur d'API pour les restrictions d'utilisation des données.


Construit avec ☕ et trop d'appels API

Catégories