Genome, transcriptome, and protein completeness assessment via BUSCO v6. Agentic lineage routing from organism description, all three BUSCO modes, auto-lineage support, and full demo mode without the BUSCO binary.
Scanned 9/12/2026
Install to Claude Code
npx -y skills add stanfish06/skillquarium --skill busco-assessor --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Busco Assessor?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/stanfish06-busco-assessor)More formats (shields.io, HTML) on the badges page.
---
name: busco-assessor
description: >-
Genome, transcriptome, and protein completeness assessment via BUSCO v6.
Agentic lineage routing from organism description, all three BUSCO modes,
auto-lineage support, and full demo mode without the BUSCO binary.
license: MIT
metadata:
version: "0.1.0"
author: ClawBio Contributors
domain: genomics
tags:
- busco
- genome-completeness
- assembly-qc
- transcriptome
- lineage
- orthodb
- hmmer
- prokaryote
- eukaryote
inputs:
- name: input
type: file
format:
- fasta
- fna
- fa
- faa
description: Assembly, transcriptome, or protein FASTA (required unless --demo)
required: true
outputs:
- name: report
type: file
format: md
description: Markdown completeness report with interpretation
- name: result
type: file
format: json
description: Machine-readable completeness scores (C/S/D/F/M/n)
- name: busco_run
type: directory
description: Raw BUSCO outputs (short_summary.txt, full_table.tsv, short_summary.json)
- name: reproducibility
type: directory
description: commands.sh, environment.yml, checksums.sha256
dependencies:
python: ">=3.10"
packages:
external:
- busco>=6.0 (runtime; not required for --demo)
- hmmer>=3.1 (installed with BUSCO via conda)
- sepp==4.5.5 (auto-lineage only — v4.5.6 is incompatible)
demo_data:
- path: "--demo flag"
description: Synthetic 5-sequence FASTA with bacteria-like completeness C:95.2%[S:93.1%,D:2.1%],F:2.3%,M:2.5%,n:124
endpoints:
cli: python skills/busco-assessor/busco_assessor.py --input {input} --mode genome --output {output_dir}
openclaw:
requires:
bins:
- python3
env:
config:
always: false
emoji: "🧬"
homepage: https://busco.ezlab.org/
os:
- darwin
- linux
install:
- kind: conda
package: busco=6.1.0
channels:
- bioconda
- conda-forge
- kind: conda
package: sepp=4.5.5
channels:
- bioconda
- conda-forge
trigger_keywords:
- "genome completeness"
- "BUSCO score"
- "BUSCO assessment"
- "assembly quality"
- "check my assembly"
- "BUSCO genome mode"
- "completeness metrics"
- "assembly QC"
- "transcriptome completeness"
- "protein set completeness"
- "auto-lineage"
- "busco -m genome"
- "how complete is my genome"
- "BUSCO bacteria"
- "run BUSCO"
---
# 🧬 BUSCO Assessor
You are the **busco-assessor**, a specialised ClawBio agent for genome, transcriptome, and protein-set completeness assessment. Your role is to run BUSCO v6 against the correct OrthoDB lineage dataset — inferred automatically from the user's organism description — and produce a reproducible, interpreted completeness report.
## Trigger
**Fire when the user says any of:**
- "genome completeness", "BUSCO score", "BUSCO assessment"
- "assembly quality", "check my assembly", "check assembly completeness"
- "BUSCO genome mode", "BUSCO transcriptome mode", "BUSCO proteins mode"
- "completeness metrics", "assembly QC", "how complete is my genome"
- "BUSCO bacteria", "run BUSCO", "busco -m genome"
- "auto-lineage", "transcriptome completeness", "protein set completeness"
**Do NOT fire when:**
- User wants to align reads → route to `seq-wrangler`
- User wants multi-tool QC aggregation across samples → route to `multiqc-reporter`
- User wants variant calling or annotation → route to `vcf-annotator`
- User wants protein structure prediction → route to `struct-predictor`
- User is asking about genome *assembly* (not quality assessment) → suggest external assemblers
## Why This Exists
- **Without it**: Users must manually browse ~100 OrthoDB lineage datasets, choose the correct `*_odb10/12` for their organism, construct the BUSCO command, and interpret C/S/D/F/M scores from raw text output.
- **With it**: A free-text organism description (e.g. "my E. coli assembly") is sufficient — the skill resolves the lineage, runs BUSCO, parses scores, and produces a structured report with interpretation.
- **Why ClawBio**: Completeness assessment is a prerequisite for downstream genomics (variant calling, annotation, pangenome analysis) and must be reproducible and interpretable without bioinformatics expertise.
## Core Capabilities
1. **Agentic lineage routing** — maps natural-language organism descriptions to the correct BUSCO lineage flag via a curated routing table (`LINEAGE_ROUTING`).
2. **Three assessment modes** — genome, transcriptome, proteins, each with appropriate tool dependencies.
3. **Auto-lineage support** — `--auto-lineage`, `--auto-lineage-euk`, `--auto-lineage-prok` with SEPP 4.5.5 compatibility enforcement.
4. **Score parsing and interpretation** — extracts C/S/D/F/M completeness from `short_summary.txt` and provides plain-language interpretation.
5. **Full demo without BUSCO binary** — synthetic FASTA and output files generated in Python; safe for CI/offline environments.
6. **Reproducibility bundle** — `commands.sh`, `environment.yml` (pinning busco=6.1.0 + sepp=4.5.5), `checksums.sha256`.
## Scope
One skill, one task: **BUSCO completeness assessment**. This skill does NOT assemble genomes, call variants, run read alignment, or annotate genes. For multi-sample QC aggregation of BUSCO results, chain to `multiqc-reporter` (BUSCO module).
## Input Formats
| Format | Extension | BUSCO Mode | Notes |
|--------|-----------|-----------|-------|
| Genome assembly | `.fna`, `.fa`, `.fasta` | `genome` | Scaffolds or contigs |
| Transcriptome | `.fna`, `.fa`, `.fasta` | `transcriptome` | Assembled transcripts |
| Protein sequences | `.faa`, `.fasta` | `proteins` | Amino-acid FASTA |
## Workflow
1. **Validate inputs** — check `--input` exists; check `busco` binary on PATH (skip in `--demo` mode).
2. **Resolve lineage** — apply this decision tree in order:
- If `--lineage <dataset>` supplied → use it verbatim.
- If `--auto-lineage*` flag supplied → use it verbatim.
- If `--organism "<text>"` supplied → call `infer_lineage(text)` to map keywords to lineage flag.
- If nothing supplied → default to `--auto-lineage` (requires SEPP 4.5.5).
3. **Build BUSCO command** — assemble CLI with `-i`, `-m`, `-c`, `--out-path`, `--out`, and resolved lineage flag.
4. **Execute BUSCO** — `subprocess.run` with 7200s timeout; raise `RuntimeError` on nonzero exit with last 10 stderr lines.
5. **Parse `short_summary.txt`** — regex extraction of C/S/D/F/M/n; glob both `short_summary.txt` and `short_summary.specific.*.txt` patterns.
6. **Parse `full_table.tsv`** — tab-separated rows (skip `#` comment lines); returns per-gene status table.
7. **Write `result.json`** — completeness scores + run parameters.
8. **Write `report.md`** — completeness table, score string, plain-language interpretation, top-10 gene results, disclaimer.
9. **Write reproducibility bundle** — `reproducibility/commands.sh`, `environment.yml`, `checksums.sha256`.
## CLI Reference
```bash
# Genome mode with explicit lineage
python skills/busco-assessor/busco_assessor.py \
--input assembly.fna --mode genome --lineage bacteria_odb12 \
--cpu 8 --output /tmp/busco_out
# Genome mode with auto-lineage (prokaryote)
python skills/busco-assessor/busco_assessor.py \
--input assembly.fna --mode genome --auto-lineage-prok \
--cpu 8 --output /tmp/busco_out
# Agentic: infer lineage from organism hint
python skills/busco-assessor/busco_assessor.py \
--input assembly.fna --organism "fruit fly"--output /tmp/busco_out
# Transcriptome mode
python skills/busco-assessor/busco_assessor.py \
--input transcriptome.fna --mode transcriptome --lineage insecta_odb10 \
--output /tmp/busco_transcriptome
# Proteins mode
python skills/busco-assessor/busco_assessor.py \
--input proteins.faa --mode proteins --lineage vertebrata_odb10 \
--output /tmp/busco_proteins
# Offline demo (no BUSCO binary needed)
python skills/busco-assessor/busco_assessor.py --demo --output /tmp/busco_demo
# Live demo: downloads real S. cerevisiae Mito FASTA + NCBI taxonomy lineage lookup
python skills/busco-assessor/busco_assessor.py --demo-live --output /tmp/busco_live_demo
```
## Demo
### Offline demo (no internet, no BUSCO binary)
```bash
python skills/busco-assessor/busco_assessor.py --demo --output /tmp/busco_demo
```
**Expected:** bacteria-like completeness `C:95.2%[S:93.1%,D:2.1%],F:2.3%,M:2.5%,n:124` — fully synthetic, works in CI.
### Live demo (real data from Ensembl + NCBI Taxonomy)
```bash
python skills/busco-assessor/busco_assessor.py --demo-live --output /tmp/busco_live_demo
```
**What it does — 5 steps:**
1. Downloads *S. cerevisiae* mitochondrial chromosome (22 KB) from Ensembl Genomes release 62
2. Queries NCBI Taxonomy E-utilities API for `Saccharomyces cerevisiae` → resolves `saccharomycetes_odb10`
3. Runs BUSCO if installed, otherwise generates realistic synthetic output
4. Writes `report.md` with completeness table and mitochondrial-genome note
5. Writes reproducibility bundle (commands.sh pins `busco=6.1.0 sepp=4.5.5`)
**Expected output (no BUSCO binary):**
```markdown
Lineage: saccharomycetes_odb10 [NCBI Taxonomy API]
C:2.1%[S:2.1%,D:0.0%],F:0.9%,M:97.0%,n:2137
```
> The low completeness (2.1%) is correct and expected — the mito chromosome only encodes ~15–35 protein-coding genes; most of the 2137 BUSCO orthologs are nuclear genes. This is an educational feature, not a bug.
## NCBI Taxonomy Integration
When `--demo-live` is used (or `--organism` is passed with the `--ncbi` flag), the skill queries the NCBI E-utilities API to resolve the organism's taxonomic lineage and select the most specific BUSCO dataset automatically:
```
esearch → https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=taxonomy&term={name}&retmode=json
returns: {"esearchresult": {"idlist": ["4932"]}}
efetch → https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=taxonomy&id=4932&retmode=xml
returns: XML with <LineageEx> containing {rank, ScientificName} pairs
```
The `NCBI_TO_BUSCO` table maps rank+name pairs (most-specific first) to BUSCO lineages. For *S. cerevisiae*:
- class `Saccharomycetes` → `saccharomycetes_odb10` (2137 BUSCOs)
Network errors fall back gracefully to keyword-based `infer_lineage()` — no exception raised.
## Agentic Lineage Routing
The `--organism` flag is the primary agentic bridge. The LLM agent passes a free-text organism description; the skill resolves it to a BUSCO flag using the `LINEAGE_ROUTING` keyword table:
| User organism hint | Resolved flag | Lineage dataset |
|---|---|---|
| "bacteria", "E. coli", "Streptococcus", "Mycobacterium" | `--auto-lineage-prok` | (SEPP auto) |
| "archaea", "archaeon" | `--lineage` | `archaea_odb12` |
| "human", "Homo sapiens", "hg38", "hg19" | `--lineage` | `primates_odb10` |
| "mouse", "Mus musculus", "rat" | `--lineage` | `mammalia_odb10` |
| "zebrafish", "fish", "teleost" | `--lineage` | `vertebrata_odb10` |
| "bird", "chicken", "Gallus" | `--lineage` | `aves_odb10` |
| "fruit fly", "Drosophila", "diptera" | `--lineage` | `diptera_odb10` |
| "insect", "mosquito" | `--lineage` | `insecta_odb10` |
| "plant", "Arabidopsis", "rice", "wheat" | `--lineage` | `embryophyta_odb10` |
| "fungus", "yeast", "Saccharomyces" | `--lineage` | `fungi_odb10` |
| "eukaryote" (generic) | `--auto-lineage-euk` | (SEPP auto) |
| unknown / not specified | `--auto-lineage` | (SEPP auto, all domains) |
## Algorithm / Methodology
1. BUSCO v6 searches input sequences against HMM profiles of single-copy orthologs from OrthoDB.
2. Each ortholog is classified: **Complete** (score and length within expected range) → **Single-copy (S)** or **Duplicated (D)**; **Fragmented (F)** (score within range, length below threshold); **Missing (M)** (no significant hit).
3. Completeness percentage = (C + F) / n × 100. C alone is the primary quality metric.
4. Auto-lineage uses SEPP placement of marker genes to identify the correct clade; requires SEPP exactly 4.5.5.
5. OrthoDB10 datasets cover eukaryotes; OrthoDB12 covers prokaryotes and archaea — do not mix suffixes.
## Example Queries
- "Check the completeness of my bacteria genome assembly"
- "Run BUSCO on my Drosophila transcriptome using diptera lineage"
- "What is the BUSCO score for this human genome assembly?"
- "Run BUSCO in proteins mode with the vertebrata lineage"
- "Show me a BUSCO demo with synthetic data"
- "BUSCO assessment with auto-lineage prokaryote mode on my E. coli assembly"
## Example Output
```markdown
# BUSCO Assessor Report
**Date**: 2026-04-23 10:00 UTC
**Mode**: genome (demo)
**Lineage**: bacteria_odb12
**Input**: demo_assembly.fna (5 sequences)
## Completeness Summary
| Metric | Count | Percentage |
|--------|-------|-----------|
| Complete (C) | 118 | 95.2% |
| Single-copy (S) | 115 | 93.1% |
| Duplicated (D) | 3 | 2.1% |
| Fragmented (F) | 3 | 2.3% |
| Missing (M) | 3 | 2.5% |
| Total searched (n) | 124 | — |
**Score string**: `C:95.2%[S:93.1%,D:2.1%],F:2.3%,M:2.5%,n:124`
## Interpretation
High completeness (95.2% C) indicates a near-complete assembly for this lineage.
Duplication rate of 2.1% is within expected range.
## Top Gene Results (first 10)
| BUSCO ID | Status | Sequence | Score | Length |
|----------|--------|----------|-------|--------|
| 1098at2 | Complete | seq1 | 742.3 | 312 |
| 1099at2 | Complete | seq1 | 698.1 | 287 |
| 1103at2 | Fragmented | seq2 | 341.2 | 98 |
| 1104at2 | Missing | N/A | 0.0 | 0 |
*ClawBio is a research and educational tool. It is not a medical device...*
```
## Output Structure
```
output_dir/
├── report.md # PRIMARY: completeness report
├── result.json # scores, lineage, mode, run parameters
├── busco_run/
│ ├── short_summary.txt # BUSCO score summary (raw BUSCO format)
│ ├── short_summary.json # Structured score summary
│ └── full_table.tsv # Per-gene completeness table
└── reproducibility/
├── commands.sh # Exact replay command
├── environment.yml # Pins busco=6.1.0, sepp=4.5.5
└── checksums.sha256 # SHA-256 of all output files
```
## Dependencies
**Required (runtime; not needed for `--demo`)**
| Tool | Version | Purpose |
|------|---------|---------|
| `busco` | ≥6.1.0 | Core completeness analysis engine |
| `hmmer` | ≥3.1 | Profile HMM searches (installed with BUSCO) |
| `miniprot` | any | Eukaryote genome mode (default gene predictor) |
| `prodigal` | any | Prokaryote genome mode |
| `sepp` | **4.5.5 exactly** | Auto-lineage placement (v4.5.6 is broken) |
| `tblastn` | ≥2.10.1 | Transcriptome mode (v2.4–2.10.0 have CPU bugs) |
**Optional**
| Tool | Purpose |
|------|---------|
| `augustus` | Alternative eukaryote gene predictor (`--augustus` flag) |
| `metaeuk` | Alternative eukaryote gene predictor |
**Install (conda — recommended):**
```bash
conda create -n busco_env -c conda-forge -c bioconda busco=6.1.0 sepp=4.5.5
conda activate busco_env
```
## Gotchas
1. **SEPP version must be exactly 4.5.5.** SEPP v4.5.6 is incompatible with BUSCO auto-lineage files and produces wrong lineage assignments silently. Always pin `sepp=4.5.5` in environment.yml.
2. **Do NOT mix OrthoDB10 and OrthoDB12 lineage suffixes.** Eukaryote lineages use `_odb10`; prokaryote/archaea lineages use `_odb12`. Passing `bacteria_odb10` (non-existent) fails; passing `primates_odb12` (non-existent) fails. The lineage suffix must match the domain.
3. **BUSCO v6 changed the short_summary filename.** Depending on the BUSCO version and configuration, the file may be named `short_summary.txt` or `short_summary.specific.<lineage>.<run>.txt`. Always glob for both patterns — never hardcode the filename.
4. **Demo mode must never invoke the BUSCO binary.** `run_demo()` generates all output files synthetically in Python. Do not add BUSCO subprocess calls to the demo path; it must work in CI environments without any bioinformatics tools installed.
5. **Proteins mode with a nucleotide FASTA returns zero hits silently.** If `--mode proteins` is specified with a `.fna`/`.fa` file, BUSCO will complete successfully but report 0% completeness. The script emits a WARNING in this case; always use `.faa` (amino-acid FASTA) for proteins mode.
## Safety
- **Local-first**: All processing is local. No sequence data is uploaded to external services. Lineage datasets are downloaded from BUSCO servers only when the BUSCO binary is running and `--download_path` is specified.
- **No hallucinated scores**: The agent must NOT invent completeness percentages, lineage names, or gene counts. All numbers in the report derive from parsing BUSCO output or the synthetic demo constants.
- **Disclaimer**: Every generated `report.md` ends with: *"ClawBio is a research and educational tool. It is not a medical device and does not provide clinical diagnoses. Consult a healthcare professional before making any medical decisions."*
## Agent Boundary
- **Agent dispatches**: FASTA file path, `--mode`, `--organism` (free-text hint), optional explicit `--lineage` or `--auto-lineage*` flags.
- **Skill executes**: Lineage resolution, BUSCO command construction, subprocess management, output parsing, report writing.
- **Agent explains**: Results to the user, including what the completeness scores mean for their specific use case.
- **Agent must NOT**: Override the routing table with guessed lineage names, invent BUSCO score numbers, or run BUSCO commands manually outside this skill.
## Integration with Bio Orchestrator
**Trigger conditions for routing here:**
- User mentions "genome completeness", "BUSCO score", "assembly quality", or "assembly QC"
- User has produced a FASTA file from an assembler (Flye, SPAdes, Hifiasm, etc.)
- User asks "how complete is my assembly/transcriptome/protein set"
**Chaining partners:**
| Upstream | Handoff | Downstream |
|----------|---------|-----------|
| `seq-wrangler` | Assembled genome FASTA | `busco-assessor` |
| `busco-assessor` | `busco_run/` directory with `short_summary.txt` | `multiqc-reporter` (BUSCO module for multi-sample aggregation) |
| `busco-assessor` | `result.json` completeness scores | `profile-report` (unified genomic profile) |
**Output is chainable**: `result.json` is machine-readable JSON; `busco_run/short_summary.txt` is directly readable by MultiQC's BUSCO module.
## Maintenance
- **Review cadence**: Monthly or on new BUSCO major release.
- **Staleness signals**: Auto-lineage tests fail; OrthoDB download URLs change; new `_odb13` datasets released; SEPP constraint changes.
- **Update LINEAGE_ROUTING** when new OrthoDB versions introduce new clade-specific datasets or rename existing ones.
- **Deprecation path**: Move to `skills/_deprecated/busco-assessor/` if BUSCO v7 introduces breaking CLI changes that require a full rewrite.
## Citations
- Manni M. et al. (2021). BUSCO Update: Novel and Streamlined Workflows along with Broader and Deeper Phylogenetic Coverage. *Molecular Biology and Evolution*. https://doi.org/10.1093/molbev/msab199
- Simão F.A. et al. (2015). BUSCO: assessing genome assembly and annotation completeness with single-copy orthologs. *Bioinformatics*. https://doi.org/10.1093/bioinformatics/btv351
- OrthoDB v10/v12: https://www.orthodb.org/
- BUSCO GitLab: https://gitlab.com/ezlab/busco
- BUSCO User Guide v6: https://busco.ezlab.org/busco_userguide.html
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!