Skip to content
Garot Conklin edited this page May 20, 2026 · 9 revisions

Signal — Political Intelligence Pipeline

Signal Banner

Signal is a fully automated political intelligence pipeline. It ingests RSS feeds from 18 news sources spanning the full political spectrum, uses an LLM to identify entities, cluster stories, analyze cross-spectrum framing, detect non-obvious patterns, and synthesize an analyst-style intelligence brief — not a news summary.

Two reports are generated automatically:

  • Daily brief — published every morning at 5:00 AM via a five-pass pipeline (Passes 1–5)
  • Weekly summary — published every Sunday at 11:00 PM via a single synthesis pass (Pass 6) that looks across the full week of daily briefs to identify story arcs, watch list evolution, and structural patterns

Both reports are published automatically to flexrpl.github.io/signal.


What makes this different from a news aggregator

A typical news aggregator shows you headlines. Signal does something different:

  • Cross-spectrum framing analysis — for every story covered by multiple outlets, it identifies what the left says, what the right says, what each side is omitting, and what the consensus facts actually are
  • Non-obvious pattern detection — it looks across all stories simultaneously to find hidden connections, coordinated narratives, and suspicious timing that only become visible at the macro level
  • Blindspot identification — it explicitly flags stories that only one side is covering, and analyzes what that pattern of selective coverage reveals
  • Delta tracking — each run checks the previous run's watch list to identify what has materialized, escalated, or dropped off

The pipeline

── DAILY (5:00 AM) ─────────────────────────────────────────────────────────

[18 RSS Sources across the full political spectrum]
              ↓
[Pass 1]  Entity extraction per article
          → topic, key claim, people, orgs, legislation, locations, sentiment, framing
              ↓
[Pass 2]  Algorithmic clustering (Union-Find)
          → title similarity (rapidfuzz) + entity overlap → story clusters
              ↓
[Pass 3]  Per-cluster cross-spectrum analysis
          → consensus facts, contested claims, left/right framing, omissions, significance
              ↓
[Pass 4]  Cross-story correlation
          → hidden connections, narrative patterns, anomalies, blindspot analysis, watch list
              ↓
[Pass 5]  Final brief synthesis
          → Situation Overview, Key Actors, What Isn't Said,
            Connections & Patterns, Watch List, Analyst Note

[Daily HTML Report → signal.db → GitHub Pages]


── WEEKLY (Sunday 11:00 PM) ─────────────────────────────────────────────────

[signal.db — past 7 days of daily briefs and correlation data]

[Pass 6]  Weekly synthesis (single LLM call)
          → Story arcs, escalation, buried stories, blindspot, next-week watch list

[Weekly HTML Report → GitHub Pages]

Quick links

Live site flexrpl.github.io/signal
Brief archive flexrpl.github.io/signal/archive.html
Repository github.com/fleXRPL/signal

Wiki pages

Page What it covers
Quick Start Get the pipeline running in under 10 minutes
Architecture Data flow, component design, SQLite schema, LLM call budget
Configuration All sources.yaml options, adding/removing sources
LLM Providers Claude vs Ollama — when to use each, how to switch
Scheduling launchd setup for daily and weekly jobs, manual triggers
Weekly-Reports Weekly synthesis — how it works, when it runs, output format
GitHub-Pages-Publishing How reports are published, the GitHub Actions workflow
Analytics GA4 setup, what is tracked, how to view data or disable
Report-Format What each section of the daily brief means and how it's generated
Troubleshooting Common issues and fixes including the macOS crash investigation
Development Code structure, adding a new pass, testing, SonarQube
Future-Roadmap Planned enhancements: parallelization, test suite, delivery

Technology stack

Layer Technology
Language Python 3.14
LLM (default) Claude Code CLI (claude -p)
LLM (alternative) Ollama (qwen2.5:14b) — interactive/manual only
Feed parsing feedparser
Full-text extraction httpx + BeautifulSoup4 + lxml
Clustering rapidfuzz (fuzzy title matching) + Union-Find
Terminal UI Rich
Persistence SQLite (signal.db)
Publishing GitHub Pages + GitHub Actions
Scheduling macOS launchd
Config YAML (config/sources.yaml)

Infographic

Signal Infographic

Clone this wiki locally