claude/skills/journal-club/SKILL.md
Orchestrates a phased workflow for rigorously analyzing and presenting research papers — paper ingestion, comprehension quiz, causal-claims breakdown with quoted evidence (necessity vs. sufficiency vs. what was not proven), statistics & reproducibility audit (sample sizes, multiple-testing, deposition, code/reagent identity), critical evaluation, slide outline, slide draft, Q&A rehearsal, and post-talk writeup. Use this skill whenever the user mentions journal club, lab meeting paper presentation, paper deep-dive, preparing slides for a research paper, walking through a study, or asks for help understanding/critiquing/presenting a specific paper — even if they don't explicitly say "journal club." Also trigger on requests like "give me a structured breakdown of this paper", "what causal claims does paper X make and what couldn't they prove", "extract necessity and sufficiency experiments", "what mechanism does this paper establish", "audit the stats / reproducibility of this paper", "is the data deposited", "did they correct for multiple testing", "check the GitHub repo / antibody RRIDs", or any combination of paper-id (PMID/PMCID/DOI) plus a request for structured analysis, mechanism, causation, statistical rigor, reproducibility, or critical reading.
npx skillsauth add sahuno/llm_configs journal-clubInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Author: Samuel Ahuno ([email protected]) Date: 2026-04-29
A 7-stage, resumable workflow that transforms a research paper into a polished journal club presentation — without sacrificing the deep understanding that keeps speakers from getting destroyed in Q&A.
A one-shot "paper → slides" generator produces polished output but leaves the presenter shallow on the underlying science. Real journal clubs reward people who genuinely understand the paper. This skill enforces that depth by splitting the work into stages where the user must engage actively (Stages 2 and 3), not just consume Claude's summary.
Each stage produces a markdown artifact, so the user can stop after any stage, come back later, and pick up where they left off.
/journal-club ingest <PMCID|DOI|PDF_path> # Stage 1: parse paper
/journal-club quiz # Stage 2: comprehension Q&A (text mode)
/journal-club quiz --figures # Stage 2: figure mode (multimodal — Claude looks at the images)
/journal-club causal # Stage 2b: causal claims breakdown (with quoted evidence)
/journal-club stats # Stage 2c: statistics & reproducibility audit (checklist + per-figure)
/journal-club critique # Stage 3: critical evaluation
/journal-club outline --time <minutes> # Stage 4: slide outline
/journal-club draft # Stage 5: slide content
/journal-club rehearse # Stage 6: audience Q&A prep
/journal-club writeup # Stage 7: post-talk summary
Stage 2b (causal) is strongly recommended for any paper making
mechanistic claims. It also supports a one-shot retrieval mode where the
user gives a paper ID and asks for a structured causal breakdown — Stage 1
runs silently, then 2b produces the analysis.
If the user's prompt doesn't include an explicit subcommand, infer the stage
from context (e.g., "help me prep journal club for PMC11464121" → Stage 1
ingest).
All artifacts live under a single user-level home for journal clubs —
default ~/journalClub/, not the project working directory. This way one
skill instance accumulates a personal library of paper deep-dives across
projects, instead of fragmenting journal_club/ folders into every repo.
~/journalClub/ # default; override with JOURNAL_CLUB_HOME env var or --dest
└── <paper_id>/ # paper_id = PMC11464121, doi-slug, or pdf-stem
├── _meta.json # audience, time budget, paper IDs, stage status
├── 01_ingest.md
├── 02_comprehension.md
├── 2b_causal.md # Stage 2b — causal claims with quoted evidence
├── 2c_stats_repro.md # Stage 2c — stats & reproducibility audit
├── 03_critique.md
├── 04_outline.md
├── 05_slides_draft.md
├── 06_rehearsal.md
├── 07_writeup.md
├── pdf/ # source PDF (preprints) or copy
├── xml/ # PMC / EPMC JATS XML if available
├── images/ # extracted figure panels (one PNG per page)
└── <paper_id>.pptx # final deck (after Stage 5 conversion)
Override the default in three ways, in priority order:
/journal-club ingest <paper_id> --dest /some/pathJOURNAL_CLUB_HOME=/some/path~/journalClub/When the default home doesn't exist on first run, create it silently — no prompt needed.
The _meta.json file carries audience profile, time budget, paper IDs, and
which stages have completed. Stages downstream of Stage 1 read it to stay
consistent.
When the skill triggers:
ingest, quiz, causal, stats, critique, outline, draft, rehearse, writeup), run that stage.ingest).<journal_club_home>/ directory (resolved per the override priority above — default ~/journalClub/) and ask which paper + stage they want to resume.For each stage, read the matching reference file in references/ for the
detailed protocol — they contain the templates and prompts that make each
stage actually useful.
| Stage | Reference file |
|-------|----------------|
| 1. Ingest | references/stage_01_ingest.md |
| 2. Quiz | references/stage_02_quiz.md |
| 2b. Causal | references/stage_2b_causal.md |
| 2c. Stats & Reproducibility | references/stage_2c_stats_repro.md |
| 3. Critique | references/stage_03_critique.md |
| 4. Outline | references/stage_04_outline.md |
| 5. Draft | references/stage_05_draft.md |
| 6. Rehearse | references/stage_06_rehearse.md |
| 7. Writeup | references/stage_07_writeup.md |
The presentation skeleton used by Stages 4–5 lives in
references/presentation_template.md.
The skill bundles two stdlib-mostly scripts under its own scripts/ directory.
These are vendored (live with the skill, not in the user's project) so the
skill works in any working directory.
scripts/pmc_fetch.py (stdlib only) — preferred for any paper indexed
in PMC, including bioRxiv preprints once they have a PMC ID. Capabilities:
supplementaryFiles ZIP
endpoint (not Cloudflare-protected — works for bioRxiv preprints
once PMC-indexed)fetch_paper(pmcid=..., out_dir=..., fetch_supplement=True)CLI:
python ~/.claude/skills/journal-club/scripts/pmc_fetch.py PMC12918801 --out-dir <paper_dir>/
python ~/.claude/skills/journal-club/scripts/pmc_fetch.py --doi 10.64898/2026.02.12.705658 --out-dir <paper_dir>/
scripts/extract_pdf_images.py (requires PyMuPDF) — for closed-access
journal PDFs only. Page-render mode (default for journal-club) renders each
page to PNG at the specified DPI; embedded-image mode pulls raster resources
out of the PDF stream. Skip for PMC-indexed papers — pmc_fetch.py --supplement already pulls pre-rasterized figure JPGs/GIFs from EuropePMC
without needing the PDF or PyMuPDF.
bioRxiv / medRxiv preprints not yet PMC-indexed: these are
Cloudflare-protected. If pmc_fetch.py returns no PMCID for the DOI, fall
back to playwright/cloudscraper-based fetch (not vendored — install
separately per stage_01_ingest.md instructions). Most bioRxiv preprints
show up in PMC within ~weeks of posting, so the playwright path is a
rare-case fallback.
Figure URLs: pmc_fetch.py::parse_pmc_xml() populates figures[*].url
using https://www.ncbi.nlm.nih.gov/pmc/articles/<PMCID>/bin/<href>. For
papers where these direct URLs 404, the EuropePMC ZIP route still works.
These scripts have no dependency on the user's main project. If you see
pmc_utils.py referenced in older notes, it has been replaced by
pmc_fetch.py — the new function names are download_pmc_xml, parse_pmc_xml,
fetch_supplement_zip, fetch_paper. The old clean_markitdown_pdf.sh is no
longer required: text extraction from closed-access PDFs is best done with
pdftotext -layout (poppler) which is universally available and produces
cleaner output for grep-based audit search than markitdown.
To handle bioRxiv/medRxiv preprints, the user needs Playwright + cloudscraper installed once per machine:
pip install playwright cloudscraper
python -m playwright install chromium
Without these, fetch_preprint() still returns metadata + abstract for any
preprint DOI (the bioRxiv API isn't Cloudflare-protected). It just can't pull
full text for new preprints that aren't yet indexed in Europe PMC.
If a stage runs and full text is missing because Playwright isn't installed, tell the user once: show the install commands and continue with whatever is available (often abstract is enough for Stage 1 ingest and Stage 2b causal breakdown of the abstract-level claims).
Stages 2 (Quiz) and 3 (Critique) require dialogue with the user, not a one-shot answer dump.
If the user wants Stage 2/3 in a single shot ("just give me the answers"), explain why interaction matters but defer to their preference and produce a unilateral version flagged as such in the output.
Always write each stage's output to disk before returning. If a stage produces
intermediate analysis worth keeping (e.g., the Quiz transcript), include it in
the artifact under a ## Transcript section.
After every stage:
<journal_club_home>/<paper_id>/_meta.json with the stage status.When the user asks to convert the Stage 5 markdown into a PowerPoint deck
(.pptx), do two things, not one:
**Visual**: field references a figure (keywords: "Figure", "Fig",
"panel", "cartoon", "schematic", "diagram", "map"), pick the next unused image
from <paper_dir>/images/ (sorted by page number) and place it on the slide
with a two-column layout (bullets on the left half, image on the right half).
For slides marked text-only, leave the slide bullet-only and skip image
embedding.This converts the deck from a "fill in the figures yourself" template into a
working draft the user can refine in PowerPoint. Detailed protocol and a
ready-to-run helper live in references/stage_05_to_pptx.md.
_meta.json._meta.json is missing when a downstream stage runs, ask the user for paper_id and audience instead of failing.01_ingest.md.bak.<YYYYMMDD>) and warn the user.development
Decide whether and how to scatter genomics workloads across chromosomes or region tiles, then gather the per-shard outputs back together correctly. Use proactively whenever the user mentions parallelizing per-chromosome, sharding by chrom, tiling the genome, splitting a BAM/VCF/BED by region, merging per-chrom outputs, or has a workflow with obvious per-chromosome parallelism (variant calling, methylation pileup/DMR, coverage, liftover, peak calling, SV calling). Also triggers on /scatter-gather, "scatter X across chromosomes", "shard this", "chunked variant calling", "merge per-chrom VCFs", "gather these bedmethyl files", "concat these bigwigs", or any per-region parallelism question. **Trigger even when the user is also using Snakemake or Nextflow** — those skills handle DAG plumbing while this one defines *what* to scatter, *whether* it's even safe to scatter (some computations like DSS DMLtest pool globally and break under naive sharding), and *how* to gather each output format without silent corruption. Especially trigger on questions about merging per-chromosome BAM / VCF / BED / bedMethyl / bigwig outputs, or whether a scatter-gather is equivalent to running on the whole genome.
tools
Build self-contained, offline HTML genomic-region reports with igv-reports (create_report). Each HTML bundles igv.js viewers per region with embedded BAM/VCF data slices and default tracks (CpG islands, gencode, RepeatMasker); a reviewer clicks the variant table to inspect read-level evidence with no internet, no server, no IGV install. USE this skill whenever the user wants an HTML, clickable, or browseable viewer of genomic data — phrases like "HTML IGV report", "offline IGV", "self-contained HTML", "clickable viewer", "create_report", "igv-reports", "email this viewer", or any browseable HTML of reads at variants, fusion breakpoints, SV junctions, viral integrations, ChIP peaks, or ROIs. Trigger even when the user doesn't say "igv-reports" — giveaway is HTML/clickable/offline plus genomic regions. Also fire on /igv-reports. DO NOT use for static PNG/PDF/SVG IGV screenshots — use the igv-screenshots skill. Supports hg38, mm10, mm39, T2T. Defaults: --flanking 300, --standalone, genome-tagged output.
development
Verify that structural-variant / breakpoint calls are actually real by checking the chimeric reads that support them. Use whenever the user has caller output (Severus, Manta, Sniffles2, Delly, GRIDSS, MELT, Arriba, SvABA) and wants to validate / audit / QC / double-check their calls — viral integrations (HTLV-1, HBV, HPV, EBV), gene fusions (BCR-ABL, IGH translocations), mobile element insertions (L1, Alu, SVA), translocations. Trigger on phrasings like "is this integration real?", "should I trust this fusion call?", "are these false positives?", "are these PASS calls actually supported by reads?", "QC my SV calls", or any per-call chimeric-read / contamination / bimodality / T-vs-N read overlap question. Also fires on BAM @PG -Y / SA-tag questions on chimeric BAMs, and on /chimeric-read-validation. Output is a per-call TSV with pass / needs_review / fail verdicts. Do not use for calling SVs (use the caller), IGV screenshots (use igv-reports), or RNA-level fusion FDR (use Arriba).
tools
Run a stage-gated runtime/resource optimization study for any bioinformatics tool or command-line program on a SLURM HPC cluster. Walks through preflight, OFAT factor scan, 2^k confirmation factorial, build-mode + alternative-implementation comparison, input-size scan, out-of-sample validation, and produces a fitted predictive resource model (wall_s and peak_rss as functions of input size), a machine-readable model.yaml with caveats, a full REPORT.md, and a one-page exec summary PDF. Trigger PROACTIVELY whenever the user asks to "benchmark", "optimize", "tune", "characterize runtime/memory", "find best config", "build a resource model", "how does X scale", or "what should I put in my Snakemake resources directive for tool Y" — for any compute-bound bioinformatics step (sort, dedup, alignment, variant calling, methylation calling, basecalling, indexing, pileup, liftover). Also triggers on /runtime-resource-study or /benchmark-tool. Skip only for one-off quick timing where a single number suffices and no model is needed.