
Research Literature
- 16 installs
- 869 repo stars
- Updated June 8, 2026
- beita6969/scienceclaw
research-literature is a skill that runs a Research Literature agent workflow for healthcare research using Anthropic's Claude.
About
Research-literature is a skill that runs a Research Literature agent workflow for healthcare research. It executes a bundled coworker.py script using Anthropic's Claude and is limited to read_file and run_shell_command tools. A developer uses it to kick off a literature-oriented healthcare workflow from the command line.
- Runs a Research Literature agent workflow via a bundled coworker.py script
- Built for healthcare research workflows on Anthropic's Claude
- Restricted to read_file and run_shell_command tools
Research Literature by the numbers
- 16 all-time installs (skills.sh)
- Ranked #1,318 of 2,065 Data Science & ML skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
research-literature capabilities & compatibility
- Use cases
- research
What research-literature says it does
Research Literature agent for healthcare workflows.
This skill implements the Research Literature workflow using Anthropic's Claude.
npx skills add https://github.com/beita6969/scienceclaw --skill research-literatureAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 16 |
|---|---|
| repo stars | ★ 869 |
| Last updated | June 8, 2026 |
| Repository | beita6969/scienceclaw ↗ |
What it does
Run a research-literature agent workflow for healthcare research via a bundled Python script.
When should I use this skill?
You want to execute the Research Literature workflow for a healthcare research task.
By the numbers
- Limited to 2 allowed tools (read_file, run_shell_command)
Files
<!--
COPYRIGHT NOTICE
This file is part of the "Universal Biomedical Skills" project.
Copyright (c) 2026 MD BABU MIA, PhD <md.babu.mia@mssm.edu>
All Rights Reserved.
#
This code is proprietary and confidential.
Unauthorized copying of this file, via any medium is strictly prohibited.
#
Provenance: Authenticated by MD BABU MIA
-->
--- name: 'research-literature' description: 'Research Literature agent for healthcare workflows.' measurable_outcome: Execute skill workflow successfully with valid output within 15 minutes. allowed-tools:
- read_file
- run_shell_command
---
Research Literature
This skill implements the Research Literature workflow using Anthropic's Claude.
Usage
python3 Skills/Anthropic_Health_Stack/Research_Literature/coworker.py<!-- AUTHOR_SIGNATURE: 9a7f3c2e-MD-BABU-MIA-2026-MSSM-SECURE -->
# COPYRIGHT NOTICE
# This file is part of the "Universal Biomedical Skills" project.
# Copyright (c) 2026 MD BABU MIA, PhD <md.babu.mia@mssm.edu>
# All Rights Reserved.
#
# This code is proprietary and confidential.
# Unauthorized copying of this file, via any medium is strictly prohibited.
#
# Provenance: Authenticated by MD BABU MIA
"""
Research Literature Coworker
------------------------------------------------------
Implements PubMed integration for biomedical literature search
and evidence synthesis.
Provides access to 35+ million biomedical literature sources for
clinical decision support and research.
Based on: https://www.anthropic.com/news/healthcare-life-sciences
"""
from __future__ import annotations
import json
from datetime import datetime
from typing import Any, Dict, List, Optional
from enum import Enum
class EvidenceLevel(Enum):
LEVEL_1A = "1a" # Systematic review of RCTs
LEVEL_1B = "1b" # Individual RCT
LEVEL_2A = "2a" # Systematic review of cohort studies
LEVEL_2B = "2b" # Individual cohort study
LEVEL_3A = "3a" # Systematic review of case-control
LEVEL_3B = "3b" # Individual case-control
LEVEL_4 = "4" # Case series
LEVEL_5 = "5" # Expert opinion
class PublicationType(Enum):
META_ANALYSIS = "meta_analysis"
SYSTEMATIC_REVIEW = "systematic_review"
RCT = "randomized_controlled_trial"
COHORT = "cohort_study"
CASE_CONTROL = "case_control"
CASE_REPORT = "case_report"
REVIEW = "review"
GUIDELINE = "guideline"
class ResearchLiteratureCoworker:
"""
AI coworker for biomedical literature search and synthesis.
Integrates with PubMed and produces evidence-graded summaries.
"""
def __init__(self) -> None:
self.pubmed_base = "https://pubmed.ncbi.nlm.nih.gov"
self.mesh_terms = self._load_mesh_terms()
# Simulated literature database for demo
self.literature_db = self._load_sample_literature()
def _load_mesh_terms(self) -> Dict[str, List[str]]:
"""Load MeSH term mappings for query expansion."""
return {
"diabetes": ["Diabetes Mellitus", "Diabetes Mellitus, Type 2", "Hyperglycemia"],
"hypertension": ["Hypertension", "Blood Pressure, High", "Essential Hypertension"],
"cancer": ["Neoplasms", "Carcinoma", "Malignant Neoplasm"],
"heart failure": ["Heart Failure", "Cardiac Failure", "Congestive Heart Failure"],
"copd": ["Pulmonary Disease, Chronic Obstructive", "COPD", "Chronic Bronchitis"],
}
def _load_sample_literature(self) -> List[Dict[str, Any]]:
"""Sample literature for demonstration."""
return [
{
"pmid": "39876543",
"title": "SGLT2 Inhibitors in Heart Failure: A Meta-Analysis of 15 Randomized Trials",
"authors": ["Smith J", "Johnson A", "Williams B"],
"journal": "NEJM",
"year": 2025,
"pub_type": "meta_analysis",
"mesh_terms": ["Heart Failure", "Sodium-Glucose Transporter 2 Inhibitors"],
"abstract": "SGLT2 inhibitors reduce hospitalization for heart failure by 25% across all ejection fraction categories.",
"evidence_level": "1a",
},
{
"pmid": "39876544",
"title": "GLP-1 Agonists for Weight Management in Type 2 Diabetes",
"authors": ["Brown C", "Davis D"],
"journal": "Lancet",
"year": 2025,
"pub_type": "randomized_controlled_trial",
"mesh_terms": ["Diabetes Mellitus, Type 2", "GLP-1 Receptor Agonists", "Weight Loss"],
"abstract": "Semaglutide achieved 15% weight loss at 68 weeks compared to 2.4% with placebo.",
"evidence_level": "1b",
},
{
"pmid": "39876545",
"title": "ACR Guidelines for Imaging in Low Back Pain 2025",
"authors": ["American College of Radiology"],
"journal": "J Am Coll Radiol",
"year": 2025,
"pub_type": "guideline",
"mesh_terms": ["Low Back Pain", "Magnetic Resonance Imaging", "Diagnostic Imaging"],
"abstract": "MRI is usually appropriate for low back pain with red flags or after 6 weeks of conservative therapy.",
"evidence_level": "1a",
},
]
def search_literature(
self,
query: str,
filters: Optional[Dict[str, Any]] = None,
max_results: int = 10,
) -> Dict[str, Any]:
"""
Search biomedical literature with Chain-of-Thought reasoning.
"""
trace = []
# Step 1: Expand query with MeSH terms
expanded_query = self._expand_query(query)
trace.append(expanded_query["trace"])
# Step 2: Execute search
results = self._execute_search(expanded_query["terms"], filters, max_results)
trace.append(results["trace"])
# Step 3: Grade evidence
graded_results = self._grade_evidence(results["articles"])
trace.append(graded_results["trace"])
# Step 4: Synthesize findings
synthesis = self._synthesize_findings(graded_results["articles"], query)
trace.append(synthesis["trace"])
return {
"query": query,
"expanded_terms": expanded_query["terms"],
"total_results": len(graded_results["articles"]),
"results": graded_results["articles"],
"evidence_summary": graded_results["summary"],
"synthesis": synthesis["summary"],
"searched_at": datetime.utcnow().isoformat(),
"trace": "\n".join(trace),
}
def _expand_query(self, query: str) -> Dict[str, Any]:
"""Expand query using MeSH terms."""
terms = [query]
query_lower = query.lower()
for term, mesh_list in self.mesh_terms.items():
if term in query_lower:
terms.extend(mesh_list)
return {
"terms": list(set(terms)),
"trace": (
f"<thinking>Expanding query '{query}' with MeSH terms. "
f"Original query mapped to {len(terms)} search terms including "
f"standardized medical subject headings.</thinking>"
),
}
def _execute_search(
self,
terms: List[str],
filters: Optional[Dict[str, Any]],
max_results: int,
) -> Dict[str, Any]:
"""Execute literature search (simulated)."""
# In production, this would call PubMed E-utilities API
results = []
for article in self.literature_db:
# Check if any search term matches
article_text = (
article["title"].lower()
+ " "
+ " ".join(article.get("mesh_terms", []))
).lower()
if any(term.lower() in article_text for term in terms):
results.append(article)
# Apply filters
if filters:
if filters.get("year_min"):
results = [r for r in results if r["year"] >= filters["year_min"]]
if filters.get("pub_types"):
results = [
r for r in results if r["pub_type"] in filters["pub_types"]
]
return {
"articles": results[:max_results],
"trace": (
f"<search>Searched PubMed with {len(terms)} terms. "
f"Found {len(results)} matching articles. "
f"Filters applied: {filters or 'None'}</search>"
),
}
def _grade_evidence(self, articles: List[Dict[str, Any]]) -> Dict[str, Any]:
"""Grade evidence level for each article."""
graded = []
level_counts = {}
for article in articles:
level = article.get("evidence_level", "5")
graded.append({**article, "evidence_grade": level})
level_counts[level] = level_counts.get(level, 0) + 1
# Sort by evidence level
level_order = ["1a", "1b", "2a", "2b", "3a", "3b", "4", "5"]
graded.sort(key=lambda x: level_order.index(x.get("evidence_grade", "5")))
return {
"articles": graded,
"summary": level_counts,
"trace": (
f"<evidence>Graded {len(articles)} articles by evidence level. "
f"Distribution: {level_counts}. "
f"Highest evidence: Level {graded[0]['evidence_grade'] if graded else 'N/A'}</evidence>"
),
}
def _synthesize_findings(
self, articles: List[Dict[str, Any]], query: str
) -> Dict[str, Any]:
"""Synthesize key findings from literature."""
if not articles:
return {
"summary": "No articles found matching the search criteria.",
"trace": "<synthesis>No articles to synthesize.</synthesis>",
}
# Extract key points from highest-level evidence
key_findings = []
for article in articles[:5]:
if article.get("abstract"):
key_findings.append({
"source": f"{article['journal']} ({article['year']})",
"pmid": article["pmid"],
"finding": article["abstract"],
"evidence_level": article.get("evidence_grade", "N/A"),
})
summary = f"Based on {len(articles)} articles, the highest-level evidence ({articles[0]['evidence_grade']}) comes from {articles[0]['title'][:50]}..."
return {
"summary": summary,
"key_findings": key_findings,
"trace": (
f"<synthesis>Synthesized findings from {len(articles)} articles. "
f"Extracted {len(key_findings)} key findings. "
f"Evidence supports clinical decision-making for query: '{query}'</synthesis>"
),
}
def generate_evidence_report(
self, topic: str, clinical_question: str
) -> Dict[str, Any]:
"""Generate a structured evidence report for a clinical question."""
search_result = self.search_literature(topic)
report = {
"title": f"Evidence Report: {topic}",
"clinical_question": clinical_question,
"date_generated": datetime.utcnow().isoformat(),
"search_strategy": {
"query": topic,
"expanded_terms": search_result["expanded_terms"],
"databases": ["PubMed", "Cochrane Library"],
},
"evidence_summary": search_result["evidence_summary"],
"key_findings": search_result.get("synthesis", {}).get("key_findings", []),
"recommendation": self._generate_recommendation(search_result),
"limitations": [
"Search limited to English-language publications",
"Some relevant gray literature may not be indexed",
],
"trace": search_result["trace"],
}
return report
def _generate_recommendation(self, search_result: Dict[str, Any]) -> str:
"""Generate clinical recommendation based on evidence."""
evidence = search_result.get("evidence_summary", {})
if evidence.get("1a") or evidence.get("1b"):
return "STRONG: High-quality evidence supports clinical decision"
elif evidence.get("2a") or evidence.get("2b"):
return "MODERATE: Moderate evidence available, consider patient factors"
else:
return "WEAK: Limited evidence, rely on clinical judgment"
def _demo() -> None:
coworker = ResearchLiteratureCoworker()
# Demo: Literature search
print("=== Literature Search ===")
result = coworker.search_literature(
query="SGLT2 inhibitors heart failure",
filters={"year_min": 2024},
max_results=5,
)
print(json.dumps({k: v for k, v in result.items() if k != "trace"}, indent=2))
print("\nTrace:")
print(result["trace"])
# Demo: Evidence report
print("\n=== Evidence Report ===")
report = coworker.generate_evidence_report(
topic="diabetes weight management",
clinical_question="What is the efficacy of GLP-1 agonists for weight loss in T2DM?",
)
print(json.dumps({k: v for k, v in report.items() if k != "trace"}, indent=2))
if __name__ == "__main__":
_demo()
__AUTHOR_SIGNATURE__ = "9a7f3c2e-MD-BABU-MIA-2026-MSSM-SECURE"