Agent skill

Bio Epidemiological Genomics Phylodynamics

by GPTomics in GPTomics/bioSkills

Estimates time-scaled phylogenies, molecular-clock rates, effective reproduction number Re, and population dynamics from dated pathogen genomes using TreeTime (maximum-likelihood) and BEAST2…

MITAuto-check passedResearch & Science

Install Bio Epidemiological Genomics Phylodynamics

skills CLI
$ npx skills add GPTomics/bioSkills --skill bio-epidemiological-genomics-phylodynamics -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install GPTomics/bioSkills bio-epidemiological-genomics-phylodynamics --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/GPTomics/bioSkills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/epidemiological-genomics/phylodynamics .claude/skills/bio-epidemiological-genomics-phylodynamics && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
bio-epidemiological-genomics-phylodynamics
GitHub stars
1.2k
Used in
1 other repo
Token cost
~8k tokens
SKILL.md length
3,686 words
Files
3
Skills in repo
559
Repo updated
First seen
Licence
MIT

At a glance

Estimates time-scaled phylogenies, molecular-clock rates, effective reproduction number Re, and population dynamics from dated pathogen genomes using TreeTime (maximum-likelihood) and BEAST2…

  • Dating outbreak origins
  • SKILL.md covers Version Compatibility, The Single Most Important…, Algorithmic Taxonomy and Decision Tree by Scenario, plus 10 more sections
  • Runs Python scripts from its folder; calls pip
  • Estimating substitution rates

What it does

Bio Epidemiological Genomics Phylodynamics is an agent skill from GPTomics/bioSkills. Estimates time-scaled phylogenies, molecular-clock rates, effective reproduction number Re, and population dynamics from dated pathogen genomes using TreeTime (maximum-likelihood) and BEAST2 (Bayesian; strict/relaxed clocks; coalescent, Bayesian-Skyline, Skygrid, Birth-Death-Skyline, and sampled-ancestor priors; structured coalescent via MASCOT). Covers root-to-tip clock QC via TempEst, date-randomisation tests, recombination masking via Gubbins/ClonalFrameML before clock inference for recombining bacteria, BDSKY…

Its SKILL.md is about 8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `examples/treetime_analysis.py` and `usage-guide.md`).

It sits in Research & Science, covering Bioinformatics. The repository describes itself as: a set of SKILLS.md for doing bioinformatics with agents like claude code. The licence is MIT.

When your agent uses it

  • Dating outbreak origins
  • Estimating substitution rates
  • Inferring Re through time
  • Building time-calibrated Nextstrain Augur trees

Example prompts

  • “Use the bio-epidemiological-genomics-phylodynamics skill to estimate time-scaled phylogenies, molecular-clock rates, effective reproduction number…”
  • “/bio-epidemiological-genomics-phylodynamics”

Requirements

  • Python 3

What it can do on your machine

Read from SKILL.md and the folder at commit d91ed3d. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships script files (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • pip

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Bio Epidemiological Genomics Phylodynamics loads about 8k tokens when it runs. Until then it costs about 266 tokens; SKILL.md has 3,686 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~266
When it runs · the whole SKILL.md, loaded when a task matches
~8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from GPTomics/bioSkills at commit d91ed3d, republished under its MIT licence (© GPTomics). 3,686 words, ~8,041 tokens.

Download SKILL.mdSave it as .claude/skills/bio-epidemiological-genomics-phylodynamics/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
bio-epidemiological-genomics-phylodynamics
description
Estimates time-scaled phylogenies, molecular-clock rates, effective reproduction number R_e, and population dynamics from dated pathogen genomes using TreeTime (maximum-likelihood) and BEAST2 (Bayesian; strict/relaxed clocks; coalescent, Bayesian-Skyline, Skygrid, Birth-Death-Skyline, and sampled-ancestor priors; structured coalescent via MASCOT). Covers root-to-tip clock QC via TempEst, date-randomisation tests, recombination masking via Gubbins/ClonalFrameML before clock inference for recombining bacteria, BDSKY origin-vs-rootHeight pitfalls, sampling-bias correction, multi-chain convergence diagnostics, and reconciling phylodynamic R_e with case-based R_t. Use when dating outbreak origins, estimating substitution rates, inferring R_e through time, building time-calibrated Nextstrain Augur trees, choosing between strict and relaxed clocks, fitting Birth-Death-Skyline models, diagnosing temporal-signal failure, running MASCOT for structured-population analyses, or using UShER for pandemic-scale placement.
tool_type
mixed
primary_tool
BEAST2

Version Compatibility

Reference examples tested with: BEAST 2.7.6+, BDSKY 1.5+, BEASTLabs 2.0+, feast 9.5+, ORC 1.1.2+, MASCOT 3.0+, BEAGLE 4.0+, TreeTime 0.11+, IQ-TREE 2.3.6+, Gubbins 3.3+, ClonalFrameML 1.13+, UShER 0.6+, matUtils 0.6+, BactDating 1.1+ (R), bdskytools 1.1+ (R), coda 0.19+ (R), ape 5.8+ (R), ggplot2 3.5+, BioPython 1.84+, dendropy 4.6+, baltic 0.2+.

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

  • BEAST: beast -version; packagemanager -list for BEAST2 packages and versions
  • Python: pip show treetime; help(treetime.TreeTime)
  • R: packageVersion('bdskytools'); ?bdskytools::bdskytools_plot
  • CLI: gubbins --version; iqtree --version; clonalframeml --version

If BEAST2 throws IllegalArgumentException on XML load, the BDSKY / feast / BEASTLabs minor version probably moved; check the XML against the installed package's example XML in ~/beast/examples/. BEAST2 XML is NOT robust across minor releases; pin the BEAST package version in any published analysis.

Phylodynamics

"How fast is this outbreak growing, and when did it start?" -> Combine a dated set of pathogen genomes with a molecular-clock model to time-scale the phylogeny, then fit a population-dynamic model (constant / exponential / Bayesian Skyline / BICEPS / Birth-Death-Skyline) to read off R_e, growth rate, and origin date. Choice of clock (strict vs UCLN vs ORC) and tree prior (BSP coalescent vs BICEPS vs BDSKY birth-death) is load-bearing; the same data can yield different R_e under different priors. For bacterial pathogens, recombination MUST be masked first; running BEAST on a Streptococcus pneumoniae or E. coli core-genome alignment without Gubbins / ClonalFrameML inflates the clock rate 2-5x and the date-randomisation test is NOT a sufficient guard.

  • CLI: treetime --tree raw.nwk --aln aln.fasta --dates dates.tsv --coalescent skyline --clock-filter 4 -- fast ML phylodynamics
  • Java/CLI: BEAST2 with BDSKY XML (BEAUti-generated) -- full Bayesian birth-death-skyline with R_e per epoch
  • CLI: gubbins --prefix gubbins core.full.aln -- recombination masking before bacterial clock inference
  • R: bdskytools::bdskytools_plot for BDSKY post-processing; BactDating for fast Bayesian dating after Gubbins

The Single Most Important Modern Insight -- Recombination passed unmasked into clock inference inflates the clock rate 2-5x and breaks every downstream estimate

The date-randomisation test is NOT a guard against unmasked recombination. For any recombining bacterium (S. pneumoniae, N. gonorrhoeae, E. coli, Klebsiella pneumoniae, Campylobacter, Helicobacter pylori), run Gubbins (Croucher 2015 NAR 43:e15) or ClonalFrameML (Didelot & Wilson 2015 PLoS Comput Biol 11:e1004041) on the core-SNP alignment FIRST, rebuild the tree on the recombination-masked alignment, THEN run TreeTime / BEAST. Only M. tuberculosis and a handful of clonal pathogens are exempt -- and even those benefit from a recombination check on cross-lineage analyses. The Mostowy 2017 Mol Biol Evol 34:1167 fastGEAR paper documents the limits of mask-based approaches for highly recombinogenic species; for those (N. gonorrhoeae, S. pneumoniae lineages with strong recombination), residual signal persists post-masking and biases downstream R_e estimates downward. Second-order insight: Volz & Frost 2014 J R Soc Interface 11:20140945 showed that BEAST coalescent priors are biased under realistic preferential sampling; BDSKY models the sampling proportion explicitly and is the correct tool when sampling rate varies; MASCOT-Skyline / MASCOT-GLM (Müller 2018 Bioinformatics 34:3843) further correct for sampling-deme covariation. Third-order insight: Featherstone & Duchêne 2023 Mol Biol Evol 40:msad132 quantified that for shallow trees with many samples, sampling times dominate over sequence information for R_e inference -- biased sampling drives biased R_e estimates regardless of how much sequence data is added.

Algorithmic Taxonomy

Tool / modelMechanismOutputsStrengthFails when
TreeTime ML (Sagulenko 2018 Virus Evol 4:vex042)ML joint optimisation of clock + dates with optional coalescent skyline priorTime-scaled tree + clock rate + root-to-tip regression100-1000x faster than BEAST; ideal for outbreak-scale dataStrict-clock assumption; no posterior; no R_e directly
BEAST2 + BICEPS (Bouckaert 2022 Syst Biol 71:1549)Bayesian skyline with analytic Ne integration per epoch and new tree-flexing operatorsNe(t) posteriorModern default skyline; weeks-of-BSP becomes hoursReplaces BSP for many use cases; check current BEAST2 tutorials
BEAST2 + BDSKY (Stadler 2013 PNAS 110:228)Birth-death-skyline with explicit samplingR_e(t), become-uninfectious rate, sampling proportionDirect R_e estimationorigin vs rootHeight confusion; rho-and-turnover unidentifiability with flat priors (Legried & Terhorst 2022 PNAS 119:e2119513119)
BEAST2 + MASCOT (Müller 2018 Bioinformatics 34:3843)Marginal-approximation structured coalescentPer-deme Ne + migrationCorrect for structured sampling; replaces biased DTA (De Maio 2015 PLoS Genet 11:e1005421)Migration unidentifiable with <20 sequences per deme
BEAST2 + MASCOT-Skyline / MASCOT-GLMTime-varying migration with covariatesMigration-rate trajectories tied to predictorsSampling-aware; addresses Volz & Frost 2014 sampling bias~10x slower than DTA; many users still default to DTA
BEAST2 + Sampled-Ancestor BDSKYBDSKY with internal-node samplingR_e + ancestral / longitudinal samplesRight for ancient-DNA, within-host longitudinal samplingSpecialist parameterisation
BactDating (Didelot 2018 NAR 46:e134)Bayesian Poisson / mixedgamma / relaxedgamma clock on a fixed treeTime-scaled tree + clock rate posteriorFast Bayesian dating after Gubbins; right for large bacterial treesmixedgamma mixes poorly; poisson is the cleaner default
Gubbins (Croucher 2015 NAR 43:e15)Sliding-window elevated SNP density detectionRecombination-masked alignment + recombination GFFStandard for clonal bacterial alignmentsCannot detect ancient recombination; mis-masks mutation hotspots
ClonalFrameML (Didelot & Wilson 2015 PLoS Comput Biol 11:e1004041)Coalescent-with-recombination model on a fixed treeRecombination-masked alignment + r/mModel-based alternative to GubbinsSlow on large trees
UShER + matUtils (Turakhia 2021 Nat Genet 53:809)Parsimony placement on a daily-updated mutation-annotated treeSubtrees, lineage assignments, RIPPLES recombination callsPandemic-scale (millions of genomes)Parsimony branch lengths systematically shorter than ML; re-estimate branch lengths before downstream R_e
TempEst (Rambaut 2016 Virus Evol 2:vew007)Root-to-tip linear regressionClock signal R^2First-line temporal-signal diagnosticSlope can be artificially good with biased sampling
Date randomisation (Ramsden 2009 Mol Biol Evol 26:143; Duchêne 2015 Mol Biol Evol 32:1895)Shuffle dates, compare clock-rate estimatePass / failDetects spurious clock signalCan "pass" with narrow sampling windows (false negative)

Decision Tree by Scenario

ScenarioRecommendedWhy wrong choices fail
"Estimate Ne(t) for this virus"BEAST2 + BICEPS (or Skygrid if BICEPS unavailable)Constant coalescent without checking flatness; BSP if BICEPS available (BSP mixes poorly)
"Estimate R_e from sequences"BEAST2 + BDSKY with sampling-process explicit; document sampling proportion per epochBSP-style Ne -> R_e conversion via Wallinga-Lipsitch loses sampling information
"Multi-deme analysis with migration"BEAST2 + MASCOT for <=10 demes with >=20 sequences eachExact structured coalescent (intractable >5 demes); BEAST DTA (Lemey 2009) is sampling-biased
"Pandemic-scale (>10k sequences)"UShER + matUtils for placement; TreeTime for dates; BDSKY on lineage-specific subsetsFull BEAST on full dataset is intractable; using UShER branch lengths directly biases R_e
"Date a bacterial tree"Snippy -> Gubbins -> IQ-TREE -> BactDating OR BEAST2; recombination mask FIRSTSkipping recombination masking inflates the clock rate 2-5x
"Date a fast-evolving virus"TreeTime (Nextstrain pipeline) for routine; BEAST2 + UCLN for headline analysesStrict clock by default underestimates rate variation on shallow trees
"Test for temporal signal"TempEst root-to-tip first (R^2 >= 0.3 minimum); date-randomisation as secondary checkSkipping the diagnostic; trusting date-randomisation alone (can pass with narrow window)
"Reconcile phylodynamic R_e with case R_t"Report both with explicit assumptions; investigate disagreement (sampling bias, lineage-specific signal)Reporting one as "the" R_e
"Bacterial outbreak phylogenetics start-to-finish"snippy + snippy-core -> Gubbins (on core.full.aln) -> IQ-TREE -> BactDating or BEAST2 + BDSKYSkipping Gubbins; running Gubbins on core.aln instead of core.full.aln
"Migration / phylogeography source-attribution"MASCOT or MASCOT-GLM (sampling-aware); never BEAST DTA for attribution claimsBEAST DTA inherits Lemey 2009 sampling bias; published source-attribution remains biased toward heavily-sampled locations

Methodology evolves; before any high-stakes phylodynamic analysis, web-search "BEAST2 BDSKY tutorial 2025" and "MASCOT-Skyline benchmark" for current best practice.

Time-Scaling With TreeTime

Goal: Produce a time-scaled phylogeny with per-node date estimates and a global clock rate, ready for downstream R_e estimation or visualisation -- in minutes rather than hours.

Approach: Build the raw topology with IQ-TREE 2 (Minh 2020 Mol Biol Evol 37:1530) for outbreak-scale data (RAxML-NG for larger trees); pass to TreeTime jointly optimising the molecular clock and date assignments with a coalescent skyline prior; inspect root_to_tip_regression.pdf BEFORE trusting any downstream output; apply --clock-filter 4 to drop tips with root-to-tip residuals exceeding 4 SDs.

bash
iqtree -s aln.fasta -m GTR+G -B 1000 -T AUTO -pre raw_tree

treetime \
    --tree raw_tree.treefile \
    --aln aln.fasta \
    --dates dates.tsv \
    --coalescent skyline \
    --clock-filter 4 \
    --confidence \
    --reroot best \
    --outdir timetree

treetime clock \
    --tree raw_tree.treefile \
    --dates dates.tsv \
    --reassign-dates \
    --outdir date_randomisation

Outputs: timetree.nexus is the time-scaled tree; dates.tsv records per-tip filter status; root_to_tip_regression.pdf is the temporal-signal diagnostic. If R^2 < 0.3, the data do not support time-scaled inference; report uncertainty and consider extending the sampling window. For published clock rates, run the date-randomisation analysis (Duchêne 2015 Mol Biol Evol 32:1895) and report the clock-rate distribution under shuffled dates.

BDSKY in BEAST2 With Recombination Masking First

Goal: Estimate R_e through time from a bacterial outbreak alignment with explicit handling of recombination, sampling proportion, and convergence diagnostics.

Approach: Snippy + snippy-core to build the core-genome alignment; Gubbins on core.full.aln (full positions including invariant) to mask recombinant tracts; IQ-TREE on the masked alignment; BEAUti to set up BDSKY XML in BEAST 2 (Bouckaert 2019 PLoS Comput Biol 15:e1006650 for BEAST 2.5+) with origin -- NOT rootHeight; sampling proportion per epoch; become-uninfectious rate fixed from epi knowledge; run with 3-4 independent chains from different seeds; combine chains only after marginal posteriors overlap.

bash
snippy-core --ref reference.fa --prefix core snippy_out/*

run_gubbins.py --prefix gubbins core.full.aln

iqtree -s gubbins.filtered_polymorphic_sites.fasta -m GTR+G+ASC -B 1000 -T AUTO -pre masked_tree

beast -threads 4 -beagle -seed 42 bdsky_analysis.xml
beast -threads 4 -beagle -seed 17 bdsky_analysis.xml
beast -threads 4 -beagle -seed 99 bdsky_analysis.xml
beast -threads 4 -beagle -seed 7 bdsky_analysis.xml

logcombiner -log run_42.log -log run_17.log -log run_99.log -log run_7.log -burnin 10 -o combined.log
logcombiner -log run_42.trees -log run_17.trees -log run_99.trees -log run_7.trees -burnin 10 -o combined.trees -decimalPlaces 6
loganalyser -burnin 10 combined.log

run_gubbins.py input MUST be core.full.aln (full alignment with reference). Passing core.aln (variable-only) gives wrong recombination calls because Gubbins cannot estimate background SNP density without invariant positions. IQ-TREE +ASC is the ascertainment-bias correction required for SNP-only input.

MASCOT Structured Coalescent

Goal: Infer per-deme effective population size and migration rates from sequences sampled in multiple subpopulations (countries, hospitals, ward types) without inheriting the Lemey 2009 BEAST DTA sampling bias.

Approach: BEAUti -> MASCOT template; one trait per deme; require >=20 sequences per deme for migration identifiability; consider MASCOT-GLM if migration rates plausibly depend on observable covariates (travel volume, geographic distance); pre-2024 default is MASCOT, but MASCOT-Skyline / MASCOT-GLM is preferred when sampling intensity varies over time.

bash
beast -threads 4 -beagle -seed 42 mascot_analysis.xml
loganalyser -burnin 10 mascot.log

Per-Method Failure Modes

Recombination passed unmasked into clock inference

Trigger: BEAST2 or TreeTime run on a core-genome alignment of a recombining bacterium (S. pneumoniae, N. gonorrhoeae, E. coli, Klebsiella, Campylobacter, Helicobacter pylori).

Mechanism: Recombination imports SNPs from a divergent donor lineage in a single event. The clock model interprets these as accumulated point mutations across the branch, inflating the apparent clock rate and distorting node-date estimates. Recombination is non-clocklike, so date-randomisation tests may still pass -- the problem is silent.

Symptom: Estimated clock rate is 2-5x the literature consensus for the species (S. pneumoniae core clock ~1.5e-6 subs/site/year per literature; rates >5e-6 indicate unmasked recombination). Per-branch dN/dS profile is wildly heterogeneous. Some branches show implausibly recent divergence dates.

Fix: Mask recombinant regions before clock inference. Build initial tree with IQ-TREE on the core-SNP alignment; run Gubbins or ClonalFrameML to detect recombinant tracts; rebuild tree on the recombination-masked alignment; THEN run TreeTime or BEAST. For M. tuberculosis (rare recombination), masking is optional but defensible for cross-lineage analyses.

Date-randomisation test passes despite no real temporal signal

Trigger: Outbreak with narrow sampling window (e.g. all isolates collected within 3 months of a year-long outbreak).

Mechanism: Date randomisation (Ramsden 2009 Mol Biol Evol 26:143; Duchêne 2015 Mol Biol Evol 32:1895) tests whether shuffling dates degrades the clock-rate estimate. With insufficient temporal sampling, the true clock estimate is also poorly informed, so randomised and true estimates overlap by chance.

Symptom: TempEst root-to-tip regression R^2 < 0.1; date-randomisation test still "passes" (HPD overlap); 95% HPD on clock rate spans an order of magnitude.

Fix: Inspect root-to-tip regression FIRST (TempEst). If R^2 < 0.3 and there is no strong a-priori clock-rate prior from the literature, the data do not support time-scaled inference. Options: (1) use a strong informative prior on clock rate from outside data; (2) extend the sampling window before re-running; (3) report a tree without time-scaling and discuss uncertainty.

BDSKY origin specified as the root height

Trigger: BEAST2 BDSKY XML where origin is set to the same value as rootHeight (often because the user inferred from the tutorial that "origin = tree depth").

Mechanism: Stadler 2013 PNAS 110:228 defines origin as the time from the start of the epidemic to the most recent sample -- strictly larger than the tree root height (tMRCA). Setting origin = tMRCA causes the MCMC to start in an inconsistent state and systematically biases R_e estimates upward (because turnover is forced into a shorter time window).

Symptom: R_e estimates implausibly high in early epochs; chains mix poorly; origin-date estimate clusters at the lower bound of the prior.

Fix: Initialise origin to (tMRCA + 0.1*tMRCA) or use prior knowledge (e.g., for SARS-CoV-2 within a country, the documented import date). BEAUti default is sensible; hand-edited XML often gets this wrong.

BSP / BDSKY ESS < 200 reported as a result

Trigger: Single BEAST chain reaching the planned MCMC length; some parameters with ESS in the 50-150 range; user reports the posterior anyway.

Mechanism: Tracer's ESS calculation is a single-chain effective sample size. For phylogenetic posteriors, parameters may be "mixed within chain" but "unmixed across chains" -- multiple independent chains can converge to different parts of the posterior. ESS > 200 is necessary but not sufficient.

Symptom: Reported HPD intervals from a single chain; reviewers from Stadler / Bouckaert / Suchard schools reject the analysis.

Fix: Run >=3-4 chains from different starting trees / seeds; examine marginal posteriors per chain; only after they overlap can chains be combined (logcombiner). Report Gelman-Rubin diagnostic via R coda::gelman.diag on the per-chain log files.

MASCOT migration with too few sequences per deme

Trigger: MASCOT analysis with <20 sequences per deme; user reports migration-rate posterior.

Mechanism: MASCOT migration rates are jointly identifiable only with sufficient sequences per deme to inform within-deme coalescent. With few sequences, migration rate and Ne become confounded; the posterior reflects the prior more than the data.

Symptom: Migration-rate 95% HPD spans 2+ orders of magnitude; estimates implausibly extreme.

Fix: Pool nearby demes; accept wide HPD intervals; report MASCOT-GLM if covariates are available; cite Müller 2018 for the identifiability requirement.

Show full SKILL.md (1,504 more words)Show less
DTA used for phylogeography source-attribution

Trigger: BEAST DTA (Lemey 2009 PLoS Comput Biol 5:e1000520) used to claim a geographic source for an outbreak.

Mechanism: De Maio 2015 PLoS Genet 11:e1005421 demonstrated DTA is biased toward heavily-sampled locations; the example was Ebola DTA implausibly concluding humans seeded outbreaks (truth: sylvatic reservoir spillover). DTA treats sampling as random; in reality, source-attribution-relevant locations are often the most under-sampled.

Symptom: Inferred "source" is the heavily-sampled location; conclusion is sensitive to sub-sampling; reviewers familiar with MASCOT push back.

Fix: Use MASCOT or MASCOT-Skyline / MASCOT-GLM for source-attribution claims; if infeasible, frame results as "consistent with" rather than "demonstrates" and quantify sampling bias.

UShER branch lengths used directly for R_e estimation

Trigger: Downstream BDSKY analysis on a UShER-placed subtree using UShER's parsimony branch lengths.

Mechanism: Turakhia 2021 Nat Genet 53:809 UShER places sequences on the MAT via parsimony; branch lengths under parsimony are systematically shorter than maximum-likelihood or Bayesian branch lengths (because parsimony minimises substitutions). R_e estimates that use UShER branch lengths directly are biased.

Symptom: Implausibly high R_e from a UShER-derived subtree; estimates inconsistent with case-based R_t.

Fix: Use UShER for placement only; re-estimate branch lengths with TreeTime or BEAST before downstream R_e estimation. This caveat is in the UShER documentation but routinely ignored.

R_e reported as R_0

Trigger: Phylodynamic R_e estimate (current immunity / intervention context) described in text as R_0 (fully susceptible population).

Mechanism: Phylodynamic methods estimate the effective reproduction number R_e (or R_t), not the basic reproduction number R_0. The two diverge substantially: R_0 for ancestral SARS-CoV-2 was ~5-8; R_e during Omicron waves was 1.0-1.4.

Symptom: Figure legends say R_e; discussion text says R_0; readers conflate the two; comparisons to non-phylodynamic R_0 estimates inappropriate.

Fix: Use R_e (or R_t) consistently. Explicit footnote: "R_e estimated in the current epidemic context; the basic reproduction number R_0 was higher and is not what BDSKY estimates."

Reconciliation: When Methods Disagree

PatternLikely causeAction
Phylodynamic R_e and case-based R_t disagreeSampling bias on one side; lineage-specific signal in phylodynamic; under-ascertainment in case dataReport both with explicit assumptions; investigate sampling profile
TreeTime R^2 = 0.5 but BEAST clock rate confidence wideTreeTime point estimate vs Bayesian posterior with prior; informative prior may collapseCompare BEAST clock to literature; check for prior dominance
BDSKY R_e implausibly high in early epochsorigin mis-specified; sampling proportion too high for early epochRe-check origin definition; allow sampling proportion to vary per epoch
Gubbins and ClonalFrameML give different recombination masksDifferent model assumptions; both approximateEither is defensible; run sensitivity by re-doing clock inference with the alternate mask
MASCOT and BEAST DTA disagree on migrationDTA is sampling-biased; MASCOT is sampling-awareTrust MASCOT; report DTA only with caveat
UShER MAT subtree vs full BEAST disagree on TMRCAParsimony branch lengths shorter than MLRe-estimate branch lengths on the UShER subtree with TreeTime before downstream
BICEPS Ne(t) trajectory differs from BSP on the same dataBICEPS analytic Ne integration vs BSP segment uniformTrust BICEPS; BSP suffered from edge artifacts and slow mixing

Quantitative Thresholds

QuantityThresholdSource / rationale
TempEst root-to-tip R^2 minimum>=0.3Rambaut 2016 Virus Evol 2:vew007 convention
BEAST ESS per parameter (single chain)>=200Standard convention; necessary but not sufficient
BEAST burn-in10% of chain lengthConvention; visually verify trace
MASCOT minimum sequences per deme>=20Müller 2018 Bioinformatics 34:3843 identifiability requirement
BDSKY MCMC length (>=100 tips)10^7-10^8 statesStadler 2013 PNAS 110:228; BDSKY mixes slowly
TreeTime --clock-filter default4 (SD multiplier on root-to-tip residual)TreeTime convention; tighter for outlier-sensitive analyses
Gubbins inputcore.full.aln (full positions, NOT core.aln)Cannot estimate background SNP density from variable positions only
IQ-TREE ascertainment bias correction+ASC for SNP-only alignmentIQ-TREE convention
S. pneumoniae core clock (recombination-masked)~1.5e-6 subs/site/yearCroucher et al Science 2013 literature; >5e-6 indicates unmasked recombination
SARS-CoV-2 clock rate (ancestral)~8e-4 subs/site/yearSARS-CoV-2 substitution-rate literature (varies by lineage)
M. tuberculosis clock rate~0.3-0.5 SNPs/genome/yearWalker 2013 Lancet Infect Dis 13:137 literature (varies by lineage)

Common Errors

Error / symptomCauseSolution
Clock rate 3-5x literatureUnmasked recombinationRun Gubbins / ClonalFrameML first
BEAST chain stuck at single tree topologyOperator-weight imbalance or extreme priorCheck operator schedule; relax prior
treetime --clock-filter False rejected--clock-filter takes a numeric SD multiplierPass a number (typically 4) or omit
beast --threads 4 rejectedBEAST uses single-dash flags-threads 4
BDSKY origin same as rootHeightTutorial confusionSet origin > rootHeight per Stadler 2013
MASCOT migration HPD spans 2+ orders<20 seqs per demePool demes; accept uncertainty
Single-chain ESS reported as proof of convergenceESS necessary but not sufficientRun multi-chain; combine post-overlap
run_gubbins.py core.aln (not core.full.aln)Variable-only alignmentUse core.full.aln; cite Croucher 2015
UShER branch lengths fed directly to BDSKYParsimony branch lengths biased lowRe-estimate via TreeTime or BEAST first
BEAST2 XML breaks on minor-release upgradeXML fragile across versionsPin BEAST + every BEAST2 package version
--reroot best produces implausible rootSampling-biased outliersCross-check with TempEst; consider --reroot oldest or manual root

Anticipated Reviewer Pushback

PushbackResponse
"Was temporal signal checked?"TempEst R^2 reported; date-randomisation test run; both interpreted (date-randomisation can pass with narrow windows)
"Was recombination masked?"Gubbins on core.full.aln; rebuilt tree on masked alignment; cite Croucher 2015
"Why BDSKY and not BSP?"BICEPS / BDSKY model sampling explicitly; BSP / Skygrid assume uniform sampling, biased under preferential surveillance
"How many BEAST chains?"3-4 independent chains; marginal posterior overlap checked; logcombiner only after agreement
"Was MASCOT or DTA used for migration?"MASCOT (or MASCOT-GLM with covariates); DTA inherits Lemey 2009 sampling bias for source attribution
"BDSKY origin vs rootHeight?"origin > rootHeight by Stadler 2013 convention; documented
"Is the clock rate consistent with the literature?"Compared to species-specific reference; recombination-masked S. pneumoniae expected ~1.5e-6
"Was the case-based R_t reconciled?"Reported both; disagreement attributed to sampling bias (phylodynamic is lineage-specific; case data is population mean)

References

  • Stadler T, Kühnert D, Bonhoeffer S, Drummond AJ (2013) Birth-death skyline plot reveals temporal changes of epidemic spread in HIV and hepatitis C virus (HCV). Proc Natl Acad Sci USA 110(1):228-233. doi:10.1073/pnas.1207965110
  • Sagulenko P, Puller V, Neher RA (2018) TreeTime: maximum-likelihood phylodynamic analysis. Virus Evol 4(1):vex042. doi:10.1093/ve/vex042
  • Rambaut A, Lam TT, Carvalho LM, Pybus OG (2016) Exploring the temporal structure of heterochronous sequences using TempEst (formerly Path-O-Gen). Virus Evol 2(1):vew007. doi:10.1093/ve/vew007
  • Duchêne S, Duchêne D, Holmes EC, Ho SY (2015) The performance of the date-randomization test in phylogenetic analyses of time-structured virus data. Mol Biol Evol 32(7):1895-1906. doi:10.1093/molbev/msv056
  • Ramsden C, Holmes EC, Charleston MA (2009) Hantavirus evolution in relation to its rodent and insectivore hosts: no evidence for codivergence. Mol Biol Evol 26(1):143-153. doi:10.1093/molbev/msn234
  • Bouckaert R, Vaughan TG, Barido-Sottani J et al (2019) BEAST 2.5: An advanced software platform for Bayesian evolutionary analysis. PLoS Comput Biol 15(4):e1006650. doi:10.1371/journal.pcbi.1006650
  • Bouckaert RR (2022) An Efficient Coalescent Epoch Model for Bayesian Phylogenetic Inference. Syst Biol 71(6):1549-1560. doi:10.1093/sysbio/syac015
  • Müller NF, Rasmussen DA, Stadler T (2018) MASCOT: parameter and state inference under the marginal structured coalescent approximation. Bioinformatics 34(22):3843-3848. doi:10.1093/bioinformatics/bty406
  • Lemey P, Rambaut A, Drummond AJ, Suchard MA (2009) Bayesian phylogeography finds its roots. PLoS Comput Biol 5(9):e1000520. doi:10.1371/journal.pcbi.1000520
  • De Maio N, Wu CH, O'Reilly KM, Wilson D (2015) New routes to phylogeography: A Bayesian structured coalescent approximation. PLoS Genet 11(8):e1005421. doi:10.1371/journal.pgen.1005421
  • Volz EM, Frost SDW (2014) Sampling through time and phylodynamic inference with coalescent and birth-death models. J R Soc Interface 11(101):20140945. doi:10.1098/rsif.2014.0945
  • Croucher NJ, Page AJ, Connor TR et al (2015) Rapid phylogenetic analysis of large samples of recombinant bacterial whole genome sequences using Gubbins. Nucleic Acids Res 43(3):e15. doi:10.1093/nar/gku1196
  • Didelot X, Wilson DJ (2015) ClonalFrameML: Efficient inference of recombination in whole bacterial genomes. PLoS Comput Biol 11(2):e1004041. doi:10.1371/journal.pcbi.1004041
  • Mostowy R, Croucher NJ, Andam CP et al (2017) Efficient inference of recent and ancestral recombination within bacterial populations. Mol Biol Evol 34(5):1167-1182. doi:10.1093/molbev/msx066
  • Didelot X, Croucher NJ, Bentley SD, Harris SR, Wilson DJ (2018) Bayesian inference of ancestral dates on bacterial phylogenetic trees. Nucleic Acids Res 46(22):e134. doi:10.1093/nar/gky783
  • Turakhia Y, Thornlow B, Hinrichs AS et al (2021) Ultrafast Sample placement on Existing tRees (UShER) enables real-time phylogenetics for the SARS-CoV-2 pandemic. Nat Genet 53(6):809-816. doi:10.1038/s41588-021-00862-7
  • Minh BQ, Schmidt HA, Chernomor O et al (2020) IQ-TREE 2: New models and efficient methods for phylogenetic inference in the genomic era. Mol Biol Evol 37(5):1530-1534. doi:10.1093/molbev/msaa015
  • Legried B, Terhorst J (2022) A class of identifiable phylogenetic birth-death models. Proc Natl Acad Sci USA 119(35):e2119513119. doi:10.1073/pnas.2119513119
  • Featherstone LA, Duchêne S (2023) Decoding the fundamental drivers of phylodynamic inference. Mol Biol Evol 40(6):msad132. doi:10.1093/molbev/msad132
  • Walker TM, Ip CLC, Harrell RH et al (2013) Whole-genome sequencing to delineate Mycobacterium tuberculosis outbreaks: a retrospective observational study. Lancet Infect Dis 13(2):137-146. doi:10.1016/S1473-3099(12)70277-3
  • pathogen-typing - Defines isolates and clusters that feed phylodynamic inference
  • transmission-inference - Phylodynamic R_e + transmission tree are complementary
  • variant-surveillance - Lineage assignment runs upstream of skygrid / BDSKY by lineage
  • phylogenetics/divergence-dating - Calibrated trees for non-pathogen contexts; deeper review of clock models
  • phylogenetics/bayesian-inference - BEAST / RevBayes / MrBayes details beyond BDSKY
  • phylogenetics/modern-tree-inference - IQ-TREE / RAxML topology before time-scaling
  • phylogenetics/tree-io - Tree parsing and format conversion
  • comparative-genomics/whole-genome-alignment - Core-genome alignment input for bacterial phylodynamics
  • variant-calling/vcf-basics - Per-isolate variant calls feeding core-SNP alignment
  • read-alignment/bwa-alignment - Read mapping upstream of variant calling
  • data-visualization/multipanel-figures - Skyline / R_e trajectory plotting
  • workflows/somatic-variant-pipeline - End-to-end orchestration patterns

© GPTomics, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files in epidemiological-genomics/phylodynamics of GPTomics/bioSkills.

  • SKILL.md
  • examples/treetime_analysis.py
  • usage-guide.md

Open the folder on GitHubat commit d91ed3d

Used in 1 other repository

We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in GPTomics/bioSkills, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Bio Epidemiological Genomics Phylodynamics next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Bio Epidemiological Genomics Phylodynamics compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Bio Epidemiological Genomics Phylodynamics this skillGPTomics/bioSkills1.2k1 repos~8kAutomated safety check: PassMIT
Alphagenome Single Variant Analysisgoogle-deepmind/science-skills3.2k2 repos~3kAutomated safety check: NotesApache-2.0
13C Metabolic Flux AnalysisK-Dense-AI/scientific-agent-skills48k1 repos~3.2kAutomated safety check: PassMIT
Clinvar Databasegoogle-deepmind/science-skills3.2k2 repos~3.9kAutomated safety check: NotesApache-2.0
Metabolic Study Planneraiming-lab/AutoResearchClaw15k—~1.9kAutomated safety check: PassMIT
Dbsnp Databasegoogle-deepmind/science-skills3.2k2 repos~3.4kAutomated safety check: NotesApache-2.0

Similar skills

  • Alphagenome Single Variant Analysis

    google-deepmind/science-skills

    Analyzes genetic variant effects on gene expression (RNA-seq), chromatin accessibility (DNASE), histone marks (ChIP), and transcription factors using the AlphaGenome API.

    3.2k GitHub starsUsed in 2 repos~3k tokens
    Research & ScienceAuto-check: notes
  • 13C Metabolic Flux Analysis

    K-Dense-AI/scientific-agent-skills

    Estimates reaction fluxes inside cells from steady-state carbon-13 labeling data with a bundled mfapy-based solver, and reports which fluxes the data pin down.

    48k GitHub starsUsed in 1 repo~3.2k tokens
    Research & ScienceAuto-check passed
  • Clinvar Database

    google-deepmind/science-skills

    A skill your agent uses when needing clinical significance, pathogenicity classifications (e.g., Pathogenic, Benign, VUS), clinical evidence rationales, or finding "hard positive" benchmark controls…

    3.2k GitHub starsUsed in 2 repos~3.9k tokens
    Research & ScienceAuto-check: notes
  • Metabolic Study Planner

    aiming-lab/AutoResearchClaw

    Turns a broad metabolic modelling topic into a concrete, paper-shaped plan with organism, model, perturbations, metrics and figures before any FBA code is written.

    15k GitHub stars~1.9k tokensUpdated 1 mo ago
    Research & ScienceAuto-check passed
  • Dbsnp Database

    google-deepmind/science-skills

    A skill your agent uses when you want to look up, map, and search for short genetic variants (SNPs, indels) in NCBI's dbSNP database.

    3.2k GitHub starsUsed in 2 repos~3.4k tokens
    Research & ScienceAuto-check: notes
  • MFA Pipeline Orchestrator

    aiming-lab/AutoResearchClaw

    Runs a metabolic flux analysis from model loading to phenotype prediction and figures by handing work to four sub-agents in sequence.

    15k GitHub stars~923 tokensUpdated 1 mo ago
    Research & ScienceAuto-check passed

More from GPTomics/bioSkills

All 559 skills in this repo
  • Bio Alignment Io

    GPTomics/bioSkills

    Read, write, and convert multiple sequence alignment files using Biopython Bio.AlignIO.

    1.2k GitHub starsUsed in 3 repos~4.9k tokens
    Auto-check passed
  • bioSkills Installer

    GPTomics/bioSkills

    Installs the bioSkills collection of 425 bioinformatics skills in one step, or only chosen categories, so sequencing, RNA-seq, single-cell and variant tasks get specialized help.

    1.2k GitHub starsUsed in 1 repo~789 tokens
    Auto-check passed
  • Bio Write Sequences

    GPTomics/bioSkills

    Write biological sequences to files (FASTA, FASTQ, GenBank, EMBL) using Biopython Bio.SeqIO.

    1.2k GitHub starsUsed in 3 repos~2.1k tokens
    Auto-check passed
  • Amplicon Primer Clipping

    GPTomics/bioSkills

    Soft- or hard-clips PCR primer footprints from aligned amplicon BAMs so primer bases stop masquerading as confirmed reference sequence.

    1.2k GitHub starsUsed in 2 repos~2.2k tokens
    Auto-check passed
  • Filters BAM alignments by FLAG bits, mapping quality and regions with samtools view or pysam, with recipes for common keep and drop cases.

    1.2k GitHub starsUsed in 2 repos~3.6k tokens
    Auto-check passed
  • Bio Alignment Indexing

    GPTomics/bioSkills

    Create and use BAI/CSI indices for BAM/CRAM files using samtools and pysam.

    1.2k GitHub starsUsed in 2 repos~2.4k tokens
    Auto-check passed

Questions about Bio Epidemiological Genomics Phylodynamics

What does Bio Epidemiological Genomics Phylodynamics do?

Estimates time-scaled phylogenies, molecular-clock rates, effective reproduction number Re, and population dynamics from dated pathogen genomes using TreeTime (maximum-likelihood) and BEAST2…. Bio Epidemiological Genomics Phylodynamics is an agent skill from GPTomics/bioSkills. Estimates time-scaled phylogenies, molecular-clock rates, effective reproduction number Re, and population dynamics from dated pathogen genomes using TreeTime (maximum-likelihood) and BEAST2 (Bayesian; strict/relaxed clocks; coalescent, Bayesian-Skyline, Skygrid, Birth-Death-Skyline, and sampled-ancestor priors; structured coalescent via MASCOT).

When should I use Bio Epidemiological Genomics Phylodynamics?

Bio Epidemiological Genomics Phylodynamics fits situations like: dating outbreak origins; estimating substitution rates; inferring Re through time; building time-calibrated Nextstrain Augur trees.

How do I install Bio Epidemiological Genomics Phylodynamics in Claude Code?

Run `npx skills add GPTomics/bioSkills --skill bio-epidemiological-genomics-phylodynamics -a claude-code`. Or copy the skill folder (epidemiological-genomics/phylodynamics in GPTomics/bioSkills) into .claude/skills/bio-epidemiological-genomics-phylodynamics in your project. Claude Code loads it when a task matches its description.

How do I install Bio Epidemiological Genomics Phylodynamics in Codex?

Run `npx skills add GPTomics/bioSkills --skill bio-epidemiological-genomics-phylodynamics -a codex`. Or copy the skill folder (epidemiological-genomics/phylodynamics in GPTomics/bioSkills) into .agents/skills/bio-epidemiological-genomics-phylodynamics in your project. Codex loads it when a task matches its description.

Can I use Bio Epidemiological Genomics Phylodynamics in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add GPTomics/bioSkills --skill bio-epidemiological-genomics-phylodynamics -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/bio-epidemiological-genomics-phylodynamics, .gemini/skills/bio-epidemiological-genomics-phylodynamics, .github/skills/bio-epidemiological-genomics-phylodynamics and .opencode/skills/bio-epidemiological-genomics-phylodynamics in your project.

What does Bio Epidemiological Genomics Phylodynamics need to run?

Going by SKILL.md and its folder, Bio Epidemiological Genomics Phylodynamics needs Python for the scripts in its folder and the command-line tools its instructions call (pip). Our summary lists: Python 3.

Does Bio Epidemiological Genomics Phylodynamics access the network?

SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Bio Epidemiological Genomics Phylodynamics safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Bio Epidemiological Genomics Phylodynamics use?

Bio Epidemiological Genomics Phylodynamics is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Bio Epidemiological Genomics Phylodynamics use?

About 8k tokens (SKILL.md is roughly 32k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Bio Epidemiological Genomics Phylodynamics?

Skills that share tags, products or a category with Bio Epidemiological Genomics Phylodynamics: Alphagenome Single Variant Analysis (google-deepmind/science-skills, 3.2k stars), 13C Metabolic Flux Analysis (K-Dense-AI/scientific-agent-skills, 48k stars), Clinvar Database (google-deepmind/science-skills, 3.2k stars) and Metabolic Study Planner (aiming-lab/AutoResearchClaw, 15k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Bio Epidemiological Genomics Phylodynamics?

GPTomics (a GitHub organization) maintains it in GPTomics/bioSkills, which has 1,218 GitHub stars. The repository holds 559 skills in this directory. The repository was last updated on August 15, 2026.

Source: GPTomics/bioSkills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.