Install any skill in seconds. Free to start, no credit card required.
Get Started Free →End-to-end genome assembly workflow from reads to polished assembly with QC. Supports short reads (SPAdes), long reads (Flye), and hybrid approaches. Use when assembling genomes from raw reads.
.claude/skills/bio-workflows-genome-assembly-pipeline/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 66% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 114% | 0% |
| case-16 | ✓→✗ | ▼ Worse | 71% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 133% | 0% |
<!--
#
#
-->
Complete workflow from sequencing reads to polished, quality-assessed genome assembly.
Reads (short and/or long)
|
v
[1. QC & Filtering] -----> fastp, NanoPlot
|
v
[2. Assembly] -----------> SPAdes (short) or Flye (long)
|
v
[3. Polishing] ----------> Pilon (short) or medaka (long)
|
v
[4. QC Assessment] ------> QUAST, BUSCO
|
v
Final polished assemblybashfastp -i reads_R1.fastq.gz -I reads_R2.fastq.gz \ -o trimmed_R1.fq.gz -O trimmed_R2.fq.gz \ --detect_adapter_for_pe \ --qualified_quality_phred 20 \ --length_required 50 \ --html qc_report.html
bash# Standard bacterial assembly spades.py \ -1 trimmed_R1.fq.gz \ -2 trimmed_R2.fq.gz \ -o spades_output \ --careful \ -t 16 \ -m 64 # For isolate genomes spades.py --isolate \ -1 trimmed_R1.fq.gz \ -2 trimmed_R2.fq.gz \ -o spades_output \ -t 16
bash# Align reads to assembly bwa index spades_output/scaffolds.fasta bwa mem -t 16 spades_output/scaffolds.fasta \ trimmed_R1.fq.gz trimmed_R2.fq.gz | \ samtools sort -@ 4 -o aligned.bam samtools index aligned.bam # Polish pilon --genome spades_output/scaffolds.fasta \ --frags aligned.bam \ --output polished \ --threads 16
bash# NanoPlot for long-read QC NanoPlot --fastq reads.fastq.gz \ --outdir nanoplot_output \ --threads 8
bash# ONT raw reads flye --nano-raw reads.fastq.gz \ --out-dir flye_output \ --threads 16 \ --genome-size 5m # ONT HQ reads (sup/dna_r10) flye --nano-hq reads.fastq.gz \ --out-dir flye_output \ --threads 16 \ --genome-size 5m # PacBio HiFi flye --pacbio-hifi reads.fastq.gz \ --out-dir flye_output \ --threads 16 \ --genome-size 5m
bash# Polish with medaka (for ONT) medaka_consensus \ -i reads.fastq.gz \ -d flye_output/assembly.fasta \ -o medaka_output \ -t 16 \ -m r1041_e82_400bps_sup_v4.3.0 # Match your basecalling model
bash# Flye with long reads, then polish with short reads flye --nano-hq long_reads.fastq.gz \ --out-dir flye_output \ --threads 16 \ --genome-size 5m # Polish with short reads using Pilon bwa index flye_output/assembly.fasta bwa mem -t 16 flye_output/assembly.fasta \ short_R1.fq.gz short_R2.fq.gz | \ samtools sort -@ 4 -o aligned.bam samtools index aligned.bam pilon --genome flye_output/assembly.fasta \ --frags aligned.bam \ --output hybrid_polished \ --threads 16
bashquast.py polished.fasta \ -r reference.fasta \ -g genes.gff \ -o quast_output \ -t 8 # Without reference quast.py polished.fasta \ -o quast_output \ -t 8
bash# Download lineage database busco --download bacteria_odb10 # Run BUSCO busco -i polished.fasta \ -l bacteria_odb10 \ -o busco_output \ -m genome \ -c 8
| Tool | Parameter | Bacteria | Eukaryote | |------|-----------|----------|-----------| | SPAdes | --careful | Yes | Optional | | SPAdes | -m | 64GB | 256GB+ | | Flye | --genome-size | 5m | Species-specific | | Flye | --meta | If metagenome | No | | BUSCO | -l | bacteria_odb10 | eukaryota_odb10 |
| Issue | Likely Cause | Solution | |-------|--------------|----------| | Fragmented assembly | Low coverage, repetitive genome | Increase coverage, use long reads | | Low N50 | Short reads only | Add long reads for scaffolding | | Low BUSCO | Incomplete assembly, wrong lineage | Check coverage, try different lineage | | Assembly too large | Contamination, heterozygosity | Filter reads, check for contamination |
bash#!/bin/bash set -e THREADS=16 GENOME_SIZE="5m" LONG_READS="long_reads.fastq.gz" SHORT_R1="short_R1.fastq.gz" SHORT_R2="short_R2.fastq.gz" BUSCO_LINEAGE="bacteria_odb10" OUTDIR="assembly_results" mkdir -p ${OUTDIR}/{qc,assembly,polished,quast,busco} # Step 1: QC echo "=== QC ===" NanoPlot --fastq ${LONG_READS} --outdir ${OUTDIR}/qc/nanoplot -t ${THREADS} fastp -i ${SHORT_R1} -I ${SHORT_R2} \ -o ${OUTDIR}/qc/short_R1.fq.gz -O ${OUTDIR}/qc/short_R2.fq.gz \ --html ${OUTDIR}/qc/fastp.html # Step 2: Assembly with Flye echo "=== Assembly ===" flye --nano-hq ${LONG_READS} \ --out-dir ${OUTDIR}/assembly \ --threads ${THREADS} \ --genome-size ${GENOME_SIZE} # Step 3: Polish with short reads echo "=== Polishing ===" bwa index ${OUTDIR}/assembly/assembly.fasta bwa mem -t ${THREADS} ${OUTDIR}/assembly/assembly.fasta \ ${OUTDIR}/qc/short_R1.fq.gz ${OUTDIR}/qc/short_R2.fq.gz | \ samtools sort -@ 4 -o ${OUTDIR}/polished/aligned.bam samtools index ${OUTDIR}/polished/aligned.bam pilon --genome ${OUTDIR}/assembly/assembly.fasta \ --frags ${OUTDIR}/polished/aligned.bam \ --output ${OUTDIR}/polished/final \ --threads ${THREADS} # Step 4: QC echo "=== Quality Assessment ===" quast.py ${OUTDIR}/polished/final.fasta -o ${OUTDIR}/quast -t ${THREADS} busco -i ${OUTDIR}/polished/final.fasta -l ${BUSCO_LINEAGE} \ -o busco -m genome -c ${THREADS} --out_path ${OUTDIR} echo "=== Assembly Complete ===" echo "Final assembly: ${OUTDIR}/polished/final.fasta" cat ${OUTDIR}/quast/report.txt
<!-- AUTHOR_SIGNATURE: 9a7f3c2e-MD-BABU-MIA-2026-MSSM-SECURE -->
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 25,030 | 20,965 | -16% | 1 | 1 | 0% | 5,637 | 6,972 | +24% | 0 | 0 | — |
case-02 | pass→pass | 6,022 | 3,784 | -37% | 1 | 1 | 0% | 1,289 | 3,005 | +133% | 0 | 0 | — |
case-03 | fail→pass | 12,096 | 8,334 | -31% | 1 | 1 | 0% | 2,208 | 3,671 | +66% | 0 | 0 | — |
case-04 | pass→pass | 6,406 | 3,672 | -43% | 1 | 1 | 0% | 1,088 | 2,859 | +163% | 0 | 0 | — |
case-05 | pass→pass | 5,874 | 4,194 | -29% | 1 | 1 | 0% | 1,128 | 2,965 | +163% | 0 | 0 | — |
case-06 | pass→pass | 3,140 | 2,174 | -31% | 1 | 1 | 0% | 495 | 2,540 | +413% | 0 | 0 | — |
case-07 | pass→pass | 5,683 | 3,211 | -43% | 1 | 1 | 0% | 1,230 | 2,849 | +132% | 0 | 0 | — |
case-08 | pass→pass | 5,864 | 4,496 | -23% | 1 | 1 | 0% | 1,163 | 3,152 | +171% | 0 | 0 | — |
case-09 | pass→pass | 8,360 | 2,872 | -66% | 1 | 1 | 0% | 1,617 | 2,733 | +69% | 0 | 0 | — |
case-10 | pass→pass | 5,270 | 4,303 | -18% | 1 | 1 | 0% | 948 | 2,893 | +205% | 0 | 0 | — |
case-11 | pass→pass | 6,289 | 5,444 | -13% | 1 | 1 | 0% | 1,162 | 3,267 | +181% | 0 | 0 | — |
case-12 | fail→pass | 7,650 | 1,896 | -75% | 1 | 1 | 0% | 1,172 | 2,511 | +114% | 0 | 0 | — |
case-13 | pass→pass | 2,748 | 2,416 | -12% | 1 | 1 | 0% | 420 | 2,539 | +505% | 0 | 0 | — |
case-14 | pass→pass | 16,739 | 15,340 | -8% | 1 | 1 | 0% | 2,995 | 4,942 | +65% | 0 | 0 | — |
case-15 | pass→pass | 16,089 | 12,144 | -25% | 1 | 1 | 0% | 2,829 | 4,038 | +43% | 0 | 0 | — |
case-16 | pass→fail | 17,598 | 17,151 | -3% | 1 | 1 | 0% | 2,904 | 4,963 | +71% | 0 | 0 | — |
case-17 | pass→pass | 14,363 | 10,100 | -30% | 1 | 1 | 0% | 2,556 | 4,116 | +61% | 0 | 0 | — |
case-18 | pass→pass | 7,755 | 1,775 | -77% | 1 | 1 | 0% | 1,366 | 2,481 | +82% | 0 | 0 | — |
case-19 | pass→pass | 10,185 | 3,326 | -67% | 1 | 1 | 0% | 1,897 | 2,803 | +48% | 0 | 0 | — |
case-20 | pass→pass | 4,041 | 2,114 | -48% | 1 | 1 | 0% | 792 | 2,646 | +234% | 0 | 0 | — |
case-21 | pass→pass | 15,973 | 10,824 | -32% | 1 | 1 | 0% | 3,315 | 4,383 | +32% | 0 | 0 | — |
case-22 | pass→pass | 5,210 | 5,135 | -1% | 1 | 1 | 0% | 1,022 | 3,184 | +212% | 0 | 0 | — |
case-23 | pass→pass | 12,419 | 11,825 | -5% | 1 | 1 | 0% | 2,201 | 4,344 | +97% | 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 +9 percentage points is the difference between those two pass rates over the 23 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
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.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 7/24/2026 | +18% |
Other measured skills in the registry, with their headline benchmark lift.