smithery/gptomics

bio-long-read-sequencing-clair3-variants

Calls germline small variants (SNPs and indels) from Oxford Nanopore and PacBio HiFi long reads with Clair3, a two-stage (pileup + full-alignment) deep-learning caller, selecting the chemistry- and basecaller-version-matched model, enabling read-based phasing, and benchmarking against GIAB with stratification. Covers why the model string is the experiment (no auto-detection, silent degradation on mismatch), why ONT homopolymer/STR indels are the residual error whole-genome F1 hides, and the som…

Installation

$ npx skills add smithery/gptomics --skill bio-long-read-sequencing-clair3-variants

Summary

  • Calls germline small variants (SNPs and indels) from Oxford Nanopore and PacBio HiFi long reads with Clair3, a two-stage (pileup + full-alignment) deep-learning caller, selecting the chemistry- and basecaller-version-matched model, enabling read-based phasing, and benchmarking against GIAB with stratification.
  • Covers why the model string is the experiment (no auto-detection, silent degradation on mismatch), why ONT homopolymer/STR indels are the residual error whole-genome F1 hides, and the somatic/trio/RNA boundary to the ClairS/Clair3-Trio family.
  • Use when calling germline SNVs/indels from ONT or HiFi BAMs, choosing a Clair3 model, phasing variants, or benchmarking long-read calls.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery/gptomics · top by installs.

npx skills add smithery/gptomics

Browse all from smithery/gptomics

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 11,593 B
  • docs SUMMARY.md 286 B

History

  1. First recorded snapshot · 0 installs

SKILL.md

Version Compatibility

Reference examples tested with: Clair3 2.0+, whatshap 2.0+, bcftools 1.19+, hap.py 0.3.15+.

Before using code patterns, verify installed versions match. If versions differ:

  • CLI: <tool> --version then <tool> --help to confirm flags

Results depend on inputs that outlive the binary version - record them:

  • The Clair3 MODEL must match the platform + chemistry + basecaller tier + basecaller version (e.g. r1041e82400bpssupv500). There is NO auto-detection; --model_path is mandatory and a mismatch silently degrades calls.
  • Clair3 v2 moved TensorFlow -> PyTorch; models are pileup.pt/full_alignment.pt. v1 TensorFlow models do NOT load in v2.
  • The full ONT model set (every version, hac/fast, withmv signal-aware) lives in the rerio clair3_models/ repo; only a subset is bundled.

If code throws an error, introspect the installed tool (run_clair3.sh --help) and adapt the example to the actual API rather than retrying.

Clair3 Variant Calling

"Call variants from my long reads" -> Run Clair3 with the model that matches how the reads were basecalled, phase, and benchmark with stratification - because the model string, not the command, determines accuracy.

  • CLI: runclair3.sh --bamfn=aln.bam --reffn=ref.fa --output=out/ --threads=16 --platform=ont --modelpath=/models/r1041e82400bpssupv500

Scope: germline diploid SNPs + small indels. NOT structural variants (-> structural-variants), NOT somatic/mosaic (-> ClairS/ClairS-TO), NOT RNA (-> Clair3-RNA).

The Single Most Important Modern Insight -- The Model String Is the Experiment, and ONT Indels Hide in the Strata

Clair3's accuracy is gated by two facts a naive user misses:

  1. The model is hand-picked and a mismatch fails silently. There is no auto-detection - the user must point --modelpath at a specific model folder. Three axes must ALL match: chemistry (r941 vs r1041), basecaller tier (fast/hac/sup), and basecaller version (g5014/v430/v500/v520), plus the optional with_mv signal-aware axis if the BAM has Dorado mv tags. Wrong model = no crash, no warning, measurably worse calls (indels most). Derive the model from the basecaller string in the run metadata; pick the model version closest to but not above the basecaller version.
  2. ONT indels in homopolymers/STRs are the residual error whole-genome F1 conceals. Even on R10.4.1 sup, insertions/deletions in homopolymer runs and short tandem repeats are the weak point (G/C homopolymers worst), because the pore cannot reliably count identical consecutive bases. A genome-wide indel F1 of ~99.5% hides much lower performance inside LowComplexity/homopolymer strata - exactly the medically relevant loci. HiFi largely solves this; do not transfer ONT-indel pessimism to HiFi. Always benchmark with GIAB stratification, never a single global number.

Two-Stage Architecture

Clair3 "symphonizes" two networks: a fast pileup model (summarized per-position statistics) that calls the large majority of sites, and a slow full-alignment model (haplotype-resolved read tensor) that re-evaluates only the uncertain subset. Internally Clair3 phases the top het-SNP pileup calls with WhatsHap, haplotags the BAM, and feeds the haplotagged reads to the full-alignment model - which is why read-based phasing buys ~6% indel F1, not cosmetics. Output: merge_output.vcf.gz (final).

Model Selection

Model name anatomy (r1041e82400bpssupv500): pore (r1041=R10.4.1), flowcell (e82), speed (400bps), basecaller tier (sup/hac/fast), basecaller version (v500=Dorado 5.0.0, g5014=Guppy 5.0.14). The withmv suffix uses Dorado move-table tags for best accuracy when present.

Data --platform Model
ONT R10.4.1 sup, Dorado v5.x, mv tags present ont r1041e82400bpssupv520withmv
ONT R10.4.1 sup, Dorado v5.0.0 ont r1041e82400bpssupv500
ONT R10.4.1 hac ont r1041e82400bpshacv500/_v520
ONT R9.4.1 (any tier) ont r941promsup_g5014
PacBio HiFi Revio hifi hifi_revio
PacBio HiFi Sequel II hifi hifi_sequel2
Illumina (supported) ilmn ilmn
PacBio CLR - not supported -> PEPPER-Margin-DeepVariant

Decision Tree by Scenario

Scenario Tool Why
Germline SNV/indel, single sample Clair3 this skill
Somatic, paired tumor-normal ClairS VAF-aware; Clair3 germline priors cannot find low-VAF somatic
Somatic, tumor-only ClairS-TO tumor-only ensemble
De novo / Mendelian trio Clair3-Nova / Clair3-Trio family-aware
Long-read RNA variants Clair3-RNA RNA model
ONT R10.4.1, also considering DeepVariant either neck-and-neck on R10 sup; native-ONT DeepVariant (Kolesnikov 2024) superseded PEPPER-Margin
Non-human / draft / bacterial reference Clair3 + --includeallctgs default calls only chr1-22,X,Y -> empty output otherwise
Cohort joint genotyping Clair3 gVCF -> GLnexus bcftools merge on gVCFs is NOT joint genotyping

Core Commands

# Germline ONT calling (model MUST match the basecaller)
run_clair3.sh \
  --bam_fn=aln.bam --ref_fn=ref.fa --output=clair3_out/ \
  --threads=16 --platform=ont \
  --model_path=/opt/models/r1041_e82_400bps_sup_v500
# final VCF: clair3_out/merge_output.vcf.gz

# Phase the final output VCF (WhatsHap); --longphase_for_phasing swaps only the INTERNAL
# phaser to LongPhase (faster, SV-aware). For a LongPhase-phased final VCF use
# --use_longphase_for_final_output_phasing instead of --enable_phasing.
run_clair3.sh ... --enable_phasing --longphase_for_phasing
# Phased calls go to clair3_out/phased_merge_output.vcf.gz; merge_output.vcf.gz stays UNPHASED.

# Non-human / draft assembly reference - call ALL contigs
run_clair3.sh ... --include_all_ctgs

# Targeted / amplicon panel
run_clair3.sh ... --bed_fn=panel.bed --gvcf

# Benchmark against GIAB with stratification (the step that reveals ONT indel errors)
hap.py giab_truth.vcf.gz clair3_out/merge_output.vcf.gz \
  -f giab_confident.bed -r ref.fa --engine=vcfeval \
  --stratification giab_stratifications.tsv -o bench/hg002

Per-Method Failure Modes

Silent model mismatch

Trigger: --model_path pointing at a model that does not match the basecaller chemistry/tier/version. Mechanism: no auto-detection; the wrong network runs. Symptom: no error, lower F1 (indels most). Fix: derive the model from the basecaller string; verify the folder exists (rerio for the full set); for v2 ensure .pt models.

Clair3 found nothing on a non-human reference

Trigger: bacterial genome or draft assembly without chr1-22,X,Y names. Mechanism: Clair3 calls only standard human contigs by default. Symptom: near-empty VCF. Fix: --includeallctgs.

Global F1 looks great, clinical genes are wrong

Trigger: reporting only whole-genome F1. Mechanism: ONT indel errors concentrate in homopolymer/STR/low-complexity strata. Symptom: ~99.5% global indel F1 but much lower in LowComplexity. Fix: stratify with GIAB BEDs (Dwarshuis 2024); use CMRG for medically relevant genes.

Treating Clair3 as a somatic caller

Trigger: lowering --snpminaf/--indelminaf to catch low-VAF variants. Mechanism: germline model expects ~0.5/1.0 allele fractions, is not VAF-aware. Symptom: germline-model false positives at low AF, missed true somatic. Fix: ClairS (paired) / ClairS-TO (tumor-only).

v1 model with v2 Clair3

Trigger: an old TensorFlow model dir with Clair3 v2. Mechanism: v2 needs PyTorch .pt models. Symptom: model load failure. Fix: use pileup.pt/full_alignment.pt models (Converted Rerio).

Quantitative Thresholds

Threshold Source Rationale
Recommended depth ~20-60x Clair3 guidance sensitivity (hets, indels) falls off below ~20x; --min_coverage default 2 is a floor, not a recommendation
Phasing buys ~6% indel F1 Zheng 2022 haplotagged reads disambiguate indel alleles in repeats
ONT R10.4.1 sup: SNP F1 ~99.99%, indel F1 ~99.5% GIAB benchmarks indel residual lives in homopolymer/STR strata
--varpctfull 0.3 (default) Clair3 README fraction of low-quality pileup calls re-run by full-alignment; raise for recall, slower
Stratify with GIAB / CMRG Dwarshuis 2024 global F1 hides the ONT indel problem

Common Errors

Error / symptom Cause Solution
Empty/near-empty VCF on non-human ref default calls only chr1-22,X,Y --includeallctgs
Model fails to load v1 TF model with v2 Clair3 use .pt (PyTorch) models
--model_path .../models/ont not found no generic ont/hifi model point at a specific model subfolder
Worse-than-expected indels wrong-version or wrong-tier model match the basecaller model exactly
"joint genotyping" gave odd merges bcftools merge on gVCFs is not joint calling use GLnexus
Looking for somatic/low-VAF variants germline caller use ClairS / ClairS-TO

References

  • Zheng Z, Li S, Su J, Leung AWS, Lam TW, Luo R. 2022. Symphonizing pileup and full-alignment for deep learning-based long-read variant calling (Clair3). Nat Comput Sci 2:797-803.
  • Zheng Z, He M, Yu X, et al. 2026. Accelerated long-read variant calling with Clair3 for whole-genome sequencing. Bioinformatics (advance access) btag181.
  • Kolesnikov A, Cook D, Nattestad M, et al. 2024. Local read haplotagging enables accurate long-read small variant calling. Nat Commun 15:5907.
  • Dwarshuis N, Kalra D, McDaniel J, et al. 2024. The GIAB genomic stratifications resource for human reference genomes. Nat Commun 15:9029.
  • Lin JH, Chen LC, Yu SC, Huang YT. 2022. LongPhase: an ultra-fast chromosome-scale phasing algorithm for small and large variants. Bioinformatics 38(7):1816-1822.
  • Chen L, Zheng Z, Su J, et al. 2025. ClairS-TO: a deep-learning method for long-read tumor-only somatic small variant calling. Nat Commun 16:9630.

Related Skills

  • basecalling - The basecaller model+version the Clair3 model must match
  • long-read-alignment - Produces the BAM (keep --MD; use minimap2 >=2.28)
  • haplotype-phasing - whatshap/longphase phasing and haplotagging Clair3 uses internally
  • medaka-polishing - ONT consensus; medaka diploid variant calling is deprecated in favor of Clair3
  • structural-variants - SVs are out of Clair3's scope (Sniffles2/cuteSV)
  • variant-calling/deepvariant - DeepVariant native ONT/HiFi models (neck-and-neck on R10)
  • variant-calling/vcf-statistics - Summarize/filter the VCF Clair3 emits
  • clinical-databases/variant-prioritization - Prioritize the called variants