Download skills/05-kthorn-research-superpower/research/traversing-citations/SKILL.md from the publisher, or copy the path and open the repository. PlugMCP lists the skill and does not host the file.
Where does Traversing Citation Networks live?
The publisher keeps it at https://github.com/brycewang-stanford/Auto-Empirical-Research-Skills.
Which agents can use Traversing Citation Networks?
Claude, Cursor, and Codex can read a SKILL.md you add from the publisher's repository.
Smart backward and forward citation following via Semantic Scholar, with relevance filtering and deduplication
name: Traversing Citation Networks
description: Smart backward and forward citation following via Semantic Scholar, with relevance filtering and deduplication
when_to_use: After finding relevant paper. When need to find related work. When following references or citations. When building citation graph. When exploring paper connections.
version: 1.0.0
Traversing Citation Networks
Overview
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.
{
"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:
Title match: Keywords present in title?
Abstract match: User's query terms in abstract?
Recency: Newer papers often build on findings (prioritize < 2 years)
Citation count: If Semantic Scholar provides, highly cited papers more likely relevant
Scoring:
Title keywords match: +3 points
Abstract keywords match: +2 points
Recent (< 2 years): +2 points
Moderate recency (2-5 years): +1 point
Only add to queue if score ≥ 5
4. Deduplication
Before adding to queue:
Check papers-reviewed.json:
doi = 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:
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.
If relevant, extract data and potentially traverse its citations too
Smart Traversal Limits
To avoid explosion:
Only traverse papers scoring ≥ 7 in initial evaluation
Only follow citations scoring ≥ 5 in relevance filtering
Limit traversal depth to 2 levels (original → references → references of references)
Check with user after every 50 papers total
Breadth-first strategy:
Get all references + citations for current paper
Filter and score them
Add high-scoring ones to queue
Process next paper in queue
Repeat until queue empty or hit limit
Progress Reporting
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...
API Rate Limiting
Semantic Scholar limits:
Free tier: 100 requests per 5 minutes
With API key: 1000 requests per 5 minutes
Be efficient:
Request multiple fields in one call (?fields=title,abstract,externalIds,year)
Use limit=100 to get more results per request
Cache responses - don't re-fetch same paper
If rate limited:
Wait 5 minutes
Report to user: "⏸️ Rate limited by Semantic Scholar API. Waiting 5 minutes..."
Consider getting API key for higher limits
Integration with Other Skills
After traversing citations:
Queue now has N new papers to evaluate
For each, use evaluating-paper-relevance skill
If relevant, extract to SUMMARY.md
If highly relevant (≥9), traverse its citations too
Update citation-graph.json to track relationships
Quick Reference
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
Relevance Filtering Checklist
Before adding citation to queue:
Check if already in papers-reviewed.json (skip if yes)
Score based on context/title keywords (need ≥ 5)
Verify external ID (DOI or PMID) exists
Add source tracking ("backward_from:DOI" or "forward_from:DOI")
Add to queue with metadata
Common Mistakes
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
Example Workflow
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 stop
Next Steps
After traversing citations:
Process queued papers with evaluating-paper-relevance
Update SUMMARY.md with new findings
Check if reached checkpoint (50 papers or 5 minutes)
If checkpoint: ask user to continue or stop
How do I install Traversing Citation Networks?
Download skills/05-kthorn-research-superpower/research/traversing-citations/SKILL.md from the publisher, or copy the path and open the repository. PlugMCP lists the skill and does not host the file.
Where does Traversing Citation Networks live?
The publisher keeps it at https://github.com/brycewang-stanford/Auto-Empirical-Research-Skills.
Which agents can use Traversing Citation Networks?
Claude, Cursor, and Codex can read a SKILL.md you add from the publisher's repository.