agentleFS
AWSKnown publisherawslabs/hcls-agent-skills/skills/rna-seq-analysis/SKILL.md

rna-seq-analysis

Skill62 starsChanged 5 months agoMIT-0View on GitHub

Bulk RNA-seq analysis pipeline covering alignment (STAR), quantification (Salmon, featureCounts), and differential expression (DESeq2). Triggers on RNA-seq, STAR, Salmon, DESeq2, differential expression, gene expression, tximport, featureCounts, transcriptomics, "bulk RNA-seq", "STAR alignment", "Salmon quantification", "gene counts", "DESeq2 results", "shrinkage estimator", "volcano plot RNA-seq".

The file

We split this skill into the rules it gives an agent

9 rules. About 0 are common, 4 are distinctive, and 5 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈4

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Verify with: infer_experiment.py (RSeQC) or Salmon's lib_format_counts.json.

    line 50
  2. Very specific:

    Right: Check with infer_experiment.py or Salmon lib_format_counts.json before running featureCounts

    line 68
  3. Distinctive:

    Right: Always start from raw integer counts

    line 72
  4. Very specific:

    Right: Use DESeqDataSetFromTximport(txi, ...) which preserves the length offset

    line 76
  5. Very specific:

    Right: Put interest last: ~ batch + condition

    line 80
  6. Distinctive:

    Right: Use column 3 (forward) or column 4 (reverse) matching your kit

    line 92
  7. Very specific:

    Right: Check table(coldata$batch, coldata$condition) first

    line 100
  8. Distinctive:

    Why: No statistical model can separate perfectly correlated effects

    line 101
  9. Distinctive:

    Keep code comments minimal and functional (what, not why-it-exists)

    line 108

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

RNA-seq Analysis — Pipeline Skill (Thin Scaffold)

Overview

Adds decision logic for choosing quantification paths (STAR vs Salmon), strandedness determination, and DESeq2 modeling pitfalls that LLMs routinely get wrong.

Usage

  • Activate when choosing between alignment-based (STAR+featureCounts) vs alignment-free (Salmon) quantification
  • Activate when setting up DESeq2 from either count source
  • Activate when debugging unexpected low counts or weak DE signal

Core Concepts

Decision Logic

Need BAMs? (variant calling, fusions, novel transcripts)
├── YES → STAR two-pass + featureCounts
└── NO → Salmon (faster, lower RAM, bias-corrected)

Salmon output → DESeq2:
└── Use DESeqDataSetFromTximport (preserves length offset)
    └── NEVER round txi$counts and pass to DESeqDataSetFromMatrix

Filtering strategy (VQSR equivalent):
├── ≥30 samples → VQSR-like (default DESeq2 shrinkage works well)
└── <30 samples → still works, but pre-filter aggressively

Strandedness determination (MUST verify before counting):

KitfeatureCounts -sSalmon -l
TruSeq Stranded / dUTP2ISR (PE) / SR (SE)
Ligation / forward1ISF / SF
Unstranded0IU / U

Verify with: infer_experiment.py (RSeQC) or Salmon's lib_format_counts.json.

Critical Parameters

ParameterValueWhen to change
--sjdbOverhangreadLength - 1 (default 100)Non-100bp reads
--twopassMode BasicAlways for DESkip only for speed in QC runs
Salmon --gcBias --seqBiasAlways onNever skip for Illumina
Salmon --validateMappingsAlways onEnables selective alignment
featureCounts -sKit-dependentALWAYS verify empirically
DESeq2 pre-filterrowSums(counts >= 10) >= smallest_groupAdjust 10 for shallow sequencing
lfcShrink type"apeglm"Use "ashr" for arbitrary contrasts
Design formula~ batch + condition (interest LAST)Always put interest term last

Common Mistakes

  • Wrong: Guessing strandedness (-s) instead of verifying empirically Right: Check with infer_experiment.py or Salmon lib_format_counts.json before running featureCounts Why: Wrong strandedness causes 2–10× lower counts and weak DE signal
  • Wrong: Passing normalized counts (TPM, FPKM, CPM) to DESeq2 Right: Always start from raw integer counts Why: Normalized values break the negative-binomial model
  • Wrong: Rounding txi$counts and passing to DESeqDataSetFromMatrix Right: Use DESeqDataSetFromTximport(txi, ...) which preserves the length offset Why: Rounding discards per-gene length correction for transcript-length bias
  • Wrong: Placing variable of interest first in design (~ condition + batch) Right: Put interest last: ~ batch + condition Why: DESeq2 tests the last term by default
  • Wrong: Assuming DESeq2 reorders samples to match Right: Assert stopifnot(all(colnames(cts) == rownames(coldata))) before creating DESeq object Why: DESeq2 silently mislabels samples if order doesn't match
  • Wrong: Skipping pre-filtering of low-count genes Right: Filter with rowSums(counts(dds) >= 10) >= smallest_group_size Why: Near-zero genes inflate runtime and dilute multiple-testing correction
  • Wrong: Using STAR ReadsPerGene.out.tab column 2 for stranded libraries Right: Use column 3 (forward) or column 4 (reverse) matching your kit Why: Column 2 is unstranded; using it for stranded data halves effective counts
  • Wrong: Including samples with <10M mapped reads or <70% mapping rate Right: Exclude or flag before fitting Why: Low-quality samples distort size factors and dispersion estimates
  • Wrong: Modeling when batch is perfectly confounded with condition Right: Check table(coldata$batch, coldata$condition) first Why: No statistical model can separate perfectly correlated effects

Response Format

  • Lead with the command or code the user needs — explain after
  • Structure as: confirm inputs → working code → key parameters explained → gotchas
  • One complete working example per task; do not show every alternative
  • Keep code comments minimal and functional (what, not why-it-exists)
  • Target: 50-100 lines of code with brief surrounding explanation

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.