Jev Filtering Literature monitoring Community case ↗ 2026-09-23

Reading all of arXiv for $0.06 a day: Jev as a paper filter

One Noul question per plain-English interest, per paper. A community project validated it against real reviewers: screening 19,447 records from four unseen Cochrane reviews reproduced 96.9% of the studies they included, while removing 78% of the reading — and the misses are published too.

Reviewer-inclusion recall
100% → 96.9%
with 78% less reading

Screening recall vs human reviewers, 4 unseen Cochrane reviews, 19,447 records

Manual screeningReviewer-inclusion recall 100%
Jev (Noul per interest)Reviewer-inclusion recall 96.9%
19,447
Records screened
4 unseen Cochrane reviews
$0.0020
Measured run
50 papers · 5 s · 46,584 tokens
≈$0.06/day
All of arXiv
~1,500 papers per weekday
0 servers
Infrastructure
GitHub Actions + Pages, fork and go

TL;DR

The task

Literature monitoring is the purest System One task in the wild: for each paper and each interest, one bounded yes/no judgment with a confidence — repeated over thousands of items a day, where the cost per judgment decides whether you can afford to read everything or only a pre-filtered slice.

The alternatives each fail differently: keyword alerts are free but match words, not meaning; embedding recommenders understand meaning but quietly drop whatever does not look like your past reading; LLM digest bots understand meaning but you pay for generated sentences, so they only ever see a top-k that something else pre-filtered.

Paper Radar's bet: a typed judgment costs a fraction of a generated sentence, so you can afford ALL 1,500 daily papers — which is exactly where the other tools lose the paper you actually wanted.

How each model was used

The alternatives

  • ·Keyword alerts: free, no meaning, miss synonym space
  • ·Embedding recommenders: free after setup, anchored to past reading
  • ·LLM digest bots: understand meaning, but pre-filtered top-k + you pay for generated text

Jev (Noul per interest)

  • ·One Noul per plain-English interest, per paper — probability, not prose
  • ·Thresholds live in repo code (`radar.toml`), tunable and auditable
  • ·`calibrate` command checks Jev's calibration against your own labels
  • ·GitHub Actions at 02:00 UTC → page + RSS; audit trail committed to git

Results

Metric Manual screening Jev (Noul per interest)
Reviewer studies reproduced 100% (read all) 96.9%
Reading required 19,447 records 78% removed
Cost, full screen reviewer hours $0.60
Daily arXiv coverage top-k only (bots) ~1,500 papers · $0.06
Why it matched free text or nothing per-interest probability

What moved the needle

Judgment-not-prose economics

A Noul judgment costs a fraction of a generated sentence and needs no parsing — that is the whole reason the firehose becomes affordable without a pre-filter that might drop the paper you wanted.

Thresholds you can audit

Each interest yields a probability; your code owns the cutoffs, `calibrate` tests them against ground truth, and every decision lands in a git-committed audit trail — the reviewable version of a black-box digest.

Validated against ground truth, misses published

96.9% recall with 78% less reading is a trade a human screener can actually reason about; the 3.1% misses are listed so you can check whether they would have hurt you.

What didn't work & limits

  • ✕96.9% ≠ 100%: 3.1% of reviewer-included studies were missed. For systematic-review workflows where recall is contractual, that gap is the decision — and it is published, not hidden.
  • ✕Precision on narrow personal interests is not publicly benchmarked; the public demo deliberately runs a broad profile.
  • ✕Non-English abstracts fall under Jev's English-primary guidance; untested here.
  • ✕The $0.06/day arithmetic leans on early-access pricing (input $0.042/M tokens, output free) — TypeSafe itself says pricing sustainability is unproven.

Reproduce it

Templates for the same pattern — copy, point them at your own state, and keep the thresholds in code.

Jev 113 words

Support Ticket Triage (One Call, Three Answers)

The pattern from TypeSafe's own docs — all three questions answered in one ~300ms call.

Task: route and grade every inbound support ticket before a human sees it.

state = {
  ticket:  { subject: "...", body: "..." },
  account: { plan: "pro", age_days: 210 }
}

questions:
- department: Choice("Which team should handle this")
    billing:   "Payment, subscription or refund issues"
    technical: "Bugs, integrations or broken features"
    success:   "How-to questions and account help"
    other:     "Anything that fits none of the above"
- frustration: Score("How frustrated the customer appears")
    ["Calm, just stating facts", "Frustrated but civil", "Very angry, strong language"]
- churn_risk_now: Noul("The message signals intent to cancel right now")

Routing rule (confidence-gated): if department.confidence < 0.5, queue for a human triager.
If churn_risk_now.noul > 0.7, escalate regardless of department.
Jev 65 words

Search Reranking on a Budget

Filter 20 search hits down to the 3 worth an LLM's attention.

state = { query: "the user's original question", candidate: { title, snippet } }

questions:
- relevant: Noul("The candidate page actually answers this query")
- credible: Noul("The source looks authoritative rather than spam")

Run once per candidate. Keep results with relevant > 0.6 AND credible > 0.5,
drop the rest before anything expensive sees them (output tokens are free;
input is ~$0.04 per million tokens).