Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Query the QuickGO and Evidence & Conclusion Ontology (ECO) REST API. Use this when you need to map genes to biological processes, molecular functions, or cellular components, find genes associated with a specific pathway/GO term, or explore the Gene Ontology hierarchy. Do not use for querying drug targets (use OpenTargets) or mechanistic signaling pathway diagrams (use KEGG).
.claude/skills/mkurman-quickgo-database/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 56% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 26% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 122% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 92% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 36% | 0% |
GO (Gene Ontology) annotations are one of the main ways to label a gene's function. QuickGO is a fast, web-based browser for the GO and Evidence & Conclusion Ontology (ECO), maintained by the Gene Ontology Annotation (GOA) group at EMBL-EBI.
It provides a centralised resource to explore the functional attributes of gene products (proteins, RNA, and complexes). It is a primary tool for functional annotation mapping since it allows you to link a gene (e.g., USH2A) to its specific biological processes (e.g. sensory perception of light stimulus), molecular functions, and cellular components.
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://www.ebi.ac.uk/QuickGO/ and https://www.ebi.ac.uk/QuickGO/api/index.html, then (2) create the file recording the notification text and timestamp.
This skill provides a Python CLI wrapper scripts/quickgo_tool.py that queries the QuickGO REST API. It handles formatting the requests, respecting rate limits, and safely storing the potentially large JSON responses.
database rather than accessing the database directly. The scripts automatically enforce the required rate limit gracefully.
page using --limit 100 and the --page parameter for larger datasets.
--output flag to save responses to a fileincrementally or parse via jq.
ECO:0000269) overelectronic (ECO:0000501) to avoid noisy predictions.
--taxonId 9606 to restrict results to Human whenanalysing clinical or human genomic data.
output.
The tool has four main subcommands:
go: For retrieving information about GO terms (e.g. definitions,ancestors, descendants, and slims). See references/go_terms.md.
annotation: For finding functional annotations linking gene productsto GO terms. This is your primary functional mapper. See references/annotations.md.
geneproduct: For resolving gene symbols (like PROC) to their formaldatabase identifiers. See references/gene_products.md.
eco: For Evidence & Conclusion Ontology terms (used in annotations toindicate how an annotation was derived, e.g. experimental vs electronic). See references/eco_terms.md.
To find out what a gene does, you must first resolve its symbol to a UniProtKB ID, and then query its annotations. Often it is best to filter for experimental evidence (e.g. ECO:0000269 for EXP, or others like IDA, IMP) to avoid noisy electronic predictions.
bash# Step 1: Find the UniProtKB ID for human (9606) gene PROC uv run scripts/quickgo_tool.py geneproduct search --query "PROC" --taxonId 9606 --limit 5 --output proc_id.json # (Look at proc_id.json, observe the ID is e.g., UniProtKB:P04070) # Step 2: Find experimental GO annotations for that ID uv run scripts/quickgo_tool.py annotation search --geneProductId "UniProtKB:P04070" --taxonId 9606 --evidenceCode "ECO:0000269" --limit 50 --output proc_annotations.json
To find all genes annotated to a specific GO term (e.g., GO:0003700 for "transcription factor activity"):
bash# Find human genes with this specific molecular function uv run scripts/quickgo_tool.py annotation search --goId "GO:0003700" --taxonId 9606 --limit 50 --output tf_genes.json
To check if a specific GO term is a descendant of a broader category, or to fetch its definition:
bash# Fetch term details (definitions, synonyms) uv run scripts/quickgo_tool.py go terms --ids "GO:0003150" --output term_details.json # Check ancestry (e.g., is GO:0001917 a child of something?) uv run scripts/quickgo_tool.py go terms --ids "GO:0001917" --relation ancestors --output term_ancestors.json
If you have a list of candidate genes and want a high-level functional summary, you can map them up to a predefined GO Slim. First, fetch the annotations for the genes to extract their GO IDs, then pass those IDs to the slim endpoint:
bash# Step 1: Find GO IDs for candidate genes (e.g., via their UniProt IDs, fetching their annotations) # ... (output yields e.g., GO:0006915,GO:0008219) # Step 2: Create a slim summary from those specific GO IDs uv run scripts/quickgo_tool.py go slim --slimsToIds "GO:0005575,GO:0008150,GO:0003674" --slimsFromIds "GO:0006915,GO:0008219" --output my_slim.json
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 13,948 | 8,010 | -43% | 1 | 1 | 0% | 1,219 | 1,967 | +61% | 0 | 0 | — |
case-02 | fail→fail | 15,314 | 7,535 | -51% | 1 | 1 | 0% | 996 | 1,797 | +80% | 0 | 0 | — |
case-03 | fail→fail | 25,081 | 6,240 | -75% | 1 | 1 | 0% | 3,592 | 1,786 | -50% | 0 | 0 | — |
case-04 | fail→fail | 14,296 | 8,573 | -40% | 1 | 1 | 0% | 2,028 | 1,892 | -7% | 0 | 0 | — |
case-05 | fail→pass | 17,787 | 11,500 | -35% | 1 | 1 | 0% | 2,375 | 3,716 | +56% | 0 | 0 | — |
case-06 | fail→fail | 15,578 | 17,129 | +10% | 1 | 1 | 0% | 2,465 | 1,997 | -19% | 0 | 0 | — |
case-07 | fail→fail | 14,059 | 9,272 | -34% | 1 | 1 | 0% | 2,243 | 2,011 | -10% | 0 | 0 | — |
case-08 | fail→pass | 12,289 | 9,853 | -20% | 1 | 1 | 0% | 1,995 | 2,504 | +26% | 0 | 0 | — |
case-09 | fail→pass | 11,209 | 9,989 | -11% | 1 | 1 | 0% | 1,399 | 3,111 | +122% | 0 | 0 | — |
case-10 | fail→pass | 6,509 | 2,279 | -65% | 1 | 1 | 0% | 948 | 1,817 | +92% | 0 | 0 | — |
case-11 | pass→pass | 9,527 | 6,288 | -34% | 1 | 1 | 0% | 1,626 | 2,498 | +54% | 0 | 0 | — |
case-12 | pass→pass | 14,585 | 21,800 | +49% | 1 | 1 | 0% | 2,216 | 4,318 | +95% | 0 | 0 | — |
case-13 | fail→pass | 10,483 | 4,958 | -53% | 1 | 1 | 0% | 1,628 | 2,221 | +36% | 0 | 0 | — |
case-14 | pass→pass | 7,814 | 12,056 | +54% | 1 | 1 | 0% | 1,227 | 3,235 | +164% | 0 | 0 | — |
case-15 | pass→fail | 6,784 | 11,642 | +72% | 1 | 1 | 0% | 1,246 | 1,856 | +49% | 0 | 0 | — |
case-16 | fail→pass | 12,586 | 11,503 | -9% | 1 | 1 | 0% | 2,205 | 2,709 | +23% | 0 | 0 | — |
case-17 | fail→pass | 12,225 | 8,138 | -33% | 1 | 1 | 0% | 2,006 | 3,029 | +51% | 0 | 0 | — |
case-18 | fail→pass | 5,062 | 2,169 | -57% | 1 | 1 | 0% | 776 | 1,746 | +125% | 0 | 0 | — |
case-19 | pass→fail | 12,013 | 7,828 | -35% | 1 | 1 | 0% | 2,204 | 1,798 | -18% | 0 | 0 | — |
case-20 | pass→pass | 11,911 | 13,305 | +12% | 1 | 1 | 0% | 2,291 | 3,927 | +71% | 0 | 0 | — |
case-21 | pass→pass | 16,396 | 17,259 | +5% | 1 | 1 | 0% | 2,322 | 3,186 | +37% | 0 | 0 | — |
case-22 | pass→pass | 5,682 | 7,599 | +34% | 1 | 1 | 0% | 926 | 2,625 | +183% | 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 14 counted toward the lift figure. The other 8 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 +27 percentage points is the difference between those two pass rates over the 14 comparable cases. 2 cases got worse with the skill loaded, and they are 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.