πŸ€– 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

TypeDescription
publicationSurgePredicted spike in article volume from a feed
topicShiftDetected shift in a feed's primary topic coverage
breakingStoryEmerging story detected across multiple feeds
anomalyUnusual 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)
Agentic behavior: In auto-monitor mode, predictive alerts post 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

  1. Article titles and bodies are scanned for entities using capitalization heuristics, suffix patterns, and a built-in gazetteer
  2. Extracted entities become graph nodes; co-occurrence in the same article creates weighted edges
  3. The graph enables discovery: related articles share entities, entity timelines show narrative arcs
  4. 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

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

Why this matters: Most readers unknowingly consume one-sided coverage. The Debate Arena makes information asymmetry visible so you can seek out missing perspectives.

πŸ“° 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

πŸ“‘ 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

  1. New articles are tokenized into keyword n-grams
  2. Keywords are grouped into topic clusters using Jaccard similarity
  3. When a cluster hits the convergence threshold (N feeds in a time window), a signal boost triggers
  4. 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

πŸ’₯ 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

PhaseDescription
🌱 EmergingArticle just published, initial ripples detected
πŸ“ˆ GrowingIncreasing follow-ups and citations across feeds
πŸ”₯ PeakingMaximum cross-feed attention and engagement
πŸŒ… FadingActivity declining, story winding down
πŸ’€ DormantNo 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

Your wellbeing matters. When burnout risk is high, FeedReader suggests taking breaks, reducing subscriptions, or enabling Autopilot to curate a smaller queue.

🧭 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

  1. Observes reading history to build a preference model (topics, feeds, article lengths, times)
  2. Scores unread articles with a weighted multi-factor model
  3. Selects the best articles that fit within your time budget
  4. Provides "why" explanations for each pick
  5. 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

BucketCriteria
πŸ”΄ Must ReadHigh relevance, from favorite feeds
⚑ Quick ScanShort articles, low-medium relevance
πŸ“¦ ArchiveLow relevance, duplicated content
⏰ DeferInteresting but not urgent, scheduled for later
πŸ—‘οΈ Bulk DismissNoise, duplicates, stale content

Features