--- name: scientific-deep-research description: > Literature research on a scientific question: find relevant papers (arXiv, OpenAlex, Semantic Scholar), prefer the peer-reviewed version of arXiv preprints (Crossref, dblp), download the PDFs, extract and read the text, and write research.md with structured per-paper summaries, a synthesis and a references.bib in BibTeX. Use for "survey the literature", "find papers on", "state of the art", "related work", or any task that needs citations. --- # Scientific deep research Output: `research.md` (summaries + synthesis), `references.bib`, and the PDFs in `papers/`. Every claim in research.md is tied to a paper you actually opened; every BibTeX entry comes from a resolver, never from memory. Tool: [papers.py](./papers.py) (stdlib only; `pip install pymupdf` for `text`). Copy it into the project: `cp /papers.py .`. Be polite to the APIs: one call per second, `CONTACT_EMAIL=you@uni.de` in the environment. ## Procedure 1. **Frame the question** in one sentence plus 3-6 search phrases (synonyms, method names, the application). Write them at the top of research.md. 2. **Search:** `python papers.py search "" --max 25 [--since 2018]` for each phrase. Merged, deduplicated candidates land in `candidates.json`, ranked by citations (recent papers have few - don't drop them for that). 3. **Screen** by title + abstract (`candidates.json`): keep 8-15 papers that answer the question, including 2-3 recent ones and the most-cited classic. Note why each was kept in one line. Follow references of the best paper if coverage is thin (`search` with its key terms). 4. **Resolve the citable version:** `python papers.py resolve ` for every kept paper. For an arXiv preprint it looks for the journal or conference version (Semantic Scholar -> Crossref -> dblp) and prints which to cite. Cite the published version when one exists; otherwise cite the preprint and mark it `(preprint)` in research.md. 5. **BibTeX:** `python papers.py bibtex ` -> append to `references.bib`. Keys are ``; use exactly these keys in the text as `[@key]`. One entry per paper, no duplicates. 6. **Download and read:** `python papers.py download --out papers/` (arXiv PDF, or the open-access copy OpenAlex knows; otherwise say "no OA PDF" and work from the abstract, marked as such). Then `python papers.py text papers/x.pdf` and read the .txt with `read_file` in ranges: abstract, introduction, method, results tables, conclusion. Don't read reference lists. 7. **Summarize each paper** with the template below - numbers from the results, not adjectives. 120-200 words each. 8. **Synthesize:** what the field agrees on, where results conflict, which method fits the question, open problems. Reference papers by key. 9. **Verify before finishing:** every `[@key]` in research.md exists in references.bib and vice versa (`grep -o '@\w*' research.md | sort -u` against `grep -o '^@\w*{\K[^,]*' references.bib`); every summary names the version read (published / preprint / abstract only). ## research.md template ```markdown # Date, search phrases, databases, number screened / kept. ## Summary of findings (10-15 lines) ...with [@key] references... ## Papers ### [@key] Authors, venue + year (or "arXiv preprint"), DOI/arXiv, read: full text | abstract only - **Problem:** ... - **Method:** ... - **Data / setup:** ... - **Results:** the numbers (metric, value, baseline, dataset) - **Limitations:** stated by the authors or evident - **Relevance to the question:** ... ## Synthesis Agreement, contradictions, best-fit method, open questions. ## Not covered Papers without accessible PDF, areas not searched. ## References See references.bib (keys above). ``` ## Rules - No citation without a resolved record. If a resolver finds nothing, the paper is "unverified" and goes into "Not covered", not into the text. - Never "improve" numbers from memory; quote what the PDF says and the page. - Preprint vs. published: results can differ between versions - say which one you read. - Keep the PDFs and `candidates.json`; the user may want to continue. - 10 well-read papers beat 40 abstracts. Stop searching when new queries return papers you already have.