| 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":null,"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":null,"config":null},"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
- Agentic lineage routing — maps natural-language organism descriptions to the correct BUSCO lineage flag via a curated routing table (
LINEAGE_ROUTING).
- Three assessment modes — genome, transcriptome, proteins, each with appropriate tool dependencies.
- Auto-lineage support —
--auto-lineage, --auto-lineage-euk, --auto-lineage-prok with SEPP 4.5.5 compatibility enforcement.
- Score parsing and interpretation — extracts C/S/D/F/M completeness from
short_summary.txt and provides plain-language interpretation.
- Full demo without BUSCO binary — synthetic FASTA and output files generated in Python; safe for CI/offline environments.
- 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
- Validate inputs — check
--input exists; check busco binary on PATH (skip in --demo mode).
- 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).
- Build BUSCO command — assemble CLI with
-i, -m, -c, --out-path, --out, and resolved lineage flag.
- Execute BUSCO —
subprocess.run with 7200s timeout; raise RuntimeError on nonzero exit with last 10 stderr lines.
- Parse
short_summary.txt — regex extraction of C/S/D/F/M/n; glob both short_summary.txt and short_summary.specific.*.txt patterns.
- Parse
full_table.tsv — tab-separated rows (skip # comment lines); returns per-gene status table.
- Write
result.json — completeness scores + run parameters.
- Write
report.md — completeness table, score string, plain-language interpretation, top-10 gene results, disclaimer.
- Write reproducibility bundle —
reproducibility/commands.sh, environment.yml, checksums.sha256.
CLI Reference
python skills/busco-assessor/busco_assessor.py \
--input assembly.fna --mode genome --lineage bacteria_odb12 \
--cpu 8 --output /tmp/busco_out
python skills/busco-assessor/busco_assessor.py \
--input assembly.fna --mode genome --auto-lineage-prok \
--cpu 8 --output /tmp/busco_out
python skills/busco-assessor/busco_assessor.py \
--input assembly.fna --organism "fruit fly"--output /tmp/busco_out
python skills/busco-assessor/busco_assessor.py \
--input transcriptome.fna --mode transcriptome --lineage insecta_odb10 \
--output /tmp/busco_transcriptome
python skills/busco-assessor/busco_assessor.py \
--input proteins.faa --mode proteins --lineage vertebrata_odb10 \
--output /tmp/busco_proteins
python skills/busco-assessor/busco_assessor.py --demo --output /tmp/busco_demo
python skills/busco-assessor/busco_assessor.py --demo-live --output /tmp/busco_live_demo
Demo
Offline demo (no internet, no BUSCO binary)
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)
python skills/busco-assessor/busco_assessor.py --demo-live --output /tmp/busco_live_demo
What it does — 5 steps:
- Downloads S. cerevisiae mitochondrial chromosome (22 KB) from Ensembl Genomes release 62
- Queries NCBI Taxonomy E-utilities API for
Saccharomyces cerevisiae → resolves saccharomycetes_odb10
- Runs BUSCO if installed, otherwise generates realistic synthetic output
- Writes
report.md with completeness table and mitochondrial-genome note
- Writes reproducibility bundle (commands.sh pins
busco=6.1.0 sepp=4.5.5)
Expected output (no BUSCO binary):
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
- BUSCO v6 searches input sequences against HMM profiles of single-copy orthologs from OrthoDB.
- 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).
- Completeness percentage = (C + F) / n × 100. C alone is the primary quality metric.
- Auto-lineage uses SEPP placement of marker genes to identify the correct clade; requires SEPP exactly 4.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
# 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):
conda create -n busco_env -c conda-forge -c bioconda busco=6.1.0 sepp=4.5.5
conda activate busco_env
Gotchas
-
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.
-
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.
-
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.
-
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.
-
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