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

Signal — Political Intelligence Pipeline

Signal Banner

Signal is a fully automated, five-pass 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 a daily analyst-style intelligence brief — not a news summary.

The output is published automatically to flexrpl.github.io/signal every morning at 5:00 AM.


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 five-pass pipeline

[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
          → Analyst-style brief: Situation Overview, Key Actors, What Isn't Said,
            Connections & Patterns, Watch List, Analyst Note

[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 Deep dive into the five-pass system, data flow, and component design
Configuration All sources.yaml options, adding/removing sources
LLM Providers Claude vs Ollama — when to use each, how to switch
Scheduling launchd setup, changing the schedule, manual triggers
GitHub Pages Publishing How reports are published, the GitHub Actions workflow
Report Format What each section of the 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 Phase 2 weekly summary and other planned enhancements

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)

Clone this wiki locally