arxiv-search — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited arxiv-search (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Search arXiv through its official API for discovery, shortlisting, recent-preprint tracking, and local Markdown note generation from arXiv IDs.
skills/arxiv-search/scripts/search~/.agents/skills/arxiv-search/scripts/searchskills/arxiv-search/scripts/summarizeall: query joined with ANDti:, au:, abs:, cat:, submittedDate:, AND, OR, or ANDNOT, it is passed through unchanged--phrase.--sort submittedDate --order descending, and optionally add --days N.--category <cat> when the scope should stay narrow, for example cs.LG, cs.AI, stat.ML, or q-bio.QM.au:"Peter Nugent" and au:"P. Nugent"./polars-dovmed instead.scripts/summarize when the user wants stable local notes for specific arXiv IDs. This writes Markdown files containing paper metadata, abstract, links, and a blank ## Notes section for follow-up annotation.submittedDate:[...] queries for user-facing workflows. As observed on March 18, 2026 UTC, official arXiv API requests using submittedDate returned HTTP 500 even for the example pattern shown in the arXiv API manual. The bundled CLI therefore applies --days as a local filter on returned published timestamps instead of sending submittedDate to the API.HTTP 429 responses with backoff. For broad discovery, still prefer one scoped query over many small queries.| Task | Action |
|---|---|
| Search script | skills/arxiv-search/scripts/search |
| Summary builder | skills/arxiv-search/scripts/summarize |
| Base API | https://export.arxiv.org/api/query |
| Default mode | Plain-text terms compiled to all: query terms |
| Raw query | Pass arXiv syntax directly, e.g. cat:cs.LG AND ti:diffusion |
| Author search | Run full-name and abbreviated-first-name au: queries separately, e.g. au:"Peter Nugent" and au:"P. Nugent" |
| Exact phrase | Add --phrase |
| Recent submissions | --sort submittedDate --order descending |
| Relative date filter | --days 30 with local post-filtering |
| Category filter | --category cs.LG |
| ID lookup | --ids 2501.01234,2406.00001 |
| Write local notes | skills/arxiv-search/scripts/summarize 2501.01234 --output-dir arxiv-summaries |
| Network timeout | --timeout 20 |
| Pacing/cache | default --min-interval 3.1, --retries 2, --retry-backoff 60, cache under ~/.cache/omics-skills/arxiv-search |
| Help | skills/arxiv-search/scripts/search --help |
--output-dir (default: arxiv-summaries)--force to overwrite existing files--phrase to treat the full plain-text query as one phrase--category <cat> to constrain by arXiv category--days <N> for a recent-submission window, applied locally to returned published timestamps--sort relevance|lastUpdatedDate|submittedDate--order ascending|descending--start <N> for paging--timeout <seconds> when the network is slow or partially blocked--min-interval <seconds> to adjust the minimum interval between API calls across CLI invocations--retries <N> and --retry-backoff <seconds> to adjust retry behavior for HTTP 429--cache-dir <path> or ARXIV_SEARCH_CACHE_DIR to choose the local response cache and pacing-state directory--no-cache to disable response-cache reads/writes while retaining pacingti, au, abs, co, jr, cat, rn, allAND, OR, ANDNOTau: queries for the full name and abbreviated-first-name form rather than a single merged query.submittedDate:[YYYYMMDDTTTT+TO+YYYYMMDDTTTT] in routine use until arXiv-side failures are resolved.query, compiled_query, start, max_results, sort_by, sort_order)query_mode showing whether the CLI used raw or plain-text compilationdays_filter metadata when --days is usedwarnings when the CLI applied local workaroundstotal_results, items_per_page, start_index, updated)titlesummaryauthorsarxiv_idabs_urlpdf_urlpublishedupdatedprimary_categorycategoriescomment, journal_ref, doi when presentrequest_url for traceabilityscripts/summarize:## Notes sectionsubmittedDate sorting and/or a date filter--days is understood as a local filter, not a server-side submittedDate query--category or raw cat: filtersHTTP 429 Rate exceededskills/arxiv-search/scripts/search "protein language model" 10 \
--phrase \
--category cs.LG \
--sort submittedDate \
--order descending \
--days 30skills/arxiv-search/scripts/search \
'cat:cs.LG AND ti:"diffusion" ANDNOT abs:"survey"' \
15 \
--sort relevanceskills/arxiv-search/scripts/search "single cell foundation model" 10 \
--phrase \
--category q-bio.QM \
--sort submittedDate \
--order descendingskills/arxiv-search/scripts/search 'au:"Peter Nugent"' 20 \
--sort submittedDate \
--order descending
skills/arxiv-search/scripts/search 'au:"P. Nugent"' 20 \
--sort submittedDate \
--order descendingskills/arxiv-search/scripts/search --ids 2501.01234,2406.00001skills/arxiv-search/scripts/summarize 2501.01234 2406.00001 \
--output-dir arxiv-summariesIssue: Results are too broad Solution: Add --category, narrow the terms, or switch to a raw query with ti:/abs: fields.
Issue: Results are too sparse Solution: Remove an overly narrow category, drop --phrase, or use OR in a raw query.
Issue: Need the latest papers, not the most relevant Solution: Use --sort submittedDate --order descending, and add --days N when you want a recent window. The CLI applies the --days cutoff locally to avoid current arXiv API failures on submittedDate queries.
Issue: Need exact author or title matching Solution: Use a raw query with field prefixes such as au: and ti: rather than plain-text mode. For author searches, run full-name and abbreviated-first-name variants separately and report them separately.
Issue: Author search looks fragmented across name variants Solution: This is common on arXiv. Check both the full-name form and the abbreviated-first-name form, for example au:"Peter Nugent" and au:"P. Nugent", then keep those result sets separate in the final answer because the abbreviated form may be ambiguous.
Issue: Need more than an interactive page of results Solution: Use --start for paging. For very large harvesting jobs, switch to OAI-PMH or bulk metadata workflows instead of pulling huge API slices.
Issue: The request hangs or times out Solution: Retry with a smaller max_results, increase --timeout modestly, or verify whether arXiv is reachable from the current environment.
Issue: Need reusable local notes instead of JSON search output Solution: Use skills/arxiv-search/scripts/summarize <arxiv-id>... --output-dir <dir> to create Markdown summaries.
Issue: Recent-date filtering returns an arXiv server error Solution: Do not send raw submittedDate:[...] filters in normal use. Prefer --sort submittedDate --order descending --days N, which uses local published-date filtering in the bundled CLI.
Issue: HTTP 429 Rate exceeded Solution: The CLI now caches identical API URLs, waits at least 3.1 seconds between API calls, and retries 429 responses with backoff. If 429 persists, wait several minutes, reduce query count, use one broad query plus local filtering, reuse cached JSON, or verify final IDs on official arxiv.org abstract pages.
/crossref-lookup — resolve citation metadata from arXiv DOIs/polars-dovmed — switch here if the query wants peer-reviewed PMC full text instead of preprints~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.