Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Queries the UniBind database for experimentally validated transcription factor (TF) binding sites. Use when retrieving direct TF-DNA interaction datasets, downloading binding site coordinates (BED/FASTA) for local analysis, or listing available datasets by species, cell line, or TF name. Don't use to query specific intervals, locations, genes, motif models or expression data.
.claude/skills/mkurman-unibind-database/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-20 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-15 | ✓→✗ | ▼ Worse | 179% | 0% |
| case-22 | ✓→✓ | = Same ✓ | 87% | 0% |
| case-23 | ✓→✓ | = Same ✓ | 50% | 0% |
UniBind is a database of direct TF–DNA interactions across 9 species, integrating ChIP-seq peaks with JASPAR TF binding profiles via the DAMO framework.
uv: Read the uv skill and follow its Setup instructions to ensureuv is installed and on PATH.
this skill directory then (1) prominently notify the user to check the terms at https://unibind.uio.no/ and https://unibind.uio.no/api/overview, then (2) create the file recording the notification text and timestamp.
Query commands print JSON to stdout by default. Most outputs are small enough to read directly. For large outputs (list_cell_lines, list_tfs), pipe through jq to extract only the fields you need.
bashuv run <SKILL DIR>/scripts/unibind_api.py list_species
The download_tfbs command writes BED/FASTA files to --output-dir instead. You may optionally use --output <path> on any query command to save results to a file if needed.
database rather than accessing the database directly. The scripts automatically enforce the required rate limit gracefully.
and can be read directly.
list_cell_lines and list_tfs produce large output.Pipe these through jq to extract specific fields rather than reading the full output into context.
--output <path> when you need to reference thedata later or when processing very large results with jq.
--page and --page-size (max 1000) to chunk largeresult sets.
--order field_name (prefix with - for descending) onany list command.
output.
Replace <SKILL DIR> with the absolute path to this skill's directory.
bashuv run <SKILL DIR>/scripts/unibind_api.py list_species
bashuv run <SKILL DIR>/scripts/unibind_api.py list_collections
jp)These commands return large datasets. Use uvx --from jmespath jp to extract only the fields you need.
bashuv run <SKILL DIR>/scripts/unibind_api.py list_cell_lines | uvx --from jmespath jp "results[].name" uv run <SKILL DIR>/scripts/unibind_api.py list_tfs | uvx --from jmespath jp "results[].tf_name"
Filter datasets using the following arguments:
--species (e.g., "Homo sapiens")--tf-name (e.g., "CTCF")--cell-line (e.g., "mESC")--collection (e.g., Permissive, Robust)--search (a search term)--biological-condition (biological condition or source)--data-source (source of data, e.g., "ENCODE")--has-pvalue ("true" or "false")--identifier (e.g., "GSE60130")--jaspar-id (JASPAR database profile matrix ID)--model (prediction model)--summary (summary filter)--threshold-pvalue (p-value threshold)Use list_datasets for standard datasets, or list_specific_datasets for profile-specific queries.
bashuv run <SKILL DIR>/scripts/unibind_api.py list_datasets --species "Homo sapiens" --tf-name "CTCF" --data-source "ENCODE" uv run <SKILL DIR>/scripts/unibind_api.py list_specific_datasets --species "Mus musculus" --cell-line "mESC"
bashuv run <SKILL DIR>/scripts/unibind_api.py get_dataset "EXP047889.HMLE-Twist-ER_breast_cancer.SMAD3"
Downloads all TFBS files for a dataset to a local directory. Use --format bed (default) or --format fasta.
bashuv run <SKILL DIR>/scripts/unibind_api.py download_tfbs "EXP047889.HMLE-Twist-ER_breast_cancer.SMAD3" --output-dir /tmp/tfbs --format bed
intervals, locations, or genes.
ensembl-database as an external check if you're pulling local BED tracks for offline bedtools intersection.
instead.
cat to read large JSON output files into context. The outputis too large. Use jq or write your own code to parse the output files.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→fail | 18,200 | 5,061 | -72% | 1 | 1 | 0% | 3,356 | 1,648 | -51% | 0 | 0 | — |
case-01 | fail→fail | 12,385 | 5,418 | -56% | 1 | 1 | 0% | 693 | 1,681 | +143% | 0 | 0 | — |
case-03 | fail→fail | 11,622 | 5,319 | -54% | 1 | 1 | 0% | 2,070 | 1,714 | -17% | 0 | 0 | — |
case-04 | fail→fail | 6,301 | 5,104 | -19% | 1 | 1 | 0% | 348 | 1,671 | +380% | 0 | 0 | — |
case-05 | fail→fail | 11,002 | 5,500 | -50% | 1 | 1 | 0% | 1,456 | 1,714 | +18% | 0 | 0 | — |
case-06 | fail→fail | 10,487 | 5,617 | -46% | 1 | 1 | 0% | 1,857 | 1,825 | -2% | 0 | 0 | — |
case-07 | fail→fail | 17,927 | 4,824 | -73% | 1 | 1 | 0% | 2,700 | 1,695 | -37% | 0 | 0 | — |
case-08 | fail→fail | 12,193 | 4,690 | -62% | 1 | 1 | 0% | 2,126 | 1,617 | -24% | 0 | 0 | — |
case-09 | fail→fail | 8,415 | 5,870 | -30% | 1 | 1 | 0% | 1,393 | 1,576 | +13% | 0 | 0 | — |
case-10 | fail→fail | 12,300 | 4,891 | -60% | 1 | 1 | 0% | 2,101 | 1,615 | -23% | 0 | 0 | — |
case-11 | fail→fail | 14,478 | 4,970 | -66% | 1 | 1 | 0% | 2,576 | 1,651 | -36% | 0 | 0 | — |
case-12 | fail→fail | 10,974 | 5,727 | -48% | 1 | 1 | 0% | 2,129 | 1,740 | -18% | 0 | 0 | — |
case-13 | fail→fail | 5,004 | 5,976 | +19% | 1 | 1 | 0% | 874 | 1,724 | +97% | 0 | 0 | — |
case-14 | fail→fail | 5,426 | 4,968 | -8% | 1 | 1 | 0% | 1,000 | 1,602 | +60% | 0 | 0 | — |
case-15 | pass→fail | 4,119 | 8,082 | +96% | 1 | 1 | 0% | 771 | 2,148 | +179% | 0 | 0 | — |
case-16 | fail→fail | 13,106 | 5,269 | -60% | 1 | 1 | 0% | 2,225 | 1,655 | -26% | 0 | 0 | — |
case-17 | fail→fail | 13,290 | 3,874 | -71% | 1 | 1 | 0% | 2,081 | 1,566 | -25% | 0 | 0 | — |
case-18 | fail→fail | 12,840 | 4,296 | -67% | 1 | 1 | 0% | 2,276 | 1,635 | -28% | 0 | 0 | — |
case-19 | fail→fail | 9,844 | 5,738 | -42% | 1 | 1 | 0% | 1,833 | 1,683 | -8% | 0 | 0 | — |
case-20 | fail→pass | 11,519 | 7,987 | -31% | 1 | 1 | 0% | 2,174 | 2,947 | +36% | 0 | 0 | — |
case-21 | fail→pass | 11,417 | 4,778 | -58% | 1 | 1 | 0% | 2,052 | 2,312 | +13% | 0 | 0 | — |
case-22 | pass→pass | 8,896 | 8,471 | -5% | 1 | 1 | 0% | 1,520 | 2,845 | +87% | 0 | 0 | — |
case-23 | pass→pass | 7,892 | 4,655 | -41% | 1 | 1 | 0% | 1,368 | 2,054 | +50% | 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, and 4 counted toward the lift figure. The other 19 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 +4 percentage points is the difference between those two pass rates over the 4 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
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.
Other measured skills in the registry, with their headline benchmark lift.