ToolUniverse Router

SkillSearch

Lets your agent analyze biology data files like CSV, VCF, and FASTA using ready-made scientific analysis scripts.

Then ask your AI: use the ToolUniverse Router skill

Details

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

Add it as a step in a pipeline you build on Ahel, or connect Ahel to Claude, ChatGPT, Cursor, Claude Code or Codex and ask your AI to use it.

About this skill

ToolUniverse plugin router. STEP 1 BEFORE ANY ANALYSIS: if the data folder contains `*_executed.ipynb`, run `tu run read_executed_notebook '{\"data_folder\":\"<path>\",\"search\":\"<keyword>\"}'` to extract its cell outputs and apply EVERY filter/sample-exclusion the notebook used, even when the qu

What this skill tells your AI

The instructions your AI receives, as published by mims-harvard/tooluniverse in skills/tooluniverse/SKILL.md and read by Ahel’s review.

FIRST ACTION: Route to a Specialized Skill

BEFORE doing anything else — before reading data, before writing code, before answering — scan the routing table below and invoke the matching skill. The specialized skill contains critical domain conventions that you will get wrong without loading.

How to route:

  1. Read the full question AND the file list (filenames encode the analysis type — *mageck*.xlsx → CRISPR screen, *DM.csv/*AE.csv → clinical trial AE, *.vcf → variant, *.h5ad → single-cell, *_counts.csv+*meta*.csv → RNA-seq DE, *.faa+*.treefile → phylogenetics, *_executed.ipynb → authoritative analysis already ran)
  2. Find the matching keyword row in the Routing Table
  3. Call Skill(skill="<skill-name>") immediately
  4. Follow the loaded skill's instructions to answer the question

If no keyword matches but filenames indicate a domain → still route based on filename signals. Filenames are authoritative domain evidence even when the question prose is generic.

If no signal matches → use general strategies below.

DO NOT skip routing. Even if you think you know the answer, the skill has conventions (e.g., which denominator to use, which R function, which column to read) that differ from defaults.

Critical Analysis Conventions

RULE ZERO: Use the authoritative pipeline if one ships with the data

Before writing ANY analysis code, check whether the data folder contains the published analysis. Two common forms:

  1. Executed notebook (*_executed.ipynb, *.ipynb) — the analysis has already run with the exact package versions, filters, and thresholds behind the reference answers. Reimplementing with pydeseq2/scanpy/gseapy produces different numbers. Read the outputs directly:

    tu run read_executed_notebook '{"data_folder":"/path/to/data","search":"<keyword>"}'
    

    search can be comma-separated terms (e.g., "upregulated,log2FoldChange") or a regex. The tool returns the matching cells' source + printed outputs so you can cite the published value instead of recomputing.

  2. Executable script (run_*.py, analysis.R, find_*.R, *.Rmd) — execute and report:

    ls /path/to/data/folder
    cd /path/to/data && python3 run_*.py      # or Rscript analysis.R
    

    Canonical vs scratch scripts: when a folder has many .R/.py files, prefer ones with canonical names (analysis.R, main.R, run.R, run_<question_topic>.R) over scratch-named ones (try_*.R, check_*.R, inspect_*.R, verify_*.R, *_v2.R, *2.R, *3.R). Scratch-named scripts are usually leftovers from prior agent attempts that may not have converged on the published answer — treat their outputs as advisory, not authoritative.

Only write your own analysis code when no authoritative pipeline exists in the data folder. When one does exist, your job is to execute/read it and report — not to reimplement.

RULE ZERO sub-rule — Cite-the-cell-output: If the notebook has a cell whose output IS the answer to the question (e.g., len(sigs) = 197, mean p-value: 0.0254, top hit: GENE_X), copy that output value directly. Do NOT recompute with your own filters. The notebook may apply slightly-different filters than the question text describes (e.g., the question lists padj<0.05, |LFC|>0.5, baseMean>10 but the notebook's filter line has & (baseMean>=10) commented out). The published answer is the notebook's output — even if the question's filter list slightly differs from what the notebook actually applied. The benchmark's GT comes from the notebook's actual computation, not from re-applying the question's literal filter list. Trust the notebook's published number when it directly answers the question.

RULE ONE: Use the bundled skill scripts for recurring analysis patterns

Before writing your own analysis code, check these ready-made scripts in the plugin. They encode the correct conventions and save re-deriving them:

Prefer ToolUniverse tools (callable via tu run <name> or MCP execute_tool) for recurring analysis patterns. They encode the correct conventions:

TaskToolUniverse toolOne-liner
Read outputs of an authoritative executed notebookread_executed_notebooktu run read_executed_notebook '{"data_folder":"/path","search":"upregulated"}'
Clinical trial AE severity (chi-square, ordinal)clinical_trial_ae_severity_testtu run clinical_trial_ae_severity_test '{"dm_file":"DM.csv","ae_file":"AE.csv","test":"chi-square","group_col":"TRTGRP"}'
Per-gene ANOVA / fold change (gene × sample matrix)expression_anova_per_genetu run expression_anova_per_gene '{"counts_file":"counts.csv","meta_file":"meta.csv","group_col":"cell_type","mode":"anova"}'
Coding-variant fraction in a VCF/Excelcoding_variant_fractiontu run coding_variant_fraction '{"file":"variants.xlsx","vaf_threshold":0.3,"annotation":"synonymous_variant","header_rows":2}'
Batch PhyKIT on many treesphykit_batch_analysistu run phykit_batch_analysis '{"operation":"batch","function":"treeness","directory":"./trees","extension":".treefile"}'
Run R DESeq2 (vs pydeseq2 reimplementation)run_deseq2_analysistu run run_deseq2_analysis '{"operation":"deseq2","counts_file":"counts.csv","metadata_file":"meta.csv","design":"~ condition"}'

Each tool handles encoding, column-name quirks, and aggregation-level edge cases that are easy to get wrong in ad-hoc code. Find more tools via tu find "<keyword>" or MCP find_tools.

Brief reminders (one-line)

These are short pointers. The full conventions, anti-pattern examples, and code snippets live in the matching sub-skill — load it via the routing table for the details.

  1. Clinical trial AE severity (chi-square OR ordinal/logistic regression): use ALL AE records, max(AESEV) per subject, do NOT filter by AEPT — even when the question names a specific condition like "COVID-19 severity" or "infection severity", AESEV IS the universal outcome, not a subset filter. See tooluniverse-statistical-modeling.
  2. Variant counting / fractions (synonymous %, missense %, "fraction of X variants", etc.): denominator is the CODING subset only (synonymous + missense + splice_region + stop_gained/lost + start_lost + frameshift + inframe_ins/del). EXCLUDE intron, intergenic, UTR, splice_donor/acceptor, regulatory, non_coding. The CODING-only denominator applies even when the question doesn't say "coding" explicitly — use coding_variant_fraction tool. See tooluniverse-variant-analysis.
  3. DESeq2 library: match the authoritative script if present; otherwise prefer R DESeq2 — see tooluniverse-rnaseq-deseq2. When reading the analyst's filter line, only apply filters BEFORE the # comment — do NOT add filters from commented-out code (e.g., # & (baseMean>=10) is OFF, do not include).
  4. Per-feature stat (ANOVA F, median LFC): run per-gene then summarize, NEVER pool/sum-then-ratio — see tooluniverse-statistical-modeling.
  5. Spline models: use R ns() via Rscript — see tooluniverse-statistical-modeling.
  6. PhyKIT saturation: use column 2 (1-slope), not column 1 (slope) — see tooluniverse-phylogenetics.
  7. "Also DE in X": simple intersection A ∩ B — see tooluniverse-rnaseq-deseq2.
  8. Ratio "between A and B": ALWAYS state BOTH A/B = X AND B/A = 1/X in the final answer. English "ratio between A and B" is direction-ambiguous; reporting both ensures the correct value is in your response. Example output: "Ratio (W to 1) = 1.52, equivalently (1 to W) = 0.66".
  9. Units — percentage vs proportion vs ratio: read the question's noun. "percentage" or "percent" → report on 0-100 scale (e.g. 29, not 0.29). "proportion", "fraction", or "ratio" → report as decimal (e.g. 0.29). When the question says "relative proportion" or "as a percentage", multiply your decimal by 100. State both forms when there is any ambiguity (e.g. "0.29 (= 29%)").

These reminders are for fast pattern recognition during routing. Detailed ❌ WRONG / ✅ RIGHT examples and sanity heuristics are in the sub-skill bodies — invoke the skill via the Routing Table to load them.


Routing Table

1. Data Retrieval

KeywordsAction
"get", "retrieve", "chemical compound", "PubChem", "ChEMBL", "drug molecule", "SMILES", "InChI"Skill(skill="tooluniverse-chemical-compound-retrieval")
"get", "retrieve", "expression data", "gene expression", "omics dataset", "ArrayExpress", "RNA-seq", "microarray"Skill(skill="tooluniverse-expression-data-retrieval")
"get", "retrieve", "protein structure", "PDB", "AlphaFold", "crystal structure", "3D model"Skill(skill="tooluniverse-protein-structure-retrieval")
"get", "retrieve", "sequence", "DNA sequence", "RNA sequence", "protein sequence", "FASTA"Skill(skill="tooluniverse-sequence-retrieval")
"find data", "search datasets", "dataset", "where can I get data", "cohort study", "data repository", "public data", "download data for analysis", "what data exists for"Skill(skill="tooluniverse-dataset-discovery")
"data wrangling", "download bulk data", "parse format", "API access pattern", "direct API", "raw data download", "beyond tools", "bulk download"Skill(skill="tooluniverse-data-wrangling")

2. Research & Profiling

KeywordsAction
A single database-checkable fact, especially multiple-choice — "which of the following gene/drug/variant/pathway is…", anything phrased "according to " (DisGeNet, OMIM, MSigDB, miRDB, GTRD, MGI, Ensembl, ClinVar, ChEMBL, OpenTargets, UniProt). Look it up rather than answering from memory; niche annotations are what gets hallucinatedSkill(skill="tooluniverse-biomedical-fact-lookup")
"research", "profile", "disease", "syndrome", "disorder", "comprehensive report on [disease]"Skill(skill="tooluniverse-disease-research")
"research", "profile", "drug", "medication", "therapeutic agent", "tell me about [drug]"Skill(skill="tooluniverse-drug-research")
"literature review", "papers about", "publications on", "research articles", "recent studies"Skill(skill="tooluniverse-literature-deep-research")
"research", "profile", "target", "protein target", "gene target", "target validation"Skill(skill="tooluniverse-target-research")
"gene liability", "gene safety score", "knockout safety", "knockdown safety", "on-target toxicity", "safe to inhibit [gene]"Skill(skill="tooluniverse-gene-liability")
"peptide target", "deorphanize", "deorphanization", "peptide off-target", "what does [peptide] bind", "target of a peptide", "orphan peptide", "peptide doesn't bind [target]", "binds in [species] but not", "find the receptor for [peptide]"Skill(skill="tooluniverse-peptide-target-deorphanization")

3. Clinical Decision Support

KeywordsAction
"drug safety", "adverse events", "side effects", "pharmacovigilance", "pharmacogenomics", "FAERS", "black box warning"Skill(skill="tooluniverse-pharmacovigilance")
"adverse event signal", "safety signal detection", "disproportionality", "PRR", "ROR"Skill(skill="tooluniverse-adverse-event-detection")
"drug safety profile", "drug safety assessment", "comprehensive safety"Skill(skill="tooluniverse-pharmacovigilance")
"chemical safety", "ADMET", "chemical toxicity", "environmental toxicity", "toxic effects"Skill(skill="tooluniverse-chemical-safety")
"cancer treatment", "precision oncology", "tumor mutation", "targeted therapy", "EGFR", "KRAS", "BRAF"Skill(skill="tooluniverse-precision-oncology")
"cancer driver", "driver gene", "driver mutation", "IntOGen", "cBioPortal"Skill(skill="tooluniverse-cancer-genomics-tcga")
"somatic mutation interpretation", "cancer variant", "oncogenic variant", "tumor variant"Skill(skill="tooluniverse-cancer-variant-interpretation")
"ACMG classification", "variant classification", "benign/pathogenic", "ACMG criteria", "PM2", "PS1", "PP3"Skill(skill="tooluniverse-acmg-variant-classification")
"cancer classification", "OncoTree", "tumor subtype", "cancer type code", "histological classification"Skill(skill="tooluniverse-cancer-classification")
"TCGA", "cancer genomics cohort", "GDC analysis", "TCGA mutations", "pan-cancer"Skill(skill="tooluniverse-cancer-genomics-tcga")
"immunotherapy response", "checkpoint inhibitor response", "TMB", "MSI", "PD-L1", "ICI response"Skill(skill="tooluniverse-immunotherapy-response-prediction")
"rare disease diagnosis", "differential diagnosis", "phenotype matching", "HPO", "patient with [symptoms]"Skill(skill="tooluniverse-rare-disease-diagnosis")
"clinical risk score", "CHA2DS2-VASc", "HAS-BLED", "CURB-65", "qSOFA", "Child-Pugh", "MELD-Na", "Wells score", "ASCVD risk", "eGFR CKD-EPI", "bedside risk calculator"Skill(skill="tooluniverse-clinical-risk-scoring")
"device adverse events", "device recall", "MAUDE", "food/supplement adverse event", "CAERS", "veterinary adverse event", "drug shortage"Skill(skill="tooluniverse-product-safety-surveillance")
"variant interpretation", "VUS", "pathogenicity", "clinical significance", "is [variant] pathogenic"Skill(skill="tooluniverse-variant-interpretation")
"clinical guidelines", "practice guidelines", "treatment guidelines", "dosing recommendations", "standard of care"Skill(skill="tooluniverse-clinical-guidelines")
Drug choice for a described patient — "which of the following is most appropriate for", "which drug should this patient receive"; a vignette naming a modifier (hepatic/renal impairment, Child-Pugh, "on a strong CYP3A4 inhibitor", pregnancy, a contraindication) alongside candidate drugs. The deciding fact is in each candidate's FDA label, not recallSkill(skill="tooluniverse-biomedical-fact-lookup")
"patient stratification", "precision medicine", "biomarker stratification", "treatment selection"Skill(skill="tooluniverse-precision-medicine-stratification")

4. Discovery & Design

KeywordsAction
"find binders", "virtual screening", "hit identification", "compounds for [target]", "IC50", "bioactivity", "binding affinity", "potency", "selectivity", "SAR", "structure-activity", "lead optimization", "hit-to-lead"Skill(skill="tooluniverse-binder-discovery")
"peptide target", "deorphanize", "deorphanization", "peptide off-target", "what does [peptide] bind", "target of a peptide", "orphan peptide", "peptide doesn't bind [target]", "binds in [species] but not", "find the receptor for [peptide]"Skill(skill="tooluniverse-peptide-target-deorphanization")
"drug repurposing", "new indication", "existing drugs for [disease]", "repurpose [drug]"Skill(skill="tooluniverse-drug-repurposing")
"drug target validation", "target druggability", "validate target", "target assessment"Skill(skill="tooluniverse-drug-target-validation")
"network pharmacology", "polypharmacology", "compound-target network", "multi-target"Skill(skill="tooluniverse-network-pharmacology")
Ongoing protein design validation — "protein design campaign", "validate binder candidates", "conflicting binder models", "conditional pH binder", "glycan clash validation", "protein competition submission"Skill(skill="tooluniverse-protein-design-campaign")
"design protein", "protein binder", "de novo protein", "RFdiffusion", "ProteinMPNN"Skill(skill="tooluniverse-protein-therapeutic-design")
"antibody engineering", "antibody design", "humanization", "affinity maturation"Skill(skill="tooluniverse-antibody-engineering")
"ADMET prediction", "ADME", "absorption", "distribution", "metabolism", "excretion", "toxicity prediction"Skill(skill="tooluniverse-admet-prediction")
"small molecule discovery", "chemical biology", "compound sourcing", "hit finding", "chemical probe"Skill(skill="tooluniverse-small-molecule-discovery")
"chemical sourcing", "buy compound", "vendor search", "Enamine", "MolPort", "compound availability"Skill(skill="tooluniverse-chemical-sourcing")
"GPCR", "G-protein coupled receptor", "GPCRdb", "receptor ligand", "biased agonist"Skill(skill="tooluniverse-gpcr-structural-pharmacology")
"dereplicate", "natural product identification", "NPAtlas", "ChemOnt classification", "ClassyFire", "producing organism"Skill(skill="tooluniverse-natural-product-dereplication")

5. Genomics & Variant Analysis

KeywordsAction
"GWAS study", "genome-wide association", "GWAS catalog", "GWAS for [trait]"Skill(skill="tooluniverse-gwas-study-explorer")
"GWAS trait to gene", "trait-associated genes", "causal genes", "genes for [trait]"Skill(skill="tooluniverse-gwas-trait-to-gene")
"fine-mapping", "credible sets", "causal variants", "statistical refinement"Skill(skill="tooluniverse-gwas-finemapping")
"SNP interpretation", "rsID", "rs[number]", "variant annotation"Skill(skill="tooluniverse-gwas-snp-interpretation")
"polygenic risk", "PRS", "genetic risk", "risk score for [disease]"Skill(skill="tooluniverse-polygenic-risk-score")
"structural variant", "SV", "CNV", "deletion", "duplication", "chromosomal rearrangement"Skill(skill="tooluniverse-structural-variant-analysis")
"VCF", "variant calling", "mutation analysis", "variant annotation pipeline", "VAF", "variant allele frequency", "coding variant", "synonymous", "missense"Skill(skill="tooluniverse-variant-analysis")
"variant functional annotation", "protein variant effect", "variant consequence", "missense effect"Skill(skill="tooluniverse-variant-functional-annotation")
"regulatory variant", "non-coding variant", "eQTL variant", "regulatory region variant"Skill(skill="tooluniverse-regulatory-variant-analysis")
"rare disease genomics", "Orphanet gene", "rare disease gene", "causative gene", "exome diagnosis"Skill(skill="tooluniverse-rare-disease-genomics")
"1000 Genomes", "IGSR", "population frequency", "superpopulation", "AFR/EUR/EAS/SAS/AMR"Skill(skill="tooluniverse-population-genetics-1000genomes")
"PheWAS", "phenome-wide association", "cross-ancestry replication", "cross-biobank", "FinnGen", "BioBank Japan", "pleiotropy of a variant"Skill(skill="tooluniverse-phewas")
"Mendelian randomization", "MR causal inference", "instrumental variable", "does X cause Y", "genetic causal evidence"Skill(skill="tooluniverse-mendelian-randomization")
"loss-of-function mechanism", "LoF mechanism", "why is this variant LoF", "structural stability vs functional disruption"Skill(skill="tooluniverse-protein-lof-mechanism")
"SAE feature", "sparse autoencoder variant", "ESMC SAE", "mechanistic variant interpretation"Skill(skill="tooluniverse-protein-sae-variant-interpretation")
"per-residue annotation", "binding interface residues", "ligand pocket residues", "buried vs surface residues", "PDB structural annotation"Skill(skill="tooluniverse-protein-structural-annotation-pdb")
"why are these residues critical", "residue functional mechanism", "DMS hotspot interpretation", "catalytic vs structural residue"Skill(skill="tooluniverse-residue-functional-mechanism-interpretation")
"validate variant predictor", "DMS validation", "deep mutational scanning benchmark", "predictor vs experimental effect"Skill(skill="tooluniverse-variant-predictor-dms-validation")

6. Systems & Network Analysis

KeywordsAction
"protein interactions", "PPI", "interactome", "binding partners", "protein complexes"Skill(skill="tooluniverse-protein-interactions")
"systems biology", "pathway analysis", "network analysis", "gene set enrichment"Skill(skill="tooluniverse-systems-biology")
"metabolomics", "metabolite identification", "metabolic pathway"Skill(skill="tooluniverse-metabolomics")
"epigenomics", "gene regulation", "transcription factor", "TF binding", "enhancers", "chromatin", "ChIP-seq"Skill(skill="tooluniverse-epigenomics")
"gene enrichment", "pathway enrichment", "GO enrichment", "GSEA", "overrepresentation", "gene list analysis"Skill(skill="tooluniverse-gene-enrichment")
"multi-omics", "omics integration", "transcriptomics + proteomics", "integrated analysis"Skill(skill="tooluniverse-multi-omics-integration")
"multi-omic disease", "disease characterization", "genomic + transcriptomic + proteomic"Skill(skill="tooluniverse-multiomic-disease-characterization")
"gene regulatory network", "GRN", "TF network", "regulatory circuit", "gene regulation network"Skill(skill="tooluniverse-gene-regulatory-networks")
"epigenomics chromatin", "histone modification", "chromatin accessibility", "ATAC-seq", "DNase-seq"Skill(skill="tooluniverse-epigenomics-chromatin")
"pathway disease", "disease pathway", "pathway genetics", "pathway convergence"Skill(skill="tooluniverse-pathway-disease-genetics")
"metabolomics pathway", "metabolic pathway mapping", "pathway-level metabolomics"Skill(skill="tooluniverse-metabolomics-pathway")
"interpret results", "biological context", "beyond p-values", "what does this result mean", "integrate analysis with biology", "statistical results + biology", "causal reasoning", "evidence integration"Skill(skill="tooluniverse-data-integration-analysis")

7. Screening & Functional Genomics

Shortened here. Read the whole file on GitHub.

Signals

GitHub stars
2k
Forks
261
Last commit
Oct 2026
Advanced
Item type
skill
Key
tooluniverse
Source
github.com/mims-harvard/tooluniverse