一键导入
evaluating-paper-relevance
Two-stage paper screening - score OpenAlex abstracts, then deep dive into OA full text for specific data extraction
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Two-stage paper screening - score OpenAlex abstracts, then deep dive into OA full text for specific data extraction
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Main orchestration workflow for systematic literature research - search, evaluate, traverse, synthesize via the rp_* tools pipeline (Scopus + OpenAlex)
Collaboratively build and refine paper screening rubrics through brainstorming, test-driven development, and iterative feedback
Safely remove intermediate files from completed research sessions while preserving important data
Perform advanced search on CNKI with field filters like author, title, journal, date range, source category (SCI/EI/CSSCI/北大核心). Use when user needs precise filtered search beyond simple keywords.
Download a paper PDF/CAJ from CNKI. Requires user to be logged in. Use when user wants to download a specific paper.
Export paper from CNKI and push to Zotero, or save as RIS file. Use when user wants to save a paper to Zotero or export citation data.
| name | evaluating-paper-relevance |
| description | Two-stage paper screening - score OpenAlex abstracts, then deep dive into OA full text for specific data extraction |
| when_to_use | After literature search returns results. When need to determine if paper contains specific data. When screening papers for relevance. When extracting methods, results, data from papers. |
| version | 2.0.0 |
RC native tools — this skill's pipeline ships as four built-in RC tools. Call them directly; do not shell out to any
rp.pyscript or write curl:
rp_search({ query, limit?, min_year? })— Scopus relevance search enriched with OpenAlex abstracts + OA PDF links. The Elsevier key is built in.rp_abstracts({ dois })— batch abstracts + OA links for a DOI list (OpenAlex, no key).rp_cite({ doi, direction?, limit? })— citation traversal (direction:both/backward/forward).rp_fulltext({ doi, out? })— OA full text (Elsevier ScienceDirect OA → OpenAlex OA fallback); passoutto also save the text to a file.Results return inline as JSON (there is no
--json <file>flag). To persist a result set, save the returned JSON with the workspace file tools.
Two-stage screening process: quick abstract scoring followed by deep dive into promising papers.
Core principle: Precision over breadth. Find papers that actually contain the specific data/methods user needs, not just topically related papers.
Use this skill when:
Small searches (<50 papers):
Large searches (50-150 papers):
Very large searches (>150 papers):
Goal: Quickly identify promising papers
Abstracts are already in the records. searching-literature (rp_search) attaches
the OpenAlex abstract to each candidate, so screen from the record you already have — do
not re-fetch. If a record has "abstract": "" (OpenAlex coverage gap, ~20-50% of closed
papers), score from title + journal + citation count and flag ⚠️ No abstract; never
silently drop it. To pull abstracts for a loose DOI list (e.g. citation traversal output),
use rp_abstracts <doi> ....
Score 0-10 based on:
Decision rules:
IMPORTANT: Report to user for EVERY paper:
📄 [N/Total] Screening: "Paper Title"
Abstract score: 8 → Fetching full text...
or
📄 [N/Total] Screening: "Paper Title"
Abstract score: 4 → Skipping (insufficient relevance)
Never screen silently - user needs to see progress happening
Goal: Extract specific data/methods from promising papers
rp_fulltext is the single entry point. It tries, in order, and returns the first that works:
10.1016, 10.1006, ...) that
are open access on the personal key; returns the article XML text inline.best_oa_location — for everything else; returns an oa_pdf_url to the
free version (repository, preprint, publisher OA), if one exists.# Get a verdict + (for Elsevier OA) the text saved to disk
rp_fulltext "10.1016/j.cell.2023.01.001" --out papers/cell2023.xml
Returns one of:
{"available": true, "source": "elsevier-oa", "saved_to": "papers/cell2023.xml", "chars": 84210}
{"available": true, "source": "openalex-oa", "pdf_url": "https://.../paper.pdf"}
{"available": false, "source": "elsevier"} // Elsevier DOI but paywalled
{"available": false, "source": "not-elsevier"} // non-Elsevier + no OA copy found
Handling each case:
elsevier-oa → the XML text is on disk; grep/scan it (next step).openalex-oa → fetch the pdf_url (it's a free copy) and read it.available: false → no free full text exists. Note in SUMMARY.md
⚠️ Full text paywalled - no OA version, then score from abstract only. Do not
hand-write curl to publisher pages or Unpaywall — the rp_* tools already consulted OpenAlex's
OA index, which subsumes Unpaywall coverage.Report to user:
⚠️ No open-access full text - continuing with abstract only
or
✓ Open-access full text retrieved (openalex-oa)
Focus on sections:
What to look for (adapt to research domain):
Use grep/text search (adapt search terms):
# Examples for different domains
grep -i "IC50\|Ki\|MIC" paper.xml # Medicinal chemistry
grep -i "expression\|FPKM\|RNA-seq" paper.xml # Genomics
grep -i "abundance\|population\|sampling" paper.xml # Ecology
grep -i "algorithm\|github\|code" paper.xml # Computational
Create structured extraction (adapt to research domain):
Example 1: Medicinal chemistry
{
"doi": "10.1234/medchem.2023",
"title": "Novel kinase inhibitors...",
"relevance_score": 9,
"findings": {
"data_found": [
"IC50 values for compounds 1-12 (Table 2)",
"Selectivity data (Figure 3)",
"Synthesis route (Scheme 1)"
],
"key_results": [
"Compound 7: IC50 = 12 nM",
"10-step synthesis, 34% yield"
]
}
}
Example 2: Genomics
{
"doi": "10.1234/genomics.2023",
"title": "Gene expression in disease...",
"relevance_score": 8,
"findings": {
"data_found": [
"RNA-seq data for 50 samples (GEO: GSE12345)",
"Differential expression results (Table 1)",
"Gene set enrichment analysis (Figure 4)"
],
"key_results": [
"123 genes upregulated (FDR < 0.05)",
"Pathway enrichment: immune response"
]
}
}
Example 3: Computational methods
{
"doi": "10.1234/compbio.2023",
"title": "Novel alignment algorithm...",
"relevance_score": 9,
"findings": {
"data_found": [
"Algorithm pseudocode (Methods)",
"Code repository (github.com/user/tool)",
"Benchmark results (Table 2)"
],
"key_results": [
"10x faster than BLAST",
"98% accuracy on test dataset"
]
}
}
PDFs:
# If PDF available
curl -L -o "papers/$(echo $doi | tr '/' '_').pdf" "https://doi.org/$doi"
Supplementary data:
# Download SI files if URLs found
curl -o "papers/${doi}_supp.zip" "https://publisher.com/supp/file.zip"
CRITICAL: Use ONLY papers-reviewed.json and SUMMARY.md. Do NOT create custom tracking files.
CRITICAL: Add EVERY paper to papers-reviewed.json, regardless of score. This prevents re-reviewing papers and tracks complete search history.
Add to papers-reviewed.json:
For relevant papers (score ≥7):
{
"10.1234/example.2023": {
"status": "relevant",
"score": 9,
"source": "scopus_search",
"timestamp": "2025-10-11T10:30:00Z",
"found_data": ["IC50 values", "synthesis methods"],
"has_full_text": true,
"full_text_source": "openalex-oa"
}
}
For not-relevant papers (score <7):
{
"10.1234/another.2023": {
"status": "not_relevant",
"score": 4,
"source": "scopus_search",
"timestamp": "2025-10-11T10:31:00Z",
"reason": "no activity data, review paper"
}
}
Always add papers even if skipped - this prevents re-processing and documents what was already checked.
Add to SUMMARY.md (examples for different domains):
Medicinal chemistry example:
### [Novel kinase inhibitors with improved selectivity](https://doi.org/10.1234/medchem.2023) (Score: 9)
**DOI:** [10.1234/medchem.2023](https://doi.org/10.1234/medchem.2023)
**Journal:** J. Med. Chem. · **Cited by:** 42 · **OA:** openalex-oa
**Key Findings:**
- IC50 values for 12 inhibitors (Table 2)
- Compound 7: IC50 = 12 nM, >80-fold selectivity
- Synthesis route (Scheme 1, page 4)
**Files:** PDF, supplementary data
Genomics example:
### [Transcriptomic analysis of disease progression](https://doi.org/10.1234/genomics.2023) (Score: 8)
**DOI:** [10.1234/genomics.2023](https://doi.org/10.1234/genomics.2023)
**Data:** [GEO: GSE12345](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE12345)
**Key Findings:**
- RNA-seq data: 50 samples, 3 conditions
- 123 differentially expressed genes (FDR < 0.05)
- Immune pathway enrichment (Figure 3)
**Files:** PDF, supplementary tables with gene lists
Computational methods example:
### [Fast sequence alignment with novel algorithm](https://doi.org/10.1234/compbio.2023) (Score: 9)
**DOI:** [10.1234/compbio.2023](https://doi.org/10.1234/compbio.2023)
**Code:** [github.com/user/tool](https://github.com/user/tool)
**Key Findings:**
- New alignment algorithm (pseudocode in Methods)
- 10x faster than BLAST, 98% accuracy
- Benchmark datasets available
**Files:** PDF, code repository linked
IMPORTANT: Always make DOIs clickable links:
[10.1234/example.2023](https://doi.org/10.1234/example.2023)CRITICAL: Report to user as you work - never work silently!
For every paper, report:
📄 [N/Total] Screening: "Title..."Abstract score: X/10For relevant papers, report findings immediately (adapt to domain):
Medicinal chemistry example:
📄 [15/127] Screening: "Selective BTK inhibitors..."
Abstract score: 8 → Fetching full text...
✓ Found IC50 data for 8 compounds (Table 2)
✓ Selectivity data vs 50 kinases (Figure 3)
→ Added to SUMMARY.md
Genomics example:
📄 [23/89] Screening: "Gene expression in liver disease..."
Abstract score: 9 → Fetching full text...
✓ RNA-seq data available (GEO: GSE12345)
✓ 123 DEGs identified (Table 1, FDR < 0.05)
→ Added to SUMMARY.md
Computational methods example:
📄 [7/45] Screening: "Novel phylogenetic algorithm..."
Abstract score: 8 → Fetching full text...
✓ Code available (github.com/user/tool)
✓ Benchmark results (10x faster, Table 2)
→ Added to SUMMARY.md
Update user every 5-10 papers with summary:
📊 Progress: Reviewed 30/127 papers
- Highly relevant: 3
- Relevant: 5
- Currently screening paper 31...
Why this matters: User needs to see work happening and provide feedback/corrections early
Full text:
rp_fulltext (Elsevier-OA → OpenAlex-OA). It already
consults OpenAlex's OA index, so there is no separate Unpaywall/PMC step to run.After finding relevant paper:
| Score | Meaning | Action |
|---|---|---|
| 0-4 | Not relevant | Skip, brief note in summary |
| 5-6 | Possibly relevant | Note for later, skip deep dive for now |
| 7-8 | Relevant | Deep dive, extract data, add to summary |
| 9-10 | Highly relevant | Deep dive, extract data, follow citations, highlight in summary |
When screening many papers (>20), consider creating a helper script:
Benefits:
Create in research session folder:
# research-sessions/YYYY-MM-DD-query/screen_papers.py
Key components:
rp_abstracts / rp_lib.openalex_by_dois (it already rate-limits + caches)Do not write your own HTTP/rate-limit code — import rp_lib so caching and per-host
limits stay consistent with the rest of the pipeline.
For large-scale screening, use two-script pattern:
Script 1: Abstract Screening (screen_papers.py)
evaluated-papers.json with basic metadataScript 2: Deep Dive (deep_dive_papers.py)
Benefits:
Script design:
rp_lib — import it, don't reimplementWhen NOT to create helper script:
Not tracking all papers: Only adding relevant papers to papers-reviewed.json → Add EVERY paper regardless of score to prevent re-review
Hand-fetching full text: curl-ing publisher pages / Unpaywall / PMC → use rp_fulltext; it already covers OpenAlex's OA index. If it returns available:false, no free copy exists.
Creating unnecessary files for small searches: For <50 papers, use ONLY papers-reviewed.json and SUMMARY.md. For large searches (>100 papers), structured evaluated-papers.json and auxiliary files (README.md, TOP_PRIORITY_PAPERS.md) add significant value and should be used.
Too strict: Skipping papers that mention data indirectly → Re-read abstract carefully
Too lenient: Deep diving into tangentially related papers → Focus on specific data user needs
Missing supplementary data: Many papers hide key data in SI → Always check for supplementary files
Silent screening: User can't see progress → Report EVERY paper as you screen it
No periodic summaries: User loses big picture → Update every 5-10 papers
Non-clickable DOIs/PMIDs: Plain text identifiers → Always use markdown links
Re-reviewing papers: Wastes time → Always check papers-reviewed.json first
Not using helper scripts: Manually screening 100+ papers → Consider batch script
| Task | Action |
|---|---|
| Check if reviewed | Look up DOI in papers-reviewed.json |
| Score abstract | Keywords (0-3) + Data type (0-4) + Specificity (0-3) |
| Pull missing abstracts | rp_abstracts <doi> ... |
| Get full text | rp_fulltext <doi> --out papers/FILE.xml |
| Find data | Grep for terms, focus on Methods/Results/Tables |
| Update tracking | Add to papers-reviewed.json + SUMMARY.md |
After evaluating paper:
skills/research/traversing-citationsUse this structure for research projects with 100+ papers:
Project Overview
Quick Start Guide
File Inventory
Key Findings Summary
Methodology
Next Steps
For datasets with >50 relevant papers, create curated priority list:
Example structure:
# Top Priority Papers
## Tier 1: Must-Read (Score 10)
### [Paper Title](https://doi.org/10.xxxx/yyyy) (Score: 10)
**DOI:** [10.xxxx/yyyy](https://doi.org/10.xxxx/yyyy)
**Full text:** ✓ OA (openalex-oa)
**Key Findings:**
- Finding 1
- Finding 2
---
## Tier 2: High-Value (Score 8-9)
[Additional papers organized by priority...]