Reading the news is weird. You can read the same story from five different outlets and walk away with completely different impressions of what happened. Divergence shows you those differences, side by side, for every story we can cluster across 28 outlets.
Every 30 minutes, Divergence pulls articles from 27 news outlets across the political spectrum. When multiple sources cover the same story, those articles get grouped into a single event. Each event is then analyzed to extract the facts being reported and how each outlet is framing the story.
The goal is to let you see the same news event from multiple angles at once, without having 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 bias research - they're meant to give you context for the coverage spectrum, not to judge 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 7 days but stay queryable through the API with an archive token.
No editorial board. Just feeds, embeddings, and a constrained language model that outputs JSON.
RSS and API feeds from 28 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 7-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.