Feed
arXiv Atom API
One request per run, sorted newest first, with the window widening from 48 hours to a week when the day is thin
Technical overviewApplied AI engineering and output verification
A daily research digest that has to prove every claim it publishes.
Source code
The repository is private. The architecture, engineering decisions, and verified evidence are documented below.
01
Every morning the digest reads the day's new AI submissions to arXiv, selects three, pulls each paper's body where arXiv renders it to HTML, and publishes technical notes as a static site. Because the notes name architectures, datasets and benchmark scores, two automated checks run before anything is published: the model must quote the fragment its result came from, and every figure it writes must appear in the source text. It is live at papers.pesanth.com.
02
Feed
One request per run, sorted newest first, with the window widening from 48 hours to a week when the day is thin
Full text
The paper body for submissions arXiv renders, with references, appendices and math markup stripped and tables kept
Model step
Reads a 40 paper shortlist and returns three with a stated reason each
Model step
Produces mechanism, method specifics, headline figures and limitations from a 14k character extract
Inference
A hosted free tier by default, or a local model, behind one interface
Gate
The quoted fragment must appear in the source, compared on words so punctuation cannot fail an honest quote
Gate
Every number in the result, the headline figures and the method details must appear in the source
Policy
One retry with the specific failure quoted back, then the summary is published with that check marked failed
Record
One JSON file per day, the record every other output is rendered from
Web interface
A filterable index and one page per day, each page self-contained with nothing fetched at load
Automation
A systemd timer each morning, with the timezone pinned because the host clock is UTC
Public ingress
Outbound-only ingress in front of a read-only nginx container
03
A model asked to summarize a paper it half-recognizes will describe the paper it remembers, and that failure is invisible in fluent prose. Requiring a verbatim fragment turns it into a string comparison. A quote that cannot be found is discarded rather than published, and the page says the summary is unchecked.
Depth introduced the failure it needed to guard against. Once notes name datasets and benchmark scores, a plausible figure is the easiest thing to invent and the hardest to notice. Prose can be vague and still be honest; a number cannot, so every figure is matched against the source before publication.
Abstract-only notes restate the paper's own marketing sentence. The body is taken from arXiv's HTML rendering, with references and appendices removed and tables kept because that is where the measured values live. No single section may take more than a third of the extract, so a long method section cannot crowd out the results.
Each day is stored as JSON and every other output is rendered from it, so a change to the page design re-renders every past day instead of stranding old ones in an old layout. The rebuild makes no model calls, which also means it needs no credential.
Nobody watches a job that runs at seven in the morning. An unusable selection falls back to the newest three and says so, a rate limit is waited out on the provider's own retry interval, a paper with no HTML rendering falls back to its abstract, and a failed run leaves the published site exactly as it was.
04
$ python -m arxiv_digest
120 candidates from the last 96h
2 read in full · 1 abstract only
✓ 3 summaries · 1 quote unverified
✓ published papers.pesanth.com05