biorxiv-search · git:20260905.3e49039 · 2026-09-05 · sha256 e6ea1759f69dc41f
biorxiv-search git:20260905.3e49039A
Immutable. This exact content is served forever at /api/v1/blob/e6ea1759f69dc41f.
---
name: biorxiv-search
description: Search bioRxiv through its official API and filter title, abstract, and author metadata. Use when finding recent biology preprints, scanning date ranges, resolving DOIs, or building author shortlists.
---
# bioRxiv Search
Search bioRxiv through its official API for recent-preprint discovery, date-range scans, DOI lookups, author shortlisting, and local keyword filtering over title, abstract, and author metadata.
## Instructions
1. Prefer this skill when the request is about bioRxiv-native preprints, recent biology submissions, or preprint metadata that may lag in PubMed, PMC, or Crossref.
2. Use the bundled CLI:
- In this repository: `skills/biorxiv-search/scripts/search`
- After installation: `~/.agents/skills/biorxiv-search/scripts/search`
3. The official bioRxiv API does not provide a general server-side keyword search endpoint.
- Use the CLI to fetch metadata from a bounded recent window or explicit date range, then filter locally.
4. When keywords are provided, search `title`, `abstract`, and `authors` by default.
- If the user wants abstract-only matching, pass `--fields abstract`.
5. Keep the search window bounded.
- Use `--days N` for recent scans or `--start-date YYYY-MM-DD --end-date YYYY-MM-DD` for explicit intervals.
- If you omit the interval, the CLI defaults to the most recent 30 days.
- The CLI converts `--days N` into an explicit date range before calling the API so pagination stays predictable.
6. Use `--category <name>` when the topic should stay narrow.
- The API accepts the bioRxiv category as a query parameter such as `cell_biology`, `genomics`, or `neuroscience`.
7. Use `--author` for author-specific requests.
- By default, consider both the supplied full-name form and an abbreviated-first-name form, for example `--author "Peter Nugent"` and `--author "P. Nugent"`.
- Do not silently merge these in the final answer. Report full-name matches and abbreviated-first-name matches in separate groups because initials can be ambiguous.
- The CLI normalizes both given-name-first and API-style `Surname, F. M.` forms. Prefer separate passes or a local partition of returned records by the literal `authors` text when you need clean buckets.
8. The API currently returns up to 30 records per page.
- The API orders an interval from oldest to newest. The CLI reads `count` and `total`, starts at the newest page, and scans backward.
- Increase `--scan-limit` when a broad query needs more of the interval inspected.
9. By default, the CLI collapses multiple versions of the same preprint and keeps the latest version for each DOI.
- Use `--all-versions` only when version-by-version output matters.
10. Treat the API output as discovery metadata.
- If exact citation details or the latest abstract-page presentation matter, verify the shortlisted candidates on bioRxiv or the DOI landing page before finalizing the answer.
11. If the user wants peer-reviewed biomedical literature or PMC full text rather than bioRxiv preprints, use `polars-dovmed` instead.
12. The CLI retries `HTTP 429` and transient `5xx` responses with bounded exponential backoff. Output records the retry policy, the exact latest-version rule, and separate match groups for every requested author form; initial-only groups remain explicitly ambiguous.
## Quick Reference
| Task | Action |
|------|--------|
| Search script | `skills/biorxiv-search/scripts/search` |
| Base API | `https://api.biorxiv.org/details/biorxiv/...` |
| Default search fields | `title,abstract,authors` |
| Recent window | `--days 30` |
| Date range | `--start-date YYYY-MM-DD --end-date YYYY-MM-DD` |
| DOI lookup | `--doi 10.1101/...` |
| Category filter | `--category cell_biology` |
| Author filter | `--author "Name"` |
| Author variant workflow | Check full-name and abbreviated-first-name variants separately; report them separately |
| Abstract-only filtering | `--fields abstract` |
| Deduping | latest version per DOI by default |
| Keep all versions | `--all-versions` |
| Network timeout | `--timeout 30` |
| Help | `skills/biorxiv-search/scripts/search --help` |
## Input Requirements
- Python 3
- One of:
- a keyword query
- a bioRxiv DOI via `--doi`
- a request for recent/date-bounded preprints with no keyword query
- Interval, category, author, field, and version flags are listed in Quick Reference; `--phrase` treats the whole query as one phrase.
- If the user asks for very old or very broad searches, widen the date range deliberately and be explicit that recall depends on the chosen interval and `--scan-limit`.
## Search Semantics
- The official bioRxiv API supports:
- recent-post windows such as `30d`
- explicit date ranges
- DOI lookup
- subject-category filtering
- The API does not support a general server-side keyword query for title or abstract.
- The CLI performs local filtering after fetching metadata.
- For predictable paging, the CLI implements `--days N` as an explicit UTC date range instead of relying on the API's relative-date shorthand.
- Interval searches start from the newest cursor and scan backward, so a bounded `--scan-limit` covers recent records first.
- Plain multi-word queries are local `AND` queries.
- `single cell atlas` means all three terms must appear somewhere in the selected search fields.
- `OR` must be written explicitly to broaden synonyms or alternate phrasings.
- `"organoid OR spheroid"`
- `"CRISPR OR Cas9"`
- Quoted phrases are preserved when possible.
- `"\"single cell\" atlas"` keeps `single cell` as one phrase and also requires `atlas`.
- `--fields abstract` restricts keyword filtering to abstracts only.
- This is the flag to use when the user explicitly cares about abstract matches.
- Author filters can fragment across name variants.
- For person-specific searches, check the full-name form and abbreviated-first-name form separately and keep those buckets separate in the final answer.
## Output
- JSON with:
- request metadata (`query`, `query_groups`, interval, category, author filters, search fields)
- API metadata (`pages_fetched`, `records_scanned`, `total_available`, `request_urls`)
- warnings about defaulted windows, scan-limit truncation, or API limitations
- normalized result records with:
- `doi`
- `title`
- `authors`
- `date`
- `version`
- `category`
- `abstract`
- `published`
- `doi_url`
- `biorxiv_url`
- `matched_in`
## Quality Gates
- [ ] The request uses a bounded recent window or explicit date range
- [ ] The chosen `--scan-limit` is large enough for the query breadth
- [ ] The selected search fields match the user request, especially when abstract matching matters
- [ ] Author-specific requests use one or more reasonable name variants
- [ ] The final answer keeps abbreviated-name matches separate and labels them as potentially ambiguous
- [ ] The answer does not overstate recall for a broad historical search
- [ ] Final candidate metadata is verified on bioRxiv when exact citation/version details matter
- [ ] Output states the latest-version policy, keeps requested author forms in separate match groups, and uses bounded retry/backoff for 429 and transient 5xx responses.
## Examples
### Example 1: Recent keyword scan over title + abstract
```bash
skills/biorxiv-search/scripts/search "single cell atlas" 10 --days 30
```
### Example 2: Broaden with `OR`
```bash
skills/biorxiv-search/scripts/search 'organoid OR spheroid' 15 \
--days 90 \
--category developmental_biology
```
### Example 3: Abstract-only keyword filtering
```bash
skills/biorxiv-search/scripts/search "CRISPR screen" 10 \
--days 60 \
--fields abstract
```
### Example 4: Author-specific search with separate variant reporting
```bash
skills/biorxiv-search/scripts/search "supernova" 20 \
--days 365 \
--author "Peter Nugent" \
--author "P. Nugent"
```
### Example 5: DOI lookup
```bash
skills/biorxiv-search/scripts/search --doi 10.1101/682021
```
## Troubleshooting
**Issue**: Results are too broad
**Solution**: Narrow the interval, add `--category`, restrict with `--fields`, or replace a loose query with a phrase or explicit `OR` terms.
**Issue**: Results are too sparse
**Solution**: Increase `--days` or widen the date range, raise `--scan-limit`, and add alternate query terms with explicit `OR`.
**Issue**: Need abstract matches, not title matches
**Solution**: Use `--fields abstract`.
**Issue**: Author search looks incomplete
**Solution**: Repeat `--author` with explicit variants such as `"Peter Nugent"` and `"P. Nugent"`. If a middle initial is known, add that too, for example `"Peter E. Nugent"` and `"P. E. Nugent"`. Keep these result sets separate in the final answer because abbreviated forms can be ambiguous.
**Issue**: The API returns multiple versions of the same preprint
**Solution**: Keep the default deduped output, or pass `--all-versions` if version-level output matters.
**Issue**: Broad historical search may be missing expected hits
**Solution**: This usually means the interval or `--scan-limit` was too narrow. Widen them deliberately and say so in the final answer.
**Issue**: Need peer-reviewed literature rather than preprints
**Solution**: Use `polars-dovmed` or another peer-reviewed-literature workflow instead of bioRxiv metadata search.
## Related Skills
- `/crossref-lookup` — resolve citation metadata from bioRxiv DOIs
- `/polars-dovmed` — switch here if the query wants peer-reviewed PMC full text instead of preprints