alterlab-qiime2-amplicon — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited alterlab-qiime2-amplicon (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.
The command-line, workflow-runner entry point for marker-gene (amplicon) microbiome analysis. Given raw demultiplexed paired-end reads, it walks the canonical QIIME 2 order — import → primer trim → denoise → classify → diversity — and teaches the two things people get wrong most: trimming primers BEFORE DADA2, and the .qza/.qzv provenance model. It is the raw-data-to-result pipeline that hands a feature table off to in-memory analysis skills (see routing below).
Pinned to QIIME 2 2026.1 (the amplicon distribution). Forward-compat note: the distribution is renamed `qiime2` in 2026.4 — the env name and channel URL change, the plugin commands below do not.
Use this skill when the request involves running an amplicon / microbiome pipeline from sequencing reads:
| The request is really about… | Route to |
|---|---|
| Alpha/beta diversity, UniFrac, PCoA ordination, PERMANOVA on an already-exported feature/distance table (in-memory, Python) | alterlab-scikit-bio |
| Building / manipulating a phylogenetic tree, tree visualization, or comparative phylogenetics outside QIIME 2 | alterlab-phylogenetics / alterlab-etetoolkit |
| Shotgun metagenomics taxonomic profiling, MAG assembly, functional genes (not marker-gene amplicons) | not in this skill — amplicon only; flag the gap |
| RNA-seq transcript quantification (salmon/kallisto), differential expression | alterlab-rnaseq-quant → alterlab-pydeseq2 |
| Variant calling FASTQ → VCF (germline/somatic) | alterlab-nf-core-sarek |
| Protein/nucleotide sequence similarity search (BLAST+/DIAMOND) | alterlab-blast |
| Spatial transcriptomics neighborhood/enrichment analysis | alterlab-squidpy-spatial |
| Quick one-off gene/sequence/database lookups | alterlab-gget |
| Reading/writing BAM/SAM/VCF, alignment file surgery | alterlab-pysam |
This skill is amplicon (marker-gene) only. If the data is shotgun metagenomic, single-cell, or anything other than 16S/18S/ITS marker-gene sequencing, say so and stop.
Everything in QIIME 2 is a typed, zipped artifact that records its own provenance:
plus an embedded semantic type (e.g. SampleData[PairedEndSequencesWithQuality], FeatureTable[Frequency]) and a full provenance graph of every action that produced it.
diversity emperor plots). Drag it into https://view.qiime2.org (offline, in-browser) or run qiime tools view file.qzv.
.qza/.qzv carries the exact commands,parameters, and plugin versions that made it. Keep artifacts, not just exports.
Treat semantic types as the contract: an action only accepts artifacts of the type it declares, which is why import (step 1) matters so much.
manifest import → cutadapt trim-paired (primers) → dada2 denoise-paired
→ feature-table summarize → feature-classifier classify-sklearn
→ phylogeny → diversity core-metrics-phylogeneticPrimer trimming comes BEFORE DADA2. DADA2 models per-base error rates; leftover primer/adapter bases corrupt that error model and inflate spurious ASVs. Trim with cutadapt trim-paired first, then denoise. (If your reads are already primer-free — e.g. EMP-style — you can skip cutadapt, but verify, don't assume.)
QIIME 2 cannot be pip-installed; it ships as a conda environment. For 2026.1 (verified env files live in qiime2/distributions):
# macOS (Apple Silicon / Intel) — 2026.1 amplicon distribution
conda env create \
--name qiime2-amplicon-2026.1 \
--file https://raw.githubusercontent.com/qiime2/distributions/dev/2026.1/amplicon/released/qiime2-amplicon-macos-latest-conda.yml
# Linux: swap the filename for qiime2-amplicon-ubuntu-latest-conda.yml
conda activate qiime2-amplicon-2026.1
qiime info # confirm version + installed pluginsFor 2026.4, the official command uses the renamed distribution (--name rachis-qiime2-2026.4, file rachis-qiime2-*-conda.yml); see the QIIME 2 Library quickstart. Full install detail and the env-file matrix: references/installation.md.
Bulk DADA2 denoising and classifier training are CPU/RAM heavy. On Cem's M4 Max these run fine locally — keep them off the API and run them in a conda activated shell.Use a manifest (a TSV mapping sample IDs → absolute FASTQ paths) so you control exactly which files map to which sample. Format: PairedEndFastqManifestPhred33V2 (verified in q2-types).
qiime tools import \
--type 'SampleData[PairedEndSequencesWithQuality]' \
--input-format PairedEndFastqManifestPhred33V2 \
--input-path manifest.tsv \
--output-path demux.qza
qiime demux summarize \
--i-data demux.qza \
--o-visualization demux.qzv # ← READ THIS to choose trunc-lenManifest schema, single-end and EMP variants, and ITS notes: references/import_and_manifest.md. Generate a manifest from a folder of FASTQs with scripts/make_manifest.py.
qiime cutadapt trim-paired \
--i-demultiplexed-sequences demux.qza \
--p-front-f GTGYCAGCMGCCGCGGTAA \ # forward primer (example: 515F)
--p-front-r GGACTACNVGGGTWTCTAAT \ # reverse primer (example: 806R)
--p-discard-untrimmed \
--o-trimmed-sequences demux-trimmed.qza
qiime demux summarize --i-data demux-trimmed.qza --o-visualization demux-trimmed.qzv--p-discard-untrimmed drops reads where the primer was not found (usually what you want for targeted amplicons). Action and flag names verified from the q2-cutadapt source. Primer choice by region (515F/806R, ITS1F/ITS2, etc.): references/pipeline_steps.md.
Open demux-trimmed.qzv, read the interactive quality plot, and pick truncation lengths where median quality drops (forward and reverse independently). Truncated read length must still leave enough overlap to merge pairs.
qiime dada2 denoise-paired \
--i-demultiplexed-seqs demux-trimmed.qza \
--p-trunc-len-f 0 --p-trunc-len-r 0 \ # ← set from the quality .qzv (0 = no truncation)
--p-trim-left-f 0 --p-trim-left-r 0 \
--o-representative-sequences rep-seqs.qza \
--o-table table.qza \
--o-denoising-stats denoising-stats.qza
qiime metadata tabulate \
--m-input-file denoising-stats.qza --o-visualization denoising-stats.qzvAlways inspect denoising-stats.qzv: low merge or chimera-survival rates usually mean trunc-len was too aggressive (no overlap) or primers were not trimmed.
qiime feature-table summarize \
--i-table table.qza \
--m-sample-metadata-file sample-metadata.tsv \
--o-summary table.qzv2026.1 breaking change (verified in the release notes): the old summarize visualizer was renamed _summarize, and the former `summarize_plus` pipeline is now `summarize` — so today's feature-table summarize is the enhanced summary (it also emits feature/sample frequency artifacts). Older tutorials calling summarize_plus must switch to summarize. Details: references/version_notes.md.
qiime feature-classifier classify-sklearn \
--i-classifier silva-138-99-nb-classifier.qza \ # MUST match your QIIME 2 version
--i-reads rep-seqs.qza \
--o-classification taxonomy.qza
qiime metadata tabulate --m-input-file taxonomy.qza --o-visualization taxonomy.qzvA pretrained naive-Bayes classifier is pickled scikit-learn — it only loads under the QIIME 2 release it was trained on. Download the classifier built for your version from the QIIME 2 Library (SILVA 138 for 16S/18S, Greengenes2 for 16S, UNITE for ITS). Version-match traps and the train-your-own path: references/classifiers.md.
qiime phylogeny align-to-tree-mafft-fasttree \
--i-sequences rep-seqs.qza \
--o-alignment aligned.qza --o-masked-alignment masked.qza \
--o-tree unrooted-tree.qza --o-rooted-tree rooted-tree.qza
qiime diversity core-metrics-phylogenetic \
--i-phylogeny rooted-tree.qza \
--i-table table.qza \
--p-sampling-depth 1103 \ # ← choose from table.qzv rarefaction; see below
--m-metadata-file sample-metadata.tsv \
--output-dir core-metricsSampling depth is a rarefaction floor: every sample is subsampled to this many reads, and samples below it are dropped. Pick it from table.qzv to balance depth against sample retention — never guess. core-metrics-phylogenetic produces Faith's PD, Shannon, observed features, Bray-Curtis / Jaccard / weighted+unweighted UniFrac distance matrices, and Emperor PCoA .qzvs in one shot.
For stats and ordination off the exported table (PERMANOVA, custom PCoA, alpha/beta metrics in Python), export and hand off to `alterlab-scikit-bio` — that is the in-memory companion to this pipeline.
qiime tools export --input-path table.qza --output-path exported/ # → feature-table.biom
qiime tools export --input-path taxonomy.qza --output-path exported/ # → taxonomy.tsvscripts/check_artifact.py reads a .qza/.qzv (it is just a zip) and prints its semantic type, UUID, and the provenance action list without a QIIME 2 install — handy for sanity-checking that an artifact is what a downstream step expects.
--p-discard-untrimmed dropped almosteverything, the primer sequences are likely wrong.
denoising-stats.qzv showreasonable merge + non-chimeric retention?
--p-sampling-depth justified from table.qzv, not guessed?feature-table summarize (2026.1 = former summarize_plus), not a removedaction name?
references/installation.md — conda env files (2026.1 / 2026.4 rename), qiime info, why no pip.references/import_and_manifest.md — manifest formats, single-end/EMP/ITS import.references/pipeline_steps.md — per-step flags, primer sets by region, denoising QC reading.references/classifiers.md — SILVA 138 / Greengenes2 / UNITE, version-matching, train-your-own.references/version_notes.md — 2026.1 release deltas, 2026.4 qiime2 rename, summarize change.Part of the AlterLab Academic Skills suite.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.