Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Benchmark for LLM agents on gene expression data analysis
.claude/skills/brycewang-stanford-genotex-benchmark-guide/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-24 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -44% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -35% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -51% | 0% |
GenoTEX is a benchmark for evaluating LLM-based agents on gene expression data analysis tasks. It provides curated datasets from GEO (Gene Expression Omnibus) with ground-truth analysis pipelines, testing agents on data preprocessing, differential expression, enrichment analysis, and biological interpretation. Published at MLCB 2025 as an oral presentation.
GenoTEX Benchmark
├── Data Collection
│ └── Curated GEO datasets with ground truth
├── Task Categories
│ ├── Data preprocessing (QC, normalization)
│ ├── Differential expression analysis
│ ├── Gene set enrichment analysis
│ ├── Clustering and classification
│ └── Biological interpretation
├── Evaluation
│ ├── Code correctness (executes without error)
│ ├── Statistical validity (appropriate tests)
│ ├── Result accuracy (vs ground truth)
│ └── Interpretation quality (biological insight)
└── Baselines
├── GPT-4 agent
├── Claude agent
└── Domain-specific fine-tuned modelspythonfrom genotex import GenoTEXBenchmark bench = GenoTEXBenchmark() # List available tasks tasks = bench.list_tasks() for task in tasks[:5]: print(f"Task: {task.id}") print(f" Dataset: {task.geo_accession}") print(f" Category: {task.category}") print(f" Difficulty: {task.difficulty}") # Get a specific task task = bench.get_task("GSE12345_DEG") print(f"Description: {task.description}") print(f"Input files: {task.input_files}") print(f"Expected output: {task.expected_output_type}")
python# Evaluate an agent on GenoTEX from genotex import evaluate_agent results = evaluate_agent( agent_fn=my_agent_function, tasks="all", # or specific task IDs timeout_per_task=300, # seconds ) print(f"Tasks completed: {results.completed}/{results.total}") print(f"Code correctness: {results.code_correct_rate:.1%}") print(f"Statistical validity: {results.stats_valid_rate:.1%}") print(f"Result accuracy: {results.accuracy:.3f}")
python# Example: Differential Expression Analysis task = { "id": "GSE12345_DEG", "description": "Identify differentially expressed genes " "between treatment and control groups in " "this RNA-seq dataset.", "input": "GSE12345_counts.csv", # Raw count matrix "metadata": "GSE12345_metadata.csv", # Sample info "expected": { "method": "DESeq2 or limma-voom", "output": "DEG table with log2FC, p-value, adj.p", "ground_truth": "GSE12345_deg_truth.csv", }, } # Example: Gene Set Enrichment task = { "id": "GSE12345_GSEA", "description": "Perform gene set enrichment analysis on " "the DEGs and identify enriched pathways.", "input": "GSE12345_deg_results.csv", "expected": { "method": "fgsea, clusterProfiler, or enrichR", "output": "Enriched pathways with NES and FDR", }, }
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-18 | pass→pass | 7,112 | 2,856 | -60% | 1 | 1 | 0% | 1,210 | 1,422 | +18% | 0 | 0 | — |
case-24 | fail→pass | 8,364 | 4,851 | -42% | 1 | 1 | 0% | 1,345 | 1,758 | +31% | 0 | 0 | — |
case-01 | fail→pass | 7,029 | 13,090 | +86% | 1 | 1 | 0% | 1,203 | 1,733 | +44% | 0 | 0 | — |
case-02 | fail→pass | 24,368 | 8,723 | -64% | 1 | 1 | 0% | 4,909 | 2,734 | -44% | 0 | 0 | — |
case-03 | fail→pass | 13,318 | 3,540 | -73% | 1 | 1 | 0% | 2,487 | 1,611 | -35% | 0 | 0 | — |
case-04 | fail→pass | 21,390 | 2,949 | -86% | 1 | 1 | 0% | 2,994 | 1,460 | -51% | 0 | 0 | — |
case-05 | pass→pass | 9,897 | 5,144 | -48% | 1 | 1 | 0% | 1,533 | 1,721 | +12% | 0 | 0 | — |
case-06 | pass→pass | 15,261 | 3,240 | -79% | 1 | 1 | 0% | 2,033 | 1,497 | -26% | 0 | 0 | — |
case-07 | fail→pass | 9,851 | 3,546 | -64% | 1 | 1 | 0% | 1,571 | 1,531 | -3% | 0 | 0 | — |
case-08 | fail→pass | 12,767 | 2,732 | -79% | 1 | 1 | 0% | 2,077 | 1,412 | -32% | 0 | 0 | — |
case-09 | pass→pass | 11,300 | 2,131 | -81% | 1 | 1 | 0% | 2,006 | 1,330 | -34% | 0 | 0 | — |
case-10 | fail→pass | 26,314 | 1,503 | -94% | 1 | 1 | 0% | 4,456 | 1,191 | -73% | 0 | 0 | — |
case-11 | pass→pass | 8,566 | 3,018 | -65% | 1 | 1 | 0% | 1,494 | 1,536 | +3% | 0 | 0 | — |
case-12 | pass→pass | 8,846 | 5,188 | -41% | 1 | 1 | 0% | 1,484 | 1,788 | +20% | 0 | 0 | — |
case-13 | fail→pass | 8,375 | 1,979 | -76% | 1 | 1 | 0% | 1,436 | 1,310 | -9% | 0 | 0 | — |
case-14 | pass→pass | 6,723 | 1,555 | -77% | 1 | 1 | 0% | 1,066 | 1,198 | +12% | 0 | 0 | — |
case-15 | pass→pass | 12,841 | 9,972 | -22% | 1 | 1 | 0% | 1,957 | 2,336 | +19% | 0 | 0 | — |
case-16 | pass→pass | 13,674 | 12,828 | -6% | 1 | 1 | 0% | 2,250 | 3,142 | +40% | 0 | 0 | — |
case-17 | fail→pass | 20,836 | 1,767 | -92% | 1 | 1 | 0% | 3,381 | 1,187 | -65% | 0 | 0 | — |
case-19 | fail→pass | 13,899 | 2,494 | -82% | 1 | 1 | 0% | 2,425 | 1,383 | -43% | 0 | 0 | — |
case-20 | pass→pass | 11,936 | 8,060 | -32% | 1 | 1 | 0% | 2,281 | 2,545 | +12% | 0 | 0 | — |
case-21 | pass→pass | 11,427 | 9,680 | -15% | 1 | 1 | 0% | 2,277 | 2,798 | +23% | 0 | 0 | — |
case-22 | pass→pass | 12,384 | 10,322 | -17% | 1 | 1 | 0% | 2,168 | 2,739 | +26% | 0 | 0 | — |
case-23 | fail→pass | 12,451 | 2,194 | -82% | 1 | 1 | 0% | 2,263 | 1,413 | -38% | 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. 24 cases were attempted. The headline lift of +50 percentage points is the difference between those two pass rates over the 24 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.