Agent skill

Bio Comparative Genomics Pangenome Analysis

by GPTomics in GPTomics/bioSkills

Build and analyze pangenomes for prokaryotes (Panaroo, PPanGGOLiN, PEPPAN, GETHOMOLOGUES, anvi'o pangenomics) and eukaryotes (Minigraph-Cactus, PGGB, vg pangenome graphs).

MITAuto-check passedResearch & Science

Install Bio Comparative Genomics Pangenome Analysis

skills CLI
$ npx skills add GPTomics/bioSkills --skill bio-comparative-genomics-pangenome-analysis -a claude-code

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

GitHub CLI
$ gh skill install GPTomics/bioSkills bio-comparative-genomics-pangenome-analysis --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/comparative-genomics/pangenome-analysis .claude/skills/bio-comparative-genomics-pangenome-analysis && 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-comparative-genomics-pangenome-analysis
GitHub stars
1.2k
Used in
2 other repos
Token cost
~8.4k tokens
SKILL.md length
3,225 words
Files
3
Skills in repo
559
Repo updated
First seen
Licence
MIT

At a glance

Build and analyze pangenomes for prokaryotes (Panaroo, PPanGGOLiN, PEPPAN, GETHOMOLOGUES, anvi'o pangenomics) and eukaryotes (Minigraph-Cactus, PGGB, vg pangenome graphs).

  • Assembling species-
  • SKILL.md covers Version Compatibility, Algorithmic Taxonomy, Decision Tree by Experimental… and Per-Tool Failure Modes, plus 12 more sections
  • Runs Shell scripts from its folder; calls conda, python and git; reaches github.com
  • Genus-level pan-gene catalogs

What it does

Bio Comparative Genomics Pangenome Analysis is an agent skill from GPTomics/bioSkills. Build and analyze pangenomes for prokaryotes (Panaroo, PPanGGOLiN, PEPPAN, GETHOMOLOGUES, anvi'o pangenomics) and eukaryotes (Minigraph-Cactus, PGGB, vg pangenome graphs). Implement Tettelin core/accessory/cloud genome decomposition (Tettelin 2005), Heap's law open/closed pangenome modeling, gene presence/absence GWAS (Scoary, pyseer), pangenome graph variant calling (vg, PanGenie), and structural-variation graph indexing. Use when assembling species- or genus-level pan-gene catalogs, separating core from…

Its SKILL.md is about 8.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `examples/panaroo_bacterial_pangenome.sh` 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

  • Assembling species-
  • Genus-level pan-gene catalogs
  • Separating core from accessory/shell/cloud genes
  • Testing gene-content associations with phenotypes

Example prompts

  • “/bio-comparative-genomics-pangenome-analysis”

Requirements

  • Python 3
  • A Bash shell

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 (Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • conda
    • python
    • git
    • pip

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

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • github.com

    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 Comparative Genomics Pangenome Analysis loads about 8.4k tokens when it runs. Until then it costs about 202 tokens; SKILL.md has 3,225 words of instructions outside code blocks.

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

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,225 words, ~8,381 tokens.

Download SKILL.mdSave it as .claude/skills/bio-comparative-genomics-pangenome-analysis/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
bio-comparative-genomics-pangenome-analysis
description
Build and analyze pangenomes for prokaryotes (Panaroo, PPanGGOLiN, PEPPAN, GET_HOMOLOGUES, anvi'o pangenomics) and eukaryotes (Minigraph-Cactus, PGGB, vg pangenome graphs). Implement Tettelin core/accessory/cloud genome decomposition (Tettelin 2005), Heap's law open/closed pangenome modeling, gene presence/absence GWAS (Scoary, pyseer), pangenome graph variant calling (vg, PanGenie), and structural-variation graph indexing. Use when assembling species- or genus-level pan-gene catalogs, separating core from accessory/shell/cloud genes, testing gene-content associations with phenotypes, building pangenome graphs from haplotype-resolved assemblies, calling SVs from pangenome graphs, or selecting between bacterial-pangenome and eukaryotic-pangenome workflows.
tool_type
cli
primary_tool
Panaroo

Version Compatibility

Reference examples tested with: Panaroo 1.5.1+ (Tonkin-Hill 2020 Genome Biol 21:180), PPanGGOLiN 2.2.0+ (Gautreau 2020 PLoS Comp Biol 16:e1007732), PEPPAN 1.0.5+ (Zhou 2020 GR 30:1667), GET_HOMOLOGUES 25102023+, anvi'o 8.0+ (Eren 2021 Nat Microbiol 6:3), Minigraph-Cactus (Hickey 2024 Nat Biotech 42:663; bundled with Cactus 2.5+), PGGB 0.7.5+ (Garrison 2024 Nat Methods 21:2008), vg 1.59.0+ (Sirén J et al 2024 Nat Methods 21:2017), PanGenie 3.1.0+ (Ebler 2022 Nat Genet 54:518), PGR-TK 0.3.6+ (Chin 2023 Nat Methods 20:1213; cschin/pgr-tk; repo archived April 2026 transitioning to PANGEA), PANGEA (in development by DGI / Diploid Genomics as PGR-TK's successor for pangenome graph exploration + analysis -- check https://github.com/cschin/pgr-tk for current repository pointer), Bakta 1.10.4+ (annotation for input), Roary 3.13.0+ (DEPRECATED; use Panaroo), Scoary 1.6.16+, pyseer 1.3.11+, BUSCO 5.7+, FastTree 2.1.11+, RAxML-NG 1.2+. Python 3.10+ required for Panaroo / PPanGGOLiN.

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

  • CLI: panaroo --version; ppanggolin --version; peppan --help; cactus-pangenome --help; pggb --version; vg version
  • Python: pip show panaroo ppanggolin

If code throws Bakta annotation incompatible, GFA file inconsistent, vg index version mismatch, the bacterial pangenome ecosystem expects consistent annotation; re-annotate all input genomes with the same tool and version before pangenome analysis.

Pangenome Analysis

"What genes are universal vs accessory across this set of genomes?" -> The pangenome is the union of all genes across a sampled group; the Tettelin partition (Tettelin 2005 PNAS 102:13950) splits it into core (universal), shell (in many but not all), cloud (rare), and species-specific (private) genes. The fundamental dichotomy is bacterial pangenome (clusters genes into orthogroups; Panaroo / PPanGGOLiN / PEPPAN for compact genomes) vs eukaryotic pangenome (graph-based; Minigraph-Cactus / PGGB / vg for haplotype-resolved sequences). The choice depends on what's being represented: bacterial pangenome captures gene-content variation in a species/genus; eukaryotic pangenome graph captures haplotype-level structural and sequence variation. Roary (Page 2015) is now deprecated in favor of Panaroo, which handles annotation-error noise that previously inflated bacterial pangenomes substantially.

  • CLI: panaroo -i annotated_gffs/ -o panaroo_out --clean-mode strict --remove-invalid-genes -- bacterial pangenome
  • CLI: ppanggolin workflow --fasta fasta_list.tsv --output ppanggolin_out -- partitioned bacterial pangenome
  • CLI: peppan -i genomes.gff -o peppan_out -- genus-scale bacterial pangenome
  • CLI: cactus-pangenome jobStore seqFile.txt --reference name --vcf --gfa -- Minigraph-Cactus pangenome
  • CLI: pggb -i genomes.fa.gz -n 90 -t 32 -o pggb_out -- PGGB pangenome graph
  • CLI: vg autoindex --workflow giraffe -r ref.fa -v variants.vcf.gz -- vg pangenome indexing

Algorithmic Taxonomy

ToolApproachOutputStrengthFails when
Panaroo (Tonkin-Hill 2020 GB 21:180)Graph-based ortholog clustering + annotation-error correctionCore, shell, accessory pangenome with cleaned annotationsBest for clonal bacteria (Mtb 413-genome benchmark; Tonkin-Hill 2020)Slow for > 10000 genomes; assumes Prokka/Bakta input
PPanGGOLiN (Gautreau 2020 PLoS CB 16:e1007732)Hidden Markov partition: persistent/shell/cloudPartitioned pangenome with HMM-based class assignmentScales to many genomes; interpretable partitionsProbabilistic class boundaries differ from strict Tettelin
PEPPAN (Zhou 2020 GR 30:1667)Bacterial pangenome for diverse generaPan + core genomes from 1000s of genomesDesigned for high diversity (whole genus)Slower than newer alternatives at small scales
Roary (Page 2015; DEPRECATED)Original bacterial pangenomeSame outputs as PanarooLegacy; widely citedInflates accessory substantially due to annotation-error tolerance; use Panaroo
GET_HOMOLOGUES (Contreras-Moreira 2013)Multi-algorithm consensus (OrthoMCL, BDBH, COG)Consensus pangenomeCross-validates across methodsSlower; multi-program output integration
anvi'o pangenomics (Eren 2021 Nat Microbiol 6:3)Interactive pangenome with metadataVisual pangenome browsing + integrationStandard for interactive microbial pangenomeLess automated; manual curation expected
Minigraph-Cactus (Hickey 2024 Nat Biotech 42:663)Cactus base-level + minigraph SV-graph integrationPangenome graph (GFA, VCF, GBZ)Production-grade for HPRC-scale haplotypesRequires reference; designed for intra-species pangenome
PGGB (Garrison 2024 Nat Methods 21:2008)All-vs-all wfmash + seqwishPangenome graph (GFA)Modern reference-free graph; HPRC-validatedComputationally heavy at > 100 genomes
vg pangenome (Sirén J et al 2024 Nat Methods 21:2017)Pangenome graph indexing + Giraffe / GiraffeY mappingMapped reads to graph + variant callingvg ecosystem standard for graph-based variant callingSetup complex; learning curve
PanGenie (Ebler 2022 Nat Genet 54:518)Pangenome-graph-based genotypingSV genotype callsEfficient genotyping from short reads via graphRequires pre-built pangenome graph
PGR-TK (Chin 2023 Nat Methods 20:1213; cschin/pgr-tk)Minimizer Anchored Pangenome (MAP) graph + principal bundle decompositionMultiscale pangenome graph; bundle SVGs; AGC-backed sequence dbDesigned for repetitive / clinically-relevant genes (MHC class II, DAZ1-4, OPN1LW/OPN1MW); decomposes tangled graph into interpretable bundles; complements Minigraph-Cactus by exposing fine-grained allele structureRepo archived April 2026 -> PANGEA succession; pinned to Peregrine-assembler-derived workflow; not a drop-in for variant-calling pipelines
PANGEA (in development by DGI / Diploid Genomics; succeeds PGR-TK; check cschin/pgr-tk for current pointer)Next-generation MAP-graph frameworkSame conceptual outputs as PGR-TK with modernized APIActive development 2026+; expected to add tighter integration with HPRC / T2T workflowsAPI surface in flux; pin specific version when scripting
Heaps law / Tettelin (Tettelin 2005 PNAS 102:13950)Statistical model of pangenome opennessOpen / closed pangenome classificationFoundational frameworkClass boundaries depend on sampling
Scoary (Brynildsrud 2016)Pan-GWAS on gene presence/absencePhenotype-gene associationsStandard bacterial pan-GWAS toolLimited to binary phenotypes
pyseer (Lees 2018 Bioinformatics 34:4310)Continuous + binary phenotype association on k-mers/genesPan-GWAS with k-mer / gene-content unitsMore flexible than ScoaryComputational cost
pirate (Bayliss 2019)Bacterial pangenome from multiple methodsCross-method consensusAlternative to GET_HOMOLOGUESLess popular now

Methodology evolves; verify the current Panaroo and PPanGGOLiN manuals + the 2024-2025 microbial pangenome reviews. The HPRC draft pangenome (Liao 2023 Nature 617:312) sets the modern eukaryotic pangenome standard; for bacterial work, Panaroo + PPanGGOLiN is the standard combination.

Decision Tree by Experimental Scenario

ScenarioRecommended approachWhy
Bacterial strain set (5-1000 genomes) of one speciesPanaroo + PPanGGOLiNCross-validation; Panaroo's annotation-cleaning + PPanGGOLiN's partition
Bacterial genus-level pangenome (> 1000 genomes)PEPPANDesigned for high genus-level diversity
Mycobacterium tuberculosis (clonal)PanarooTonkin-Hill 2020 benchmark; clonal pangenomes
E. coli (highly diverse)PPanGGOLiN or PEPPANHigh accessory diversity
Eukaryotic intra-species pangenome (e.g. human, soybean)Minigraph-Cactus or PGGBGraph-based; SV-aware
HPRC-style 90 haplotype graphMinigraph-CactusProduction-grade for HPRC scale
Reference-free eukaryotic pangenomePGGBAll-vs-all alignment-free graph
Pangenome graph for variant callingvg autoindex -> vg giraffeStandard graph-aligner ecosystem
Bacterial pan-GWAS for phenotypePanaroo + Scoary or pyseerPangene matrix from Panaroo; pan-GWAS tool
Visualize pangenome interactivelyanvi'o pangenomics workflowStandard for interactive analysis
Distinguish core / shell / cloud genesPPanGGOLiN (HMM-partitioned) or Tettelin manual partition on Panaroo outputStandard Tettelin framework
Open vs closed pangenome (Heaps law)wgd v2 statistical fit OR custom mclust on Panaroo outputTettelin 2005 framework
Detect HGT-acquired accessory genesCross-reference with [[hgt-detection]]Pangenome + phylogeny
Eukaryotic structural-variation indexingMinigraph-Cactus -> vg + PanGenieSV-aware genotyping pipeline
Bacterial functional pangenomePanaroo + eggNOG-mapper + KEGGFunctional annotation
Pangenome-aware reference for read alignmentvg giraffe with pangenome graphReduces reference bias
Genome-graph-based fine-mappingvg + GraphAligner or vg giraffeSV-aware short-read alignment
Repetitive / clinically relevant gene (MHC class II, DAZ1-4, OPN1LW/OPN1MW)PGR-TK MAP graph + principal bundle decompositionBuilt for tangled repeat graphs; bundle decomposition reveals haplotype-allele structure that linear refs collapse
Next-gen pangenome graph exploration (2026+)PANGEA (PGR-TK successor, in development by DGI / Diploid Genomics)Modernized successor to PGR-TK; check cschin/pgr-tk pointer for current repo
HLA / KIR / immune-locus pangenomePGR-TK + manual bundle inspectionStandard tools collapse repeat alleles; PGR-TK's bundle decomposition preserves them

Per-Tool Failure Modes

Annotation heterogeneity inflating accessory genome

Trigger: Running Panaroo on Prokka- vs Bakta- vs RefSeq- annotated genomes mixed.

Mechanism: Different annotation tools predict different gene boundaries; the same gene is annotated slightly differently across tools, appearing as separate orthogroups. Roary's tolerance of these differences inflated the bacterial accessory genome substantially -- nearly an order of magnitude on the clonal M. tuberculosis benchmark (Tonkin-Hill 2020 GB 21:180). Panaroo's graph-based correction reduces this but cannot eliminate it.

Symptom: Per-strain "accessory" gene count is inflated relative to known biology; comparison to a single-pipeline reference reveals substantial spurious gene-content differences.

Fix: Re-annotate ALL genomes with one pipeline (currently Bakta 1.10.4+ for bacteria; Bakta is GenBank-compliant and faster than Prokka). Use panaroo --clean-mode strict --remove-invalid-genes to apply graph cleaning. Document annotation pipeline + version in methods.

Tettelin partition class boundary artifacts

Trigger: Reporting "core genome" vs "accessory" as percent-of-strains thresholds (e.g. 99% = core).

Mechanism: Tettelin 2005 used 100%-presence = core; pragmatic studies use 95%-99%. The class boundary is arbitrary; small variation in the threshold dramatically changes core/accessory ratio.

Symptom: Core genome size varies 10-30% depending on whether threshold is 95% or 99%.

Fix: Report core/shell/cloud at multiple thresholds; PPanGGOLiN's HMM partition is more principled but still has tunable parameters. Standard reporting: core = present in >=95% (or >=99%); shell = 15-95%; cloud = < 15%. Document threshold.

Roary's annotation-error noise (DEPRECATED tool)

Trigger: Using Roary in new analyses.

Mechanism: Roary tolerates annotation errors (low-identity matches; protein-vs-DNA matches), producing thousands of artifactual accessory genes. Panaroo's introduction (Tonkin-Hill 2020) demonstrated this by re-analyzing 413 Mtb genomes and finding Panaroo's accessory genome was nearly an order of magnitude smaller than the inflated tools' (Roary included).

Symptom: Roary output has many "lineage-specific genes" with poor evidence (single-strain hits, short proteins, no functional annotation).

Fix: Migrate to Panaroo. Panaroo can read Roary's input format; for legacy projects, re-run with Panaroo and compare. Panaroo's --clean-mode strict enforces strict graph-based quality control.

Pangenome graph reference bias (eukaryote)

Trigger: Using Minigraph-Cactus with a single reference; calling variants against the "reference" path.

Mechanism: Minigraph-Cactus is reference-anchored; the chosen reference appears throughout the graph as a privileged path. Variants are called relative to the reference path; non-reference haplotypes are under-represented in the variant calling.

Symptom: Variant call density on non-reference haplotypes is lower than on reference; allele frequencies skewed toward reference.

Fix: Use PGGB (reference-free) for less reference-biased analysis. Alternatively, treat the reference choice as a methodological parameter and document. For HPRC, multiple references can be used and results pooled.

Heaps law misapplied

Trigger: Concluding "open pangenome" from a single Heaps-law fit on insufficient data.

Mechanism: Heaps law parameter alpha distinguishes open (alpha < 1) from closed (alpha > 1) pangenome; estimation requires sampling many genomes. Few genomes give unstable estimates.

Symptom: Heaps-law alpha varies by > 0.2 across resampling; conclusions about pangenome openness flip.

Fix: Require >= 50 genomes (preferably > 100) for Heaps-law estimation; report 95% CI from resampling. Tettelin 2005 demonstrated open Streptococcus agalactiae; Vernikos 2015 reviews open vs closed across taxa.

PGGB memory exhaustion at many genomes

Trigger: Running PGGB with > 30 large eukaryotic genomes on a single node.

Mechanism: PGGB's wfmash all-vs-all step has O(N^2) memory pattern; large eukaryotic genomes (> 1 Gb) make memory prohibitive for > 30 input genomes.

Symptom: PGGB OOMs at the wfmash stage; cluster job killed by OOM-killer.

Fix: Use Minigraph-Cactus for > 30 genomes (it scales better); or split PGGB into chromosomes/regions. PGGB recommendation is <= 20 large genomes per run.

vg index version mismatch breaking giraffe

Trigger: Pre-built vg index used with a different vg version for read alignment.

Mechanism: vg index format evolved; pre-built indexes from one version may not be compatible with another.

Symptom: vg giraffe fails with "index version" error.

Fix: Rebuild vg index with current version; or pin vg version for an analysis. Future vg releases promise backward compatibility but verify.

PanGenie genotype false positives in repetitive regions

Trigger: PanGenie on highly repetitive regions (centromeres, segmental duplications).

Mechanism: Pangenome-graph-based genotyping requires unique paths in the graph; highly repetitive regions create graph-spaghetti paths that are difficult to genotype reliably.

Symptom: PanGenie calls many heterozygous SVs in known-repetitive regions; quality scores low.

Fix: Restrict PanGenie to non-repetitive regions; combine with traditional read-based SV callers (DELLY, Manta) for repeat regions. The HPRC paper documents this limitation (Liao 2023).

Bacterial pangenome with frequent gene-content recombination

Trigger: Building a pangenome of a species with extensive recombination (e.g. Neisseria, Streptococcus pneumoniae).

Mechanism: Frequent recombination breaks the "vertical inheritance" assumption underlying ortholog clustering; the same gene appears in many phylogenetic positions across strains, complicating orthology and inflating accessory genome.

Symptom: Phylogenetic trees from core genome are unstable; per-gene trees show extensive incongruence; pangenome accessory genome appears artificially large.

Fix: Use ClonalFrameML (Didelot 2015 PLoS Comp Biol 11:e1004041) to identify recombinant regions; mask them before pangenome analysis. Restrict core genome analysis to non-recombinant regions.

Show full SKILL.md (1,291 more words)Show less
Annotation density variation across genomes

Trigger: Mixing well-annotated reference genomes with newly assembled, draft-annotation genomes.

Mechanism: Draft annotations miss small genes, pseudogenes, and lineage-specific genes; well-annotated genomes have these. Comparing them inflates "accessory" in draft genomes.

Symptom: Draft genomes have 200-500 fewer accessory genes than expected; per-genome BUSCO completeness > annotation completeness.

Fix: Re-annotate all genomes consistently with Bakta + Prodigal; document BUSCO completeness for each. Exclude genomes with > 5% lower BUSCO than median.

Quantitative Thresholds

QuantityThresholdSource / Rationale
Core genome threshold>=95% (relaxed) to 100% (strict) of strainsTettelin 2005; pragmatic
Shell genome15-95% (or 5-95% per PPanGGOLiN)PPanGGOLiN docs
Cloud genome< 15% of strainsTettelin 2005
Heaps law alpha (open)< 1Tettelin 2005
Heaps law alpha (closed)> 1Tettelin 2005
Minimum genomes for Heaps law fit>= 50; >= 100 preferredVernikos 2015
Panaroo gene cluster identity>=70% (default); stricter for clonalPanaroo defaults
PPanGGOLiN coverage80% gene-length coverage in clusteringDefault
PEPPAN BLAT thresholdidentity >= 70%Zhou 2020
Mycobacterium tuberculosis core~3500-3700 genes (Tonkin-Hill 2020 Mtb benchmark)Bench results
E. coli pangenome (open)core ~2400; pangenome >15000Reference
Plasmodium falciparum core~5300 genes (eukaryotic prokaryote-like)Reference
Minimum strains for bacterial pangenome>= 5; >= 20 for shell/cloud meaningfulEmpirical
HPRC pangenome size90 haplotypes, ~6.4M variantsLiao 2023
PGGB recommended max genomes<= 20 large eukaryotic; 100+ for compactGarrison 2024
PanGenie minimum k-merk = 31 defaultEbler 2022
vg index Haplotype Sampling--haplotype-sampling YES for multi-pop graphSirén J et al 2024 Nat Methods 21:2017
Scoary pan-GWAS p-value thresholdBonferroni-corrected p < 0.05Brynildsrud 2016
pyseer continuous-trait powerrequires > 1000 isolates for solid signalLees 2018
anvi'o pangenome minimum5+ genomes for non-trivial visualizationEren 2021

Panaroo Bacterial Pangenome Workflow

Goal: Construct a high-quality bacterial pangenome with annotation-error correction.

Approach: Annotate genomes consistently with Bakta -> run Panaroo strict mode -> partition with PPanGGOLiN.

bash
# 1. Annotate all genomes with Bakta (consistent annotation)
mkdir -p annotated
for fa in genomes/*.fa; do
    name=$(basename $fa .fa)
    bakta --db /path/to/bakta-db --threads 16 \
        --output annotated/${name} --prefix $name \
        --genus Escherichia --species coli \
        $fa
done

# 2. Run Panaroo
panaroo -i annotated/*.gff -o panaroo_out -t 16 \
    --clean-mode strict --remove-invalid-genes

# 3. Extract pangenome matrix
# panaroo_out/gene_presence_absence.csv      strains x genes matrix
# panaroo_out/core_gene_alignment.aln        core gene MSA for phylogeny
# panaroo_out/pan_genome_reference.fa        consensus pangenome sequence

# 4. Tettelin partition (custom)
python tettelin_partition.py \
    --presence panaroo_out/gene_presence_absence.csv \
    --core-threshold 0.99 --shell-threshold 0.15 \
    --output panaroo_out/tettelin_classification.tsv

# 5. PPanGGOLiN HMM partition (alternative)
# PPanGGOLiN expects a TSV index: `genome_name<TAB>path/to.gff3` per row
for f in annotated/*.gff3; do
    printf "%s\t%s\n" "$(basename "$f" .gff3)" "$(realpath "$f")"
done > gff_list.tsv
ppanggolin all --anno gff_list.tsv -o ppanggolin_out --threads 16
# Output: ppanggolin_out/pangenome.h5 (HDF5 with HMM-partitioned genes)
python
'''Tettelin core/shell/cloud partition from Panaroo gene presence/absence matrix.'''
import pandas as pd


def tettelin_partition(presence_matrix, core_threshold=0.99,
                       shell_threshold=0.15):
    '''Returns DataFrame[gene_name] -> Tettelin class.'''
    # presence_matrix: rows = genes, cols = strains, 0/1 entries
    n_strains = presence_matrix.shape[1]
    fraction = presence_matrix.sum(axis=1) / n_strains
    classes = pd.cut(fraction,
                     bins=[-0.01, shell_threshold, core_threshold, 1.01],
                     labels=['cloud', 'shell', 'core'])
    return pd.DataFrame({'fraction': fraction, 'class': classes})


def heaps_law(presence_matrix, n_iters=100):
    '''Estimate Heaps law alpha from genome sampling order.'''
    import numpy as np
    n_strains = presence_matrix.shape[1]
    pan_sizes = []
    for _ in range(n_iters):
        order = np.random.permutation(n_strains)
        pan = set()
        sizes = []
        for i in order:
            genes_in_i = presence_matrix.iloc[:, i] == 1
            pan.update(genes_in_i.index[genes_in_i].tolist())
            sizes.append(len(pan))
        pan_sizes.append(sizes)
    pan_array = np.array(pan_sizes)  # n_iters x n_strains
    n_sampled = np.arange(1, n_strains + 1)
    # Fit log-log
    mean_pan = pan_array.mean(axis=0)
    log_n = np.log(n_sampled)
    log_pan = np.log(mean_pan)
    alpha = np.polyfit(log_n, log_pan, 1)[0]
    return alpha

Minigraph-Cactus for Eukaryotic Pangenome

Goal: Build pangenome graph from haplotype-resolved assemblies.

Approach: Provide reference + haplotypes -> Minigraph-Cactus produces GFA + VCF + GBZ for downstream genotyping.

bash
# Prepare seqFile (Cactus convention)
cat > pangenome_seqs.txt << 'EOF'
GRCh38      GRCh38.fa
HG002.hap1  HG002.hap1.fa
HG002.hap2  HG002.hap2.fa
HG003.hap1  HG003.hap1.fa
HG003.hap2  HG003.hap2.fa
EOF

cactus-pangenome jobStore_path pangenome_seqs.txt \
    --outDir hprc_pangenome \
    --outName hprc_pangenome \
    --reference GRCh38 \
    --vcf \
    --gfa \
    --gbz \
    --indexCores 32 \
    --mapCores 32

# Outputs:
#   hprc_pangenome/hprc_pangenome.full.hal      Full Cactus HAL
#   hprc_pangenome/hprc_pangenome.gfa.gz        Graph Fragment Assembly format
#   hprc_pangenome/hprc_pangenome.vcf.gz        Short variants relative to GRCh38
#   hprc_pangenome/hprc_pangenome.gbz           GBZ compressed graph
#   hprc_pangenome/hprc_pangenome.giraffe.gbz   Giraffe-indexed graph for mapping

vg Pangenome Genotyping

Goal: Genotype short reads against a pre-built pangenome graph.

Approach: Pre-built pangenome -> vg autoindex -> vg giraffe (fast mapping) -> vg call variants.

bash
# Pre-build index
vg autoindex --workflow giraffe --threads 16 \
    --ref-graph hprc_pangenome.gfa.gz \
    --output hprc_index

# Map reads
vg giraffe \
    --gbz-name hprc_index.giraffe.gbz \
    --dist-name hprc_index.dist \
    --minimizer-name hprc_index.min \
    --fastq-in sample.R1.fq.gz \
    --fastq-in sample.R2.fq.gz \
    --output-format GAM \
    --threads 16 \
    > sample.gam

# Pack alignment information
vg pack -x hprc_index.giraffe.gbz -g sample.gam -o sample.pack

# Call variants
vg call hprc_index.giraffe.gbz -k sample.pack -a > sample.vcf

Pan-GWAS with Scoary

Goal: Identify gene presence/absence associated with a phenotype.

Approach: Panaroo presence/absence matrix + phenotype file -> Scoary -> phenotype-gene associations.

bash
# Run Scoary
scoary \
    --gene-presence-absence panaroo_out/gene_presence_absence.csv \
    --traits phenotypes.tsv \
    --output scoary_out \
    --threads 16 \
    --upgma-tree

# Output:
#   scoary_out/*_results.csv   per-trait gene associations

Reconciliation: When Methods Disagree

PatternLikely causeAction
Panaroo accessory >> PPanGGOLiN accessoryPanaroo "accessory" includes singleton; PPanGGOLiN "cloud" is a separate classCompare strict mode definitions; Panaroo + PPanGGOLiN cross-validate
Roary accessory >> Panaroo accessoryRoary annotation-error inflationTrust Panaroo; Roary deprecated
PEPPAN core != Panaroo coreDifferent clustering thresholdsPanaroo for clonal; PEPPAN for genus-scale; consistent within method
Minigraph-Cactus VCF and Cactus pairwise differPangenome integrates SV; pairwise is directMinigraph-Cactus for variant-aware pangenome
PGGB and Minigraph-Cactus disagree on graph topologyPGGB reference-free; MC reference-anchoredBoth valid; report both for transparency
Heaps-law alpha differs across resamplingStochasticity; insufficient samplingRequire > 100 genomes; report 95% CI
PanGenie genotype contradicts read-based SV callerRepetitive region (graph-spaghetti)Trust read-based for repetitive; PanGenie for unique regions
Bakta and Prokka annotation give different gene countsDifferent gene-prediction defaultsUse Bakta (GenBank-compliant); document
Scoary and pyseer disagree on top genesDifferent statistical assumptionsCross-validate; trust consensus

Operational rule for publication: Bacterial pangenome uses Panaroo + PPanGGOLiN cross-validation; eukaryotic pangenome uses Minigraph-Cactus (HPRC scale) or PGGB (reference-free). Document annotation pipeline + version; report core/shell/cloud at multiple thresholds; verify Heaps-law on > 100 genomes for openness claims.

Cohort Gotchas

  • Endosymbiont genomes (Buchnera, Wolbachia, mitochondria): core genome is dominant; accessory is minimal; pangenome analysis less informative
  • Hypothetical proteins: unknown function genes dominate "accessory" in non-model species; functional analysis needed
  • Phage genes: prophages contribute to accessory; mask prophages for "core species genes"
  • Mobile genetic elements: plasmids/IS elements appear in accessory; tag with mobileOG-db
  • Highly recombinogenic species (Neisseria, S. pneumoniae): core genome unstable; restrict to non-recombinant regions
  • Plasmids: chromosome vs plasmid distinction matters for pangenome; classify with PlasmidFinder
  • Polyploid eukaryotic pangenome: subgenomes must be assigned first (see [[whole-genome-duplication]])
  • Pangenome graph for SV detection: PanGenie + graph aligners; reference-anchored variant callers miss SVs

Anticipated Reviewer Pushback

PushbackStandard response
"Annotation pipeline?"Bakta 1.10+ on all genomes; consistent settings; BUSCO completeness reported per strain
"Why Panaroo over Roary?"Panaroo's annotation-error correction reduces accessory inflation substantially (nearly an order of magnitude on the Mtb benchmark; Tonkin-Hill 2020)
"Tettelin thresholds?"Reported at multiple thresholds (95%, 99%); PPanGGOLiN HMM partition as cross-validation
"Heaps law inference?">= 100 genomes; resampling 95% CI reported
"Recombination?"ClonalFrameML applied; recombinant regions masked or analyzed separately
"Why Minigraph-Cactus?"HPRC standard; production-grade for haplotype-resolved pangenomes
"Reference bias?"Reference choice documented; PGGB cross-validation for reference-free comparison
"Pan-GWAS multiple testing?"Bonferroni-corrected across genes; or pyseer with k-mer-based
"Open vs closed pangenome?"Heaps-law alpha reported with CI; openness claim conditional on alpha < 1
"Annotation density consistency?"BUSCO completeness verified per strain; outliers excluded

Common Errors

Error / symptomCauseSolution
Panaroo "input format error"GFF3 missing required fieldsVerify GFF3 from Bakta has correct attribute fields
PPanGGOLiN HDF5 unreadableVersion mismatchPin PPanGGOLiN version; rebuild
Roary used (legacy script)Roary deprecatedMigrate to Panaroo
PEPPAN OOMToo many genomesReduce to representative subset; or use PEPPAN with chunking
Cactus pangenome unrelated to expectationWrong seqFile syntaxTabs not spaces; correct file paths
PGGB wfmash hangsToo many large genomesReduce to <= 20 eukaryotic genomes
vg autoindex memory errorInsufficient RAMIncrease to 200+ GB; or split by chromosome
PanGenie genotype emptyIndex mismatch between graph + readsRe-build vg index with same vg version
Scoary "no significant traits"Few strains or low effectIncrease strains; verify phenotype variance
pyseer p-values uniformPopulation structure inflationUse --lmm flag with kinship matrix
anvi'o display errorDatabase version mismatchRe-create with current anvi'o version
Minigraph-Cactus runs but VCF emptyAll inputs identicalVerify inputs differ
Bakta annotation gives 0 genesReference data not configuredSet BAKTA_DB env or use --db /path

Tool Installation Notes

bash
# Bacterial pangenome
conda install -c bioconda panaroo ppanggolin peppan get_homologues anvio

# Eukaryotic pangenome
conda install -c bioconda cactus pggb vg pangenie

# PGR-TK (repeat-rich / clinical gene focus)
conda install -c bioconda pgr-tk
# Or: cargo install pgrtk; or Docker quay.io/cschin/pgr-tk
# Note: cschin/pgr-tk archived April 2026; transitioning to PANGEA (developed by DGI / Diploid Genomics; check upstream repo for pointer)

# Annotation
conda install -c bioconda bakta prokka

# Pan-GWAS
conda install -c bioconda scoary pyseer

# Recombination
conda install -c bioconda clonalframeml

# Mobile elements
git clone https://github.com/clb21565/mobileOG-db

# QC
conda install -c bioconda busco compleasm

For HPRC-scale eukaryotic pangenome, use cluster with >= 500 GB RAM and HPC scheduler integration via Toil (see [[whole-genome-alignment]]).

References

  • Tettelin H et al 2005 PNAS 102:13950 (core/accessory pangenome framework)
  • Tonkin-Hill G et al 2020 Genome Biol 21:180 (Panaroo)
  • Gautreau G et al 2020 PLoS Comp Biol 16:e1007732 (PPanGGOLiN)
  • Zhou Z et al 2020 Genome Res 30:1667 (PEPPAN)
  • Page AJ et al 2015 Bioinformatics 31:3691 (Roary; DEPRECATED)
  • Contreras-Moreira B & Vinuesa P 2013 Appl Environ Microbiol 79:7696 (GET_HOMOLOGUES)
  • Eren AM et al 2021 Nat Microbiol 6:3 (anvi'o pangenomics)
  • Hickey G et al 2024 Nat Biotech 42:663 (Minigraph-Cactus)
  • Garrison E et al 2024 Nat Methods 21:2008 (PGGB)
  • Sirén J et al 2024 Nat Methods 21:2017 (vg pangenome update)
  • Ebler J et al 2022 Nat Genet 54:518 (PanGenie)
  • Liao W-W et al 2023 Nature 617:312 (HPRC draft pangenome)
  • Brynildsrud O et al 2016 Genome Biol 17:238 (Scoary)
  • Lees JA et al 2018 Bioinformatics 34:4310 (pyseer)
  • Didelot X & Wilson DJ 2015 PLoS Comp Biol 11:e1004041 (ClonalFrameML)
  • Schwengers O et al 2021 Microb Genom 7 (Bakta)
  • Vernikos GS et al 2015 Curr Opin Microbiol 23:148 (pangenome openness review)
  • Brown CL et al 2022 Appl Environ Microbiol 88:e0099122 (mobileOG-db)
  • Mikheenko A et al 2018 Bioinformatics 34:i142 (QUAST-LG; long-read assembly evaluation -- earlier "pangenome review" attribution was incorrect; QUAST-LG benchmarks large-scale assembly QC).
  • Chin C-S et al 2023 Nat Methods 20:1213 (PGR-TK; MAP graphs + principal bundle decomposition for repeat-rich / clinical genes; MHC, DAZ1-4, OPN1LW/OPN1MW examples)
  • cschin/pgr-tk GitHub (repo; archived April 2026, transitioning to PANGEA developed by DGI / Diploid Genomics; consult upstream README for PANGEA pointer)
  • comparative-genomics/whole-genome-alignment - Minigraph-Cactus builds on Cactus; PGGB underlies eukaryotic pangenome
  • comparative-genomics/ortholog-inference - Pangenome clusters are bacterial orthologs at species/genus level
  • comparative-genomics/hgt-detection - Accessory genes often HGT-derived; mobile-element annotation cross-references
  • comparative-genomics/gene-family-evolution - CAFE5 modeling on Panaroo presence/absence matrix
  • genome-annotation/prokaryotic-annotation - Bakta annotation is pangenome input
  • genome-annotation/repeat-annotation - Repeat masking before eukaryotic pangenome
  • variant-calling/structural-variant-calling - Pangenome graph SV calling complements read-based callers
  • variant-calling/joint-calling - vg + graph variant calling integrates with traditional VCF
  • metagenomics/amr-detection - AMR genes often in bacterial accessory
  • metagenomics/strain-tracking - Strain-specific accessory genes for tracking
  • population-genetics/association-testing - Pan-GWAS for phenotype-gene-content association

© 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 comparative-genomics/pangenome-analysis of GPTomics/bioSkills.

  • SKILL.md
  • examples/panaroo_bacterial_pangenome.sh
  • usage-guide.md

Open the folder on GitHubat commit d91ed3d

Used in 2 other repositories

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

Compare with similar skills

Bio Comparative Genomics Pangenome Analysis 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 Comparative Genomics Pangenome Analysis compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Bio Comparative Genomics Pangenome Analysis this skillGPTomics/bioSkills1.2k2 repos~8.4kAutomated 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 Comparative Genomics Pangenome Analysis

What does Bio Comparative Genomics Pangenome Analysis do?

Build and analyze pangenomes for prokaryotes (Panaroo, PPanGGOLiN, PEPPAN, GETHOMOLOGUES, anvi'o pangenomics) and eukaryotes (Minigraph-Cactus, PGGB, vg pangenome graphs). Bio Comparative Genomics Pangenome Analysis is an agent skill from GPTomics/bioSkills. Build and analyze pangenomes for prokaryotes (Panaroo, PPanGGOLiN, PEPPAN, GETHOMOLOGUES, anvi'o pangenomics) and eukaryotes (Minigraph-Cactus, PGGB, vg pangenome graphs).

When should I use Bio Comparative Genomics Pangenome Analysis?

Bio Comparative Genomics Pangenome Analysis fits situations like: assembling species-; genus-level pan-gene catalogs; separating core from accessory/shell/cloud genes; testing gene-content associations with phenotypes.

How do I install Bio Comparative Genomics Pangenome Analysis in Claude Code?

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

How do I install Bio Comparative Genomics Pangenome Analysis in Codex?

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

Can I use Bio Comparative Genomics Pangenome Analysis 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-comparative-genomics-pangenome-analysis -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-comparative-genomics-pangenome-analysis, .gemini/skills/bio-comparative-genomics-pangenome-analysis, .github/skills/bio-comparative-genomics-pangenome-analysis and .opencode/skills/bio-comparative-genomics-pangenome-analysis in your project.

What does Bio Comparative Genomics Pangenome Analysis need to run?

Going by SKILL.md and its folder, Bio Comparative Genomics Pangenome Analysis needs a shell for the scripts in its folder and the command-line tools its instructions call (conda, python, git and pip). Our summary lists: Python 3; A Bash shell.

Does Bio Comparative Genomics Pangenome Analysis access the network?

SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Bio Comparative Genomics Pangenome Analysis 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 Comparative Genomics Pangenome Analysis use?

Bio Comparative Genomics Pangenome Analysis 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 Comparative Genomics Pangenome Analysis use?

About 8.4k tokens (SKILL.md is roughly 34k 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 Comparative Genomics Pangenome Analysis?

Skills that share tags, products or a category with Bio Comparative Genomics Pangenome Analysis: 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 Comparative Genomics Pangenome Analysis?

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.