
Quick Topic Researcher
- 44 installs
- 5 repo stars
- Updated June 18, 2026
- drshailesh88/integrated_content_os
Turn a topic into 5 research questions, run parallel PubMed and web search, and output a concise brief for video or content prep.
About
Quick Topic Researcher generates a fast, focused research brief before recording a video or writing content. A developer uses it to gain rapid topic mastery via parallel PubMed and web search in minutes.
- Generates 5 targeted research questions per topic
- Parallel PubMed plus web search into a short brief
Quick Topic Researcher by the numbers
- 44 all-time installs (skills.sh)
- Ranked #1,687 of 3,280 Productivity & Planning skills by installs in the Skillselion catalog
- Data as of Jul 29, 2026 (Skillselion catalog sync)
npx skills add https://github.com/drshailesh88/integrated_content_os --skill quick-topic-researcherAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 44 |
|---|---|
| repo stars | ★ 5 |
| Last updated | June 18, 2026 |
| Repository | drshailesh88/integrated_content_os ↗ |
What it does
Turn a topic into 5 research questions, run parallel PubMed and web search, and output a concise brief for video or content prep.
Files
Quick Topic Researcher
5 minutes to topic mastery. This skill generates a focused research brief you can use immediately before recording a video or writing content.
Different from `deep-researcher`: That skill is comprehensive (5+ sources, file-based, 30+ minutes). This skill is FAST (5 questions, parallel search, 5 minutes).
---
When to Use
| Use Case | This Skill |
|---|---|
| Prepping for a YouTube video | Yes |
| Writing a quick tweet thread | Yes |
| Refreshing knowledge on a topic | Yes |
| Before a podcast discussion | Yes |
| Comprehensive literature review | No → Use deep-researcher |
| Writing a formal editorial | No → Use deep-researcher first |
---
How It Works
TOPIC: "GLP-1 agonists in heart failure"
DOMAIN: "Cardiology"
│
▼
┌─────────────────────────────────────────────────────┐
│ STEP 1: Generate 5 Research Questions │
│ │
│ 1. Do GLP-1 agonists reduce heart failure │
│ hospitalization in diabetic patients? │
│ 2. Is there evidence of direct cardiac benefit? │
│ 3. What are the key trials showing CV outcomes? │
│ 4. Are there safety concerns in existing HF? │
│ 5. What do current guidelines recommend? │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ STEP 2: Parallel Research (5 searches at once) │
│ │
│ [PubMed Q1] [PubMed Q2] [PubMed Q3] [Perplexity Q4] │
│ [Perplexity Q5] │
│ │
│ ~30 seconds total │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ STEP 3: McKinsey-Style Brief │
│ │
│ EXECUTIVE SUMMARY │
│ • Key finding with strongest PMID │
│ │
│ ANALYSIS │
│ • Theme 1: Trial evidence (PMIDs) │
│ • Theme 2: Mechanisms (PMIDs) │
│ • Theme 3: Guidelines │
│ │
│ CLINICAL IMPLICATIONS │
│ • What this means for your content │
│ │
│ KEY PMIDS TO CITE │
│ • List of 5-7 citation-ready references │
└─────────────────────────────────────────────────────┘---
Usage
Interactive Mode (Recommended)
Ask Claude:
Use quick-topic-researcher for [TOPIC] in [DOMAIN]Example:
Use quick-topic-researcher for "SGLT2 inhibitors in CKD" in "Cardiology/Nephrology"CLI Mode (Coming Soon)
python skills/cardiology/quick-topic-researcher/scripts/quick_research.py \
--topic "GLP-1 agonists in heart failure" \
--domain "Cardiology"---
Research Sources
Primary (Citable)
| Source | Tool | Purpose |
|---|---|---|
| PubMed MCP | pubmed_search_articles, pubmed_fetch_contents | All medical evidence |
| Guidelines | Direct URL fetch to ACC/ESC/ADA | Recommendations |
Discovery (Not Citable)
| Source | Tool | Purpose |
|---|---|---|
| Perplexity | perplexity_ask via MCP | Quick context, trend discovery |
| Web Search | WebSearch | Background, non-medical context |
Rule: You can USE Perplexity to understand context, but you CITE only PubMed.
---
Output Format
The skill outputs a structured brief:
# Quick Research Brief: [TOPIC]
**Domain:** [DOMAIN]
**Generated:** [DATE]
**Time to Read:** 3 minutes
---
## Executive Summary
[2-3 sentences: What you need to know before recording/writing]
Key takeaway: [ONE sentence with strongest PMID]
---
## Research Questions & Findings
### Q1: [Question]
**Answer:** [Concise answer]
**Evidence:** [Study name, PMID, key stat (HR, CI, p-value)]
### Q2: [Question]
**Answer:** [Concise answer]
**Evidence:** [Study name, PMID, key stat]
[... Q3-Q5 ...]
---
## Clinical Context
### What Guidelines Say
[ACC/ESC/ADA recommendations with class/level]
### Practice Implications
[What this means for real patients]
---
## Content Hooks
For your video/content, consider these angles:
1. [Hook 1 based on findings]
2. [Hook 2 based on findings]
3. [Hook 3 based on findings]
---
## Citation-Ready References
1. Author A, et al. TRIAL-NAME. Journal. Year. PMID: XXXXXXXX
2. Author B, et al. Study Name. Journal. Year. PMID: XXXXXXXX
3. [5-7 total references]
---
## Gaps & Caveats
- [What the evidence doesn't cover]
- [Patient populations with limited data]---
Integration with Content Pipeline
Before YouTube Script
1. Run quick-topic-researcher on your video topic
2. Review the brief (3 min read)
3. Open youtube-script-master with the brief in context
4. Script now has verified facts and PMIDsBefore Tweet Thread
1. Run quick-topic-researcher
2. Pick 1-2 key findings from the brief
3. Use x-post-creator-skill with specific PMIDsBefore Newsletter
1. Run quick-topic-researcher for quick take
2. If topic is complex, follow up with deep-researcher
3. Write with cardiology-newsletter-writer---
Example Session
User: Use quick-topic-researcher for "colchicine in cardiovascular prevention" in "Cardiology"
Claude:
I'll research this topic rapidly using PubMed and generate a brief.
Step 1: Generating 5 research questions...
1. Does colchicine reduce major cardiovascular events in CAD patients? 2. What are the key RCTs (COLCOT, LoDoCo2, CLEAR SYNERGY)? 3. What is the proposed anti-inflammatory mechanism? 4. What are the safety concerns and contraindications? 5. What do current guidelines recommend?
Step 2: Parallel research...
[Executes 5 PubMed searches in parallel] [Fetches key article abstracts] [Searches Perplexity for context]
Step 3: Generating McKinsey-style brief...
---
Quick Research Brief: Colchicine in CV Prevention
Domain: Cardiology Generated: 2026-01-01 Time to Read: 3 minutes
Executive Summary
Low-dose colchicine (0.5mg daily) reduces cardiovascular events in patients with established coronary artery disease through anti-inflammatory mechanisms. COLCOT and LoDoCo2 showed consistent benefit; CLEAR SYNERGY was neutral but in a different population.
Key takeaway: In stable CAD patients, colchicine 0.5mg daily reduces CV events by ~25% (HR 0.69-0.77) (PMID: 31733140, 32865377)
Research Questions & Findings
Q1: Does colchicine reduce major CV events?
Answer: Yes, in stable CAD Evidence: LoDoCo2: HR 0.69 (0.57-0.83), p<0.001 for CV death/MI/stroke (PMID: 32865377)
Q2: What are the key trials?
Answer: COLCOT (post-MI), LoDoCo2 (chronic CAD), CLEAR SYNERGY (post-PCI) Evidence:
- COLCOT: 0.5mg, HR 0.77 for composite (PMID: 31733140)
- LoDoCo2: 0.5mg, HR 0.69 for composite (PMID: 32865377)
- CLEAR SYNERGY: Neutral for primary endpoint (PMID: 37634428)
Q3: What is the mechanism?
Answer: NLRP3 inflammasome inhibition, IL-1β reduction Evidence: Reduces hsCRP; targets residual inflammatory risk (PMID: 29724838)
Q4: Safety concerns?
Answer: GI side effects, myopathy with statins, CKD dose adjustment Evidence: NNH for GI: ~50; avoid with strong CYP3A4 inhibitors (PMID: 31733140)
Q5: Guidelines?
Answer: Class IIb in ESC 2024 for chronic CAD Evidence: ESC 2024 CCS Guidelines, consider in patients with elevated hsCRP
Clinical Context
What Guidelines Say
ESC 2024: Class IIb, Level A - "Colchicine 0.5mg may be considered to reduce CV risk in chronic coronary syndrome"
Practice Implications
- Best candidates: Stable CAD with elevated hsCRP despite optimal therapy
- Less certain: Immediately post-MI (COLCOT positive, but smaller effect)
- Probably not: Post-PCI without other CAD (CLEAR SYNERGY neutral)
Content Hooks
1. "The inflammation hypothesis finally has a drug - and it's ancient" 2. "0.5mg for 50 cents - the cheapest CV prevention we've ignored" 3. "Why the cardiologist's gout drug became a heart drug"
Citation-Ready References
1. Tardif JC, et al. COLCOT. NEJM. 2019. PMID: 31733140 2. Nidorf SM, et al. LoDoCo2. NEJM. 2020. PMID: 32865377 3. Jolly SS, et al. CLEAR SYNERGY. NEJM. 2024. PMID: 37634428 4. Ridker PM. Residual inflammatory risk. JACC. 2018. PMID: 29724838 5. ESC CCS Guidelines 2024
Gaps & Caveats
- No RCT in primary prevention (only secondary prevention studied)
- Unclear benefit in patients with normal hsCRP
- Long-term safety (>3 years) data limited
- CLEAR SYNERGY challenges universal applicability
---
Ready for your video! You now have verified facts, PMIDs, and content hooks.
---
Comparison with Other Skills
| Skill | Time | Depth | Use Case |
|---|---|---|---|
| quick-topic-researcher | 5 min | Surface + key trials | Video prep, quick refresh |
deep-researcher | 30-60 min | Comprehensive | Editorials, literature review |
pubmed-database | 2 min | Single search | Specific question |
perplexity-search | 1 min | Trend only | Discovery, non-citable |
---
Technical Implementation
Dependencies
- PubMed MCP (existing)
- Perplexity MCP (existing)
- Claude (default model)
Parallel Execution
The skill uses Claude's ability to make multiple tool calls simultaneously:
# These run in parallel (single message, multiple tool calls)
pubmed_search_articles(queryTerm="colchicine cardiovascular RCT", maxResults=10)
pubmed_search_articles(queryTerm="colchicine mechanism inflammation", maxResults=5)
perplexity_ask(messages=[{"role": "user", "content": "colchicine cardiology guidelines 2024"}])Output
- Markdown brief (displayed in terminal)
- Optional: Save to
~/research_briefs/{topic}_{date}.md
---
This skill gets you from "I need to know about X" to "I can confidently speak about X" in 5 minutes.
# Quick Topic Researcher dependencies
anthropic>=0.18.0
python-dotenv>=1.0.0
rich>=13.0.0
#!/usr/bin/env python3
"""
Quick Topic Researcher - Rapid topic mastery for video/content prep.
Takes a topic → generates 5 research questions → parallel PubMed search →
outputs McKinsey-style brief in 5 minutes.
Usage:
python quick_research.py --topic "GLP-1 agonists in heart failure" --domain "Cardiology"
python quick_research.py -t "SGLT2 inhibitors" -d "Cardiology" --output ~/briefs/
Requirements:
pip install anthropic python-dotenv rich
Environment:
ANTHROPIC_API_KEY - Claude API key (required)
NCBI_API_KEY - For PubMed searches (optional, improves rate limits)
"""
import os
import sys
import json
import argparse
from datetime import datetime
from pathlib import Path
from dotenv import load_dotenv
try:
from rich.console import Console
from rich.markdown import Markdown
from rich.panel import Panel
from rich.progress import Progress, SpinnerColumn, TextColumn
RICH_AVAILABLE = True
except ImportError:
RICH_AVAILABLE = False
print("Note: Install 'rich' for better output: pip install rich")
# Load environment variables
load_dotenv()
# Import PubMed client
try:
sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent.parent / "scripts"))
from pubmed_client import PubMedClient
PUBMED_CLIENT_AVAILABLE = True
except ImportError:
PUBMED_CLIENT_AVAILABLE = False
# Initialize console
console = Console() if RICH_AVAILABLE else None
def print_output(text, style=None):
"""Print with or without rich formatting."""
if RICH_AVAILABLE and console:
if style:
console.print(text, style=style)
else:
console.print(text)
else:
print(text)
def print_markdown(md_text):
"""Print markdown with or without rich formatting."""
if RICH_AVAILABLE and console:
console.print(Markdown(md_text))
else:
print(md_text)
def generate_research_questions(topic: str, domain: str) -> list:
"""
Generate 5 specific research questions about the topic.
In the full implementation, this would call Claude to generate questions.
For now, returns a template that Claude will customize.
"""
# These are template questions - Claude will customize them
question_templates = [
f"What is the primary clinical evidence for {topic}?",
f"What are the key randomized controlled trials for {topic}?",
f"What is the mechanism of action/pathophysiology related to {topic}?",
f"What are the safety concerns and contraindications for {topic}?",
f"What do current clinical guidelines (ACC/ESC/ADA) recommend for {topic}?"
]
return question_templates
def create_research_prompt(topic: str, domain: str, questions: list) -> str:
"""Create the prompt for Claude to execute the research."""
questions_text = "\n".join([f"{i+1}. {q}" for i, q in enumerate(questions)])
prompt = f"""You are a medical research assistant helping Dr. Shailesh Singh prepare for content creation.
TOPIC: {topic}
DOMAIN: {domain}
RESEARCH QUESTIONS:
{questions_text}
INSTRUCTIONS:
1. For each question, search PubMed using the pubmed_search_articles tool with appropriate queries.
Execute searches in parallel where possible.
2. For key findings, fetch full article details using pubmed_fetch_contents.
3. Use perplexity_ask for quick context and guideline information (but cite only PubMed sources).
4. Compile findings into a McKinsey-style brief with:
- Executive Summary (2-3 sentences + key takeaway with PMID)
- Research Questions & Findings (answer each with evidence)
- Clinical Context (guidelines + practice implications)
- Content Hooks (3 angles for video/content)
- Citation-Ready References (5-7 PMIDs)
- Gaps & Caveats
OUTPUT FORMAT:
Return the brief in markdown format, ready to display.
Remember:
- CITE only PubMed sources (with PMIDs)
- Include specific stats (HR, CI, p-values) where available
- Focus on what's most relevant for creating content
- Keep it concise - this is a QUICK research brief, not a literature review
"""
return prompt
def fetch_pubmed_evidence(topic: str, questions: list) -> str:
"""Fetch real PubMed evidence for the topic and questions."""
if not PUBMED_CLIENT_AVAILABLE:
return ""
try:
client = PubMedClient()
evidence_text = ""
# Search for main topic
print_output(" → Searching PubMed for main topic...", style="yellow")
articles = client.search_and_fetch(
query=f"{topic} randomized controlled trial OR meta-analysis",
max_results=5,
sort="relevance"
)
if articles:
evidence_text += "\n## PUBMED EVIDENCE (REAL DATA)\n\n"
evidence_text += f"### Search: {topic}\n\n"
for article in articles:
evidence_text += f"**{article.title}**\n"
evidence_text += f"- PMID: {article.pmid}\n"
evidence_text += f"- Journal: {article.journal} ({article.pub_date[:4] if article.pub_date else 'N/A'})\n"
evidence_text += f"- Authors: {', '.join(article.authors[:3])}{', et al.' if len(article.authors) > 3 else ''}\n"
if article.abstract:
evidence_text += f"- Abstract: {article.abstract[:400]}...\n"
evidence_text += "\n"
# Search for guidelines
print_output(" → Searching PubMed for guidelines...", style="yellow")
guideline_articles = client.search_and_fetch(
query=f"{topic} guideline OR practice recommendation",
max_results=3,
sort="pub_date"
)
if guideline_articles:
evidence_text += "\n### Guidelines Found:\n\n"
for article in guideline_articles:
evidence_text += f"- **{article.title}** (PMID: {article.pmid})\n"
evidence_text += f" {article.journal}, {article.pub_date[:4] if article.pub_date else 'N/A'}\n\n"
return evidence_text
except Exception as e:
print_output(f" ⚠️ PubMed search error: {e}", style="yellow")
return ""
def run_research_with_claude(topic: str, domain: str, questions: list) -> str:
"""
Execute the research using Claude API with real PubMed data.
"""
try:
import anthropic
client = anthropic.Anthropic()
# First, fetch real PubMed evidence
pubmed_evidence = ""
if PUBMED_CLIENT_AVAILABLE:
print_output("\nStep 2a: Fetching real PubMed evidence...", style="yellow")
pubmed_evidence = fetch_pubmed_evidence(topic, questions)
if pubmed_evidence:
print_output(" ✓ PubMed evidence retrieved", style="green")
else:
print_output(" ⚠️ No PubMed evidence found, using Claude's knowledge", style="yellow")
prompt = create_research_prompt(topic, domain, questions)
# Add real PubMed evidence if available
if pubmed_evidence:
prompt += f"\n\n---\n\nHere is REAL PubMed evidence I retrieved. Use these PMIDs and findings in your brief:\n{pubmed_evidence}\n\nIMPORTANT: Cite the PMIDs provided above. These are real, verified references."
else:
prompt += "\n\nNote: PubMed API was not available. Provide your best research based on your knowledge, and include realistic PMIDs where possible. Flag that user should verify."
print_output("\nStep 2b: Synthesizing with Claude...", style="yellow")
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
messages=[
{
"role": "user",
"content": prompt
}
]
)
return message.content[0].text
except ImportError:
return generate_manual_research_template(topic, domain, questions)
except Exception as e:
print_output(f"Error calling Claude API: {e}", style="red")
return generate_manual_research_template(topic, domain, questions)
def generate_manual_research_template(topic: str, domain: str, questions: list) -> str:
"""Generate a template when API is not available."""
questions_md = "\n\n".join([
f"### Q{i+1}: {q}\n**Answer:** [Research needed]\n**Evidence:** [PMID needed]\n**PubMed Query:** `{topic} {q.split()[-1]} RCT`"
for i, q in enumerate(questions)
])
template = f"""# Quick Research Brief: {topic}
**Domain:** {domain}
**Generated:** {datetime.now().strftime("%Y-%m-%d %H:%M")}
**Status:** Template - requires PubMed verification
---
## Executive Summary
[To be filled after PubMed research]
Key takeaway: [ONE sentence with strongest PMID]
---
## Research Questions & Findings
{questions_md}
---
## Suggested PubMed Searches
Run these in Claude Code with PubMed MCP:
```
pubmed_search_articles(queryTerm="{topic} randomized controlled trial", maxResults=10)
pubmed_search_articles(queryTerm="{topic} meta-analysis", maxResults=5)
pubmed_search_articles(queryTerm="{topic} guidelines", maxResults=5)
```
---
## Clinical Context
### What Guidelines Say
[ACC/ESC/ADA recommendations - verify at guidelines sites]
### Practice Implications
[To be filled]
---
## Content Hooks
1. [Potential hook based on topic]
2. [Potential hook based on controversy/newness]
3. [Potential hook based on patient impact]
---
## Citation-Ready References
[To be filled with 5-7 PMIDs after research]
---
## Next Steps
1. Open Claude Code with PubMed MCP access
2. Run: "Use quick-topic-researcher for {topic} in {domain}"
3. Claude will execute the PubMed searches and fill this template
---
*Template generated by quick-topic-researcher CLI*
"""
return template
def save_brief(brief: str, topic: str, output_dir: str = None) -> str:
"""Save the research brief to a file."""
if output_dir is None:
output_dir = os.path.expanduser("~/research_briefs")
Path(output_dir).mkdir(parents=True, exist_ok=True)
# Clean topic for filename
safe_topic = "".join(c if c.isalnum() or c in (' ', '-', '_') else '_' for c in topic)
safe_topic = safe_topic.replace(' ', '_')[:50]
timestamp = datetime.now().strftime("%Y%m%d_%H%M")
filename = f"{safe_topic}_{timestamp}.md"
filepath = os.path.join(output_dir, filename)
with open(filepath, 'w') as f:
f.write(brief)
return filepath
def main():
parser = argparse.ArgumentParser(
description="Quick Topic Researcher - Rapid topic mastery for video/content prep"
)
parser.add_argument(
"-t", "--topic",
required=True,
help="Research topic (e.g., 'GLP-1 agonists in heart failure')"
)
parser.add_argument(
"-d", "--domain",
default="Cardiology",
help="Domain/specialty (default: Cardiology)"
)
parser.add_argument(
"-o", "--output",
help="Output directory for saving the brief (default: ~/research_briefs/)"
)
parser.add_argument(
"--no-save",
action="store_true",
help="Don't save the brief to a file"
)
parser.add_argument(
"--questions-only",
action="store_true",
help="Only generate research questions, don't execute research"
)
args = parser.parse_args()
# Header
print_output("\n" + "="*60, style="blue")
print_output("QUICK TOPIC RESEARCHER", style="bold blue")
print_output("="*60 + "\n", style="blue")
print_output(f"Topic: {args.topic}", style="cyan")
print_output(f"Domain: {args.domain}", style="cyan")
print_output("")
# Step 1: Generate research questions
print_output("Step 1: Generating research questions...", style="yellow")
questions = generate_research_questions(args.topic, args.domain)
print_output("\nResearch Questions:", style="bold")
for i, q in enumerate(questions, 1):
print_output(f" {i}. {q}")
print_output("")
if args.questions_only:
print_output("Questions generated. Use --questions-only=false to run full research.", style="green")
return
# Step 2: Execute research
print_output("Step 2: Executing research...", style="yellow")
print_output("(This may take 30-60 seconds)\n", style="dim")
brief = run_research_with_claude(args.topic, args.domain, questions)
# Step 3: Display results
print_output("\n" + "="*60, style="green")
print_output("RESEARCH BRIEF", style="bold green")
print_output("="*60 + "\n", style="green")
print_markdown(brief)
# Step 4: Save if requested
if not args.no_save:
filepath = save_brief(brief, args.topic, args.output)
print_output(f"\nBrief saved to: {filepath}", style="green")
print_output("\n" + "="*60, style="blue")
print_output("Ready for your content!", style="bold blue")
print_output("="*60 + "\n", style="blue")
if __name__ == "__main__":
main()