Prisma tracking
Skill rhowardstone/Claude-Code-Scientist/.claude/skills/prisma-tracking
Transform Claude Code into a semi-autonomous, self-improving scientific researcher. Literature review, data acquisition, experimentation, synthesis, peer review
npx -y skills add rhowardstone/Claude-Code-Scientist --skill prisma-trackingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 8 stars8 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Track PRISMA 2020 flow for systematic literature reviews. Updates counts at each stage of literature acquisition. Generates compliant flow diagrams.
SKILL.md
5.0 KB, as published. Nobody here has run it
PRISMA Flow Tracking
Track the PRISMA 2020 flow throughout literature acquisition.
PRISMA 2020 Stages
Identification
├── Records from databases (OpenAlex, PubMed, Semantic Scholar)
├── Records from citation searching
└── Records from other sources
Screening
├── Records after duplicates removed
├── Records screened
└── Records excluded (with reasons)
Eligibility
├── Reports sought for retrieval
├── Reports not retrieved (with reasons)
├── Reports assessed for eligibility
└── Reports excluded (with reasons)
Included
├── Studies included in review
└── Reports of included studies
World Model Integration
Track in $SESSION_DIR/world_model.json:
{
"prisma_flow": {
"identification": {
"databases": {
"openalex": 250,
"pubmed": 180,
"semantic_scholar": 120
},
"citation_searching": 85,
"other_sources": 15,
"total_identified": 650
},
"screening": {
"after_duplicates_removed": 420,
"records_screened": 420,
"records_excluded": 280,
"exclusion_reasons": {
"not_relevant_to_rqs": 150,
"wrong_study_type": 80,
"wrong_language": 30,
"retracted": 20
}
},
"eligibility": {
"reports_sought": 140,
"reports_not_retrieved": 25,
"not_retrieved_reasons": {
"paywalled": 15,
"link_broken": 10
},
"reports_assessed": 115,
"reports_excluded": 45,
"exclusion_reasons": {
"insufficient_data": 25,
"duplicate_cohort": 12,
"wrong_outcomes": 8
}
},
"included": {
"studies_in_review": 70,
"reports_of_studies": 70
}
}
}
Update Functions
After each literature acquisition step, update PRISMA counts:
After Initial Search
prisma_flow["identification"]["databases"]["openalex"] = len(openalex_results)
prisma_flow["identification"]["databases"]["pubmed"] = len(pubmed_results)
prisma_flow["identification"]["total_identified"] = sum(all_results)
After Deduplication
prisma_flow["screening"]["after_duplicates_removed"] = len(unique_papers)
After Relevance Filtering
prisma_flow["screening"]["records_excluded"] = excluded_count
prisma_flow["screening"]["exclusion_reasons"]["not_relevant_to_rqs"] = not_relevant
After Citation Expansion
prisma_flow["identification"]["citation_searching"] += new_from_citations
After Full-Text Retrieval
prisma_flow["eligibility"]["reports_sought"] = attempted
prisma_flow["eligibility"]["reports_not_retrieved"] = failed
After Final Inclusion
prisma_flow["included"]["studies_in_review"] = final_count
Generate PRISMA Diagram
Use matplotlib to generate the flow diagram:
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
def generate_prisma_diagram(prisma_flow, output_path):
fig, ax = plt.subplots(1, 1, figsize=(12, 16))
ax.set_xlim(0, 12)
ax.set_ylim(0, 16)
ax.axis('off')
# Identification box
id_box = mpatches.FancyBboxPatch((0.5, 13), 11, 2.5,
boxstyle="round,pad=0.1",
facecolor='lightblue', edgecolor='black')
ax.add_patch(id_box)
ax.text(6, 14.5, 'Identification', fontsize=14, fontweight='bold', ha='center')
ax.text(6, 13.8, f"Records from databases (n={prisma_flow['identification']['total_identified']})",
ha='center')
# ... continue for Screening, Eligibility, Included
plt.savefig(output_path.replace('.pdf', '.png'), dpi=300, bbox_inches='tight')
plt.savefig(output_path, bbox_inches='tight')
Validation
Before synthesis, verify PRISMA flow is complete:
def validate_prisma(prisma_flow):
errors = []
if prisma_flow["identification"]["total_identified"] == 0:
errors.append("No papers identified - literature search not run")
if prisma_flow["screening"]["after_duplicates_removed"] == 0:
errors.append("Deduplication not tracked")
if prisma_flow["included"]["studies_in_review"] == 0:
errors.append("No studies included - check filtering")
# Flow consistency
if prisma_flow["screening"]["after_duplicates_removed"] > prisma_flow["identification"]["total_identified"]:
errors.append("More papers after dedup than identified - impossible")
return errors
Completion Checklist
- All identification sources logged with counts
- Duplicates removed count recorded
- Exclusion reasons documented at each stage
- Full-text retrieval attempts logged
- Final included count matches cited papers
- PRISMA diagram generated (PNG + PDF)
Track every paper. Document every exclusion. Generate compliant diagrams.