Generate digests for daily arXiv feeds.
Project description
Reading 30-60 abstracts a day can be tiring! So why not have your computer work for it while you're sipping your morning coffee?
tldrXiv is a free terminal utility that fetches today's arXiv feeds and provides you with a summary related to your research interests, drawing connections, and highlighting interesting articles. Here it is!
Install
pipx install tldrxiv
pipx is for CLI tools and will build it in its own environment, but standard pip install tldrxiv works too.
From Source
git clone https://github.com/PanosEconomou/tldrxiv
cd tldrxiv
pipx install .
it requires python >= 3.11 but it has no other dependencies.
Quickstart
export TLDRXIV_LLM_KEY="your-key" # from aistudio.google.com/apikey (it's free!)
tldrxiv config # Tell it your research and (if you want) LLM API Key
tldrxiv # That's it!
That's it! The first run fetches today's arxiv feed and queries the LLM for a digest. Subsequent runs just load it from cache unless told otherwise.
Usage
tldrxiv # today's digest
tldrxiv yesterday # yesterday's, from your archive
tldrxiv 2026-07-14 # a specific day
tldrxiv -3 # three days ago
tldrxiv yyy # three days ago
tldrxiv --force # regenerate today from a fresh feed
tldrxiv config # open the config file in $EDITOR
Any configuration variable can be overriden by an argument. For example:
tldrxiv -F hep-th math-ph # overrides the arXiv feeds specified in the config
Run tldrxiv --help for the complete list of options.
How it works
stateDiagram-v2
direction LR
fetch : fetch arXiv feed
cache : cache
llm : LLM
json : processed digest
data : data dir
md : terminal markdown
[*] --> fetch
fetch --> llm
fetch --> cache
cache --> json
llm --> json
json --> data
json --> md
md --> [*]
The metadata (i.e. abstracts and titles) of today's arXiv announcement's are requested via ATOM and stored in $XDG_CACHE_HOME/tldrxiv. Then they are filtered according to the preferences set in the config file, and a single query is formed which is then submitted to the LLM (in this case the free tier of Gemini 3.6 flash). The response is then parsed, stored in $SDG_DATA_HOME/tldrxiv, and displayed.
[!NOTE] The individual article URLs and arXiv identifiers are removed before sending to the LLM, and are reintroduced once the response is received to make sure that the ai doesn't make them up (still always check them). The LLM only has access to titles and abstracts.
Configuration
The config file lives in $XDG_CONFIG_HOME/tldrxiv/config.toml (usually ~/.config/tldrxiv/config.toml). You can also open with tldrxiv config.
[!TIP] Leave
api_key = ""in the file andexport TLDRXIV_LLM_KEYwith your API Key instead. That way your config file has no secret in it and is safe to accidentally commit without someone stealing it.
Default config and Reference
Here is the default config.toml file. When typing tldrxiv config when a config doesn't exist, it is automatically populated with the file below.
# ----------------------------------------------------- #
# ┓ ┓ ┏┓┏┓• #
# ╋┃┏┫┏┓ ┃┃ ┓┓┏ #
# ┗┗┗┻┛ ┗┛┗┛┗┗┛ #
# #
# Default Configuration File #
# #
# I commented out a bunch of the options because I #
# often have terrible terminology. Hope this works! :> #
# #
# Location: $XDG_CONFIG_HOME/tldrxiv/config.toml or #
# .config/tldrxiv/config.toml #
# #
# Config Version 0.1.0 #
# ----------------------------------------------------- #
# ----------------------------------------------------- #
# Enter your research interests to tailor the summary #
# to you #
# ----------------------------------------------------- #
[research]
work = """
This is the default description of your work. A couple
of sentences should suffice. Please replace this.
"""
interests = """
A small paragraph where you describe your research
interests perhaps beyond your current active projects.
It is supposed to be a more general interest than what
is directly relevant to you.
"""
# ----------------------------------------------------- #
# Some settings to specify what arxiv feeds you want #
# to follow etc. #
# ----------------------------------------------------- #
[arxiv]
# If you only want one feed please till keep it as a list
feeds = [ "hep-th", "math-ph", "cond-mat.str-el" ]
# What type of submissions to look at?
# Do you really want to look at replacement submissions?
types = [ "new", "cross" ]
# The maximum amount of time to wait for arXiv to send
# you the feeds
timeout = 60 # s
# ----------------------------------------------------- #
# Set up the LLM you want to use to provide you with #
# the daily arXiv digests. The default is Gemini. #
# ----------------------------------------------------- #
[llm]
# Leave blank if you want to load it by setting it as the
# $TLDRXIV_LLM_KEY environment variable. If you want to
# use your own simply write it in quotes
# (e.g "$GEMINI_API_KEY")
#
# Alternatively you can paste your key directly in
# quotes. But then don't put it anywhere online!
#
# For Gemini you can get a key for the for free tier
# from: https://aistudio.google.com/apikey
api_key = ""
# The temperature of the LLM that generates the digest.
# Honestly I don't really understand how it affects
# things, but testing showed 0.5 - 0.8 is a good range.
temperature = 0.7
# The actual link to request stuff from the LLM
# This one requests from gemini-3.6-flash, but you can
# Find more links in
url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.6-flash:generateContent"
# ----------------------------------------------------- #
# Storage settings. tldrXiv stores some files in your #
# computer. Control how many here. By default they are #
# stored in $XDG_DATA_HOME/tldrxiv and #
# $XDG_CACHE_HOME/tldrxiv #
# ----------------------------------------------------- #
[storage]
# Each day the arxiv feed is downloaded in cahce in order
# to process it. This is the max number of days before
# the feeds get deleted.
daily_arxiv = 5
# The full response from the LLM is stored as a json file
# in $XDG_DATA_HOME/tldrxiv. This is the max number of
# days before responses get deleted.
daily_digest = 60
Limitations and (hopefully) future plans
Here are some things worth knowing.
tldrxivcan only see today's scientific papers, and only abstracts. I wouldn't be able to run in the free tier if all the references and body of the preprints was fed to gemini. More importantly it only uses arXiv RSS feeds which strictly contain metadata under a Public Domain declaration and can be redistributed without attribution while the actual content of the preprints is untouched from the eyes of big tech. I do not have plans to extend this tool to use any preprint content to produce a digest.- Your work and research paragraphs are fed to Gemini. Be careful what you disclose in the work and research paragraphs. At the free tier Gemini is using the data to train the model, so don't write stuff that you wouldn't want it to be trained with.
- Past days can't be generated. Arxiv RSS feeds only exist for today. This means that if you want to process a digest from a different day you should've already downloaded the RSS feed for that day.
- It runs on a free API tier. Expect some
503: Resource is Busyerrors when using this on occasion. - FTLOG please don't use this as a substitute for actually reading the arXiv. I made this only because when I have to read 50 abstracts in the morning before my coffee kicks in I am usually half asleep by the 10th. This tool is meant to highlight what to look out for while browsing, not to substitute the reading.
Contributing
Please help.
Credits
A lot of open source stuff was used in this so here are some credits!
- Thank you to arXiv for use of its open access interoperability. This project is by no means affiliated with arXiv. I am just a fan!
- Python Packaging Guide
- The Hitchiker's Guide to Python/Packaging
- Regex Patterns in Python
- Reading TOML in Python
- Argument Parsing
- Gemini API and its Keys
- The logo is an ascii font
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tldrxiv-0.1.1.tar.gz.
File metadata
- Download URL: tldrxiv-0.1.1.tar.gz
- Upload date:
- Size: 20.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e68c0b50655690e8624b6ca9e570c2858b09eed79734c648d53586a06b78864
|
|
| MD5 |
59ddce6cffb0c7f1ab5c8b78b2f292c7
|
|
| BLAKE2b-256 |
b66591ab5baeffa69d30752d9708e8a9b87c84a7db4cd6d8d70d798a852b8c38
|
File details
Details for the file tldrxiv-0.1.1-py3-none-any.whl.
File metadata
- Download URL: tldrxiv-0.1.1-py3-none-any.whl
- Upload date:
- Size: 19.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed4450bceb360214e9e0a4b1ee6a0f256857a82a59fd478b2416ac46c4c324fc
|
|
| MD5 |
f04e7af8075824590c618f8ea9e8b9ae
|
|
| BLAKE2b-256 |
df48ad3434c10ac1a33335f3053c25c5b57f5bd7abb6b57855f2a9007220a0e5
|