Skip to content
Garot Conklin edited this page Jun 10, 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 and reduces them through a layered intelligence hierarchy — from raw articles to daily tactical signals, to weekly emerging patterns, to monthly strategic shifts.

The result is not a news summary. It is a longitudinal intelligence system that grows more analytically powerful the longer it runs.

Three reports are generated automatically:

  • Daily brief — published every morning at 4:00 AM via a five-pass pipeline (Passes 1–5)
  • Weekly summary — published every Monday at 6:00 AM via Pass 6, identifying story arcs, watch list evolution, and structural patterns across the week
  • Monthly intelligence — published on the 1st of each month at 7:00 AM via Pass 7, synthesizing daily and weekly data into month-scale trend analysis (partial months supported)

All 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 intelligence hierarchy

Signal reduces noise through three layers. Each layer reads from the layer below it and operates at a longer time horizon.

[18 RSS Sources — full political spectrum]
              ↓
── TACTICAL (Daily, 4:00 AM) ────────────────────────────────────────────────

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


── PATTERNS (Weekly, Monday 6:00 AM) ────────────────────────────────────────

[signal.db — 7 daily briefs]
              ↓
[Pass 6]  Weekly synthesis
          → Story arcs, what escalated, what was buried,
            blindspot of the week, watch list evolution
              ↓
        [Weekly report → GitHub Pages]


── STRATEGIC (Monthly, 1st of month 7:00 AM) ────────────────────────────────

[signal.db — daily briefs + weekly summaries for the month]
              ↓
[Pass 7]  Monthly synthesis
          → Month in review, story arcs, watch list scorecard,
            coverage patterns, emerging actors
              ↓
        [Monthly 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 all six jobs, manual triggers, logs
Weekly-Reports Weekly synthesis — how it works, when it runs, output format
Monthly-Reports Monthly synthesis — partial months, sections, Jul 1 install
Social-Cards Bluesky social cards — setup, card designs, manual posting
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
Testing Test suite — running, coverage, conventions, adding tests
Future-Roadmap Intelligence synthesis roadmap: monthly, quarterly, and beyond

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
Card rendering Playwright (headless Chromium) + Jinja2
Social posting atproto (Bluesky AT Protocol client)
Terminal UI Rich
Persistence SQLite (signal.db)
Publishing GitHub Pages + GitHub Actions
Scheduling macOS launchd (6 jobs)
Config YAML (config/sources.yaml) + .env

Infographic

Signal Infographic

Clone this wiki locally