Install any skill in seconds. Free to start, no credit card required.
Get Started Free →FASTQ quality control and adapter/quality-trimming decisions with local NGS tools — run FastQC on raw reads, summarize a project with MultiQC, interpret per-base sequence quality, per-base N content, adapter content, overrepresented sequences, sequence duplication and GC content, and decide whether (and how) to trim with fastp / Cutadapt before downstream analysis. seqkit for read counts/stats/subsampling. Use when someone asks "run QC on my FASTQs", "are my reads good quality?", "do I need to t
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 1604% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 84% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 282% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 375% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 232% | 0% |
Run quality control on raw sequencing reads, interpret the report, and make an evidence-based decision about whether to trim — using real local command-line tools (FastQC, MultiQC, fastp, Cutadapt, seqkit).
This skill drives real binaries. It must never fabricate QC numbers.
PATH. If a required tool is missing, emit the install plan and STOP. Do not estimate, guess, or describe hypothetical QC results.
Only trim after inspecting adapter content / per-base quality, and only when the user has confirmed --mode trim.
--workdir.The input directory is read-only. Trimmed reads are written as NEW files.
install plan" is the correct answer — not a made-up PASS/FAIL table.
Use this skill when the user wants to:
.fastq, .fq, .gz) filesDo NOT use this skill for (route elsewhere):
tooluniverse-rnaseq-deseq2tooluniverse-sequence-analysistooluniverse-variant-analysistooluniverse-single-cellBefore running, confirm with the user (ask if unstated):
paired-end (e.g. *_R1.fastq.gz / *_R2.fastq.gz).
by fastp; amplicon/primer sequences usually need explicit Cutadapt removal.
is requested (needs a reference; see Limitations).
--workdir SEPARATE from the input folder.Already-trimmed reads should NOT be trimmed again; UMIs must be handled before trimming or you corrupt the UMI.
The bundled script preflights for you, but the decision logic is:
pythonimport shutil for tool in ("fastqc", "fastp", "seqkit"): print(tool, shutil.which(tool) or "MISSING")
command -v fastqc / shutil.which("fastqc") returning nothing means the tool is absent. If a required tool (FastQC for QC; FastQC+fastp for trim) is missing, emit:
mamba install -c bioconda -c conda-forge fastqc fastp seqkit multiqc
# or
conda install -c bioconda -c conda-forge fastqc fastp seqkit multiqcand stop. Do not proceed to fabricate output.
| Tool | Role | Install (bioconda) | |-----------|----------------------------------------------------------------|--------------------| | FastQC | Per-file raw read QC; produces the module PASS/WARN/FAIL report | fastqc | | MultiQC | Aggregates many FastQC (and fastp) reports into one summary | multiqc | | fastp | All-in-one QC + adapter + quality trimming (fast, auto-detect) | fastp | | Cutadapt | Explicit, precise adapter/primer removal (amplicons, custom) | cutadapt | | seqkit | Read counts, length/GC stats, subsampling | seqkit |
Rule of thumb: FastQC to diagnose, fastp to fix general adapter/quality, Cutadapt to fix a known primer/adapter precisely, seqkit to count/stat.
scripts/run_fastq_qc.py does the preflight + run-if-available + plan-if-missing flow, with workspace isolation built in.
bash# QC only (default) — never modifies reads python scripts/run_fastq_qc.py \ --fastq reads/sample_R1.fastq.gz reads/sample_R2.fastq.gz \ --workdir /tmp/fastq_qc_run # QC + trim (explicit) — fastp writes NEW trimmed files into --workdir python scripts/run_fastq_qc.py \ --fastq reads/sample_R1.fastq.gz reads/sample_R2.fastq.gz \ --workdir /tmp/fastq_qc_run \ --mode trim
Behavior:
tool is missing it prints the install plan and exits 0 — no fabricated QC.
--workdir.--mode trim, runs fastp writing *.trimmed.fastq.gz into--workdir/trimmed/ — raw inputs are never touched.
--workdir equals an input directory (overwrite guard).For a project-level summary after FastQC, run MultiQC over the workdir:
bashmultiqc /tmp/fastq_qc_run -o /tmp/fastq_qc_run/multiqc
This table is the core value-add. Map each FastQC module to what PASS/WARN/FAIL means and what to actually do. (See references/fastqc_interpretation.md for the long form with thresholds and worked cases.)
| FastQC module | Typical PASS | WARN / FAIL means | Suggested action | |------------------------------|---------------------------|----------------------------------------------------------------|------------------| | Per base sequence quality | All positions Q>=28 | 3' tail drops below Q20-Q28 (common, esp. R2) | Quality-trim 3' (fastp -q/sliding window). Proceed if only the last few bases dip. | | Per base N content | Near 0% N | Spike of N at a position = sequencer/base-call problem | Investigate: cycle-specific issue; consider hard-trim that position or re-sequence. | | Adapter content | Flat, no adapter ramp | Rising adapter % toward 3' end = read-through into adapter | Trim adapters (fastp auto-detect, or Cutadapt with the known adapter). | | Overrepresented sequences | None / <0.1% | A sequence is a large fraction: adapter, primer-dimer, rRNA, or low-complexity | Investigate the hit (BLAST it). If adapter/primer -> trim. If biology (rRNA/highly-expressed) -> proceed. | | Sequence Duplication Levels | Low (diverse library) | High duplication = PCR over-amplification OR expected (amplicon/RNA-seq) | Investigate, usually proceed. Do NOT dedup blindly — expected high in amplicon/targeted/RNA-seq. Mark-duplicates belongs post-alignment, not here. | | Per sequence GC content | Single peak at expected GC| Bimodal / shifted peak = contamination or mixed species | Investigate contamination (needs a reference screen; see Limitations). Not fixed by trimming. | | Per base sequence content | Flat after first ~10 bp | Bias in first bases (random-hexamer priming) or adapter | Random-priming bias: usually proceed (expected in RNA-seq). Persistent bias at 3' -> adapter -> trim. | | Sequence Length Distribution | Single length (raw) | Multiple lengths AFTER trimming is normal; before trimming may indicate mixed input | Usually proceed; only a concern on supposedly-raw uniform-length data. |
Decision summary for "do I need to trim?"
biology (rRNA, abundant transcript) -> no, proceed.
--mode qc): FastQC + seqkit -> read the report.--mode trim (fastp) or Cutadapt for preciseprimer removal; re-run FastQC on the trimmed output to confirm the fix.
commands run. Never report numbers a tool did not actually produce.
installed (bioconda). This is not a cloud service; with no tools installed the skill can only emit an install plan, not QC results.
single-pass and memory-light but still I/O-bound. Use seqkit sample to subsample for a quick look on huge files.
anomalies and "is this the right organism" need a reference index (e.g. FastQ Screen + bowtie2 indexes, or Kraken2) — extra setup beyond this skill's bundled tools.
decision (Picard/samtools markdup); FastQC duplication is diagnostic only.
corrupts UMIs.
references/fastqc_interpretation.md — full module-by-module thresholds + casesreferences/tools_and_install.md — install commands, tool flags, command recipesreferences/trimming_decisions.md — when/how to trim (fastp vs Cutadapt), pitfallsOther measured skills in the registry, with their headline benchmark lift.