bio-workflows-genome-assembly-pipeline — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited bio-workflows-genome-assembly-pipeline (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Reference examples tested with: BUSCO 5.5+, BWA 0.7.17+, Flye 2.9+, QUAST 5.2+, SPAdes 3.15+, fastp 0.23+, samtools 1.19+
Before using code patterns, verify installed versions match. If versions differ:
<tool> --version then <tool> --help to confirm flagsIf code throws ImportError, AttributeError, or TypeError, introspect the installed package and adapt the example to match the actual API rather than retrying.
"Assemble and polish a genome from my sequencing reads" → Orchestrate read QC, assembly (hifiasm, Flye, SPAdes), polishing (Medaka, Pilon), scaffolding, contamination detection (BlobToolKit), and quality assessment (QUAST, BUSCO).
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 assemblyfastp -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# 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# 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# NanoPlot for long-read QC
NanoPlot --fastq reads.fastq.gz \
--outdir nanoplot_output \
--threads 8# 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# 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# 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 16quast.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# 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 |
#!/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~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.