Skip to content

paper-ragRAG over your PubMed library

Hybrid dense + BM25 retrieval over ingested papers, packaged as a Claude Code plugin.

paper-rag

Where to go ​

Design commitments ​

RuleWhat it means for you
doc_key is identityEvery paper's key is its PMID, or a sha256 of the file if there's none — the same key tags its directory, every Chroma chunk, and its BM25 entries, so re-ingest is delete-then-reinsert by key, not by search.
Index stays in syncAny ingest that touches Chroma triggers a full BM25 rebuild for that collection — the two never drift apart.
Metadata never touches the indexcite and mine read metadata.json straight off disk; neither ever opens Chroma or BM25.
Models don't mixEach embedding model gets its own Chroma collection and BM25 file — switching models means a fresh index, never a blend.
Homes are fully separateA home's chroma/, bm25/, papers/, and config.json never cross into another home.
Answers are groundedquery.py only ranks and returns JSON — it never writes prose. Claude cites every claim by PMID and appends real BibTeX from your own library.

See Concepts for the reasoning behind each of these.