literature-radar
Skill1 starsChanged 13 days agoApache-2.0View on GitHub
Periodic literature radar over arXiv (Atom API) or similar scholarly feeds: runs a keyword-scored scan for a fixed time window, emits a per-day digest, and self-checks coverage before reporting. Use when the task is recurring new-paper tracking — probe the index ceiling, fetch per-category Atom feeds, score entries against a tiered keyword list, verify counts and coverage depth, write a daily or backfill report, tune the keyword list with quantified recall/noise deltas, or diagnose why a known paper was missed. Input: a keyword config, a scan window [S, E), and a scan cursor. Output: digest markdown, an updated cursor, and a machine-checkable self-check log. It works on abstracts only: it never reads full texts and never builds paper cards (use paper-card for that).
In this repository7 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- evidence-auditSkill
- paper-cardSkill
- proposal-forgeSkill
- research-opsSkill
- synthesis-matrixSkill
The file
Files
literature-radar
One run answers one question: what appeared in this window, and can I prove the window was actually covered?
The second half is the hard half. A sweep that returns nothing looks identical to a sweep that failed, and both look identical to a sweep that was configured to find nothing.
The run
| Step | Do | Refuse to proceed when |
| 1 — window | fix start, end, and per-source floor; write them down before querying | the window overlaps the previous run without a stated reason |
| 2 — query | one constrained query per source; page with a fixed page size | a count comes from a compound query |
| 3 — verify transport | per source: status, item count, and a payload-size sanity check | status is not ok — the item count then means nothing |
| 4 — score | keyword and anchor match, with word boundaries on both sides | the profile changed this run and no regression was run |
| 5 — report | items with scores, plus the empty-window evidence when the count is zero | the window was empty and no evidence was produced |
| 6 — write state | cursor, push log delta, delivery note | the cursor would be raised without a per-source floor |
→ references/window-definitions.md for the nine window terms, each of which changes the result when defined differently.
→ references/rate-limits.md for transport behaviour: rate limiting, connection failures, truncated payloads, and the two counting rules that are wrong in most implementations.
→ references/checking.md for the four end-of-run checks and the evidence an empty window must carry.
→ references/tuning.md for changing the profile without breaking the corpus it was tuned on.
→ references/pipeline-ops.md for long runs, request batching, probe isolation, and the copied-script trap.
Scripts
Five, standard library only. scan.py fetches one window, score.py applies the profile, selfcheck.py runs the four checks above, regress.py runs the six tuning checks, miss_diag.py explains one absence. Each one is a step of the run table, not a replacement for it: the report, the push-log delta and the cursor are still written by whoever is running the day.
python scripts/scan.py --out _out/2026-01-07 --since 2026-01-01
python scripts/score.py --scan-dir _out/2026-01-07 --config profile.json
python scripts/selfcheck.py --out _out/2026-01-07 --expect-requests 4scan.py --corpus <dir> replays Atom files already on disk with no network — the path the tests use, and the one to reach for before blaming the profile for an empty window.
Hard rules
- A zero-result report must carry its own proof. "Nothing was published" requires three things: the newest item's date is older than the window start; the shallowest source was walked back past the start; a control query returns items. Without all three, write "the window was not covered", not "nothing was published". Counter-example: a zero reported because a request died at the transport layer; the control query would have shown the source was reachable the whole time.
- Never extrapolate a rate limit from someone else's run. A backoff value is a measurement of one client on one network at one hour. Re-measure, then use yours. Counter-example: a run inheriting a documented wait four times longer than needed, costing most of an hour per failure.
- A count must come from a single-constraint query. Counts returned for compound queries with OR groups are not comparable across queries. Counter-example: a "1,204 results" headline from a query that silently dropped its date clause.
- Copying last period's script is the most expensive shortcut in this skill. After copying, grep every path and identifier to confirm it points at the current period, and confirm the target directory was empty before the run. Counter-example: a script that wrote into the previous period's directory and printed
SKIP already-good, producing a report that was complete and entirely from the wrong week. statusis part of the data. An item count with no transport status cannot be interpreted, and a truncated run that reports 40 items is more dangerous than one that reports 0.
Output contract
A run delivers, in this order:
- report — items with score and reason, or the empty-window evidence triple
- push-log delta — new IDs only, checked against the log before writing
- cursor —
covered-throughplus a per-sourcedeepestandstatus - self-check — request count reconciled, server count compared to local, per-source completion, shallowest source reaching the window start
Routing
| Task | Go to |
| define what "this window" means | references/window-definitions.md |
| fetch, score, check, regress or diagnose one run | scripts/ (5 files) |
| the run is being rate-limited or returns nothing | references/rate-limits.md |
| is this run trustworthy | references/checking.md |
| change the keyword profile | references/tuning.md |
| the run is long, or a copy of last period's script | references/pipeline-ops.md |
| read the papers found | paper-card |
| compare what was found | synthesis-matrix |
| record the cursor in a shared state layer | research-ops |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

