plugin/skills/tooluniverse-fastq-qc/SKILL.md
--- name: tooluniverse-fastq-qc description: 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",
npx skillsauth add mims-harvard/tooluniverse plugin/skills/tooluniverse-fastq-qcInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.
--mode trim.--workdir.
The input directory is read-only. Trimmed reads are written as NEW files.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):
*_R1.fastq.gz / *_R2.fastq.gz).--workdir SEPARATE from the input folder.The bundled script preflights for you, but the decision logic is:
import 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 multiqc
and 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.
# 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:
--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:
multiqc /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?"
--mode qc): FastQC + seqkit -> read the report.--mode trim (fastp) or Cutadapt for precise
primer removal; re-run FastQC on the trimmed output to confirm the fix.sample to
subsample for a quick look on huge files.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), pitfallstools
Generate the success criteria for a task or question, then review work against them. Given a task, goal, or open-ended question, decompose it into scenarios, evaluation perspectives, and fine-grained weighted YES/NO criteria using the Recursive Expansion Tree (RET) method; if work is supplied, score it criterion-by-criterion and surface what is missing or could be better. Use when asked to self-review or check your own work, judge whether a task is done well or completely, build a definition-of-done or completeness checklist, create an evaluation rubric or grading criteria, score or grade answers to a question, set up an LLM-as-judge rubric, or when the user mentions self-review, completeness check, success criteria, evaluation criteria, scoring rubric, Qworld, or the RET algorithm.
tools
Find the real protein target(s) of a peptide from its sequence — peptide target deorphanization / off-target identification, for ANY target class (GPCR, ion channel, protease, cytokine/growth-factor receptor, enzyme, integrin), not only GPCRs. Use when a peptide has a phenotype but does not bind its hypothesized target, when a peptide binds a target in one species or assay but not another, or to screen candidate targets for an orphan peptide. A target-class router steers a multi-route keyless pipeline (PROSITE/ELM motif, BLAST homology, HGNC/InterPro/GPCRdb/GtoPdb target-family enumeration, OpenTargets phenotype anchor, EnsemblCompara/Alliance cross-species reconciliation) plus optional NVIDIA-NIM co-folding (Boltz2, AlphaFold2-Multimer, OpenFold3) for structural confirmation.
tools
Install or update ToolUniverse in Claude Science — create the conda env, install the tooluniverse pip package, and (re)build the tooluniverse-research skill by fetching the current workflow library from GitHub. Use for first-time setup, upgrading the ToolUniverse version, refreshing the bundled workflows after an upstream release, or reinstalling on a new machine.
tools
Install, set up, verify, update, pin, uninstall, or troubleshoot the ToolUniverse plugin on OpenAI Codex. ALWAYS consult this skill for any of those — don't answer from memory, because the exact marketplace name (mims-harvard/ToolUniverse), the "codex plugin marketplace add" then "codex plugin add -m tooluniverse" flow, Codex's startup auto-upgrade behavior, the uvx tooluniverse MCP server, and the API-key env vars are easy to get wrong. Use it whenever someone wants to get ToolUniverse (or "the 1000+ scientific tools" / "the harvard tools") working on Codex, says the Codex plugin or its tools/skills won't load, hits a uvx or MCP-server startup error, asks how Codex updates it, wants to pin or remove it, or finds it running an old tool version — even if they never say the word "plugin". Not for the Claude Code plugin (use tooluniverse-claude-code-plugin), for running research with the tools, or for authoring new tools or skills.