-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Garot Conklin edited this page May 15, 2026
·
9 revisions
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.
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
── 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]| Live site | flexrpl.github.io/signal |
| Brief archive | flexrpl.github.io/signal/archive.html |
| Repository | github.com/fleXRPL/signal |
| 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 |
| 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 |
| 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) |
Signal · Repository · fleXRPL · Daily political intelligence — powered by local AI

