{"id":5208,"date":"2026-03-23T14:07:10","date_gmt":"2026-03-23T14:07:10","guid":{"rendered":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/?p=5208"},"modified":"2026-03-23T16:41:16","modified_gmt":"2026-03-23T16:41:16","slug":"scythe-vs-world-monitor-two-visions-of-intelligence-one-uncomfortable-question","status":"publish","type":"post","link":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/?p=5208","title":{"rendered":"SCYTHE vs. World Monitor: Two Visions of Intelligence, One Uncomfortable Question"},"content":{"rendered":"\n<p>*Posted March 23, 2026 \u00b7 ~3,500 words \u00b7 Tags: OSINT, RF Intelligence, Hypergraph, Open Source, Threat Detection*<\/p>\n\n\n\n<p><strong>&#8212;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-opt-id=873106828  fetchpriority=\"high\" decoding=\"async\" width=\"835\" height=\"458\" src=\"https:\/\/ml6vmqguit1n.i.optimole.com\/w:auto\/h:auto\/q:mauto\/f:best\/https:\/\/172-234-197-23.ip.linodeusercontent.com\/wp-content\/uploads\/2026\/03\/image-6.png\" alt=\"\" class=\"wp-image-5209\" srcset=\"https:\/\/ml6vmqguit1n.i.optimole.com\/w:835\/h:458\/q:mauto\/f:best\/https:\/\/172-234-197-23.ip.linodeusercontent.com\/wp-content\/uploads\/2026\/03\/image-6.png 835w, https:\/\/ml6vmqguit1n.i.optimole.com\/w:300\/h:165\/q:mauto\/f:best\/https:\/\/172-234-197-23.ip.linodeusercontent.com\/wp-content\/uploads\/2026\/03\/image-6.png 300w, https:\/\/ml6vmqguit1n.i.optimole.com\/w:768\/h:421\/q:mauto\/f:best\/https:\/\/172-234-197-23.ip.linodeusercontent.com\/wp-content\/uploads\/2026\/03\/image-6.png 768w\" sizes=\"(max-width: 835px) 100vw, 835px\" \/><\/figure>\n\n\n\n<p>There are two ways to watch the world.<\/p>\n\n\n\n<p>The first is to stand back\u2014aggregate public signals, synthesize them with an LLM, render them on a 3D globe, and let the patterns speak to you. It&#8217;s elegant, scalable, and deeply useful.<\/p>\n\n\n\n<p>The second is to get closer. Capture the raw traffic. Analyze the RF spectrum. Build a living graph of what&#8217;s *actually* happening on the wire and in the air\u2014not what sources are reporting *about* it. It&#8217;s noisier, harder to deploy, and fundamentally different in kind.<\/p>\n\n\n\n<p>[World Monitor](https:\/\/worldmonitor.app) does the first brilliantly. RF SCYTHE does the second.<\/p>\n\n\n\n<p>This post is an honest technical comparison of both, written by someone who has spent months building one of them and studying the other.<\/p>\n\n\n\n<p><strong>&#8212;<\/strong><\/p>\n\n\n\n<p><strong>##<\/strong><strong> Meet the Contenders<\/strong><\/p>\n\n\n\n<p><strong>###<\/strong><strong> World Monitor: The Global Dashboard<\/strong><\/p>\n\n\n\n<p>World Monitor is a real-time global intelligence dashboard built by Elie Habib, released under AGPL-3.0. Current version: <strong>**<\/strong><strong>2.4.1<\/strong><strong>**<\/strong>. It aggregates 35+ data layers\u2014military flight tracking, conflict zones, infrastructure events, markets, satellite fire detection, cyber threat IOCs\u2014into a single WebGL 3D globe. The tech stack is formidable:<\/p>\n\n\n\n<p>&#8211; <strong>**<\/strong><strong>198 TypeScript files<\/strong><strong>**<\/strong>, Vite 6 + deck.gl 9.2 + MapLibre 5<\/p>\n\n\n\n<p>&#8211; <strong>**<\/strong><strong>60+ Vercel Edge Functions<\/strong><strong>**<\/strong> as a serverless backend<\/p>\n\n\n\n<p>&#8211; <strong>**<\/strong><strong>Groq (Llama 3.1 8B)<\/strong><strong>**<\/strong> for AI synthesis, Transformers.js for in-browser NER\/embeddings<\/p>\n\n\n\n<p>&#8211; <strong>**<\/strong><strong>150+ RSS feeds<\/strong><strong>**<\/strong> across 14 languages<\/p>\n\n\n\n<p>&#8211; <strong>**<\/strong><strong>Tauri 2 desktop builds<\/strong><strong>**<\/strong> for Windows, macOS, Linux<\/p>\n\n\n\n<p>&#8211; <strong>**<\/strong><strong>PWA support<\/strong><strong>**<\/strong> with offline map tiles<\/p>\n\n\n\n<p>It deploys three distinct variants\u2014geopolitical, tech, finance\u2014from one codebase. It has a Country Instability Index that scores 22 nations on 10+ live signals. It has a Focal Point Detector that correlates entities across news, conflict data, military movements, and market signals to surface convergence *before* humans notice it.<\/p>\n\n\n\n<p>It is, in short, a polished, production-grade, free alternative to tools that cost thousands of dollars per month.<\/p>\n\n\n\n<p><strong>###<\/strong><strong> RF SCYTHE: The Intelligence Organism<\/strong><\/p>\n\n\n\n<p>RF SCYTHE started as an ATAK plugin experiment on a Pixel 7 Pro. Over 24 development checkpoints, it evolved into something harder to categorize: a self-hosted, multi-instance intelligence engine that fuses <strong>**<\/strong><strong>live RF signals, real network traffic, PCAP captures, and hypergraph inference<\/strong><strong>**<\/strong> into a continuously updating probabilistic knowledge graph.<\/p>\n\n\n\n<p>The stack looks very different:<\/p>\n\n\n\n<p>&#8211; <strong>**<\/strong><strong>Python 3.12<\/strong><strong>**<\/strong> core \u2014 Flask + SocketIO orchestrator, ~15,000 lines in `rf_scythe_api_server.py` alone<\/p>\n\n\n\n<p>&#8211; <strong>**<\/strong><strong>Hypergraph engine<\/strong><strong>**<\/strong> \u2014 custom directed multigraph with typed edge ontology, confidence scoring, and temporal decay<\/p>\n\n\n\n<p>&#8211; <strong>**<\/strong><strong>Gemma 3 1B<\/strong><strong>**<\/strong> (via Ollama) for local inference, <strong>**<\/strong><strong>EmbeddingGemma<\/strong><strong>**<\/strong> for semantic edge repair<\/p>\n\n\n\n<p>&#8211; <strong>**<\/strong><strong>Shadow Graph<\/strong><strong>**<\/strong> \u2014 a probabilistic pre-reality layer where edges live until evidence promotes them<\/p>\n\n\n\n<p>&#8211; <strong>**<\/strong><strong>Threat Gravity Map<\/strong><strong>**<\/strong> \u2014 canvas-based force simulation where node mass = threat weight, nodes physically pull toward each other in real time<\/p>\n\n\n\n<p>&#8211; <strong>**<\/strong><strong>Multi-instance orchestrator<\/strong><strong>**<\/strong> \u2014 spawn N sovereign hypergraph instances; no shared state, no cross-contamination<\/p>\n\n\n\n<p>&#8211; <strong>**<\/strong><strong>PCAP\/FTP ingest pipeline<\/strong><strong>**<\/strong> \u2014 live packet capture analysis feeding the graph<\/p>\n\n\n\n<p>&#8211; <strong>**<\/strong><strong>Docker image: 1.49 GB<\/strong><strong>**<\/strong> (after three builds and a very humbling `.dockerignore` lesson)<\/p>\n\n\n\n<p>Where World Monitor watches the world through public data, SCYTHE watches the *local observable universe* through packet captures and RF emissions\u2014then tries to reason about what it&#8217;s seeing.<\/p>\n\n\n\n<p><strong>&#8212;<\/strong><\/p>\n\n\n\n<p><strong>##<\/strong><strong> The Fundamental Philosophical Difference<\/strong><\/p>\n\n\n\n<p>This is the most important comparison, and it&#8217;s not about features.<\/p>\n\n\n\n<p><strong>**<\/strong><strong>World Monitor is an aggregator of reported reality.<\/strong><strong>**<\/strong> It collects what humans and public APIs *say* is happening\u2014news articles, conflict databases, satellite imagery, ADS-B transponder broadcasts, AIS vessel pings. Its intelligence layer synthesizes these signals into coherent situational awareness. It is extraordinarily good at answering: *&#8221;What is the world reporting right now?&#8221;*<\/p>\n\n\n\n<p><strong>**<\/strong><strong>SCYTHE is a constructor of inferred reality.<\/strong><strong>**<\/strong> It collects raw observable data\u2014packet headers, RF signal characteristics, TCP connection timing, DNS queries\u2014and builds a probabilistic model of what entities exist, how they relate, and what they&#8217;re doing. It doesn&#8217;t ask what&#8217;s being reported. It asks: *&#8221;What does the evidence suggest is true?&#8221;*<\/p>\n\n\n\n<p>The distinction matters more than it sounds.<\/p>\n\n\n\n<p>Consider a scenario: a new C2 server stands up at 172.234.197.23. World Monitor will know about it when threat intelligence feeds (abuse.ch, AlienVault OTX) ingest and republish the indicator\u2014potentially hours or days later. SCYTHE will know about it when the first packet arrives and the hypergraph creates an edge between the scanning host and the observed service. The difference is the gap between *reported* and *observed*.<\/p>\n\n\n\n<p>This isn&#8217;t a knock on World Monitor. Its model is deliberately designed for scale and accessibility\u2014anyone with a browser can run it. SCYTHE&#8217;s model requires hardware proximity to the traffic you want to analyze. Both are right for their domains.<\/p>\n\n\n\n<p><strong>&#8212;<\/strong><\/p>\n\n\n\n<p><strong>##<\/strong><strong> Technical Deep Dive: What Each Does Well<\/strong><\/p>\n\n\n\n<p><strong>###<\/strong><strong> World Monitor&#8217;s Strengths<\/strong><\/p>\n\n\n\n<p><strong>**<\/strong><strong>The data breadth is staggering.<\/strong><strong>**<\/strong> 220 military bases from 9 nations. Live ADS-B flight tracking. Naval AIS positions. ACLED + UCDP conflict events. NASA FIRMS satellite fire detection. Cloudflare internet outage data. 92 stock exchanges. 13 central banks. Undersea cable routes with landing points. All of this, free, in a single interface.<\/p>\n\n\n\n<p>The <strong>**<\/strong><strong>Country Instability Index (CII)<\/strong><strong>**<\/strong> is genuinely clever engineering. It synthesizes 10+ weighted signals\u2014active conflicts, protest frequency, economic indicators from FRED, military surge detection, displacement data\u2014into a real-time stability score for 22 countries. This isn&#8217;t just data display; it&#8217;s a composite model that produces an actionable number.<\/p>\n\n\n\n<p>The <strong>**<\/strong><strong>3-tier caching architecture<\/strong><strong>**<\/strong> (in-memory \u2192 Upstash Redis \u2192 upstream API) is production-hardened. The circuit breaker pattern means a failing data source degrades gracefully rather than cascading into a broken dashboard. The Groq-first \u2192 OpenRouter-fallback \u2192 browser-model-last-resort chain for LLM inference is the right way to build resilient AI features in 2026.<\/p>\n\n\n\n<p>And the <strong>**<\/strong><strong>deployment flexibility<\/strong><strong>**<\/strong> is impressive: Vercel cloud, Docker self-hosted, Tauri desktop (.exe, .dmg, .AppImage), installable PWA. That&#8217;s the full matrix.<\/p>\n\n\n\n<p><strong>**<\/strong><strong>The honest limitation<\/strong><strong>**<\/strong>: every data point in World Monitor is downstream of something that already happened and got published. The ADS-B transponder data that World Monitor tracks can be spoofed. The conflict events are reported with latency. The threat intelligence IOCs are already known-bad by the time they appear. World Monitor is excellent for macro situational awareness. It is not designed for tactical edge detection of novel activity.<\/p>\n\n\n\n<p><strong>&#8212;<\/strong><\/p>\n\n\n\n<p><strong>###<\/strong><strong> SCYTHE&#8217;s Strengths<\/strong><\/p>\n\n\n\n<p><strong>**<\/strong><strong>The hypergraph is the core differentiator.<\/strong><strong>**<\/strong> Unlike a flat entity list or a knowledge graph with rigid schemas, SCYTHE&#8217;s hypergraph supports typed, confidence-weighted edges between arbitrary entities. An IP address can be connected to a hostname via `RESOLVES_TO`, to a session via `OBSERVED_IN`, to a service via `INFERRED_HOST_OFFERS_SERVICE`, and to a behavioral cluster via `MEMBER_OF_SWARM`. The graph doesn&#8217;t just store facts\u2014it stores *relationships with degrees of belief*.<\/p>\n\n\n\n<p>The <strong>**<\/strong><strong>Shadow Graph<\/strong><strong>**<\/strong> is the feature that surprised me most in development. When the validator rejects an edge because evidence is insufficient, the edge doesn&#8217;t disappear\u2014it enters a probabilistic pre-reality layer with a confidence score. As more corroborating evidence arrives, the score climbs. When it crosses the promotion threshold, the edge materializes into the main graph. The system literally believes its own hypotheses into existence, with receipts.<\/p>\n\n\n\n<p>This produced a log entry I&#8217;ve thought about since:<\/p>\n\n\n\n<p>&#8220;`<\/p>\n\n\n\n<p>[shadow] PROMOTED &#8230; kind=flow_observed confidence=0.74 after 1 attempt, age=2s<\/p>\n\n\n\n<p>&#8220;`<\/p>\n\n\n\n<p>Two seconds from shadow to reality. That&#8217;s pre-signature threat detection.<\/p>\n\n\n\n<p><strong>**<\/strong><strong>The Threat Gravity Map<\/strong><strong>**<\/strong> emerged from this model. Every node has a computed `mass`:<\/p>\n\n\n\n<p>&#8220;`python<\/p>\n\n\n\n<p>mass = (<\/p>\n\n\n\n<p>&nbsp; &nbsp; 0.3 * log(node.degree + 1) +<\/p>\n\n\n\n<p>&nbsp; &nbsp; 0.25 * log(node.flow_count + 1) +<\/p>\n\n\n\n<p>&nbsp; &nbsp; 0.2 * node.persistence_score +<\/p>\n\n\n\n<p>&nbsp; &nbsp; 0.15 * node.anomaly_score +<\/p>\n\n\n\n<p>&nbsp; &nbsp; 0.1 * node.shadow_promotion_count<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p>&#8220;`<\/p>\n\n\n\n<p>Nodes with more connections, more traffic, more anomaly signals, and more shadow promotions are *heavier*. On the canvas force simulation, heavy nodes pull lighter nodes toward them. Threat clusters don&#8217;t just appear\u2014they *form*, visually, in real time. When you watch a new IP get pulled toward an existing heavy node within seconds of first observation, it&#8217;s unsettling in the best way.<\/p>\n\n\n\n<p><strong>**<\/strong><strong>The honest limitation<\/strong><strong>**<\/strong>: SCYTHE requires physical or network proximity to the traffic it analyzes. It cannot tell you what&#8217;s happening in eastern Ukraine from a browser tab. It can tell you everything about what&#8217;s happening on the network segment it&#8217;s connected to. It is a tactical and operational tool, not a strategic one.<\/p>\n\n\n\n<p><strong>&#8212;<\/strong><\/p>\n\n\n\n<p><strong>##<\/strong><strong> Side-by-Side Comparison<\/strong><\/p>\n\n\n\n<p>| Dimension | World Monitor | RF SCYTHE |<\/p>\n\n\n\n<p>|&#8212;|&#8212;|&#8212;|<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>Primary data<\/strong><strong>**<\/strong> | 150+ public APIs, RSS feeds | Live PCAP, RF captures, network traffic |<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>Intelligence model<\/strong><strong>**<\/strong> | Signal aggregation + LLM synthesis | Hypergraph inference + shadow graph |<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>Latency<\/strong><strong>**<\/strong> | 5\u201315 min (news), real-time (ADS-B\/AIS) | Sub-second (live packet observation) |<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>AI integration<\/strong><strong>**<\/strong> | Groq\/OpenRouter for summarization | Local Gemma 3 inference + semantic edge repair |<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>Visualization<\/strong><strong>**<\/strong> | deck.gl 3D globe, 52 panels | Cesium 3D globe + canvas force simulation |<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>Deployment<\/strong><strong>**<\/strong> | Vercel, Docker, Tauri, PWA | Docker (1.49 GB), self-hosted Linux |<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>Multi-instance<\/strong><strong>**<\/strong> | Single app, 3 variants | N sovereign hypergraph instances |<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>Coverage<\/strong><strong>**<\/strong> | Global (public data) | Local observable network\/RF environment |<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>Novel threat detection<\/strong><strong>**<\/strong> | Known IOCs from threat feeds | Pre-signature, behavioral, first-observation |<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>Language support<\/strong><strong>**<\/strong> | 14 languages, RTL | English (no i18n layer) |<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>License<\/strong><strong>**<\/strong> | AGPL-3.0 | Proprietary (private) |<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>Target user<\/strong><strong>**<\/strong> | OSINT analyst, researcher, journalist | Operator, red team, tactical network analyst |<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>Learning curve<\/strong><strong>**<\/strong> | Low (browser, no setup) | High (Docker, Ollama, hardware proximity) |<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>API dependency<\/strong><strong>**<\/strong> | Groq, OpenRouter, FRED, AIS, OpenSky | Ollama (local), optional external enrichment |<\/p>\n\n\n\n<p>| <strong>**<\/strong><strong>Offline capability<\/strong><strong>**<\/strong> | PWA + offline maps | Fully offline capable |<\/p>\n\n\n\n<p><strong>&#8212;<\/strong><\/p>\n\n\n\n<p><strong>##<\/strong><strong> Where They Could Be More Powerful Together<\/strong><\/p>\n\n\n\n<p>Here&#8217;s the part that keeps me up at night.<\/p>\n\n\n\n<p>World Monitor knows that 172.234.197.23 is a Linode node in a specific ASN. It knows what news events originated from that IP&#8217;s general geography. It might even know from threat intelligence feeds that the IP has been associated with previous activity. But it doesn&#8217;t know *what that IP is doing right now on your network*.<\/p>\n\n\n\n<p>SCYTHE knows exactly what 172.234.197.23 is doing right now\u2014what ports it&#8217;s probing, what session patterns it&#8217;s generating, what its timing fingerprint looks like, how its behavior is evolving over the last 48 hours. But it doesn&#8217;t have the geopolitical context about what that IP represents in the larger world.<\/p>\n\n\n\n<p>A fusion of these two perspectives would be genuinely alarming. World Monitor&#8217;s CII scores, ASN metadata, and geopolitical context flowing *into* SCYTHE&#8217;s hypergraph as annotated edges. SCYTHE&#8217;s behavioral signatures flowing *into* World Monitor as a custom data layer\u2014not just &#8220;this IP is known bad&#8221; but &#8220;this IP is showing pre-C2 behavioral clustering with 0.74 confidence, right now.&#8221;<\/p>\n\n\n\n<p>That&#8217;s not a feature request. That&#8217;s a different category of intelligence tool.<\/p>\n\n\n\n<p><strong>&#8212;<\/strong><\/p>\n\n\n\n<p><strong>##<\/strong><strong> The Deployment Architecture Contrast<\/strong><\/p>\n\n\n\n<p>This deserves a dedicated section because it reveals the design philosophy of each project.<\/p>\n\n\n\n<p><strong>**<\/strong><strong>World Monitor is cloud-native first.<\/strong><strong>**<\/strong> The production path is `vercel deploy`. Sixty-plus serverless Edge Functions handle API proxying, LLM calls, and caching. This is the right choice for a globally accessible dashboard with no per-user infrastructure. The trade-off: you&#8217;re dependent on Vercel&#8217;s IP ranges (which some government APIs block, requiring a Railway WebSocket relay as fallback), and your data is transiting third-party infrastructure.<\/p>\n\n\n\n<p><strong>**<\/strong><strong>SCYTHE is self-hosted first.<\/strong><strong>**<\/strong> The orchestrator spawns subprocess instances with isolated data directories, each getting their own hypergraph, their own log files, their own LLM connection. The Docker image is 1.49 GB and runs entirely on your hardware. Ollama serves Gemma models locally. Nothing leaves your network unless you tell it to. The trade-off: you need to be on the same network as the traffic you want to analyze, and you need hardware capable of running quantized LLM inference.<\/p>\n\n\n\n<p>The SCYTHE Docker build story is worth telling briefly. First image: 10.8 GB. Root cause: missing `.dockerignore` entries for `RFScytheARNative\/` (2.9 GB Android native build tree), `MediaPipeGestureAPK\/` (224 MB), and eight other large directories that had been added to the project over months. Second image with corrected exclusions: <strong>**<\/strong><strong>1.49 GB<\/strong><strong>**<\/strong>. The lesson: Docker&#8217;s `.dockerignore` is only as good as your knowledge of what&#8217;s in your own project directory.<\/p>\n\n\n\n<p><strong>&#8212;<\/strong><\/p>\n\n\n\n<p><strong>##<\/strong><strong> The LLM Integration Philosophies<\/strong><\/p>\n\n\n\n<p>Both projects use language models, but in fundamentally different ways.<\/p>\n\n\n\n<p>World Monitor uses LLMs as <strong>**<\/strong><strong>synthesis engines<\/strong><strong>**<\/strong>. Given 50 news items, produce a coherent world brief. Given a country&#8217;s data signals, generate an assessment. The model is consuming human-readable text and producing human-readable summaries. This is LLM use at its most legible\u2014you can read the output, trace it to the inputs, and evaluate its quality.<\/p>\n\n\n\n<p>SCYTHE uses LLMs as <strong>**<\/strong><strong>ontology repair engines<\/strong><strong>**<\/strong>. When the graph produces an edge with an unrecognized `kind` value\u2014maybe `flow_observed` instead of the canonical `INFERRED_FLOW_OBSERVED`\u2014EmbeddingGemma computes semantic similarity between the malformed kind and every known edge type. If the closest match scores above threshold, the edge is repaired and committed. If not, it goes to the shadow graph. The model is operating on graph schema, not human language.<\/p>\n\n\n\n<p>This is a stranger use of a language model. It treats semantic similarity as a form of schema validation. It&#8217;s also surprisingly effective: logs from development show consistent `~0.65` cosine similarity scores on edge kinds that differ only in casing or minor phrasing variations\u2014exactly the kind of ontology drift that accumulates when a system grows organically across 24 development checkpoints.<\/p>\n\n\n\n<p>The failure mode is also instructive. When the semantic threshold is too high (was `0.82` at one point), valid edges get rejected and starve the inference pipeline. When it&#8217;s too low, unrelated concepts get conflated. Finding the right threshold is less a technical problem than an epistemological one: how confident does the system need to be before it&#8217;s allowed to believe something?<\/p>\n\n\n\n<p><strong>&#8212;<\/strong><\/p>\n\n\n\n<p><strong>##<\/strong><strong> On Monetization and the Open Source Question<\/strong><\/p>\n\n\n\n<p>World Monitor is AGPL-3.0: you can run it, modify it, study it, but if you deploy a modified version, you must release the source. This is the right license for a public-good intelligence tool. It means the code stays open even as the project gains commercial traction. Elie Habib has built something genuinely valuable and given it to the world.<\/p>\n\n\n\n<p>SCYTHE is private. That was a deliberate choice, for reasons that should be obvious to anyone who has read this far: a tool that does pre-signature threat detection using live packet captures and local LLM inference is dual-use in a way that requires careful consideration before open publication. RF intercept tooling has export control implications. Behavioral fingerprinting of network entities raises questions about appropriate use.<\/p>\n\n\n\n<p>The monetization paths are also different.<\/p>\n\n\n\n<p>World Monitor&#8217;s path is relatively clean: hosted premium tiers, enterprise data integrations, white-label licensing. The AGPL license means commercial users either comply (release modifications) or pay for a commercial license. Standard open core playbook.<\/p>\n\n\n\n<p>SCYTHE&#8217;s path is narrower but more valuable per engagement: red team tooling, threat intelligence consulting, government contracts for edge-deployed tactical analysis systems. The Docker image makes it distributable. The multi-instance orchestrator makes it scalable. The local LLM stack makes it air-gap compatible. These properties are worth real money to people who work in environments where &#8220;just deploy to Vercel&#8221; is not an option.<\/p>\n\n\n\n<p><strong>&#8212;<\/strong><\/p>\n\n\n\n<p><strong>##<\/strong><strong> What Each Project Gets Right About the Future of Intelligence Tools<\/strong><\/p>\n\n\n\n<p>World Monitor&#8217;s insight: <strong>**<\/strong><strong>democratization matters<\/strong><strong>**<\/strong>. The intelligence tools that mattered in 2010 were locked behind enterprise contracts. By 2026, Groq serves Llama 3.1 on a free tier, GDELT publishes event data for anyone to consume, and ADS-B transponder data is freely aggregatable. A well-engineered open source project can now do things that cost millions of dollars a decade ago. World Monitor proves this decisively.<\/p>\n\n\n\n<p>SCYTHE&#8217;s insight: <strong>**<\/strong><strong>observation beats aggregation at the edge<\/strong><strong>**<\/strong>. No matter how many public APIs you aggregate, you cannot see traffic that isn&#8217;t being published. The most interesting activity on a network\u2014lateral movement, novel C2 protocols, pre-attack reconnaissance\u2014doesn&#8217;t appear in news feeds or threat intelligence databases until after something bad has already happened. The only way to see it is to be present when it occurs, with instrumentation that can reason about what it&#8217;s observing.<\/p>\n\n\n\n<p>Both are right. They&#8217;re just right about different problems.<\/p>\n\n\n\n<p><strong>&#8212;<\/strong><\/p>\n\n\n\n<p><strong>##<\/strong><strong> Conclusion<\/strong><\/p>\n\n\n\n<p>If you need to understand what&#8217;s happening in the world geopolitically, economically, and from an open-source threat intelligence perspective\u2014deploy World Monitor. It is polished, free, and comprehensive. The CII scores alone are worth the 10-minute setup time. The Focal Point Detector has caught convergence patterns I wouldn&#8217;t have assembled manually.<\/p>\n\n\n\n<p>If you need to understand what&#8217;s happening on a specific network, in a specific RF environment, at a level of fidelity that precedes any published indicator\u2014SCYTHE is the architecture you want. It&#8217;s harder to deploy, more hardware-adjacent, and generates a lot of logs worth reading carefully. But when a shadow-graph edge promotes itself after 2 seconds because corroborating evidence just arrived from a PCAP ingest, you&#8217;re seeing something that no aggregation dashboard can show you.<\/p>\n\n\n\n<p>The uncomfortable question the comparison raises: <strong>**<\/strong><strong>should these two systems be talking to each other?<\/strong><strong>**<\/strong><\/p>\n\n\n\n<p>World Monitor&#8217;s geopolitical context as hypergraph annotations. SCYTHE&#8217;s behavioral signals as World Monitor custom layers. A bidirectional fusion where open-source intelligence and live observable data reinforce each other&#8217;s confidence models.<\/p>\n\n\n\n<p>That&#8217;s not a product that exists yet.<\/p>\n\n\n\n<p>Maybe it should.<\/p>\n\n\n\n<p><strong>&#8212;<\/strong><\/p>\n\n\n\n<p>*RF SCYTHE is under active development. The Docker image (`scythe\/nerf-engine:latest`, 1.49 GB) is available for self-hosted deployment. For inquiries about enterprise licensing or integration, contact via GitHub.*<\/p>\n\n\n\n<p>*World Monitor is open source (AGPL-3.0) at [github.com\/worldmonitor](https:\/\/github.com\/worldmonitor\/worldmonitor-main) and live at [worldmonitor.app](https:\/\/worldmonitor.app). Go use it\u2014it&#8217;s excellent.*<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Explore Further<\/h2>\n\n\n\n<p>What specific components or patterns from World Monitor could be adopted into SCYTHE. I need to look at both projects<br>more carefully and think about what would actually slot in well. Let me explore specific parts of the World Monitor codebase that might be<br>relevant, particularly:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>The focal point detector<\/li>\n\n\n\n<li>The country instability index scoring<\/li>\n\n\n\n<li>The 3-tier caching architecture<\/li>\n\n\n\n<li>The circuit breaker pattern<\/li>\n\n\n\n<li>The signal aggregation approach<\/li>\n\n\n\n<li>Any specific data integrations that SCYTHE lacks<\/li>\n\n\n\n<li>The CII scoring model<\/li>\n\n\n\n<li>The PWA\/offline capabilities<\/li>\n\n\n\n<li>The Tauri desktop approach Let me run parallel exploration tasks to look at specific files in World Monitor that would be most relevant to SCYTHE.<\/li>\n<\/ol>\n\n\n\n<p>\u25cf Explore wm-focal-cii<br>\u2514 Agent started in background with agent_id: wm-focal-cii. You can use read_age\u2026<\/p>\n\n\n\n<p>\u25cf Explore wm-data-integrations<br>\u2514 Agent started in background with agent_id: wm-data-integrations. You can use \u2026<\/p>\n\n\n\n<p>\u25cf Explore wm-ui-patterns<br>\u2514 Agent started in background with agent_id: wm-ui-patterns. You can use read_a\u2026<\/p>\n\n\n\n<p>\u25cf Three agents exploring in parallel. Let me collect them as they finish.<\/p>\n\n\n\n<p>\u25cf Read (Explore agent \u2014 wm-focal-cii)<br>\u2514 idle<\/p>\n\n\n\n<p>\u25cf Read (Explore agent \u2014 wm-data-integrations)<br>\u2514 Running<\/p>\n\n\n\n<p>\u25cf Read (Explore agent \u2014 wm-ui-patterns)<br>\u2514 idle<\/p>\n\n\n\n<p>\u25cf Background agent &#8220;wm-focal-cii&#8221; (explore) completed.<\/p>\n\n\n\n<p>\u25cf Background agent &#8220;wm-ui-patterns&#8221; (explore) completed.<\/p>\n\n\n\n<p>\u25d0 Let me read all three agent results now. Two are already done, waiting for the third.<\/p>\n\n\n\n<p>\u25cf Read focal point + CII analysis (shell)<br>\u2502 cat \/tmp\/1774291952257-copilot-tool-output-tc4sre.txt | sed &#8216;s\/^Agent is idle.*[Turn 0]\/\/&#8217; | head -400<br>\u2514 401 lines\u2026<\/p>\n\n\n\n<p>\u25cf Read UI patterns analysis (shell)<br>\u2502 cat \/tmp\/1774291970965-copilot-tool-output-w1veel.txt | sed &#8216;s\/^Agent is idle.*[Turn 0]\/\/&#8217; | head -400<br>\u2514 401 lines\u2026<\/p>\n\n\n\n<p>\u25cf Read (Explore agent \u2014 wm-data-integrations)<br>\u2514 Running<\/p>\n\n\n\n<p>\u25d0 I have enough information from the two agents to provide a very thorough answer. The third agent (data integrations) is still running but I have<br>enough to synthesize a strong response. Let me write it up now and incorporate the third agent&#8217;s results when it finishes, or just proceed<br>without it since I have a lot to work with.<\/p>\n\n\n\n<p>Let me now synthesize a focused, actionable answer about what specifically from World Monitor would &#8220;slot right in&#8221; to SCYTHE. I&#8217;ll organize<br>this by what&#8217;s most valuable:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>The Focal Point Detector algorithm \u2192 ports cleanly to SCYTHE&#8217;s hypergraph as a &#8220;Hypergraph Focal Point&#8221; scorer that looks for entities with<br>multi-signal convergence<\/li>\n\n\n\n<li>The CII scoring pipeline \u2192 Could become a &#8220;Node Instability Index&#8221; for IPs\/hosts &#8211; combining behavioral signals<\/li>\n\n\n\n<li>The Monitor Search (keyword alerts) \u2192 Word-boundary regex matching for RF event streams &#8211; tiny, drop-in<\/li>\n\n\n\n<li>Virtual scrolling \/ VirtualList \u2192 SCYTHE&#8217;s recon entity list has &#8220;Load 302 more&#8221; issues &#8211; this fixes that<\/li>\n\n\n\n<li>Supercluster geo-clustering \u2192 RF emitter clustering on Cesium\/deck.gl<\/li>\n\n\n\n<li>The multi-signal blend formula \u2192 4 components (unrest\/conflict\/security\/information) maps to SCYTHE&#8217;s scoring model using flow volume,<br>anomaly detection, persistence, and temporal activity patterns<\/li>\n\n\n\n<li>The circuit breaker \/ degraded source pattern \u2192 SCYTHE already has some of this but could be more systematic The quickest wins are Monitor Search at 170 lines that ports in an afternoon, VirtualList which immediately solves the pagination bug, the focal<br>score algorithm as pure math in about 50 lines, and the CII scoring formula which applies directly to SCYTHE&#8217;s node scoring.<\/li>\n<\/ol>\n\n\n\n<p>\u25cf I have everything I need from the two completed agents. Here&#8217;s the analysis:<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>&#8220;Slot Right In&#8221; Opportunities \u2014 Ranked by Effort vs. Impact<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe2 1. Monitor Search \u2192 RF Signal Watch (1 afternoon, huge UX win)<\/h2>\n\n\n\n<p>World Monitor&#8217;s MonitorPanel.ts is 170 lines \u2014 a keyword alert system with word-boundary regex matching, color-coded monitors, and<br>URL-deduplicated results. It&#8217;s completely self-contained.<\/p>\n\n\n\n<p>SCYTHE&#8217;s event stream has no equivalent. Port it directly as a Signal Watch panel:<\/p>\n\n\n\n<p># Python backend \u2014 trivial addition to rf_scythe_api_server.py<br>class SignalMonitor:<br>def <strong>init<\/strong>(self, keywords: list[str], color: str):<br>self.patterns = [re.compile(rf&#8217;\\b{re.escape(k)}\\b&#8217;, re.I) for k in keywords]<br>self.color = color<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>   def match(self, event: dict) -&gt; bool:\n       text = f\"{event.get('kind','')} {event.get('src','')} {event.get('dst','')} {event.get('meta','')}\".lower()\n       return any(p.search(text) for p in self.patterns)<\/code><\/pre>\n\n\n\n<p>The JS side is literally copy-pasteable into SCYTHE&#8217;s frontend with kind\/src\/dst substituted for title\/description.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe2 2. VirtualList \u2192 Fix &#8220;Load 302 More&#8221; Forever (half a day)<\/h2>\n\n\n\n<p>This is the most immediately valuable slot-in. Your recon panel has a \u2b07 Load 302 more of 302 remaining button that&#8217;s a symptom of rendering<br>all nodes at once. World Monitor&#8217;s VirtualList.ts solves this with a pool of ~20 DOM nodes serving thousands of items via translateY()<br>recycling.<\/p>\n\n\n\n<p>The pattern in SCYTHE&#8217;s JS:<\/p>\n\n\n\n<p>\/\/ Replace the current list renderer with this pattern<br>const vlist = new VirtualList({<br>container: reconListEl,<br>itemHeight: 48, \/\/ fixed row height<br>totalItems: entities.length,<br>overscan: 5,<br>renderItem: (i, el) =&gt; {<br>const e = entities[i];<br>el.innerHTML = <code>&lt;span class=\"entity-id\"&gt;${e.id}&lt;\/span&gt; &lt;span class=\"entity-kind\"&gt;${e.kind}&lt;\/span&gt; &lt;span class=\"mass-badge\"&gt;${e.mass?.toFixed(2)}&lt;\/span&gt;<\/code>;<br>}<br>});<\/p>\n\n\n\n<p>The VirtualList class from worldmonitor is pure vanilla JS \u2014 zero dependencies. Drop it in as-is.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe1 3. Focal Point Detector \u2192 Hypergraph Convergence Scorer (1-2 days)<\/h2>\n\n\n\n<p>This is the most intellectually interesting slot-in. World Monitor&#8217;s focal score algorithm maps almost perfectly onto SCYTHE&#8217;s hypergraph node<br>structure:<\/p>\n\n\n\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br>\u2502 World Monitor signal \u2502 SCYTHE equivalent \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 mentionCount (news mentions) \u2502 node.degree (edge count) \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 newsVelocity (mentions\/24h) \u2502 node.flow_count (recent flows) \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 signalTypes (unique signal types observed) \u2502 edge_kinds (unique edge kinds on node) \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 highSeverityCount \u2502 node.anomaly_score \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 correlationBonus \u2502 node.shadow_promotion_count \u2502<br>\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n\n\n\n<p>The scoring math ports in ~50 lines of Python:<\/p>\n\n\n\n<p>def focal_score(node) -&gt; float:<br># News analog \u2192 edge activity<br>degree_score = min(20, node.degree * 4)<br>velocity = min(10, (node.flow_count \/ 24) * 2)<br>confidence = node.avg_edge_confidence * 10<br>news_score = degree_score + velocity + confidence # 0-40<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>   # Signal analog \u2192 edge kind diversity\n   type_bonus    = len(node.unique_edge_kinds) * 10\n   count_bonus   = min(15, node.total_edges * 3)\n   severity_bonus= node.anomaly_score * 5\n   signal_score  = type_bonus + count_bonus + severity_bonus    # 0-50+\n\n   # Correlation bonus \u2014 shadow promotions are the key signal\n   corr_bonus = 10 if node.degree &gt; 0 and node.flow_count &gt; 0 else 0\n   corr_bonus += min(5, node.shadow_promotion_count * 2)        # 0-15\n\n   raw = news_score + signal_score + corr_bonus\n   urgency_mult = 1.3 if raw &gt; 70 else 1.15 if raw &gt; 50 else 1.0\n   return min(100.0, raw * urgency_mult)<\/code><\/pre>\n\n\n\n<p>This gives every node in the hypergraph a live convergence score \u2014 surfaceable in the Threat Gravity Map as a second mass channel, or as a<br>dedicated FocalPoints panel showing top 5 nodes with highest convergence right now.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe1 4. CII Scoring Formula \u2192 Node Instability Index (2-3 days)<\/h2>\n\n\n\n<p>The CII pipeline&#8217;s 4-component weighted blend is a clean model for SCYTHE&#8217;s own scoring problem:<\/p>\n\n\n\n<p>CII = unrest\u00d70.25 + conflict\u00d70.30 + security\u00d70.20 + information\u00d70.25<\/p>\n\n\n\n<p>In SCYTHE terms, rename the components:<\/p>\n\n\n\n<p>node_instability = (<br>flow_anomaly_score * 0.30 + # analog: conflict (behavioral irregularity)<br>connection_burst * 0.25 + # analog: unrest (volume spikes)<br>shadow_density * 0.20 + # analog: security (unverified threat activity)<br>temporal_persistence * 0.25 # analog: information (how long this node has been active)<br>)<\/p>\n\n\n\n<p>The most directly portable piece is the event multiplier concept \u2014 World Monitor applies different weights per country based on baseline noise<br>level. SCYTHE could apply different baseline weights per ASN or observed behavior class: a known scanner (Shodan, Censys) has a high baseline<br>and gets a low multiplier; a first-seen IP gets a high multiplier since any signal is significant.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe1 5. Supercluster RF Emitter Clustering (1 day)<\/h2>\n\n\n\n<p>World Monitor runs 4 simultaneous Supercluster instances for spatial clustering at zoom-adaptive radii. SCYTHE&#8217;s Cesium globe doesn&#8217;t<br>currently cluster RF emitters \u2014 at 1,000+ recon entities it gets visually noisy.<\/p>\n\n\n\n<p>\/\/ Drop into SCYTHE&#8217;s Cesium JS \u2014 npm install supercluster<br>import Supercluster from &#8216;supercluster&#8217;;<\/p>\n\n\n\n<p>const rfCluster = new Supercluster({<br>radius: 40,<br>maxZoom: 16,<br>map: p =&gt; ({<br>threat_level: p.anomaly_score &gt; 0.7 ? 3 : p.anomaly_score &gt; 0.4 ? 2 : 1,<br>mass: p.mass,<br>shadow_count: p.shadow_promotions<br>}),<br>reduce: (acc, p) =&gt; {<br>acc.threat_level = Math.max(acc.threat_level, p.threat_level);<br>acc.mass = (acc.mass || 0) + p.mass;<br>acc.shadow_count = (acc.shadow_count || 0) + p.shadow_count;<br>}<br>});<\/p>\n\n\n\n<p>Cluster circles sized by \u2211mass, colored by max(threat_level) \u2014 breaks apart as you zoom in to individual emitter dots. This would transform<br>the Threat Gravity Map&#8217;s usability at scale.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd35 6. Internet Outage Boost \u2192 SCYTHE Blackout Detection (additive signal)<\/h2>\n\n\n\n<p>One line from the CII scoring stood out:<\/p>\n\n\n\n<p>\/\/ Governments cut internet during crackdowns\/coups\/conflicts<br>if (data.outages.length &gt; 0):<br>outageBoost = MIN(50, totalOutages<em>30 + majorOutages<\/em>15 + partialOutages*5)<\/p>\n\n\n\n<p>World Monitor gets this from Cloudflare Radar (\/api\/cloudflare-outages). SCYTHE already sees the effect of outages (connection timeouts,<br>unreachable hosts) in PCAP data \u2014 but doesn&#8217;t label it. Adding a Cloudflare Radar feed as a lightweight enrichment source would let SCYTHE<br>cross-reference &#8220;why did this IP go dark&#8221; against known infrastructure outage events. That&#8217;s a free corroboration signal.<\/p>\n\n\n\n<p>The Cloudflare Radar API endpoint is: https:\/\/api.cloudflare.com\/client\/v4\/radar\/netflows\/timeseries?product=ATTACKS \u2014 free with a Cloudflare<br>account.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Priority Summary<\/p>\n\n\n\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br>\u2502 Item \u2502 Effort \u2502 Impact \u2502 Verdict \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 VirtualList (fix Load More) \u2502 4h \u2502 Immediate UX fix \u2502 Do first \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 Monitor Search \u2192 Signal Watch \u2502 6h \u2502 New capability, zero deps \u2502 Do first \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 Focal Score \u2192 Convergence Scorer \u2502 1\u20132d \u2502 Powers Threat Gravity Map \u2502 High value \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 Supercluster RF clustering \u2502 1d \u2502 Cesium scalability fix \u2502 High value \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 CII formula \u2192 Node Instability \u2502 2\u20133d \u2502 Richer node scoring \u2502 Medium value \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 Cloudflare Radar enrichment \u2502 2h \u2502 Free corroboration signal \u2502 Low hanging fruit \u2502<br>\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n\n\n\n<p>The top two require no architectural changes \u2014 they&#8217;re pure frontend patterns that drop into existing panels. Want me to implement any of<br>them?<\/p>\n\n\n\n<p>\u25cf Background agent &#8220;wm-data-integrations&#8221; (explore) completed.<\/p>\n\n\n\n<p>\u25d0 The data integrations agent just finished. Let me read those results and see if there&#8217;s anything worth adding to my analysis.<\/p>\n\n\n\n<p>\u25cf Find latest agent output file (shell)<br>\u2502 ls \/tmp\/copilot-tool-output-* 2&gt;\/dev\/null | tail -5<br>\u2514 6 lines\u2026<\/p>\n\n\n\n<p>\u25cf Read (Explore agent \u2014 wm-data-integrations)<br>\u2514 idle<\/p>\n\n\n\n<p>\u25d0 Now I have the third agent&#8217;s results. This is very valuable &#8211; it identified specific data integration opportunities that SCYTHE lacks. Let me<br>add this to my analysis now.<\/p>\n\n\n\n<p>Key new findings:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Cyber Threats enrichment (Feodo, URLhaus, AlienVault OTX, AbuseIPDB, C2IntelFeeds) \u2014 SCYTHE doesn&#8217;t currently cross-reference detected IPs<br>against known C2\/malware infrastructure<\/li>\n\n\n\n<li>ACLED Conflict geolocation \u2014 provides geopolitical context for IPs in conflict zones<\/li>\n\n\n\n<li>PeeringDB\/RIPEstat\/CYMRU \u2014 better ASN enrichment than MaxMind alone (and these are free)<\/li>\n<\/ol>\n\n\n\n<p>\u25cf Good \u2014 the third agent just came in with the most actionable findings. Here&#8217;s what it added to the picture:<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Addendum: Data Integration Slots (from the API layer)<\/p>\n\n\n\n<p>Two findings that change the priority list:<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd34 Biggest Gap: SCYTHE has no C2\/malware cross-reference<\/h2>\n\n\n\n<p>World Monitor&#8217;s cyber-threats.js queries 5 parallel threat intel sources and geolocates every IP:<\/p>\n\n\n\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br>\u2502 Source \u2502 What it provides \u2502 Auth needed \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 Feodo Tracker \u2502 Known botnet C2 servers \u2502 None (public) \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 URLhaus \u2502 Malicious URLs + payloads \u2502 None (public) \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 C2IntelFeeds \u2502 C2 infrastructure CSV \u2502 None (public) \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 AlienVault OTX \u2502 Threat indicators + tags \u2502 Free API key \u2502<br>\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 AbuseIPDB \u2502 IP confidence scores (0-100) \u2502 Free API key \u2502<br>\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n\n\n\n<p>The slot-in moment: every IP SCYTHE already tracks in the hypergraph could be enriched with a threat_intel dict at ingest time:<\/p>\n\n\n\n<p># Add to rf_scythe_api_server.py \u2014 runs on first observation of any new IP<br>async def enrich_ip_threat_intel(ip: str) -&gt; dict:<br>results = await asyncio.gather(<br>check_feodo(ip), # free, no key<br>check_c2intel(ip), # free, no key<br>check_abuseipdb(ip), # free key, 1000 req\/day<br>return_exceptions=True<br>)<br>return {<br>&#8220;is_c2&#8221;: any(r.get(&#8220;matched&#8221;) for r in results if isinstance(r, dict)),<br>&#8220;malware_family&#8221;: next((r.get(&#8220;malware&#8221;) for r in results if isinstance(r, dict) and r.get(&#8220;malware&#8221;)), None),<br>&#8220;abuse_confidence&#8221;: next((r.get(&#8220;score&#8221;) for r in results if isinstance(r, dict) and r.get(&#8220;score&#8221;)), 0),<br>&#8220;sources&#8221;: [r[&#8220;source&#8221;] for r in results if isinstance(r, dict) and r.get(&#8220;matched&#8221;)]<br>}<\/p>\n\n\n\n<p>A node with is_c2=True should immediately jump shadow graph confidence past the promotion threshold. That&#8217;s a direct wire into the existing<br>inference pipeline.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe1 Free ASN enrichment SCYTHE is missing entirely<\/h2>\n\n\n\n<p>The agent flagged three sources that aren&#8217;t in World Monitor either \u2014 but should be in SCYTHE since ASN context is core to RF\/network<br>analysis:<\/p>\n\n\n\n<p># CYMRU IP-to-ASN \u2014 DNS-based, completely free, real-time<br>import dns.resolver<br>def cymru_asn_lookup(ip: str) -&gt; dict:<br>reversed_ip = &#8216;.&#8217;.join(reversed(ip.split(&#8216;.&#8217;)))<br>answer = dns.resolver.resolve(f&#8221;{reversed_ip}.origin.asn.cymru.com&#8221;, &#8216;TXT&#8217;)<br># Returns: ASN | IP prefix | Country | RIR | Allocation date<br>asn, prefix, country, rir, date = str(answer[0]).strip(&#8216;&#8221;&#8216;).split(&#8216; | &#8216;)<br>return {&#8220;asn&#8221;: asn, &#8220;prefix&#8221;: prefix, &#8220;country&#8221;: country, &#8220;rir&#8221;: rir}<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PeeringDB \u2192 ASN \u2192 org name, network type (ISP\/content\/enterprise), peering policy<\/li>\n\n\n\n<li>RIPEstat \u2192 BGP prefix ranges, routing history, visibility<\/li>\n\n\n\n<li>CYMRU \u2192 DNS-based, zero latency, no API key These three together give every SCYTHE node a full network identity layer that MaxMind alone doesn&#8217;t provide.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Revised Full Priority List<\/p>\n\n\n\n<p>\u250c\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br>\u2502 # \u2502 Item \u2502 Source \u2502 Effort \u2502 What it unlocks \u2502<br>\u251c\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 1 \u2502 VirtualList \u2502 worldmonitor UI \u2502 4h \u2502 Fix Load More bug now \u2502<br>\u251c\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 2 \u2502 Signal Watch (Monitor Search) \u2502 worldmonitor UI \u2502 6h \u2502 Keyword alerts on event stream \u2502<br>\u251c\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 3 \u2502 CYMRU ASN lookup \u2502 new (not in WM) \u2502 2h \u2502 Free real-time ASN identity on every node \u2502<br>\u251c\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 4 \u2502 Feodo+C2Intel C2 check \u2502 worldmonitor API \u2502 4h \u2502 Flag known-bad IPs at ingest, boost shadow confidence \u2502<br>\u251c\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 5 \u2502 Focal Score \u2192 Convergence \u2502 worldmonitor service \u2502 1\u20132d \u2502 Live convergence scoring in Threat Gravity Map \u2502<br>\u251c\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 6 \u2502 Supercluster RF clustering \u2502 worldmonitor UI \u2502 1d \u2502 Cesium entity clustering at scale \u2502<br>\u251c\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 7 \u2502 AbuseIPDB enrichment \u2502 worldmonitor API \u2502 2h \u2502 Abuse confidence score on every new IP \u2502<br>\u251c\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 8 \u2502 Cloudflare Radar outages \u2502 worldmonitor API \u2502 2h \u2502 Corroborate dark hosts against known outages \u2502<br>\u251c\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 9 \u2502 ACLED conflict zones \u2502 worldmonitor API \u2502 4\u20135h \u2502 Geopolitical context on traffic origin \u2502<br>\u251c\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524<br>\u2502 10 \u2502 CII \u2192 Node Instability Index \u2502 worldmonitor service \u2502 2\u20133d \u2502 Richer per-node threat scoring \u2502<br>\u2514\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n\n\n\n<p>Items 3, 4, and 7 are the most asymmetric \u2014 free data sources, small implementations, but they directly feed the hypergraph&#8217;s confidence model<br>with ground truth that SCYTHE currently has no way to acquire on its own. Want me to start with any of them?<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>*Posted March 23, 2026 \u00b7 ~3,500 words \u00b7 Tags: OSINT, RF Intelligence, Hypergraph, Open Source, Threat Detection* &#8212; There are two ways to watch the world. The first is to stand back\u2014aggregate public signals, synthesize them with an LLM, render them on a 3D globe, and let the patterns speak to you. It&#8217;s elegant, scalable,&hellip;&nbsp;<a href=\"https:\/\/172-234-197-23.ip.linodeusercontent.com\/?p=5208\" rel=\"bookmark\"><span class=\"screen-reader-text\">SCYTHE vs. World Monitor: Two Visions of Intelligence, One Uncomfortable Question<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":5209,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[5,10,7],"tags":[],"class_list":["post-5208","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sigscythe","category-signal_scythe","category-the-truben-show"],"_links":{"self":[{"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/posts\/5208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5208"}],"version-history":[{"count":3,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/posts\/5208\/revisions"}],"predecessor-version":[{"id":5215,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/posts\/5208\/revisions\/5215"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/media\/5209"}],"wp:attachment":[{"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}