xummary
Your X timeline, read once a day instead of scrolled all day.
xummary pulls a few pages of your For You and Following feeds, sends them to Claude, and gives you one grouped briefing of what actually happened. No feed, no infinite scroll, no rage bait — a page you read and close.
<p align="center" <img src="docs/screenshot.png" alt="The Xummary window showing a briefing: three sections, each one story, with @handles picked out in the accent colour" width="700" </p
Two front ends, one engine:
| | | | --- | --- | | cli/ | a Rust terminal app | | macos/ | a SwiftUI window that runs the CLI and renders it |
In the terminal
## ZEVENT 2026 occupe la timeline
Le ZEVENT domine la journée, entre extraits drôles et agacement.
@Palomarlena et @Tu_le_C relaient des séquences de stream, et
@FrenchRapUS annonce un maillot dédicacé par Messi.
## GPT-6 Astra et Perplexity
@perplexity_ai a mis GPT-6 Astra à disposition dans Perplexity
Computer pour les abonnés Pro et Max.
## Also- un client Spotify natif a passé 3 200 étoiles GitHub, via @paolino
- @JLMelenchon revendique 12 000 personnes à la Braderie de Lille
## Install
You need [Rust](https://rustup.rs), the [`claude`
CLI](https://claude.com/claude-code) already logged in, and a Chromium-family
browser logged into x.com.
git clone https://github.com/kernoeb/xummary cd xummary/cli cargo build --release rm -f ~/.local/bin/xummary # replacing in place breaks the signature cp target/release/xummary ~/.local/bin/
Then, for the macOS app:
cd ../macos ./build.sh open Xummary.app
## Use
xummary # both feeds, 10 pages each, last 24 hours xummary --hours 48 xummary --lang English # the default is French xummary --print # plain stdout, pipe it anywhere
Full options in [`cli/README.md`](cli/README.md).
## How it works
1. **Session** — decrypts `auth_token` and `ct0` from your browser's cookie
database. On macOS the AES key comes from the *"<Browser> Safe Storage"*
keychain entry, so the first run asks for permission.
2. **Fetch** — calls X's web GraphQL API (`HomeTimeline` and
`HomeLatestTimeline`) with the bearer token x.com ships to every browser.
3. **Filter** — drops anything older than `--hours`, dedupes across the two
feeds, keeps the 600 most recent posts.the answer back.
Both feeds are fetched at the same time, and paging stops as soon as a page falls outside the window. Fetching takes about 8 seconds; the summary is the rest, and varies. Every run ends by reporting its own breakdown — 600 posts · fetch 9s · wait 4s · total 41s — where wait is the time to the first token.