Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Predict miRNA target genes using sequence-based algorithms and database lookups. Use when identifying potential mRNA targets of differentially expressed or functionally important miRNAs.
.claude/skills/bio-small-rna-seq-target-prediction/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 52% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -7% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 71% | 0% |
<!--
#
#
-->
bash# Run miRanda for target prediction miranda miRNA.fa UTRs.fa \ -sc 140 \ -en -20 \ -out predictions.txt # Options: # -sc 140: Minimum alignment score (default 140) # -en -20: Maximum free energy threshold (kcal/mol) # Higher score and lower energy = stronger prediction
pythonimport pandas as pd def parse_miranda(output_file): '''Parse miRanda output file''' results = [] with open(output_file) as f: for line in f: if line.startswith('>'): parts = line.strip().split('\t') if len(parts) >= 5: results.append({ 'mirna': parts[0].lstrip('>'), 'target': parts[1], 'score': float(parts[2]), 'energy': float(parts[3]), 'position': parts[4] }) return pd.DataFrame(results)
pythonimport requests import pandas as pd def query_targetscan(mirna_family): '''Query TargetScan for predicted targets Note: TargetScan uses miRNA family names (e.g., miR-21-5p) ''' # TargetScan provides downloadable files # For human: https://www.targetscan.org/vert_80/vert_80_data_download/ targetscan_file = 'Predicted_Targets_Context_Scores.txt' df = pd.read_csv(targetscan_file, sep='\t') targets = df[df['miRNA family'] == mirna_family] return targets.sort_values('context++ score')
pythondef query_mirdb(mirna_id): '''Query miRDB for target predictions miRDB uses machine learning for target prediction Score > 80 indicates high confidence ''' # Download from http://mirdb.org/download.html mirdb_file = 'miRDB_v6.0_prediction_result.txt' df = pd.read_csv(mirdb_file, sep='\t', header=None, names=['mirna', 'target', 'score']) targets = df[df['mirna'] == mirna_id] return targets[targets['score'] >= 80].sort_values('score', ascending=False)
pythondef consensus_targets(mirna, min_databases=2): '''Find targets predicted by multiple databases More reliable targets are predicted by multiple algorithms ''' miranda_targets = set(query_miranda_targets(mirna)) targetscan_targets = set(query_targetscan_targets(mirna)) mirdb_targets = set(query_mirdb_targets(mirna)) # Count predictions per target all_targets = miranda_targets | targetscan_targets | mirdb_targets consensus = [] for target in all_targets: count = sum([ target in miranda_targets, target in targetscan_targets, target in mirdb_targets ]) if count >= min_databases: consensus.append({ 'target': target, 'n_databases': count, 'miranda': target in miranda_targets, 'targetscan': target in targetscan_targets, 'mirdb': target in mirdb_targets }) return pd.DataFrame(consensus).sort_values('n_databases', ascending=False)
python# Using mirtarbase package for validated targets def get_validated_targets(mirna): '''Get experimentally validated targets from miRTarBase''' # Download from https://mirtarbase.cuhk.edu.cn/ mirtarbase_file = 'miRTarBase_MTI.xlsx' df = pd.read_excel(mirtarbase_file) validated = df[df['miRNA'] == mirna] return validated[['Target Gene', 'Experiments', 'Support Type']]
pythonfrom Bio.Seq import Seq def find_seed_matches(mirna_seq, utr_seq): '''Find seed matches in UTR sequence Seed region: positions 2-8 of miRNA (7-mer) ''' mirna = Seq(mirna_seq) utr = Seq(utr_seq) # Get seed (positions 2-8, 0-indexed: 1-7) seed = str(mirna[1:8]) seed_rc = str(Seq(seed).reverse_complement()) matches = [] start = 0 while True: pos = str(utr).find(seed_rc, start) if pos == -1: break matches.append(pos) start = pos + 1 return matches
pythondef enrich_target_genes(targets, background=None): '''Run GO enrichment on predicted target genes''' import gseapy as gp enr = gp.enrichr( gene_list=targets, gene_sets=['GO_Biological_Process_2021', 'KEGG_2021_Human'], organism='Human' ) return enr.results
<!-- 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 | 13,959 | 7,453 | -47% | 1 | 1 | 0% | 2,878 | 3,036 | +5% | 0 | 0 | — |
case-02 | fail→fail | 13,965 | 7,010 | -50% | 1 | 1 | 0% | 2,684 | 3,030 | +13% | 0 | 0 | — |
case-03 | fail→pass | 12,076 | 7,444 | -38% | 1 | 1 | 0% | 2,384 | 2,954 | +24% | 0 | 0 | — |
case-04 | fail→pass | 8,749 | 5,194 | -41% | 1 | 1 | 0% | 1,631 | 2,474 | +52% | 0 | 0 | — |
case-05 | fail→fail | 8,569 | 4,846 | -43% | 1 | 1 | 0% | 1,811 | 2,300 | +27% | 0 | 0 | — |
case-06 | pass→pass | 14,398 | 6,718 | -53% | 1 | 1 | 0% | 2,441 | 2,813 | +15% | 0 | 0 | — |
case-07 | fail→fail | 23,634 | 7,190 | -70% | 1 | 1 | 0% | 2,183 | 2,904 | +33% | 0 | 0 | — |
case-08 | pass→pass | 10,807 | 5,225 | -52% | 1 | 1 | 0% | 1,524 | 2,493 | +64% | 0 | 0 | — |
case-09 | fail→pass | 10,478 | 2,457 | -77% | 1 | 1 | 0% | 2,137 | 1,995 | -7% | 0 | 0 | — |
case-10 | pass→pass | 9,389 | 3,292 | -65% | 1 | 1 | 0% | 1,819 | 2,094 | +15% | 0 | 0 | — |
case-11 | fail→pass | 6,850 | 3,070 | -55% | 1 | 1 | 0% | 1,226 | 2,100 | +71% | 0 | 0 | — |
case-12 | pass→pass | 10,934 | 2,675 | -76% | 1 | 1 | 0% | 2,091 | 2,021 | -3% | 0 | 0 | — |
case-13 | pass→pass | 3,661 | 1,791 | -51% | 1 | 1 | 0% | 701 | 1,794 | +156% | 0 | 0 | — |
case-18 | fail→fail | 5,440 | 2,826 | -48% | 1 | 1 | 0% | 897 | 1,948 | +117% | 0 | 0 | — |
case-14 | pass→pass | 12,780 | 4,884 | -62% | 1 | 1 | 0% | 2,249 | 2,411 | +7% | 0 | 0 | — |
case-15 | pass→pass | 7,014 | 2,889 | -59% | 1 | 1 | 0% | 1,344 | 2,055 | +53% | 0 | 0 | — |
case-16 | pass→pass | 4,192 | 1,401 | -67% | 1 | 1 | 0% | 689 | 1,709 | +148% | 0 | 0 | — |
case-17 | fail→pass | 8,201 | 2,670 | -67% | 1 | 1 | 0% | 1,594 | 1,975 | +24% | 0 | 0 | — |
case-19 | pass→pass | 6,474 | 3,016 | -53% | 1 | 1 | 0% | 1,163 | 2,022 | +74% | 0 | 0 | — |
case-20 | pass→pass | 8,074 | 5,589 | -31% | 1 | 1 | 0% | 1,564 | 2,678 | +71% | 0 | 0 | — |
case-21 | pass→pass | 14,066 | 10,132 | -28% | 1 | 1 | 0% | 2,860 | 3,592 | +26% | 0 | 0 | — |
case-22 | pass→pass | 16,683 | 14,328 | -14% | 1 | 1 | 0% | 2,887 | 4,231 | +47% | 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. The headline lift of +27 percentage points is the difference between those two pass rates over the 22 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 | +27% |
Other measured skills in the registry, with their headline benchmark lift.