An X archive that outlives the post
tori reads X through the free tiers of the x-cli engine, writes every tweet as canonical JSON, downloads the media beside it, and renders inert HTML and Markdown you can open straight from disk. The headline trick: it walks monthly search windows to capture a profile's full history, not just the recent window X hands out.
X is a walled garden. Posts get deleted, accounts go private or vanish, and the timeline only ever shows you a recent slice. "Save As" on a tweet gives you a dead page: the markup is built by JavaScript at runtime, so you keep a shell that renders blank and still phones home. tori (鳥, "bird") takes the opposite approach. It captures the content through the free x-cli engine, stores it as plain JSON, and renders views that run no code.
Say you want to keep Andrej Karpathy's posts on a laptop with no wifi. One command captures the profile; a second serves it back offline:
tori archive karpathy --guest
tori serve $HOME/data/tori/x/karpathy

What it does
- Captures over the free tiers. tori reuses the x-cli
xengine to read X with no API key. Tier 0 syndication needs no setup,--guestopens the guest-token tier for deeper paging, andtori auth importuses your own session for the rest. - Keeps JSON as the source of truth. Every tweet lands as
tweets/<id>.json. The HTML and Markdown views are derived from it and regenerable offline withtori render. - Localises the media. Photos, video, and avatars are downloaded beside the records, deduped, and rewritten to local paths so the archive is self-contained and movable.
- Walks the full history.
--by-monthexhausts a profile through monthlyfrom:<handle>search windows, sidestepping the ~3200-tweet timeline cap. - Stays incremental and resumable. Re-run with
tori addto fetch only what is new. Ctrl-C keeps what it already got. The output is deterministic.
Where to go next
- New here? Start with the introduction, then the quick start.
- Want to install it? See installation.
- Looking for a specific task? The guides cover archiving a whole profile, capturing threads and searches, media and views, and incremental re-capture.
- Need every flag? The CLI reference is the full surface, and repository layout maps what lands on disk.