<search_backend>
For database search execution, use the CLI backends owned by the literature-review skill, located in its scripts/ directory. Invoke each by its absolute path (uv run <literature-review-dir>/scripts/X.py …); never cd into the skill directory. Anchor the review workspace with an absolute --workspace "$(pwd)/review/{slug}" under the directory where the user invoked the skill — never relative, which would write into the installed plugin.
Prerequisite — uv must be installed. Run bash <plugin-root>/scripts/setup.sh once. See the literature-review skill's <search_backend> section for full backend details, invocation patterns, and fallback install instructions.
| Source | Script | Role in PRISMA |
|---|---|---|
| OpenAlex | openalex_cli.py | Primary cross-disciplinary database — citation counts, author/institution metadata |
| Europe PMC | europepmc_api.py | Life-science full text; forward/backward citation chaining; preprint coverage via SRC:PPR |
| arXiv | search_arxiv.py | Grey literature for CS/physics/quant-bio preprints |
| Full text | read_paper.py | Retrieval for eligibility assessment and extraction; logs abstract-only for "reports not retrieved" in the PRISMA flow |
For each database, record verbatim:
- The exact query string
- The date executed
- The total hit count (
hitCountfield for Europe PMC, length ofresultsfor OpenAlex/arXiv after pagination)
This metadata feeds the PRISMA flow diagram and the supplementary search log required for publication.
All review state lives in review/{slug}/ exactly as defined in the literature-review skill's protocol: protocol.md, corpus.json, papers/{id}/, synthesis.md. corpus.json is the source of truth for every PRISMA flow count. Keep it current as you go: every screening decision needs a status and, when excluded, a reason; every retrieved paper needs read_paper.py's status written into its fulltext field. Records left at null are counted as unscreened or not retrieved, and the flow numbers will silently under-report.
</search_backend>
1. Protocol development (PROSPERO-ready)
- PICOTS framework: Population, Intervention, Comparison, Outcomes, Timing, Setting.
- Search logic: Exhaustive term expansion (MeSH + Emtree synonyms + free-text); translate the same Boolean intent into each backend's syntax.
2. PRISMA 2020 execution
- Flow diagram: Track Identification → Screening → Eligibility → Inclusion with hit counts per database.
- Deduplication: Cross-database dedup by DOI, then by normalized title + first-author surname + year.
3. Risk of Bias analysis
- Tools: Cochrane RoB 2.0 (RCTs), ROBINS-I (non-randomized), QUADAS-2 (diagnostic accuracy).
- Synthesis decision: Quantitative meta-analysis only when heterogeneity (
I²) and effect-measure compatibility permit; otherwise structured qualitative synthesis.
<output_format>
Systematic Review: [Question]
PRISMA phase: [Identification | Screening | Eligibility | Included | Synthesis] PICO(TS): P=… I=… C=… O=… T=… S=…
Search log:
| Database | Query | Date | Hits |
|---|---|---|---|
| OpenAlex | … | YYYY-MM-DD | N |
| Europe PMC | … | YYYY-MM-DD | N |
| arXiv | … | YYYY-MM-DD | N |
PRISMA flow: take "Identified" from protocol.md's logged per-database hit counts. Generate the remaining counts (after dedup, screened, excluded, retrieval, included) with uv run <literature-review-dir>/scripts/prisma_counts.py --corpus "$WS/corpus.json" — never hand-count; the script exits 1 if any exclusion lacks a reason.
- Identified: N (after dedup: N)
- Screened (title/abstract): N → excluded N (reasons in corpus.json)
- Sought for retrieval: N → not retrieved N (abstract-only)
- Full-text assessed: N → excluded N (reasons logged)
- Included: N
Evidence table:
| Study ID | Design | N | RoB | Key outcome | GRADE |
|---|
Next PRISMA steps:
- [Step]
- [Step] </output_format>