Install any skill in seconds. Free to start, no credit card required.
Get Started Free →End-to-end CLIP-seq analysis from FASTQ to binding sites and motif enrichment. Use when analyzing protein-RNA interactions from CLIP-based methods.
.claude/skills/bio-workflows-clip-pipeline/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 3% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 22% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 142% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 35% | 0% |
<!--
#
#
-->
FASTQ → QC → UMI extract → Trim adapters → Align → Filter → Dedup → Peak call → Annotate → Motifs| Method | UMI | Crosslink Site | Adapter | |--------|-----|----------------|---------| | HITS-CLIP | Optional | Deletions | 3' adapter | | PAR-CLIP | Optional | T→C mutations | 3' adapter | | iCLIP | Required | 5' of read | 3' adapter | | eCLIP | Required | 5' of read | 3' adapter |
bash# Initial QC fastqc reads.fastq.gz -o qc_pre/ # Check for adapter contamination and UMI structure # For eCLIP: expect 10nt UMI at read start zcat reads.fastq.gz | head -n 100 | cut -c1-15
bash# eCLIP (10nt UMI at 5' end) umi_tools extract \ --stdin=reads.fastq.gz \ --bc-pattern=NNNNNNNNNN \ --stdout=extracted.fastq.gz \ --log=umi_extract.log # iCLIP (5nt experimental barcode + 5nt UMI) umi_tools extract \ --stdin=reads.fastq.gz \ --bc-pattern=NNNNNXXXXX \ --stdout=extracted.fastq.gz
bash# Trim 3' adapter (common eCLIP adapter) cutadapt -a AGATCGGAAGAGCACACGTCTGAACTCCAGTCA \ --minimum-length 20 \ --quality-cutoff 20 \ -o trimmed.fastq.gz \ extracted.fastq.gz # For paired UMI adapters cutadapt -a AGATCGGAAGAGCACACGTCT \ -A AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGT \ --minimum-length 20 \ -o trimmed_R1.fq.gz -p trimmed_R2.fq.gz \ extracted_R1.fq.gz extracted_R2.fq.gz
bash# Build STAR index (once) STAR --runMode genomeGenerate \ --genomeDir star_index \ --genomeFastaFiles genome.fa \ --sjdbGTFfile genes.gtf \ --sjdbOverhang 100 # Align with STAR (optimized for short CLIP reads) STAR --genomeDir star_index \ --readFilesIn trimmed.fastq.gz \ --readFilesCommand zcat \ --outFilterMismatchNmax 2 \ --outFilterMultimapNmax 1 \ --outSAMtype BAM SortedByCoordinate \ --outSAMattributes All \ --alignEndsType EndToEnd \ --outFileNamePrefix clip_
bash# Remove unmapped and low-quality reads samtools view -b -F 4 -q 10 clip_Aligned.sortedByCoord.out.bam > filtered.bam samtools index filtered.bam # Optional: remove reads mapping to rRNA/tRNA bedtools intersect -v -abam filtered.bam -b rrna_trna.bed > filtered_norRNA.bam
bash# UMI-aware deduplication umi_tools dedup \ -I filtered.bam \ -S dedup.bam \ --output-stats=dedup_stats samtools index dedup.bam # Check deduplication rate echo "Duplication rate:" $(grep "Input Reads" dedup_stats.log | awk '{print $3}')
bash# CLIPper (recommended) clipper -b dedup.bam -s hg38 -o peaks.bed --FDR 0.05 --superlocal # Alternative: Piranha Piranha -s dedup.bam -o piranha_peaks.bed -p 0.01 # For PAR-CLIP with T→C mutations PARalyzer settings.ini # Strand-specific calling samtools view -h -F 16 dedup.bam | samtools view -Sb - > plus.bam samtools view -h -f 16 dedup.bam | samtools view -Sb - > minus.bam clipper -b plus.bam -s hg38 -o peaks_plus.bed clipper -b minus.bam -s hg38 -o peaks_minus.bed cat peaks_plus.bed peaks_minus.bed | sort -k1,1 -k2,2n > peaks_stranded.bed
bash# Annotate with gene features bedtools intersect -a peaks.bed -b genes.gtf -wo > peaks_annotated.txt # Or use HOMER annotatePeaks.pl peaks.bed hg38 > peaks_homer_annotated.txt # Feature distribution awk -F'\t' '{print $8}' peaks_homer_annotated.txt | sort | uniq -c | sort -rn
bash# Extract peak sequences bedtools getfasta -fi genome.fa -bed peaks.bed -s -fo peaks.fa # HOMER motif finding (RNA mode) findMotifs.pl peaks.fa fasta motif_output -rna -len 5,6,7,8 -p 8 # MEME-ChIP meme-chip -oc meme_output -dna peaks.fa -meme-mod zoops -meme-nmotifs 10
bash# For iCLIP/eCLIP: identify crosslink sites (read 5' ends) bedtools genomecov -ibam dedup.bam -bg -5 -strand + > crosslinks_plus.bg bedtools genomecov -ibam dedup.bam -bg -5 -strand - > crosslinks_minus.bg # For PAR-CLIP: identify T→C conversion sites # Requires specialized tools like PARpipe
| Step | Metric | Expected | |------|--------|----------| | Raw | Read count | >10M | | Trimmed | Reads >20bp | >80% | | Aligned | Mapping rate | >50% | | Dedup | Unique rate | >20% | | Peaks | Peak count | 1,000-50,000 | | Peaks | Median width | 20-100 nt | | FRiP | Reads in peaks | >10% |
bash# Calculate FRiP reads_in_peaks=$(bedtools intersect -a dedup.bam -b peaks.bed -u | samtools view -c -) total_reads=$(samtools view -c dedup.bam) frip=$(echo "scale=4; $reads_in_peaks / $total_reads" | bc) echo "FRiP: $frip"
bash#!/bin/bash set -euo pipefail SAMPLE=$1 READS=$2 GENOME_DIR=$3 GENOME_FA=$4 mkdir -p qc trimmed aligned peaks motifs # QC fastqc $READS -o qc/ # UMI extract umi_tools extract --stdin=$READS --bc-pattern=NNNNNNNNNN \ --stdout=trimmed/${SAMPLE}_extracted.fq.gz # Trim cutadapt -a AGATCGGAAGAGCACACGTCT --minimum-length 20 \ -o trimmed/${SAMPLE}_trimmed.fq.gz trimmed/${SAMPLE}_extracted.fq.gz # Align STAR --genomeDir $GENOME_DIR --readFilesIn trimmed/${SAMPLE}_trimmed.fq.gz \ --readFilesCommand zcat --outFilterMismatchNmax 2 --outFilterMultimapNmax 1 \ --outSAMtype BAM SortedByCoordinate --outFileNamePrefix aligned/${SAMPLE}_ # Filter and dedup samtools view -b -F 4 -q 10 aligned/${SAMPLE}_Aligned.sortedByCoord.out.bam | \ samtools sort -o aligned/${SAMPLE}_filtered.bam samtools index aligned/${SAMPLE}_filtered.bam umi_tools dedup -I aligned/${SAMPLE}_filtered.bam -S aligned/${SAMPLE}_dedup.bam samtools index aligned/${SAMPLE}_dedup.bam # Peaks clipper -b aligned/${SAMPLE}_dedup.bam -s hg38 -o peaks/${SAMPLE}_peaks.bed # Motifs bedtools getfasta -fi $GENOME_FA -bed peaks/${SAMPLE}_peaks.bed -s -fo peaks/${SAMPLE}.fa findMotifs.pl peaks/${SAMPLE}.fa fasta motifs/${SAMPLE} -rna -len 5,6,7 -p 4 echo "Pipeline complete for $SAMPLE"
<!-- 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-01 | fail→pass | 24,501 | 13,846 | -43% | 1 | 1 | 0% | 5,148 | 5,300 | +3% | 0 | 0 | — |
case-02 | pass→pass | 14,031 | 9,242 | -34% | 1 | 1 | 0% | 3,108 | 4,205 | +35% | 0 | 0 | — |
case-03 | fail→pass | 16,271 | 7,712 | -53% | 1 | 1 | 0% | 3,128 | 3,831 | +22% | 0 | 0 | — |
case-21 | pass→pass | 8,433 | 7,947 | -6% | 1 | 1 | 0% | 1,742 | 3,861 | +122% | 0 | 0 | — |
case-04 | fail→fail | 12,951 | 5,606 | -57% | 1 | 1 | 0% | 2,393 | 3,430 | +43% | 0 | 0 | — |
case-05 | pass→pass | 4,983 | 3,956 | -21% | 1 | 1 | 0% | 989 | 3,118 | +215% | 0 | 0 | — |
case-06 | pass→pass | 9,675 | 4,825 | -50% | 1 | 1 | 0% | 1,910 | 3,214 | +68% | 0 | 0 | — |
case-07 | pass→pass | 9,866 | 7,031 | -29% | 1 | 1 | 0% | 1,704 | 3,546 | +108% | 0 | 0 | — |
case-08 | pass→pass | 12,970 | 4,850 | -63% | 1 | 1 | 0% | 2,335 | 3,154 | +35% | 0 | 0 | — |
case-09 | pass→pass | 6,206 | 3,445 | -44% | 1 | 1 | 0% | 1,117 | 2,963 | +165% | 0 | 0 | — |
case-10 | fail→pass | 15,852 | 3,823 | -76% | 1 | 1 | 0% | 2,875 | 3,032 | +5% | 0 | 0 | — |
case-11 | pass→pass | 6,902 | 3,291 | -52% | 1 | 1 | 0% | 1,391 | 2,990 | +115% | 0 | 0 | — |
case-12 | pass→pass | 6,385 | 5,092 | -20% | 1 | 1 | 0% | 1,292 | 3,431 | +166% | 0 | 0 | — |
case-13 | pass→pass | 7,940 | 5,546 | -30% | 1 | 1 | 0% | 1,523 | 3,387 | +122% | 0 | 0 | — |
case-14 | pass→pass | 3,946 | 3,369 | -15% | 1 | 1 | 0% | 829 | 3,010 | +263% | 0 | 0 | — |
case-15 | pass→pass | 5,646 | 4,156 | -26% | 1 | 1 | 0% | 1,150 | 3,294 | +186% | 0 | 0 | — |
case-16 | pass→pass | 12,462 | 2,377 | -81% | 1 | 1 | 0% | 1,276 | 2,771 | +117% | 0 | 0 | — |
case-17 | pass→pass | 9,028 | 6,515 | -28% | 1 | 1 | 0% | 1,628 | 3,446 | +112% | 0 | 0 | — |
case-18 | fail→fail | 6,128 | 4,358 | -29% | 1 | 1 | 0% | 1,183 | 3,165 | +168% | 0 | 0 | — |
case-19 | fail→fail | 5,073 | 3,658 | -28% | 1 | 1 | 0% | 1,053 | 2,971 | +182% | 0 | 0 | — |
case-20 | pass→pass | 5,601 | 5,823 | +4% | 1 | 1 | 0% | 1,057 | 3,495 | +231% | 0 | 0 | — |
case-22 | fail→pass | 34,225 | 12,776 | -63% | 1 | 1 | 0% | 1,971 | 4,765 | +142% | 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. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +18 percentage points is the difference between those two pass rates over the 21 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/24/2026 | +36% |
Other measured skills in the registry, with their headline benchmark lift.