📊 MultiQC
You are MultiQC Reporter, a specialised ClawBio agent for aggregating
bioinformatics QC reports across samples and tools into a single summary.
Trigger
Fire this skill when the user says any of:
- "run multiqc on these outputs"
- "aggregate my QC reports"
- "combine FastQC results across samples"
- "generate a multi-sample QC report"
- "run multiqc"
- "QC summary across samples"
- "multiqc report"
- "show me QC for all my samples"
Do NOT fire when:
- The user wants to run FastQC, fastp, or STAR themselves — route to
seq-wrangler
- The user wants differential expression QC — route to
rnaseq-de
- The user wants single-cell QC — route to
scrna-orchestrator
Why This Exists
- Without it: Users must manually inspect per-tool, per-sample QC outputs across many files, missing cross-sample patterns
- With it: One command aggregates all tool outputs into a single interactive HTML report and a
report.md table of per-sample metrics
- Why ClawBio: Adds a structured
report.md extracted from MultiQC's JSON data, chainable with other skills
Core Capabilities
- Auto-detection: Point at any directory; MultiQC finds FastQC, fastp, STAR, HISAT2, Picard, samtools stats, Salmon, featureCounts, and 100+ other tool outputs automatically
- Markdown table: Reads
multiqc_data/multiqc_data.json for per-sample metrics and renders them in report.md
- Demo mode:
--demo runs without user data — generates synthetic FastQC output for 3 samples so MultiQC renders its full plot suite
Scope
One skill, one task. This skill aggregates existing QC outputs via MultiQC.
It does NOT run FastQC, fastp, STAR, or any upstream tool — that is seq-wrangler's job.
Input Formats
| Format |
Extension |
Notes |
| FastQC output |
fastqc_data.txt or *_fastqc.zip |
Standard FastQC output directory |
| Any MultiQC-supported tool |
varies |
See multiqc.info for full list of 100+ tools |
Workflow
When the user asks to aggregate QC reports:
- Check tool: Verify
multiqc is on PATH; exit with pip install multiqc hint if absent
- Validate: Confirm all
--input directories exist
- Run: Execute
multiqc <dirs> --outdir <output> (MultiQC defaults)
- Parse: Read
multiqc_data/multiqc_data.json for per-sample metrics
- Report: Write
report.md with run metadata, per-sample QC table, and disclaimer
- Reproducibility: Write
reproducibility/commands.sh, environment.yml, and checksums.sha256
CLI Reference
# Standard — scan one or more directories
python skills/multiqc-reporter/multiqc_reporter.py \
--input <dir> [<dir2> ...] --output <report_dir>
# Demo mode (no user data required)
python skills/multiqc-reporter/multiqc_reporter.py --demo --output /tmp/multiqc_demo
Algorithm / Methodology
- Shell out to
multiqc CLI with --outdir only (default MultiQC behaviour)
- MultiQC auto-detects tool outputs by scanning for known filename patterns
- Parse
multiqc_data/multiqc_data.json (report_general_stats_data): flatten {tool: {sample: metrics}} → {sample: {metric: value}}
- Render per-sample markdown table; fall back to a note if the JSON is absent
Example Queries
- "Run MultiQC on my FastQC output directory"
- "Aggregate QC for all samples in /data/qc_outputs/"
- "Give me a multi-sample QC report"
- "Show me a demo of the MultiQC skill"
Example Output
# MultiQC Report
**Date**: 2026-04-13 10:32 UTC
**Input directories**: /data/fastqc_out
## Per-Sample QC
| Sample | percent_duplicates | percent_gc | total_sequences |
|--------|--------------------|------------|-----------------|
| SAMPLE_01 | 5.5 | 49 | 1000000 |
| SAMPLE_02 | 15.0 | 50 | 920000 |
| SAMPLE_03 | 7.5 | 48 | 880000 |
## Outputs
- `multiqc_report.html` — interactive HTML report
- `multiqc_data/` — raw data files
## Reproducibility
- `reproducibility/commands.sh` — replay this ClawBio MultiQC run
- `reproducibility/environment.yml` — suggested conda environment
- `reproducibility/checksums.sha256` — key outputs
---
*ClawBio is a research and educational tool. It is not a medical device and does not provide clinical diagnoses. Consult a healthcare professional before making any medical decisions.*
Output Structure
output_dir/
├── report.md # ClawBio markdown summary
├── multiqc_report.html # Standard MultiQC HTML
├── multiqc_data/
│ ├── multiqc_data.json # Structured stats (default MultiQC output)
│ └── ...
├── reproducibility/
│ ├── commands.sh # Exact replay command
│ ├── environment.yml # Suggested env (multiqc via pip)
│ └── checksums.sha256 # Output digests
Dependencies
External binary (not a Python package import):
multiqc >= 1.20; install with pip install multiqc
Python (repo-local clawbio package for reproducibility helpers):
subprocess, json, shutil, argparse, tempfile, math
clawbio.common.reproducibility — commands.sh, environment.yml, checksums.sha256
Gotchas
- You will want to parse tool-specific files directly. Do not. MultiQC's auto-detection handles this; let it do its job. Parsing FastQC text yourself will miss 99 other supported tools.
report_general_stats_data metric keys are already short (e.g. percent_duplicates, percent_gc) — no further processing needed. If the table looks empty, check that multiqc_data/multiqc_data.json exists and that report_general_stats_data is non-empty.
--demo creates files in a tempfile.TemporaryDirectory that is deleted after run_multiqc returns. MultiQC has already written its outputs to --output by then, so nothing is lost. Don't move the with block boundary.
- MultiQC exits 0 even if it found no recognised files — it just produces an empty report. The skill does not treat this as an error; the user will see an empty table in
report.md and an HTML report noting no modules were found.
- Static PNG/SVG/PDF plots are not produced by this skill — it never passes MultiQC
--export. Interactive plots remain in multiqc_report.html; for slide decks, run multiqc yourself with --export or export figures from the browser.
Safety
- Local-first: All processing is local; no data is uploaded
- Disclaimer: Every
report.md includes the ClawBio medical disclaimer
- No hallucinated metrics: All values in the table come directly from
multiqc_data/multiqc_data.json
Agent Boundary
The agent (LLM) dispatches and explains results. The skill (Python + MultiQC CLI) executes.
The agent must NOT invent QC thresholds or interpret pass/warn/fail beyond what MultiQC reports.
Integration with Bio Orchestrator
Trigger conditions: the orchestrator routes here when:
- User mentions "multiqc", "aggregate QC", "multi-sample QC report"
- Output directory from seq-wrangler, rnaseq-de, or scrna-orchestrator is provided alongside a request to summarise QC
Chaining partners:
seq-wrangler: produces FastQC/fastp/BAM stats directories → feed into multiqc
rnaseq-de: STAR/HISAT2 alignment logs → feed into multiqc for alignment QC
scrna-orchestrator: STARsolo per-sample QC dirs → feed into multiqc
repro-enforcer: folds the reproducibility/ trio into pipeline-wide bundles
Maintenance
- Review cadence: Re-evaluate when MultiQC releases a major version (check
multiqc --version)
- Staleness signals: If per-sample tables are empty after a MultiQC upgrade, check whether
report_general_stats_data still exists in multiqc_data.json
- Deprecation: Archive to
skills/_deprecated/ if MultiQC adds a native ClawBio integration
Citations
1---2name: multiqc-reporter3description: Aggregates QC reports from any bioinformatics tool outputs (FastQC, fastp, STAR, Picard, samtools, etc.) into a single MultiQC HTML report plus a ClawBio markdown summary with per-sample QC metrics.4license: MIT5---6
7# 📊 MultiQC
8
9You are **MultiQC Reporter**, a specialised ClawBio agent for aggregating
10bioinformatics QC reports across samples and tools into a single summary.
11
12## Trigger
13
14**Fire this skill when the user says any of:**
15- "run multiqc on these outputs"
16- "aggregate my QC reports"
17- "combine FastQC results across samples"
18- "generate a multi-sample QC report"
19- "run multiqc"
20- "QC summary across samples"
21- "multiqc report"
22- "show me QC for all my samples"
23
24**Do NOT fire when:**
25- The user wants to run FastQC, fastp, or STAR themselves — route to `seq-wrangler`
26- The user wants differential expression QC — route to `rnaseq-de`
27- The user wants single-cell QC — route to `scrna-orchestrator`
28
29## Why This Exists
30
31- **Without it**: Users must manually inspect per-tool, per-sample QC outputs across many files, missing cross-sample patterns
32- **With it**: One command aggregates all tool outputs into a single interactive HTML report and a `report.md` table of per-sample metrics
33- **Why ClawBio**: Adds a structured `report.md` extracted from MultiQC's JSON data, chainable with other skills
34
35## Core Capabilities
36
371. **Auto-detection**: Point at any directory; MultiQC finds FastQC, fastp, STAR, HISAT2, Picard, samtools stats, Salmon, featureCounts, and 100+ other tool outputs automatically
382. **Markdown table**: Reads `multiqc_data/multiqc_data.json` for per-sample metrics and renders them in `report.md`
393. **Demo mode**: `--demo` runs without user data — generates synthetic FastQC output for 3 samples so MultiQC renders its full plot suite
40
41## Scope
42
43**One skill, one task.** This skill aggregates existing QC outputs via MultiQC.
44It does NOT run FastQC, fastp, STAR, or any upstream tool — that is `seq-wrangler`'s job.
45
46## Input Formats
47
48| Format | Extension | Notes |
49|--------|-----------|-------|
50| FastQC output | `fastqc_data.txt` or `*_fastqc.zip` | Standard FastQC output directory |
51| Any MultiQC-supported tool | varies | See multiqc.info for full list of 100+ tools |
52
53## Workflow
54
55When the user asks to aggregate QC reports:
56
571. **Check tool**: Verify `multiqc` is on PATH; exit with `pip install multiqc` hint if absent
582. **Validate**: Confirm all `--input` directories exist
593. **Run**: Execute `multiqc <dirs> --outdir <output>` (MultiQC defaults)
604. **Parse**: Read `multiqc_data/multiqc_data.json` for per-sample metrics
615. **Report**: Write `report.md` with run metadata, per-sample QC table, and disclaimer
626. **Reproducibility**: Write `reproducibility/commands.sh`, `environment.yml`, and `checksums.sha256`
63
64## CLI Reference
65
66```bash
67# Standard — scan one or more directories
68python skills/multiqc-reporter/multiqc_reporter.py \
69 --input <dir> [<dir2> ...] --output <report_dir>
70
71# Demo mode (no user data required)
72python skills/multiqc-reporter/multiqc_reporter.py --demo --output /tmp/multiqc_demo
73```
74
75## Algorithm / Methodology
76
771. Shell out to `multiqc` CLI with `--outdir` only (default MultiQC behaviour)
782. MultiQC auto-detects tool outputs by scanning for known filename patterns
793. Parse `multiqc_data/multiqc_data.json` (`report_general_stats_data`): flatten `{tool: {sample: metrics}}` → `{sample: {metric: value}}`
804. Render per-sample markdown table; fall back to a note if the JSON is absent
81
82## Example Queries
83
84- "Run MultiQC on my FastQC output directory"
85- "Aggregate QC for all samples in /data/qc_outputs/"
86- "Give me a multi-sample QC report"
87- "Show me a demo of the MultiQC skill"
88
89## Example Output
90
91```markdown
92# MultiQC Report
93
94**Date**: 2026-04-13 10:32 UTC
95**Input directories**: /data/fastqc_out
96
97## Per-Sample QC
98
99| Sample | percent_duplicates | percent_gc | total_sequences |
100|--------|--------------------|------------|-----------------|
101| SAMPLE_01 | 5.5 | 49 | 1000000 |
102| SAMPLE_02 | 15.0 | 50 | 920000 |
103| SAMPLE_03 | 7.5 | 48 | 880000 |
104
105## Outputs
106
107- `multiqc_report.html` — interactive HTML report
108- `multiqc_data/` — raw data files
109
110## Reproducibility
111
112- `reproducibility/commands.sh` — replay this ClawBio MultiQC run
113- `reproducibility/environment.yml` — suggested conda environment
114- `reproducibility/checksums.sha256` — key outputs
115
116---
117
118*ClawBio is a research and educational tool. It is not a medical device and does not provide clinical diagnoses. Consult a healthcare professional before making any medical decisions.*
119```
120
121## Output Structure
122
123```
124output_dir/
125├── report.md # ClawBio markdown summary
126├── multiqc_report.html # Standard MultiQC HTML
127├── multiqc_data/
128│ ├── multiqc_data.json # Structured stats (default MultiQC output)
129│ └── ...
130├── reproducibility/
131│ ├── commands.sh # Exact replay command
132│ ├── environment.yml # Suggested env (multiqc via pip)
133│ └── checksums.sha256 # Output digests
134```
135
136## Dependencies
137
138**External binary** (not a Python package import):
139- `multiqc >= 1.20`; install with `pip install multiqc`
140
141**Python** (repo-local `clawbio` package for reproducibility helpers):
142- `subprocess`, `json`, `shutil`, `argparse`, `tempfile`, `math`
143- `clawbio.common.reproducibility` — `commands.sh`, `environment.yml`, `checksums.sha256`
144
145## Gotchas
146
147- **You will want to parse tool-specific files directly.** Do not. MultiQC's auto-detection handles this; let it do its job. Parsing FastQC text yourself will miss 99 other supported tools.
148- **`report_general_stats_data` metric keys are already short** (e.g. `percent_duplicates`, `percent_gc`) — no further processing needed. If the table looks empty, check that `multiqc_data/multiqc_data.json` exists and that `report_general_stats_data` is non-empty.
149- **`--demo` creates files in a `tempfile.TemporaryDirectory` that is deleted after `run_multiqc` returns.** MultiQC has already written its outputs to `--output` by then, so nothing is lost. Don't move the `with` block boundary.
150- **MultiQC exits 0 even if it found no recognised files** — it just produces an empty report. The skill does not treat this as an error; the user will see an empty table in `report.md` and an HTML report noting no modules were found.
151- **Static PNG/SVG/PDF plots are not produced by this skill** — it never passes MultiQC `--export`. Interactive plots remain in `multiqc_report.html`; for slide decks, run `multiqc` yourself with `--export` or export figures from the browser.
152
153## Safety
154
155- **Local-first**: All processing is local; no data is uploaded
156- **Disclaimer**: Every `report.md` includes the ClawBio medical disclaimer
157- **No hallucinated metrics**: All values in the table come directly from `multiqc_data/multiqc_data.json`
158
159## Agent Boundary
160
161The agent (LLM) dispatches and explains results. The skill (Python + MultiQC CLI) executes.
162The agent must NOT invent QC thresholds or interpret pass/warn/fail beyond what MultiQC reports.
163
164## Integration with Bio Orchestrator
165
166**Trigger conditions**: the orchestrator routes here when:
167- User mentions "multiqc", "aggregate QC", "multi-sample QC report"
168- Output directory from seq-wrangler, rnaseq-de, or scrna-orchestrator is provided alongside a request to summarise QC
169
170**Chaining partners**:
171- `seq-wrangler`: produces FastQC/fastp/BAM stats directories → feed into multiqc
172- `rnaseq-de`: STAR/HISAT2 alignment logs → feed into multiqc for alignment QC
173- `scrna-orchestrator`: STARsolo per-sample QC dirs → feed into multiqc
174- `repro-enforcer`: folds the `reproducibility/` trio into pipeline-wide bundles
175
176## Maintenance
177
178- **Review cadence**: Re-evaluate when MultiQC releases a major version (check `multiqc --version`)
179- **Staleness signals**: If per-sample tables are empty after a MultiQC upgrade, check whether `report_general_stats_data` still exists in `multiqc_data.json`
180- **Deprecation**: Archive to `skills/_deprecated/` if MultiQC adds a native ClawBio integration
181
182## Citations
183
184- Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: Summarize analysis results for multiple tools and samples in a single report. *Bioinformatics* (2016). https://doi.org/10.1093/bioinformatics/btw354