Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Transcription factor binding, cis-regulatory elements (cCREs), chromatin accessibility, and regulatory annotation using JASPAR (motifs), ENCODE (cCREs, ChIP-seq), RegulomeDB (regulatory variant scoring), UCSC. Use for regulatory element annotation, TF-binding-site prediction, and regulatory-region functional impact assessment.
.claude/skills/tooluniverse-regulatory-genomics/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-18 | ✗→✓ | ▲ Improved | 239% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 456% | 0% |
| case-04 | ✓→✗ | ▼ Worse | 109% | 0% |
| case-05 | ✓→✗ | ▼ Worse | 143% | 0% |
| case-08 | ✓→✗ | ▼ Worse | 163% | 0% |
Systematic investigation of gene regulation through transcription factor binding, chromatin state, and regulatory element annotation. Integrates JASPAR (TF motifs), ENCODE (functional genomics experiments), RegulomeDB (regulatory variant scoring), and UCSC cCREs.
Regulatory element identification requires converging lines of evidence: sequence conservation alone is insufficient (many conserved sequences are not regulatory), chromatin accessibility is necessary but not sufficient (open chromatin can be structural), TF binding peaks require motif validation, and eQTL evidence ties the element to a transcriptional outcome. No single data type is sufficient. A high-confidence regulatory element requires at least two independent evidence types, and ideally all four.
jaspar_search_matrices and jaspar_get_matrix; do not describe motifs from memory.ENCODE_search_experiments; do not assume a TF has been profiled in a given cell type.UCSC_get_encode_cCREs with exact coordinates; do not guess element types.RegulomeDB_query_variant; never estimate regulatory importance from position alone.KEY PRINCIPLES:
When analysis requires computation (statistics, data processing, scoring, enrichment), write and run Python code via Bash. Don't describe what you would do — execute it and report actual results. Use ToolUniverse tools to retrieve data, then Python (pandas, scipy, statsmodels, matplotlib) to analyze it.
| Tool | Purpose | Key Params | |------|---------|-----------| | jaspar_search_matrices | Find TF binding motifs by TF name or organism | name, species, collection, tax_id | | jaspar_get_matrix | Get full PWM/PFM for a specific JASPAR matrix | matrix_id (e.g., "MA0139.1") | | JASPAR_get_transcription_factors | List all TF matrices (paginated) | page, page_size | | UniBind_search_datasets | Find curated, experimentally-derived direct TF-DNA binding-site datasets | tf_name, species, cell_line, collection (Robust/Permissive) | | UniBind_get_dataset | Get binding-site detail for one UniBind dataset (JASPAR motifs, score/CentriMo thresholds, BED/FASTA URLs) | dataset_id | | UniBind_list_tfs | List/filter TFs profiled in UniBind | search (substring), limit | | ENCODE_search_experiments | Search ENCODE ChIP-seq/ATAC-seq/WGBS experiments | assay_title, target, biosample_term_name, limit | | ENCODE_search_histone_experiments | Search histone mark ChIP-seq specifically | histone_mark, biosample_term_name, limit | | ENCODE_search_chromatin_accessibility | Search ATAC-seq/DNase-seq experiments | biosample_term_name, limit | | ENCODE_get_experiment | Get full metadata for a specific ENCODE experiment | accession (e.g., "ENCSR000EGM") | | ENCODE_search_annotations | Search ENCODE cCRE and chromatin state annotations | annotation_type, biosample_term_name, limit | | ENCODE_get_chromatin_state | Search ChromHMM segmentation data | biosample_term_name, limit | | UCSC_get_encode_cCREs | Get cCREs overlapping a genomic region | chrom, start, end | | RegulomeDB_query_variant | Score regulatory impact of a variant | rsid (e.g., "rs4994") | | ENCODE_search_biosamples | Find available cell lines/tissues in ENCODE | term_name, biosample_type, limit |
The tools above tell you what is known to be at a locus (databases). These models instead predict regulatory activity directly from the DNA sequence, and — by scoring a reference vs. alternate window — predict what a non-coding variant does. RegulomeDB ranks a variant by overlap with existing annotations; these give a quantitative, tissue-aware effect size even for novel variants with no annotation. Reach for them when annotation is silent or when the question is "how much does this allele change regulation".
| Tool | Op | Predicts | Context | Access | |------|----|----------|---------|--------| | AlphaGenome_atlas_lookup_variant / AlphaGenome_atlas_scan_interval | precomputed lookup: one SNV / every SNV in a region | unified AVI_SCORE (AlphaGenome + AlphaMissense) + per-track scores, no live model run | up to 10 kb per scan | hosted API — ALPHA_GENOME_API_KEY (much higher query rate than the live ops below) | | AlphaGenome_predict_interval / AlphaGenome_score_variant / AlphaGenome_score_ism_variants | profile region / score variant / saturation-mutagenesis scan | RNA-seq, ATAC, CAGE, splice tracks (frontier accuracy, single-base); ISM ranks every substitution in a ≤500 bp window by effect — good for "which base in this element matters" | up to 1 Mb (ISM window ≤500 bp) | hosted API — ALPHA_GENOME_API_KEY | | run_enformer_predict / run_enformer_variant_effect | profile / score | 5,313 human (+1,643 mouse) tracks: expression, chromatin, TF binding | 196 kb | remote MCP server | | run_borzoi_predict / run_borzoi_variant_effect | profile / score | RNA-seq coverage (expression / polyA / splicing emphasis), 7,611 tracks | 524 kb | remote MCP server | | run_chrombpnet_predict / run_chrombpnet_variant_effect | profile / score | chromatin accessibility (ATAC / DNase), base-resolution profile + counts | ~2 kb | remote MCP server | | Evo2_score_variant | score | genome-foundation-model delta log-likelihood; coding and non-coding | up to 1 Mb | hosted NIM — NVIDIA_API_KEY | | gi_* (opt-in, GENOMIC_INTELLIGENCE_MCP_URL) | profile (6 tasks) + composite find-genes-then-predict | promoter, splice sites, enhancer activity, chromatin state, expression, gene annotation | — | public demo server, shared rate-limited quota, no key |
Picking one: for a known single-nucleotide variant, check AlphaGenome_atlas_lookup_variant (or atlas_scan_interval for a whole region) first — it's a precomputed database read covering all ~9B possible human SNVs, far cheaper than a live call, and its AVI_SCORE already fuses AlphaGenome's regulatory signal with AlphaMissense's coding-impact model into one number. Fall back to the live AlphaGenome_* operations for indels, custom/synthetic sequences, or full per-track detail (predict_variant/predict_sequence/score_interval are also available for raw-track and no-variant use cases); run_enformer_* / run_borzoi_* are the published, self-hostable equivalents (Enformer for general regulation, Borzoi when expression/splicing is the question); run_chrombpnet_* when the question is specifically chromatin accessibility; Evo2_score_variant as a sequence-only check that also covers coding variants. Outputs are Δ (alt − ref) effect sizes, not calibrated probabilities (except AVI_SCORE, which is a unified impact score) — rank/calibrate against known variants. If no key/server is provisioned, fall back to the annotation tools above and say so.
When asked about TF binding motifs or what TFs might regulate a gene:
1. jaspar_search_matrices(name="TF_NAME", species="Homo sapiens")
-> Returns list of matrices with matrix_id, collection, version
2. jaspar_get_matrix(matrix_id="MA0139.1")
-> Returns full PFM/PWM matrix, sequence logo URL, binding sites URL
3. For broad TF family search:
jaspar_search_matrices(species="Homo sapiens", collection="CORE")
-> Filter by TF family name in resultsJASPAR Collections:
CORE: High-quality, non-redundant matrices (best for most use cases)CNE: Conserved non-coding elementsPOLII: RNA Pol II binding sitesKey Response Fields:
matrix_id: Versioned ID (e.g., "MA0139.1") — use for jaspar_get_matrixname: TF gene symbolsequence_logo: URL to binding site logo PNG/SVGcollection: Which JASPAR collectionJASPAR gives the motif model; UniBind gives curated, experimentally-derived direct binding sites (motif-anchored, base-pair resolution, per ChIP-seq experiment via the DAMO/ChIP-eat pipeline). Use it to find which experiments support binding for a TF and to get downloadable BED/FASTA of the sites — a middle layer between JASPAR motifs and raw ChIP-seq peaks.
# Find curated binding-site datasets for a TF (filters compose)
tu.run_tool("UniBind_search_datasets",
{"tf_name": "CTCF", "species": "Homo sapiens",
"collection": "Robust", "page_size": 5})
# -> list of {tf_name, total_peaks, dataset_id, dataset_url}
# Full binding-site detail for one dataset
tu.run_tool("UniBind_get_dataset",
{"dataset_id": "EXP030726.neural_stem_cells.SMAD3"})
# -> tf_name, cell_line, jaspar_id[], tfbs_models[] each with
# jaspar_id, total_tfbs, score_threshold, adj_centrimo_pvalue,
# bed_url, fasta_url, summary_plot_url
# Discover valid tf_name values (search is client-side substring)
tu.run_tool("UniBind_list_tfs", {"search": "SMAD"}) # -> [SMAD2, SMAD3, SMAD4]Notes: species is the scientific name ('Homo sapiens', not a taxid); collection is 'Robust' (high-confidence) or 'Permissive'; public, no API key.
When looking for ChIP-seq, ATAC-seq, or other functional genomics data:
For TF ChIP-seq:
ENCODE_search_experiments(
assay_title="TF ChIP-seq",
target="CTCF", # TF gene name
biosample_term_name="HepG2", # Cell line or tissue
limit=10
)For histone marks:
ENCODE_search_histone_experiments(
histone_mark="H3K27ac", # or H3K4me3, H3K27me3, H3K36me3
biosample_term_name="liver",
limit=10
)For chromatin accessibility:
ENCODE_search_chromatin_accessibility(
biosample_term_name="T cell",
limit=10
)For regulatory annotations (cCREs, ChromHMM):
ENCODE_search_annotations(
annotation_type="candidate Cis-Regulatory Elements",
biosample_term_name="K562",
limit=10
)Common assay_title values:
"TF ChIP-seq" - Transcription factor binding"Histone ChIP-seq" - Histone modification"ATAC-seq" - Chromatin accessibility"DNase-seq" - Open chromatin (older method)"WGBS" - DNA methylationNote: ENCODE_search_experiments returns experiment metadata only (accession, biosample, status). Use ENCODE_get_experiment(accession) to get file download links and detailed metadata.
When annotating a specific genomic region:
UCSC_get_encode_cCREs(
chrom="chr8", # Chromosome (GRCh38)
start=37966000, # Start coordinate
end=37967000 # End coordinate
)
# Returns cCREs with type: pELS (proximal enhancer), dELS (distal enhancer),
# PLS (promoter-like), CTCF-only, DNase-H3K4me3cCRE Types:
When assessing regulatory impact of a variant:
RegulomeDB_query_variant(rsid="rs4994")
# Returns:
# regulome_score.ranking: "1a"-"7" (1a = highest regulatory evidence)
# regulome_score.probability: 0-1 continuous score
# tissue_specific_scores: dict of tissue -> score
# overlapping features: eQTLs, TF binding, DNase peaks, motifsRegulomeDB Score Interpretation: | Rank | Meaning | |------|---------| | 1a | eQTL + TF binding + matched TF motif + DNase peak | | 1b | eQTL + TF binding + DNase peak | | 1c | eQTL + TF binding or DNase peak | | 1d | eQTL + motif or protein binding | | 1e | eQTL + motif hit | | 1f | eQTL only | | 2a | TF binding + motif match + DNase | | 2b | TF binding + matched motif | | 2c | TF binding with/without motif | | 3a | DNase peak + motif | | 3b | DNase peak only | | 4 | Motif hit only | | 5 | Proximity to Footprint | | 6 | Proximity to Footprint + TF | | 7 | No evidence |
Variants with rank 1a-2b are most likely to affect gene regulation.
| Tool | Required Params | Optional Params | Notes | |------|----------------|-----------------|-------| | jaspar_search_matrices | (none — returns all if empty) | name, species, collection, tax_id, page, page_size | Use name for TF name search | | jaspar_get_matrix | matrix_id | — | Full version required: "MA0139.1" not "MA0139" | | JASPAR_get_transcription_factors | (none) | page, page_size | Paginated; default page_size=10 | | jaspar_get_matrix_versions | base_id | — | base_id is unversioned (e.g., "MA0139") | | ENCODE_search_experiments | (none — returns all if empty) | assay_title, target, biosample_term_name, limit | assay_title must match ENCODE vocabulary exactly | | ENCODE_search_histone_experiments | (none) | histone_mark, biosample_term_name, limit | histone_mark: "H3K27ac", "H3K4me3", etc. | | ENCODE_search_chromatin_accessibility | (none) | biosample_term_name, limit | Returns ATAC-seq and DNase-seq | | ENCODE_get_experiment | accession | — | accession: "ENCSR..." format | | ENCODE_search_annotations | (none) | annotation_type, biosample_term_name, limit | annotation_type: "candidate Cis-Regulatory Elements" | | ENCODE_get_chromatin_state | (none) | biosample_term_name, limit | Returns ChromHMM segmentation | | ENCODE_search_biosamples | (none) | term_name, biosample_type, limit | biosample_type: "cell line", "tissue", "primary cell" | | UCSC_get_encode_cCREs | chrom, start, end | — | Coordinates in GRCh38; chrom format: "chr1" | | RegulomeDB_query_variant | rsid | — | rsid format: "rs4994" (with rs prefix) |
Goal: Find where TF X binds and what motif it recognizes
Flow:
1. jaspar_search_matrices(name="CTCF") -> get matrix_id
2. jaspar_get_matrix(matrix_id) -> get full PWM, logo URL
3. ENCODE_search_experiments(assay_title="TF ChIP-seq", target="CTCF") -> experimental binding data
4. For specific tissue: add biosample_term_name="HepG2"
Output: Motif logo + experimental binding evidenceGoal: Assess if variant rs1234567 affects gene regulation
Flow:
1. RegulomeDB_query_variant(rsid="rs1234567") -> score + overlapping features
2. If score <= 2b: ENCODE_search_experiments(target=overlapping_TF) -> experimental evidence
3. UCSC_get_encode_cCREs(chrom, start, end) -> check if variant in known cCRE
Output: Regulatory score + supporting evidence + cCRE contextGoal: Characterize active enhancers in a cell type
Flow:
1. ENCODE_search_histone_experiments(histone_mark="H3K27ac", biosample_term_name="K562") -> active enhancers
2. ENCODE_search_chromatin_accessibility(biosample_term_name="K562") -> open chromatin
3. ENCODE_search_annotations(annotation_type="candidate Cis-Regulatory Elements", biosample_term_name="K562")
4. ENCODE_get_chromatin_state(biosample_term_name="K562") -> ChromHMM states
Output: Active regulatory elements specific to the cell typeGoal: Find all regulatory elements near a gene
Flow:
1. Get gene coordinates from MyGene_query_genes or ensembl_lookup_gene
2. UCSC_get_encode_cCREs(chrom, start-50000, end+50000) -> nearby cCREs
3. ENCODE_search_experiments(target=TF_OF_INTEREST) -> TF binding data
4. jaspar_search_matrices(name=TF_NAME) -> motif for TF
Output: Map of regulatory elements around gene with evidence types| Primary Tool | Fallback | When | |-------------|----------|------| | ENCODE_search_experiments with specific biosample | Remove biosample_term_name filter | No results for specific tissue | | jaspar_search_matrices(name=TF) | jaspar_search_matrices(name=TF_family) | TF not found by exact name | | UCSC_get_encode_cCREs | ENCODE_search_annotations without coordinates | If coordinates unknown | | RegulomeDB_query_variant(rsid) | Use ENCODE_search_experiments + JASPAR to manually assess overlap | rsid not in RegulomeDB |
assay_title="TF ChIP-seq" uses ENCODE's exact controlled vocabulary — avoid "ChIP-seq" (too general)@graph field may be empty if query filters are too restrictive; relax filters and retry| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-20 | pass→pass | 17,887 | 16,915 | -5% | 1 | 1 | 0% | 2,934 | 8,116 | +177% | 0 | 0 | — |
case-01 | fail→fail | 17,518 | 5,674 | -68% | 1 | 1 | 0% | 3,179 | 5,303 | +67% | 0 | 0 | — |
case-15 | pass→pass | 6,631 | 5,130 | -23% | 1 | 1 | 0% | 1,176 | 5,910 | +403% | 0 | 0 | — |
case-02 | fail→fail | 21,218 | 7,557 | -64% | 1 | 1 | 0% | 3,714 | 5,341 | +44% | 0 | 0 | — |
case-03 | fail→fail | 19,355 | 6,971 | -64% | 1 | 1 | 0% | 3,632 | 5,492 | +51% | 0 | 0 | — |
case-04 | pass→fail | 15,317 | 11,966 | -22% | 1 | 1 | 0% | 2,735 | 5,726 | +109% | 0 | 0 | — |
case-05 | pass→fail | 13,566 | 9,430 | -30% | 1 | 1 | 0% | 2,294 | 5,576 | +143% | 0 | 0 | — |
case-06 | fail→fail | 9,719 | 32,021 | +229% | 1 | 1 | 0% | 1,731 | 5,408 | +212% | 0 | 0 | — |
case-07 | fail→fail | 12,346 | 8,342 | -32% | 1 | 1 | 0% | 2,071 | 5,374 | +159% | 0 | 0 | — |
case-08 | pass→fail | 11,996 | 7,258 | -39% | 1 | 1 | 0% | 2,100 | 5,526 | +163% | 0 | 0 | — |
case-09 | pass→pass | 11,396 | 11,700 | +3% | 1 | 1 | 0% | 2,157 | 7,199 | +234% | 0 | 0 | — |
case-10 | pass→pass | 5,629 | 14,297 | +154% | 1 | 1 | 0% | 1,203 | 6,666 | +454% | 0 | 0 | — |
case-11 | pass→fail | 15,430 | 6,721 | -56% | 1 | 1 | 0% | 2,473 | 5,545 | +124% | 0 | 0 | — |
case-12 | pass→pass | 8,773 | 6,163 | -30% | 1 | 1 | 0% | 1,463 | 6,284 | +330% | 0 | 0 | — |
case-13 | pass→pass | 10,545 | 7,540 | -28% | 1 | 1 | 0% | 1,904 | 6,412 | +237% | 0 | 0 | — |
case-14 | pass→pass | 24,835 | 3,926 | -84% | 1 | 1 | 0% | 5,233 | 5,723 | +9% | 0 | 0 | — |
case-16 | fail→fail | 12,343 | 3,475 | -72% | 1 | 1 | 0% | 2,148 | 5,582 | +160% | 0 | 0 | — |
case-17 | fail→fail | 4,628 | 5,648 | +22% | 1 | 1 | 0% | 903 | 5,438 | +502% | 0 | 0 | — |
case-18 | fail→pass | 8,792 | 4,084 | -54% | 1 | 1 | 0% | 1,711 | 5,797 | +239% | 0 | 0 | — |
case-19 | fail→pass | 6,239 | 5,079 | -19% | 1 | 1 | 0% | 1,074 | 5,976 | +456% | 0 | 0 | — |
case-21 | pass→pass | 8,678 | 9,634 | +11% | 1 | 1 | 0% | 1,696 | 6,125 | +261% | 0 | 0 | — |
case-22 | pass→fail | 14,011 | 7,074 | -50% | 1 | 1 | 0% | 1,552 | 5,560 | +258% | 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 11 counted toward the lift figure. The other 11 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 -14 percentage points is the difference between those two pass rates over the 11 comparable cases. 6 cases got worse with the skill loaded, and they are included in that figure.
The publisher has shipped newer versions since this run, so these numbers describe v2, not the version currently listed.
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/27/2026 | +18% |
Other measured skills in the registry, with their headline benchmark lift.