π€ Autonomous Intelligence
FeedReader's autonomous intelligence layer continuously analyzes your reading behavior and feed content to surface insights, detect patterns, and proactively guide your reading β all fully offline with no external API calls.
On This Page
β‘ Predictive Alerts
FeedPredictiveAlerts learns feed publishing patterns and generates proactive alerts
before events happen. It detects publication surges, topic shifts, breaking stories, and
anomalous publishing behavior.
Alert Types
| Type | Description |
|---|---|
publicationSurge | Predicted spike in article volume from a feed |
topicShift | Detected shift in a feed's primary topic coverage |
breakingStory | Emerging story detected across multiple feeds |
anomaly | Unusual publishing pattern (unexpected silence or burst) |
Usage
let alerts = FeedPredictiveAlerts.shared
// The engine learns from feed activity automatically.
// Check for pending alerts:
let pending = alerts.activeAlerts
for alert in pending {
print("\(alert.severity): \(alert.title) β \(alert.message)")
print("Confidence: \(Int(alert.confidence * 100))%")
}
// Dismiss or verify alerts to improve accuracy:
alerts.dismiss(alertId: alert.id)
alerts.verify(alertId: alert.id, wasAccurate: true)
NSNotification events that the UI layer can observe to show proactive cards
without user interaction.
πΈοΈ Knowledge Graph
FeedKnowledgeGraph extracts entities (people, organizations, topics, locations)
from articles using heuristic NLP, then builds a connected entity graph based on co-occurrence.
It enables discovering related past reads, emerging entities, entity timelines, and topic clusters.
How It Works
- Article titles and bodies are scanned for entities using capitalization heuristics, suffix patterns, and a built-in gazetteer
- Extracted entities become graph nodes; co-occurrence in the same article creates weighted edges
- The graph enables discovery: related articles share entities, entity timelines show narrative arcs
- Auto-monitor mode periodically detects emerging entities and posts notifications
Usage
let graph = FeedKnowledgeGraph()
// Ingest articles
graph.ingest(articleId: "a1",
title: "OpenAI launches GPT-5",
body: "Sam Altman announced...",
date: Date())
// Query the graph
let related = graph.relatedArticles(for: "a1")
let timeline = graph.entityTimeline(entity: "OpenAI")
let clusters = graph.entityClusters()
π Curiosity Engine
FeedCuriosityEngine analyzes reading patterns to identify knowledge gaps, generate
unanswered questions, and suggest exploration paths. It encourages deeper reading by detecting
surface-level engagement and nudging toward deeper understanding.
Key Concepts
- Curiosity Map: Topics with depth scores showing how deeply you've explored each area
- Gap Detection: Topics read shallowly but frequently (high breadth, low depth)
- Question Generation: Open-ended questions based on topic intersections and unexplored edges
- Exploration Paths: Suggested sequences of reads that would deepen understanding in gap areas
Usage
let engine = FeedCuriosityEngine()
// Ingest with depth signals
engine.ingest(articleId: "a1",
title: "Intro to Quantum Computing",
topics: ["quantum", "computing"],
keywords: ["qubit", "superposition"],
readingDepth: 0.3, // scroll percentage
timeSpent: 45, // seconds
highlightsMade: 0)
// Get knowledge gaps and exploration suggestions
let gaps = engine.knowledgeGaps()
let questions = engine.generateQuestions()
let paths = engine.explorationPaths()
βοΈ Debate Arena
FeedDebateArena identifies opposing viewpoints across RSS feeds on the same topic.
It extracts claims, classifies stances, clusters arguments into debate topics, calculates
balance scores, detects echo chambers, and generates cross-topic insights.
Capabilities
- Claim Extraction: Automatically extracts claims from articles and classifies stance (for/against/mixed/neutral)
- Debate Clustering: Groups related arguments into debate topics via Jaccard keyword similarity
- Balance Scoring: Detects one-sided coverage across your feed subscriptions
- Echo Chamber Detection: Identifies when your feeds consistently present only one perspective
- Bridge Concepts: Finds hidden consensus and framing gaps between opposing sides
π° Narrative Tracker
FeedNarrativeTracker tracks evolving story narratives across feeds over time.
It groups related articles into "narrative threads," detects how stories develop (new info,
contradictions, corrections, escalations), and proactively surfaces stories needing follow-up.
Features
- Auto-groups related articles into narrative threads via keyword similarity
- Detects narrative shifts: tone changes, contradictions, escalations
- Flags developing stories that need follow-up attention
- Generates narrative timeline summaries
- Identifies information gaps and unanswered questions within a story arc
π‘ Signal Booster
FeedSignalBooster monitors articles across all subscribed feeds and detects
when multiple independent sources converge on the same topic within a time window.
Convergence from independent sources indicates a trending or breaking story worth your attention.
How It Works
- New articles are tokenized into keyword n-grams
- Keywords are grouped into topic clusters using Jaccard similarity
- When a cluster hits the convergence threshold (N feeds in a time window), a signal boost triggers
- Boosted topics are ranked by signal strength (feed count Γ recency)
β¨ Serendipity Engine
FeedSerendipityEngine finds unexpected connections between articles
across different feeds. Unlike similarity search (which finds similar articles), this engine
specifically looks for surprising connections β articles linked through bridging concepts,
lateral associations, or thematic contrasts.
Key Features
- Serendipity Paths: Chains of loosely connected articles forming unexpected reading journeys (AβBβC where A and C seem unrelated)
- Bridge Concepts: Concepts that connect disparate topics in surprising ways
- Surprise Scoring: Ranks discoveries by how unexpected they are β the less obvious the connection, the higher the score
π₯ Impact Tracker
FeedImpactTracker measures how influential articles are over time. It detects
when later articles reference, follow up on, or relate to tracked articles, building an
evolving "impact score" through lifecycle phases.
Lifecycle Phases
| Phase | Description |
|---|---|
| π± Emerging | Article just published, initial ripples detected |
| π Growing | Increasing follow-ups and citations across feeds |
| π₯ Peaking | Maximum cross-feed attention and engagement |
| π Fading | Activity declining, story winding down |
| π€ Dormant | No recent activity, story archived |
Alert Types
The tracker fires 6 alert types: viral detection, phase transitions, cross-feed spread, follow-up notifications, citation alerts, and contradiction detection.
π‘οΈ Burnout Detector
FeedBurnoutDetector monitors reading patterns for signs of information overload.
It produces a BurnoutReport with a 0β100 risk score, individual signal breakdowns,
trend direction, and actionable suggestions.
Monitored Signals
- Completion Rate Decline: Opening but not finishing articles
- Excessive Session Frequency: Doom-scrolling detection
- Late-Night Binges: Unhealthy reading hours
- Feed Switching Rate: Rapid feed-hopping without reading
- Unread Pile-Up: Growing backlog stress indicator
- Reading Time Spikes: Sudden increases in daily reading time
π§ Autopilot
FeedAutopilot is an autonomous reading queue curator that learns your preferences
and auto-generates a prioritized daily reading queue within a configurable time budget.
How It Works
- Observes reading history to build a preference model (topics, feeds, article lengths, times)
- Scores unread articles with a weighted multi-factor model
- Selects the best articles that fit within your time budget
- Provides "why" explanations for each pick
- Learns from accept/skip/snooze feedback to improve over time
Configuration
let autopilot = FeedAutopilot.shared
// Set daily time budget
autopilot.config.dailyTimeBudgetMinutes = 30
// Adjust diversity (0.0 = all favorites, 1.0 = maximum variety)
autopilot.config.diversityWeight = 0.3
// Generate today's queue
let queue = autopilot.generateQueue()
for pick in queue {
print("\(pick.article.title) β \(pick.reason)")
}
π Inbox Zero
FeedInboxZero helps systematically clear your unread article queue. It analyzes
the backlog, categorizes articles into action buckets, suggests batch operations, and tracks
progress toward inbox zero with streaks and milestones.
Action Buckets
| Bucket | Criteria |
|---|---|
| π΄ Must Read | High relevance, from favorite feeds |
| β‘ Quick Scan | Short articles, low-medium relevance |
| π¦ Archive | Low relevance, duplicated content |
| β° Defer | Interesting but not urgent, scheduled for later |
| ποΈ Bulk Dismiss | Noise, duplicates, stale content |
Features
- Clearance plans with estimated time per bucket
- Daily/weekly clearance velocity tracking with zero-date prediction
- Streak awards for consecutive days reducing the queue
- Backlog accumulation pattern detection with feed adjustment suggestions
- Auto-archive for articles past configurable staleness threshold