Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Automate gene expression analysis with the GenoMAS multi-agent system
.claude/skills/brycewang-stanford-genomas-guide/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -57% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -45% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -47% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -20% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -45% | 0% |
GenoMAS (Genomics Multi-Agent System) is a minimalist multi-agent framework for automating scientific analysis workflows, particularly gene expression analysis. It orchestrates specialized agents for data retrieval, preprocessing, differential expression analysis, pathway enrichment, and visualization — turning a natural language research question into a complete bioinformatics pipeline.
bashpip install genomas # Or from source git clone https://github.com/futianfan/GenoMAS.git cd GenoMAS && pip install -e .
pythonfrom genomas import GenoMAS geno = GenoMAS(llm_provider="anthropic") # Describe analysis in natural language result = geno.analyze( "Compare gene expression between tumor and normal tissue " "in the TCGA breast cancer dataset. Identify differentially " "expressed genes and run pathway enrichment analysis." ) # GenoMAS automatically: # 1. Retrieves TCGA-BRCA data via GDC API # 2. Normalizes and filters expression data # 3. Runs DESeq2-style differential expression # 4. Performs GO and KEGG pathway enrichment # 5. Generates volcano plots and heatmaps
| Agent | Responsibility | |-------|---------------| | Data Agent | Retrieves datasets from GEO, TCGA, ArrayExpress | | Preprocessing Agent | Quality control, normalization, filtering | | Analysis Agent | Differential expression, clustering, PCA | | Enrichment Agent | GO, KEGG, MSigDB pathway analysis | | Visualization Agent | Plots, heatmaps, volcano plots | | Report Agent | Generates methods section and results summary |
pythonfrom genomas import DataAgent, AnalysisAgent, EnrichmentAgent # Step 1: Retrieve data data_agent = DataAgent() dataset = data_agent.fetch("GSE12345", platform="RNA-seq") # Step 2: Differential expression analysis = AnalysisAgent() de_results = analysis.differential_expression( dataset, group_col="condition", case="tumor", control="normal", method="deseq2", ) # Step 3: Filter significant genes sig_genes = de_results[ (de_results["padj"] < 0.05) & (abs(de_results["log2FoldChange"]) > 1) ] print(f"Found {len(sig_genes)} differentially expressed genes") # Step 4: Pathway enrichment enrichment = EnrichmentAgent() pathways = enrichment.run( gene_list=sig_genes["gene_symbol"].tolist(), databases=["GO_BP", "KEGG", "Reactome"], ) # Step 5: Visualize from genomas.viz import volcano_plot, pathway_barplot volcano_plot(de_results, output="volcano.png") pathway_barplot(pathways, top_n=20, output="pathways.png")
| Analysis | Method | |----------|--------| | Differential expression | DESeq2, edgeR, limma-voom | | Clustering | Hierarchical, k-means, UMAP | | PCA | Principal component analysis | | GO enrichment | Gene Ontology term enrichment | | KEGG pathway | KEGG pathway mapping | | GSEA | Gene Set Enrichment Analysis | | Survival analysis | Kaplan-Meier, Cox regression |
| Source | Data type | |--------|-----------| | GEO (NCBI) | Microarray, RNA-seq | | TCGA | Cancer genomics | | GTEx | Normal tissue expression | | ArrayExpress | European expression data |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 31,839 | 32,442 | +2% | 1 | 1 | 0% | 6,504 | 2,771 | -57% | 0 | 0 | — |
case-02 | fail→pass | 26,536 | 9,584 | -64% | 1 | 1 | 0% | 4,987 | 2,751 | -45% | 0 | 0 | — |
case-07 | fail→pass | 14,196 | 2,638 | -81% | 1 | 1 | 0% | 2,590 | 1,364 | -47% | 0 | 0 | — |
case-03 | fail→pass | 16,748 | 11,014 | -34% | 1 | 1 | 0% | 3,507 | 2,791 | -20% | 0 | 0 | — |
case-04 | pass→pass | 9,336 | 3,192 | -66% | 1 | 1 | 0% | 1,684 | 1,325 | -21% | 0 | 0 | — |
case-05 | fail→pass | 14,375 | 2,503 | -83% | 1 | 1 | 0% | 2,435 | 1,345 | -45% | 0 | 0 | — |
case-06 | fail→pass | 6,443 | 2,722 | -58% | 1 | 1 | 0% | 1,072 | 1,309 | +22% | 0 | 0 | — |
case-08 | fail→pass | 8,929 | 2,608 | -71% | 1 | 1 | 0% | 1,441 | 1,236 | -14% | 0 | 0 | — |
case-09 | pass→pass | 11,134 | 2,399 | -78% | 1 | 1 | 0% | 2,046 | 1,343 | -34% | 0 | 0 | — |
case-10 | pass→pass | 11,656 | 3,201 | -73% | 1 | 1 | 0% | 2,087 | 1,500 | -28% | 0 | 0 | — |
case-11 | fail→pass | 11,406 | 2,057 | -82% | 1 | 1 | 0% | 1,999 | 1,307 | -35% | 0 | 0 | — |
case-16 | fail→pass | 9,461 | 2,296 | -76% | 1 | 1 | 0% | 1,544 | 1,268 | -18% | 0 | 0 | — |
case-12 | pass→pass | 10,248 | 1,837 | -82% | 1 | 1 | 0% | 1,256 | 1,228 | -2% | 0 | 0 | — |
case-13 | pass→pass | 8,090 | 1,726 | -79% | 1 | 1 | 0% | 1,241 | 1,204 | -3% | 0 | 0 | — |
case-14 | pass→pass | 7,248 | 2,083 | -71% | 1 | 1 | 0% | 1,157 | 1,221 | +6% | 0 | 0 | — |
case-15 | pass→pass | 15,254 | 4,748 | -69% | 1 | 1 | 0% | 2,371 | 1,719 | -27% | 0 | 0 | — |
case-17 | pass→pass | 12,681 | 3,711 | -71% | 1 | 1 | 0% | 2,149 | 1,545 | -28% | 0 | 0 | — |
case-18 | pass→pass | 7,173 | 1,837 | -74% | 1 | 1 | 0% | 1,119 | 1,151 | +3% | 0 | 0 | — |
case-19 | pass→pass | 10,083 | 3,415 | -66% | 1 | 1 | 0% | 1,817 | 1,545 | -15% | 0 | 0 | — |
case-20 | pass→pass | 13,245 | 2,676 | -80% | 1 | 1 | 0% | 1,951 | 1,330 | -32% | 0 | 0 | — |
case-21 | pass→pass | 18,441 | 15,887 | -14% | 1 | 1 | 0% | 3,470 | 3,921 | +13% | 0 | 0 | — |
case-22 | pass→pass | 17,658 | 16,363 | -7% | 1 | 1 | 0% | 3,494 | 4,266 | +22% | 0 | 0 | — |
case-23 | pass→pass | 12,649 | 13,396 | +6% | 1 | 1 | 0% | 2,665 | 3,708 | +39% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +39 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.