sciagent-skill-creator
Scaffold a new SciAgent-Skills entry. Picks pipeline/toolkit/database/guide template, creates skills/{category}/{name}/SKILL.md…
Query ChEMBL (2M+ compounds, 19M+ bioactivity measurements, 13K+ targets) via the public REST/JSON API with plain `requests` — no SDK install required. Search compounds, retrieve IC50/Ki/EC50 bioactivities, find target inhibitors, run SAR, access drug mechanism/indication data.
Claude Code
$ npx -y skills add jaechang-hits/SciAgent-Skills --skill chembl-database-bioactivity --agent claude-code
Codex
$ npx skills add jaechang-hits/SciAgent-Skills --skill chembl-database-bioactivity -a codex -y
Cursor
$ npx skills add jaechang-hits/SciAgent-Skills --skill chembl-database-bioactivity -a cursor -y
Gemini CLI
$ npx skills add jaechang-hits/SciAgent-Skills --skill chembl-database-bioactivity -a gemini-cli -y
GitHub Copilot
$ npx skills add jaechang-hits/SciAgent-Skills --skill chembl-database-bioactivity -a github-copilot -y
OpenCode
$ npx skills add jaechang-hits/SciAgent-Skills --skill chembl-database-bioactivity -a opencode -y
Windsurf
$ npx skills add jaechang-hits/SciAgent-Skills --skill chembl-database-bioactivity -a windsurf -y
name: chembl-database-bioactivity
description: Query ChEMBL (2M+ compounds, 19M+ bioactivity measurements, 13K+ targets) via the public REST/JSON API with plain `requests` — no SDK install required. Search compounds, retrieve IC50/Ki/EC50 bioactivities, find target inhibitors, run SAR, access drug mechanism/indication data.
license: CC-BY-SA-3.0
metadata:
quick_use: 'one compound: GET https://www.ebi.ac.uk/chembl/api/data/molecule.json?pref_name__iexact={INN} -> molecules[0].molecule_chembl_id (empty list if unknown). molecule/search.json?q= ranks salts and analogs first (osimertinib -> the mesylate CHEMBL3545063 before the parent CHEMBL3353410); for a brand or salt name, search and report molecule_hierarchy.parent_chembl_id. EBI intermittently returns a 500 HTML page: retry once after a few seconds. Cite https://www.ebi.ac.uk/chembl/explore/compound/{ID}'> **Why no SDK?** The `chembl_webresource_client` package is convenient sugar over a public, no-auth REST/JSON API at `https://www.ebi.ac.uk/chembl/api/data/`. When the SDK is unavailable, every operation can be reproduced with plain `requests` and URL parameters. This SKILL.md uses the REST path throughout so the code runs in any environment with `requests` installed. Django-style filter syntax (`field__icontains=…`, `field__lte=…`, `field__range=a,b`) works as URL query parameters.
ChEMBL is EMBL-EBI's bioactive molecule database: 2M+ compounds, 19M+ bioactivity measurements (IC50, Ki, EC50, Kd, …), 13K+ targets. The REST API at `https://www.ebi.ac.uk/chembl/api/data/` returns JSON (append `.json`) or XML/YAML, requires no authentication, and supports Django-style query filters via URL parameters plus cursor-style pagination via `page_meta.next`.
pip install requests # Optional, for DataFrame work: pip install pandas
import requests
BASE = "https://www.ebi.ac.uk/chembl/api/data"
# Retrieve a molecule by ChEMBL ID
r = requests.get(f"{BASE}/molecule/CHEMBL25.json", timeout=15)
r.raise_for_status()
aspirin = r.json()
print(f"{aspirin['pref_name']}: MW={aspirin['molecule_properties']['mw_freebase']}")
# ASPIRIN: MW=180.16
# Search targets by full name (acronyms like 'EGFR' don't match pref_name — use full term)
r = requests.get(
f"{BASE}/target.json",
params={"pref_name__icontains": "epidermal growth factor receptor",
"target_type": "SINGLE PROTEIN", "limit": 5},
timeout=15,
)
targets = r.json()["targets"]
print(f"EGFR-like targets: {len(targets)}, first={targets[0]['target_chembl_id']}")
# Potent bioactivities: EGFR (CHEMBL203) IC50 <= 100 nM
r = requests.get(
f"{BASE}/activity.json",
params={"target_chembl_id": "CHEMBL203",
"standard_type": "IC50",
"standard_value__lte": 100,
"standard_units": "nM",
"limit": 5},
timeout=30,
)
data = r.json()
print(f"EGFR IC50 ≤ 100 nM records: {data['page_meta']['total_count']}")The SDK's `field__operator=value` syntax maps 1:1 to URL query parameters. Use `&` to combine filters.
| Operator | URL pattern | Example URL fragment | |----------|-------------|----------------------| | `__exact` | `field=value` | `target_type=SINGLE+PROTEIN` | | `__iexact` | `field__iexact=value` | `pref_name__iexact=aspirin` | | `__contains` / `__icontains` | `field__icontains=value` | `pref_name__icontains=kinase` | | `__startswith` / `__endswith` | `field__startswith=Epi` | `pref_name__endswith=nib` | | `__gt` / `__gte` / `__lt` / `__lte` | `field__lte=100` | `standard_value__lte=100` | | `__range` | `field__range=lo,hi` | `molecule_properties__mw_freebase__range=300,500` | | `__in` | `field__in=a,b,c` | `standard_type__in=IC50,Ki,Kd` | | `__isnull` | `field__isnull=False` (Python `False`/`True` strings) | `pchembl_value__isnull=False` | | `__regex` | `field__regex=…` | `pref_name__regex=^EGF.*kinase$` | | `__search` | `field__search=…` | `description__search=apoptosis` |
When passed via `requests.get(..., params={...})`, the library handles URL encoding automatically (including the commas in `__range` and `__in`).
All endpoints accept `.json`, `.xml`, or `.yaml` suffix. JSON is the default below.
| Endpoint URL | Returns | Key fields | |--------------|---------|------------| | `/molecule/{chembl_id}.json` | Compound by ID | `pref_name`, `molecule_chembl_id`, `molecule_properties`, `molecule_structures` | | `/molecule.json?<filters>` | Compound search | paginated `molecules[]` | | `/target/{chembl_id}.json` | Target by ID | `pref_name`, `target_type`, `organism`, `target_components` | | `/target.json?<filters>` | Target search | paginated `targets[]` | | `/activity.json?<filters>` | Bioactivity records | paginated `activities[]` | | `/assay.json?<filters>` | Assay details | paginated `assays[]` | | `/drug.json?<filt
Turn your AI coding agent into a life sciences expert — 199 bioinformatics skills for Claude Code covering RNA-seq, single-cell analysis, genomics, proteomics, drug discovery, and more. Boosted BixBench from 65% to 92%. Open source.
Scaffold a new SciAgent-Skills entry. Picks pipeline/toolkit/database/guide template, creates skills/{category}/{name}/SKILL.md…
Bayesian modeling with PyMC 5: priors, likelihood, NUTS/ADVI sampling, diagnostics (R-hat, ESS), LOO/WAIC comparison, prediction.…
Time-to-event modeling with scikit-survival: Cox PH (elastic net), Random Survival Forests, Boosting, SVMs for censored data.…
Guided statistical analysis: test choice, assumption checks, effect sizes, power, APA reporting. Pick tests, verify assumptions,…
Python statistical modeling: regression (OLS, WLS, GLM), discrete (Logit, Poisson, NegBin), time series (ARIMA, SARIMAX, VAR),…
DL cell/nucleus segmentation for fluorescence and brightfield microscopy. Pre-trained models (cyto3, nuclei, tissuenet) and a…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.