Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Smart backward and forward citation following via Semantic Scholar, with relevance filtering and deduplication
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 47% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 275% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 100% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 591% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 319% | 0% |
<!-- ╔══════════════════════════════════════════════════════════════╗ ║ 本文件为开源 Skill 原始文档,收录仅供学习与研究参考 ║ ║ CoPaper.AI 收集整理 | https://copaper.ai ║ ╚══════════════════════════════════════════════════════════════╝
来源仓库: https://github.com/kthorn/research-superpower 项目名称: research-superpower 开源协议: MIT License 收录日期: 2026-04-02
声明: 本文件版权归原作者所有。此处收录旨在为社会科学实证研究者 提供 AI Agent Skills 的集中参考。如有侵权,请联系删除。 -->
Intelligently follow citations backward (references) and forward (citing papers) using Semantic Scholar API.
Core principle: Only follow citations relevant to user's query. Avoid exponential explosion by filtering before traversing.
Use this skill when:
When NOT to use:
Lookup by DOI:
bashcurl "https://api.semanticscholar.org/graph/v1/paper/DOI:10.1234/example.2023?fields=paperId,title,year"
Response:
json{ "paperId": "abc123def456", "title": "Paper Title", "year": 2023 }
Save paperId - needed for citations/references queries
Get references from paper:
bashcurl "https://api.semanticscholar.org/graph/v1/paper/abc123def456/references?fields=contexts,intents,title,year,abstract,externalIds&limit=100"
Response format:
json{ "data": [ { "citedPaper": { "paperId": "xyz789", "title": "Referenced Paper Title", "year": 2020, "abstract": "...", "externalIds": { "DOI": "10.5678/referenced.2020", "PubMed": "87654321" } }, "contexts": [ "...as described in previous work [15]...", "...we used the method from [15] to..." ], "intents": ["methodology", "background"] } ] }
Filter for relevance:
For each reference, check:
Scoring:
Only add to queue if score ≥ 5
Get papers citing this one:
bashcurl "https://api.semanticscholar.org/graph/v1/paper/abc123def456/citations?fields=title,year,abstract,externalIds&limit=100"
Response format:
json{ "data": [ { "citingPaper": { "paperId": "def456ghi", "title": "Newer Paper Citing This", "year": 2024, "abstract": "We extended the work of [original paper]...", "externalIds": { "DOI": "10.9012/citing.2024" } } } ] }
Filter for relevance:
For each citing paper:
Scoring:
Only add to queue if score ≥ 5
Before adding to queue:
Check papers-reviewed.json:
pythondoi = paper["externalIds"].get("DOI") if doi in papers_reviewed: skip # Already processed else: add to queue
CRITICAL: After evaluating any paper from citation traversal, add it to papers-reviewed.json regardless of score. This prevents re-processing the same paper from multiple sources.
Track citation relationship in citations/citation-graph.json:
json{ "10.1234/example.2023": { "references": ["10.5678/ref1.2020", "10.5678/ref2.2021"], "cited_by": ["10.9012/cite1.2024", "10.9012/cite2.2024"] } }
CRITICAL: Use ONLY citation-graph.json for citation tracking. Do NOT create custom files like forward_citation_pmids.txt or citation_analysis.md. All findings go in SUMMARY.md.
Add relevant citations to processing queue:
json{ "doi": "10.5678/referenced.2020", "title": "Referenced Paper", "relevance_score": 7, "source": "backward_from:10.1234/example.2023", "context": "Method citation - describes IC50 measurement protocol" }
Then:
evaluating-paper-relevance skillTo avoid explosion:
Breadth-first strategy:
Report as you traverse:
🔗 Analyzing citations for: "Original Paper Title"
→ Found 45 references, 12 look relevant
→ Found 23 citing papers, 8 look relevant
→ Adding 20 papers to queue
📄 [51/127] Following reference: "Method for measuring IC50"
Source: Referenced by original paper in Methods section
Abstract score: 7 → Fetching full text...Semantic Scholar limits:
Be efficient:
?fields=title,abstract,externalIds,year)limit=100 to get more results per requestIf rate limited:
After traversing citations:
evaluating-paper-relevance skill| Task | API Endpoint | |------|--------------| | Get paper by DOI | GET /graph/v1/paper/DOI:{doi}?fields=paperId,title | | Get references | GET /graph/v1/paper/{paperId}/references?fields=contexts,title,abstract,externalIds | | Get citations | GET /graph/v1/paper/{paperId}/citations?fields=title,abstract,externalIds | | Check if processed | Look up DOI in papers-reviewed.json | | Filter relevance | Score based on context/title/intent/recency |
Before adding citation to queue:
Not tracking all evaluated papers: Only adding relevant papers to papers-reviewed.json → Add EVERY paper after evaluation to prevent re-review Creating custom analysis files: Making forward_citation_pmids.txt, CITATION_ANALYSIS.md, etc. → Use ONLY citation-graph.json and SUMMARY.md Following all citations: Exponential explosion → Filter before adding to queue Ignoring context: Citation might be tangential → Read context strings Not deduplicating: Re-process same papers → Always check papers-reviewed.json before and after evaluation Too deep: Following 5+ levels → Limit to 2 levels, check with user Missing forward citations: Only checking references → Use both backward and forward No rate limiting awareness: API blocks you → Add delays, handle 429 errors
1. User asks: "Find selectivity data for BTK inhibitors"
2. Search finds Paper A (score: 9, has great IC50 data)
3. Traverse citations for Paper A:
- References: 45 total, 12 relevant (mention "selectivity", "IC50")
- Citations: 23 total, 8 relevant (newer papers on BTK)
4. Add 20 papers to queue
5. Evaluate first queued paper (score: 8)
6. Extract data, traverse its citations (add 5 more)
7. Continue until queue empty or user says stopAfter traversing citations:
evaluating-paper-relevanceOther measured skills in the registry, with their headline benchmark lift.