Tooluniverse Phylogenetics logo

Tooluniverse Phylogenetics

CommunityPopular
wu-yc
tooluniverse-phylogenetics

Production-ready phylogenetics and sequence analysis skill for alignment processing, tree analysis, and evolutionary metrics. Computes treeness, RCV, treeness/RCV, parsimony informative sites, evolutionary rate, DVMC, tree length, alignment gap statistics, GC content, and bootstrap support using PhyKIT, Biopython, and DendroPy. Performs NJ/UPGMA/parsimony tree construction, Robinson-Foulds distance, Mann-Whitney U tests, and batch analysis across gene families. Integrates with ToolUniverse for sequence retrieval (NCBI, UniProt, Ensembl) and tree annotation. Use when processing FASTA/PHYLIP/Nexus/Newick files, computing phylogenetic metrics, comparing taxa groups, or answering questions about alignments, trees, parsimony, or molecular evolution.

Overview

Publisherwu-yc
RepositoryLabClaw
Skill nametooluniverse-phylogenetics
Stars
1.1K
Forks
161
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by wu-yc on GitHub. Read the source before you install it.

Installation

Install the Tooluniverse Phylogenetics AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/wu-yc/LabClaw/tree/main/skills/bio/tooluniverse-phylogenetics
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/wu-yc/LabClaw.git /tmp/LabClaw
mkdir -p .claude/skills
cp -r /tmp/LabClaw/skills/bio/tooluniverse-phylogenetics .claude/skills/tooluniverse-phylogenetics
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Tooluniverse Phylogenetics in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Tooluniverse Phylogenetics on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Tooluniverse Phylogenetics is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Phylogenetics and Sequence Analysis

Comprehensive phylogenetics and sequence analysis using PhyKIT, Biopython, and DendroPy. Designed for bioinformatics questions about multiple sequence alignments, phylogenetic trees, parsimony, molecular evolution, and comparative genomics.

IMPORTANT: This skill handles complex phylogenetic workflows. Most implementation details have been moved to references/ for progressive disclosure. This document focuses on high-level decision-making and workflow orchestration.


When to Use This Skill

Apply when users:

  • Have FASTA alignment files and ask about parsimony informative sites, gaps, or alignment quality
  • Have Newick tree files and ask about treeness, tree length, evolutionary rate, or DVMC
  • Ask about treeness/RCV, RCV, or relative composition variability
  • Need to compare phylogenetic metrics between groups (fungi vs animals, etc.)
  • Ask about PhyKIT functions (treeness, rcv, dvmc, evo_rate, parsimony_informative, tree_length)
  • Have gene family data with paired alignments and trees
  • Need Mann-Whitney U tests or other statistical comparisons of phylogenetic metrics
  • Ask about bootstrap support, branch lengths, or tree topology
  • Need to build trees (NJ, UPGMA, parsimony) from alignments
  • Ask about Robinson-Foulds distance or tree comparison

BixBench Coverage: 33 questions across 8 projects (bix-4, bix-11, bix-12, bix-25, bix-35, bix-38, bix-45, bix-60)

NOT for (use other skills instead):

  • Multiple sequence alignment generation → Use external tools (MUSCLE, MAFFT, ClustalW)
  • Maximum Likelihood tree construction → Use IQ-TREE, RAxML, or PhyML
  • Bayesian phylogenetics → Use MrBayes or BEAST
  • Ancestral state reconstruction → Use separate tools

Core Principles

  1. Data-first approach - Discover and validate all input files (alignments, trees) before any analysis
  2. PhyKIT-compatible - Use PhyKIT functions for treeness, RCV, DVMC, parsimony, evolutionary rate (matches BixBench expected outputs)
  3. Format-flexible - Support FASTA, PHYLIP, Nexus, Newick, and auto-detect formats
  4. Batch processing - Process hundreds of gene alignments/trees in a single analysis
  5. Statistical rigor - Mann-Whitney U, medians, percentiles, standard deviations with scipy.stats
  6. Precision awareness - Match rounding to 4 decimal places (PhyKIT default) or as requested
  7. Group comparison - Compare metrics between taxa groups (e.g., fungi vs animals)
  8. Question-driven - Parse exactly what is asked and return the specific number/statistic

Required Python Packages

python
# Core (MUST be installed)
import numpy as np
import pandas as pd
from scipy import stats
from Bio import AlignIO, Phylo, SeqIO
from Bio.Phylo.TreeConstruction import DistanceCalculator, DistanceTreeConstructor

# PhyKIT (primary computation engine)
from phykit.services.tree.treeness import Treeness
from phykit.services.tree.total_tree_length import TotalTreeLength
from phykit.services.tree.evolutionary_rate import EvolutionaryRate
from phykit.services.tree.dvmc import DVMC
from phykit.services.tree.treeness_over_rcv import TreenessOverRCV
from phykit.services.alignment.parsimony_informative_sites import ParsimonyInformative
from phykit.services.alignment.rcv import RelativeCompositionVariability

# DendroPy (for advanced tree operations)
import dendropy

# ToolUniverse (for sequence retrieval)
from tooluniverse import ToolUniverse

Installation:

bash
pip install phykit dendropy biopython pandas numpy scipy

High-Level Workflow Decision Tree

START: User question about phylogenetic data
│
├─ Q1: What type of analysis is needed?
│  │
│  ├─ ALIGNMENT ANALYSIS (FASTA/PHYLIP files)
│  │  ├─ Parsimony informative sites → phykit_parsimony_informative()
│  │  ├─ RCV score → phykit_rcv()
│  │  ├─ Gap percentage → alignment_gap_percentage()
│  │  ├─ GC content → alignment_statistics()
│  │  └─ See: references/sequence_alignment.md
│  │
│  ├─ TREE ANALYSIS (Newick files)
│  │  ├─ Treeness → phykit_treeness()
│  │  ├─ Tree length → phykit_tree_length()
│  │  ├─ Evolutionary rate → phykit_evolutionary_rate()
│  │  ├─ DVMC → phykit_dvmc()
│  │  ├─ Bootstrap support → extract_bootstrap_support()
│  │  └─ See: references/tree_building.md
│  │
│  ├─ COMBINED ANALYSIS (alignment + tree)
│  │  └─ Treeness/RCV → phykit_treeness_over_rcv()
│  │
│  ├─ TREE CONSTRUCTION (build from alignment)
│  │  ├─ Neighbor-Joining → build_nj_tree()
│  │  ├─ UPGMA → build_upgma_tree()
│  │  ├─ Parsimony → build_parsimony_tree()
│  │  └─ See: references/tree_building.md
│  │
│  ├─ GROUP COMPARISON (fungi vs animals, etc.)
│  │  ├─ Batch compute metrics per group
│  │  ├─ Mann-Whitney U test
│  │  ├─ Summary statistics (median, mean, percentiles)
│  │  └─ See: references/parsimony_analysis.md
│  │
│  └─ TREE COMPARISON
│     ├─ Robinson-Foulds distance → robinson_foulds_distance()
│     └─ Bootstrap consensus → bootstrap_analysis()
│
├─ Q2: What data format is available?
│  ├─ FASTA (.fa, .fasta, .faa, .fna)
│  ├─ PHYLIP (.phy, .phylip) - Use phylip-relaxed for long names
│  ├─ Nexus (.nex, .nexus)
│  ├─ Newick (.nwk, .newick, .tre, .tree)
│  └─ Auto-detect with load_alignment() or load_tree()
│
└─ Q3: Is this a batch analysis?
   ├─ Single gene → Run metric function once
   ├─ Multiple genes → Use batch_compute_metric()
   └─ Group comparison → Use discover_gene_files() + compare_groups()

Quick Reference: Common Metrics

MetricFunctionInputDescription
Treenessphykit_treeness(tree_file)NewickInternal branch length / Total branch length
RCVphykit_rcv(aln_file)FASTA/PHYLIPRelative Composition Variability
Treeness/RCVphykit_treeness_over_rcv(tree, aln)BothTreeness divided by RCV
Tree Lengthphykit_tree_length(tree_file)NewickSum of all branch lengths
Evolutionary Ratephykit_evolutionary_rate(tree_file)NewickTotal branch length / num terminals
DVMCphykit_dvmc(tree_file)NewickDegree of Violation of Molecular Clock
Parsimony Sitesphykit_parsimony_informative(aln_file)FASTA/PHYLIPSites with ≥2 chars appearing ≥2 times
Gap Percentagealignment_gap_percentage(aln_file)FASTA/PHYLIPPercentage of gap characters

See scripts/tree_statistics.py for implementation.


Common Analysis Patterns (BixBench)

Pattern 1: Single Metric Across Groups

Question: "What is the median DVMC for fungi vs animals?"

Workflow:

python
# 1. Discover files
fungi_genes = discover_gene_files("data/fungi")
animal_genes = discover_gene_files("data/animals")

# 2. Compute metric
fungi_dvmc = batch_dvmc(fungi_genes)
animal_dvmc = batch_dvmc(animal_genes)

# 3. Compare
fungi_values = list(fungi_dvmc.values())
animal_values = list(animal_dvmc.values())

print(f"Fungi median DVMC: {np.median(fungi_values):.4f}")
print(f"Animal median DVMC: {np.median(animal_values):.4f}")

See: references/parsimony_analysis.md for full implementation

Pattern 2: Statistical Comparison

Question: "What is the Mann-Whitney U statistic comparing treeness between groups?"

Workflow:

python
from scipy import stats

# Compute treeness for both groups
group1_treeness = batch_treeness(group1_genes)
group2_treeness = batch_treeness(group2_genes)

# Mann-Whitney U test (two-sided)
u_stat, p_value = stats.mannwhitneyu(
    list(group1_treeness.values()),
    list(group2_treeness.values()),
    alternative='two-sided'
)

print(f"U statistic: {u_stat:.0f}")
print(f"P-value: {p_value:.4e}")

Pattern 3: Filtering + Metric

Question: "What is the treeness/RCV for alignments with <5% gaps?"

Workflow:

python
# 1. Filter by gap percentage
valid_genes = []
for entry in gene_files:
    if 'aln_file' in entry:
        gap_pct = alignment_gap_percentage(entry['aln_file'])
        if gap_pct < 5.0:
            valid_genes.append(entry)

# 2. Compute metric on filtered set
results = batch_treeness_over_rcv(valid_genes)

# 3. Report
values = [r[0] for r in results.values()]  # treeness/rcv ratio
print(f"Median treeness/RCV: {np.median(values):.4f}")

Pattern 4: Specific Gene Lookup

Question: "What is the evolutionary rate for gene X?"

Workflow:

python
# Find gene file
gene_files = discover_gene_files("data/")
gene_entry = [g for g in gene_files if g['gene_id'] == 'X'][0]

# Compute metric
evo_rate = phykit_evolutionary_rate(gene_entry['tree_file'])

print(f"Evolutionary rate for gene X: {evo_rate:.4f}")

Choosing Methods: When to Use What

Alignment Methods

When building alignments (use external tools, not this skill):

MethodSpeedAccuracyUse Case
ClustalWSlowMediumSmall datasets (<100 sequences), educational
MUSCLEFastHighMedium datasets (100-1000 sequences)
MAFFTVery FastVery HighRecommended - Large datasets (>1000 sequences)

For this skill: Work with pre-aligned sequences. Use load_alignment() to read any format.

Tree Building Methods

When to use which tree method:

MethodSpeedAccuracyUse Case
Neighbor-JoiningFastMediumQuick trees, large datasets, exploratory
UPGMAFastLowAssumes molecular clock, special cases only
Maximum ParsimonyMediumMediumSmall datasets, discrete characters
Maximum LikelihoodSlowHighUse external tools (IQ-TREE, RAxML) for production

Implementation in this skill:

python
# Fast distance-based trees
tree = build_nj_tree("alignment.fa")  # Neighbor-Joining
tree = build_upgma_tree("alignment.fa")  # UPGMA

# Parsimony (for small alignments)
tree = build_parsimony_tree("alignment.fa")

For production ML trees: Use IQ-TREE or RAxML externally, then analyze with this skill.

See references/tree_building.md for detailed implementations.


Batch Processing

Discovering Gene Files

python
# Auto-discover paired alignment + tree files
gene_files = discover_gene_files("data/")

# Result: list of dicts with 'gene_id', 'aln_file', 'tree_file'
# [
#   {'gene_id': 'gene1', 'aln_file': 'gene1.fa', 'tree_file': 'gene1.nwk'},
#   {'gene_id': 'gene2', 'aln_file': 'gene2.fa', 'tree_file': 'gene2.nwk'},
#   ...
# ]

Computing Metrics in Batch

python
# Tree metrics
treeness_results = batch_treeness(gene_files)
tree_length_results = batch_tree_length(gene_files)
dvmc_results = batch_dvmc(gene_files)
evo_rate_results = batch_evolutionary_rate(gene_files)

# Alignment metrics
rcv_results = batch_rcv(gene_files)
pi_results = batch_parsimony_informative(gene_files)
gap_results = batch_gap_percentage(gene_files)

# Combined metrics
treeness_rcv_results = batch_treeness_over_rcv(gene_files)

# All return dict: {gene_id: value}

Statistical Analysis

python
# Summary statistics
stats = summary_stats(list(treeness_results.values()))
# Returns: {'mean': ..., 'median': ..., 'std': ..., 'min': ..., 'max': ...}

# Group comparison
comparison = compare_groups(
    list(fungi_treeness.values()),
    list(animal_treeness.values()),
    group1_name="Fungi",
    group2_name="Animals"
)
# Returns: {'u_statistic': ..., 'p_value': ..., 'Fungi': {...}, 'Animals': {...}}

See references/parsimony_analysis.md for full workflow.


Answer Extraction for BixBench

Question PatternExtraction Method
"What is the median X?"np.median(values)
"What is the maximum X?"np.max(values)
"What is the difference between median X for A vs B?"abs(np.median(a) - np.median(b))
"What percentage of X have Y above Z?"sum(v > Z for v in values) / len(values) * 100
"What is the Mann-Whitney U statistic?"stats.mannwhitneyu(a, b)[0]
"What is the p-value?"stats.mannwhitneyu(a, b)[1]
"What is the X value for gene Y?"results[gene_id]
"What is the fold-change in median X?"np.median(a) / np.median(b)
"multiplied by 1000"round(value * 1000)

Rounding Rules

  • PhyKIT default: 4 decimal places
  • Percentages: Match question format (e.g., "35%" → integer, "3.5%" → 1 decimal)
  • P-values: Scientific notation for very small values
  • U statistics: Integer (no decimals)
  • Always check question wording: "rounded to 3 decimal places" overrides defaults

BixBench Question Coverage

ProjectQuestionsMetrics
bix-47DVMC analysis (fungi vs animals)
bix-116Treeness analysis (median, percentages, Mann-Whitney U)
bix-125Parsimony informative sites (counts, percentages, ratios)
bix-252Treeness/RCV with gap filtering
bix-354Evolutionary rate (specific genes, comparisons)
bix-385Tree length (fold-change, variance, paired ratios)
bix-454RCV (Mann-Whitney U, medians, paired differences)
bix-601Average treeness across multiple trees

ToolUniverse Integration

Sequence Retrieval

python
from tooluniverse import ToolUniverse

tu = ToolUniverse()
tu.load_tools()

# Get sequences from NCBI
result = tu.tools.NCBI_get_sequence(accession="NP_000546")

# Get gene tree from Ensembl
tree_result = tu.tools.EnsemblCompara_get_gene_tree(gene="ENSG00000141510")

# Get species tree from OpenTree
tree_result = tu.tools.OpenTree_get_induced_subtree(ott_ids="770315,770319")

File Structure

tooluniverse-phylogenetics/
├── SKILL.md                           # This file (workflow orchestration)
├── QUICK_START.md                     # Quick reference
├── test_phylogenetics.py             # Comprehensive test suite
├── references/
│   ├── sequence_alignment.md         # Alignment analysis details
│   ├── tree_building.md              # Tree construction methods
│   ├── parsimony_analysis.md         # Statistical comparison workflows
│   └── troubleshooting.md            # Common issues and solutions
└── scripts/
    ├── format_alignment.py           # Alignment format conversion
    └── tree_statistics.py            # Core metric implementations

Completeness Checklist

Before returning your answer, verify:

  • Identified all input files (alignments and/or trees)
  • Detected group structure (fungi/animals/etc.) if applicable
  • Used correct PhyKIT function for the requested metric
  • Processed ALL genes in each group (not just a sample)
  • Applied correct statistical test if comparison requested
  • Used correct rounding (4 decimals default, or as specified)
  • Returned the specific statistic asked for (median, max, U stat, p-value, etc.)
  • For percentage questions, confirmed whether answer is integer or decimal
  • For "difference" questions, confirmed direction (A - B vs abs difference)
  • For Mann-Whitney U, used alternative='two-sided' (default in scipy)

Next Steps

  • For detailed alignment analysis workflows → See references/sequence_alignment.md
  • For tree construction methods → See references/tree_building.md
  • For statistical comparison examples → See references/parsimony_analysis.md
  • For common errors and solutions → See references/troubleshooting.md
  • For script implementations → See scripts/tree_statistics.py

Support

For issues with:

License

Same as ToolUniverse framework license.

Frequently asked questions

What does the Tooluniverse Phylogenetics AI skill do?

Production-ready phylogenetics and sequence analysis skill for alignment processing, tree analysis, and evolutionary metrics. Computes treeness, RCV, treeness/RCV, parsimony informative sites, evolutionary rate, DVMC, tree length, alignment gap statistics, GC content, and bootstrap support using PhyKIT, Biopython, and DendroPy. Performs NJ/UPGMA/parsimony tree construction, Robinson-Foulds distance, Mann-Whitney U tests, and batch analysis across gene families. Integrates with ToolUniverse for sequence retrieval (NCBI, UniProt, Ensembl) and tree annotation. Use when processing FASTA/PHYLIP/...

Why use Tooluniverse Phylogenetics on TypingMind?

Because you install it once and use it with any model. Tooluniverse Phylogenetics is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Tooluniverse Phylogenetics in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/wu-yc/LabClaw/tree/main/skills/bio/tooluniverse-phylogenetics. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Tooluniverse Phylogenetics?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Tooluniverse Phylogenetics?

As many as you like. As long as a model supports skills, you can use Tooluniverse Phylogenetics with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Tooluniverse Phylogenetics AI skill free?

It is published on GitHub by wu-yc. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇