Reading the news is weird. You can read the same event from five different outlets and walk away with completely different impressions of what happened. Divergence shows you where those accounts line up, split, and leave facts out.
Every 30 minutes, Divergence pulls articles from 45 news outlets across the political spectrum. When multiple sources cover the same real-world event, those articles get grouped into a single record. Each event is then analyzed to extract reported facts, omissions, disputes, and framing differences.
The goal is to show where coverage diverges at the event level, without asking you to tab between a bunch of different sites.
Each event gets a score from 0 to 100 based on how differently the sources are covering it. The score is generated by a language model that reads all the articles in a cluster and looks for differences in framing, emphasis, and factual claims. It's not perfect, but it's a reliable signal for which stories have the most disagreement worth reading.
Each event includes a list of specific claims labeled as confirmed, claimed, or disputed. Confirmed means multiple credible sources agree and there's an official basis. Claimed means one source reported it without corroboration. Disputed means sources directly contradict each other on it.
This is AI-generated, so treat it as a starting point, not a final verdict. Click through to the original articles when something matters to you.
We pull from every outlet below, refreshing every 30 minutes. Bias labels are rough classifications based on widely-cited media research - they are context for the coverage spectrum, not judgments on individual articles.
Articles are grouped using text similarity, not keyword matching. Two articles about the same event will have similar language and context even if the headlines use completely different words. We run a local embedding model (BAAI/bge-base-en-v1.5) to detect that similarity and cluster the articles together.
A story needs at least 2 sources to show up in the feed. Events drop off the main feed after 14 days but stay queryable through the API on a Max-tier key.
No editorial board. Just feeds, embeddings, and a constrained language model that outputs JSON.
RSS and API feeds from 45 outlets. Full text via trafilatura, falling back to newspaper3k, Wayback, then the feed summary. Deduped by URL.
Sentence embeddings (768-dim) group articles into events at cosine similarity 0.72 or higher. New articles merge into existing 14-day events first.
Claude reads each cluster and tags per-outlet framing - critical, supportive, neutral, dismissive, alarmist, international.
The model sums four dimensions into a divergence score from 0 to 100. Results land in the database and ship straight to the feed.
The model is asked to score each event across four independent axes, then sum them. It's explicitly told not to round to multiples of 5 - every point should be defensible.
Divergence is a one-person project. There is no publisher, no investor, and no ad network. Nothing here tracks you beyond anonymous page counts.
The API is open with public rate limits - see the docs.