Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Align RNA-seq reads with HISAT2, a memory-efficient splice-aware aligner. Use when STAR's memory requirements are too high or for general RNA-seq alignment.
.claude/skills/bio-read-alignment-hisat2-alignment/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-14 | ✓→✓ | = Same ✓ | 333% | 0% |
| case-20 | ✓→✓ | = Same ✓ | 301% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 47% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 47% | 0% |
<!--
#
#
-->
bash# Basic index (no annotation) hisat2-build -p 8 reference.fa hisat2_index # Index with splice sites and exons (recommended) hisat2_extract_splice_sites.py annotation.gtf > splice_sites.txt hisat2_extract_exons.py annotation.gtf > exons.txt hisat2-build -p 8 \ --ss splice_sites.txt \ --exon exons.txt \ reference.fa hisat2_index
bash# Paired-end reads hisat2 -p 8 -x hisat2_index \ -1 reads_1.fq.gz -2 reads_2.fq.gz \ -S aligned.sam # Single-end reads hisat2 -p 8 -x hisat2_index \ -U reads.fq.gz \ -S aligned.sam
bash# Pipe to samtools hisat2 -p 8 -x hisat2_index \ -1 r1.fq.gz -2 r2.fq.gz | \ samtools sort -@ 4 -o aligned.sorted.bam - samtools index aligned.sorted.bam
bash# Forward stranded (e.g., Ligation) hisat2 -p 8 -x hisat2_index \ --rna-strandness FR \ -1 r1.fq.gz -2 r2.fq.gz -S aligned.sam # Reverse stranded (e.g., dUTP, TruSeq - most common) hisat2 -p 8 -x hisat2_index \ --rna-strandness RF \ -1 r1.fq.gz -2 r2.fq.gz -S aligned.sam # Single-end stranded hisat2 -p 8 -x hisat2_index \ --rna-strandness F \ # or R for reverse -U reads.fq.gz -S aligned.sam
bash# Output novel splice junctions hisat2 -p 8 -x hisat2_index \ --novel-splicesite-outfile novel_splices.txt \ -1 r1.fq.gz -2 r2.fq.gz -S aligned.sam # Use known + novel junctions for subsequent alignments hisat2 -p 8 -x hisat2_index \ --novel-splicesite-infile novel_splices.txt \ -1 r1.fq.gz -2 r2.fq.gz -S aligned.sam
bash# Pass 1: Discover junctions from all samples for r1 in *_R1.fq.gz; do r2=${r1/_R1/_R2} base=$(basename $r1 _R1.fq.gz) hisat2 -p 8 -x hisat2_index \ --novel-splicesite-outfile ${base}_splices.txt \ -1 $r1 -2 $r2 -S /dev/null done # Combine and filter junctions cat *_splices.txt | sort -u > combined_splices.txt # Pass 2: Realign with all junctions for r1 in *_R1.fq.gz; do r2=${r1/_R1/_R2} base=$(basename $r1 _R1.fq.gz) hisat2 -p 8 -x hisat2_index \ --novel-splicesite-infile combined_splices.txt \ -1 $r1 -2 $r2 | \ samtools sort -@ 4 -o ${base}.sorted.bam - done
bashhisat2 -p 8 -x hisat2_index \ --rg-id sample1 \ --rg SM:sample1 \ --rg PL:ILLUMINA \ --rg LB:lib1 \ -1 r1.fq.gz -2 r2.fq.gz -S aligned.sam
bash# Output name-sorted BAM for htseq-count hisat2 -p 8 -x hisat2_index -1 r1.fq.gz -2 r2.fq.gz | \ samtools sort -n -@ 4 -o aligned.namesorted.bam - # Or coordinate-sorted for featureCounts hisat2 -p 8 -x hisat2_index -1 r1.fq.gz -2 r2.fq.gz | \ samtools sort -@ 4 -o aligned.sorted.bam -
| Parameter | Default | Description | |-----------|---------|-------------| | -p | 1 | Number of threads | | -x | - | Index basename | | --rna-strandness | unstranded | FR/RF/F/R | | --dta | off | Downstream transcriptome assembly | | --dta-cufflinks | off | For Cufflinks | | --min-intronlen | 20 | Minimum intron length | | --max-intronlen | 500000 | Maximum intron length | | -k | 5 | Max alignments to report |
bash# Use --dta for StringTie hisat2 -p 8 -x hisat2_index \ --dta \ -1 r1.fq.gz -2 r2.fq.gz | \ samtools sort -@ 4 -o aligned.sorted.bam -
bash# HISAT2 prints summary to stderr hisat2 -p 8 -x hisat2_index -1 r1.fq.gz -2 r2.fq.gz -S aligned.sam 2> summary.txt
Example:
50000000 reads; of these:
50000000 (100.00%) were paired; of these:
2500000 (5.00%) aligned concordantly 0 times
45000000 (90.00%) aligned concordantly exactly 1 time
2500000 (5.00%) aligned concordantly >1 times
95.00% overall alignment rate| Aligner | Human Genome Memory | |---------|-------------------| | STAR | ~30GB | | HISAT2 | ~8GB |
<!-- AUTHOR_SIGNATURE: 9a7f3c2e-MD-BABU-MIA-2026-MSSM-SECURE -->
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-14 | pass→pass | 3,204 | 2,791 | -13% | 1 | 1 | 0% | 523 | 2,263 | +333% | 0 | 0 | — |
case-20 | pass→pass | 4,378 | 2,504 | -43% | 1 | 1 | 0% | 517 | 2,072 | +301% | 0 | 0 | — |
case-01 | fail→pass | 16,882 | 11,831 | -30% | 1 | 1 | 0% | 3,633 | 3,913 | +8% | 0 | 0 | — |
case-02 | pass→pass | 12,261 | 6,324 | -48% | 1 | 1 | 0% | 2,063 | 3,042 | +47% | 0 | 0 | — |
case-03 | pass→pass | 9,931 | 5,844 | -41% | 1 | 1 | 0% | 1,947 | 2,864 | +47% | 0 | 0 | — |
case-04 | pass→pass | 7,601 | 5,306 | -30% | 1 | 1 | 0% | 1,469 | 2,855 | +94% | 0 | 0 | — |
case-13 | pass→pass | 4,173 | 3,766 | -10% | 1 | 1 | 0% | 840 | 2,525 | +201% | 0 | 0 | — |
case-05 | pass→pass | 4,822 | 4,682 | -3% | 1 | 1 | 0% | 1,003 | 2,704 | +170% | 0 | 0 | — |
case-06 | pass→pass | 4,620 | 4,289 | -7% | 1 | 1 | 0% | 966 | 2,608 | +170% | 0 | 0 | — |
case-07 | pass→pass | 11,248 | 4,592 | -59% | 1 | 1 | 0% | 2,149 | 2,490 | +16% | 0 | 0 | — |
case-08 | pass→pass | 8,759 | 3,680 | -58% | 1 | 1 | 0% | 645 | 2,426 | +276% | 0 | 0 | — |
case-09 | pass→pass | 7,001 | 3,367 | -52% | 1 | 1 | 0% | 1,129 | 2,356 | +109% | 0 | 0 | — |
case-10 | pass→pass | 6,298 | 4,259 | -32% | 1 | 1 | 0% | 1,188 | 2,605 | +119% | 0 | 0 | — |
case-11 | pass→pass | 9,601 | 6,246 | -35% | 1 | 1 | 0% | 1,752 | 2,872 | +64% | 0 | 0 | — |
case-12 | pass→pass | 7,502 | 6,748 | -10% | 1 | 1 | 0% | 1,452 | 3,056 | +110% | 0 | 0 | — |
case-15 | pass→pass | 7,533 | 6,686 | -11% | 1 | 1 | 0% | 1,365 | 3,090 | +126% | 0 | 0 | — |
case-16 | pass→pass | 2,474 | 2,466 | -0% | 1 | 1 | 0% | 506 | 2,253 | +345% | 0 | 0 | — |
case-17 | pass→pass | 2,535 | 2,174 | -14% | 1 | 1 | 0% | 434 | 2,161 | +398% | 0 | 0 | — |
case-18 | pass→pass | 5,339 | 3,211 | -40% | 1 | 1 | 0% | 954 | 2,311 | +142% | 0 | 0 | — |
case-19 | pass→pass | 4,213 | 2,311 | -45% | 1 | 1 | 0% | 821 | 2,058 | +151% | 0 | 0 | — |
case-21 | pass→pass | 12,793 | 12,613 | -1% | 1 | 1 | 0% | 2,746 | 3,887 | +42% | 0 | 0 | — |
case-22 | pass→pass | 4,774 | 5,046 | +6% | 1 | 1 | 0% | 988 | 2,784 | +182% | 0 | 0 | — |
case-23 | pass→pass | 10,521 | 6,704 | -36% | 1 | 1 | 0% | 1,946 | 3,228 | +66% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +4 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 7/26/2026 | +9% |
Other measured skills in the registry, with their headline benchmark lift.