When to use
SkillDev toolsFor working with any terms referencing chemical entities (CHEBI). CHEBI has some unusual properties that are counter-intuitive, so always use this skill to plan or check work that involves a chemical entity or CHEBI IDs, whether a new term, or significant alteration of existing terms
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the When to use skill
What this skill tells your AI
The instructions your AI receives, as published by geneontology/go-ontology in .claude/skills/chemical-entity/SKILL.md and read by ahel’s review.
- Find ChEBI IDs for chemical entities to use in GO term definitions
- Determine the correct protonation state for a chemical
- Understand chemical classification and parent classes
- Create biosynthetic process or metabolic process terms that reference chemicals
- Verify chemical cross-references
The general thing to keep in mind is that selecting the right CHEBI term is harder than it seems. Don't assume that the term with the most biologist-friendly label is the right one!
CRITICAL: Protonation State Selection (pH 7.3 Canonicalization)
For GO term logical definitions, ALWAYS prefer the major species at physiological pH (approximately 7.3).
- for chemicals with different protonation states, the ph7.3 form must be used
- for chemicals with different stereoisomers, the appropriate L or D form must be used (except in very rare cases where we want to be agnostic)
Exemplar term
id: GO:0005290
name: L-histidine transmembrane transporter activity
namespace: molecular_function
def: "Enables the transfer of L-histidine from one side of a membrane to the other. L-histidine is 2-amino-3-(1H-imidazol-4-yl)propanoic acid." [GOC:ai, GOC:mtg_transport, ISBN:0815340729]
synonym: "histidine/arginine/lysine/ornithine porter activity" NARROW []
synonym: "L-histidine transporter activity" BROAD []
is_a: GO:0015174 ! basic amino acid transmembrane transporter activity
intersection_of: GO:0022857 ! transmembrane transporter activity
intersection_of: has_primary_input CHEBI:57595 ! L-histidine zwitterion
relationship: part_of GO:0089709 ! L-histidine transmembrane transport
Corresponds to src/design_patterns/transmembrane_transport.yaml design pattern. Note that even if the user requested histidine we would have interpreted that to mean the L-form. Note also that there is a CHEBI term with the label "L-histidine" (CHEBI:15971), but this is not the ph7.3 form, we instead use the ph7.3 form. However, we retain the biologist friendly label.
Core Tool: OAK (Ontology Access Kit)
Basic ChEBI Lookup
The primary tool for ChEBI lookups is OAK with the sqlite adapter:
# Search by name (exact match)
runoak -i sqlite:obo:chebi info 'L-cysteine'
# Search by fuzzy match (any match)
runoak -i sqlite:obo:chebi info 'l~terpenoid'
# Search by prefix (starts with)
runoak -i sqlite:obo:chebi info 'l^glutam'
# Finds terms starting with "glutam"
7.3 mapping
Here is how we would obtain the correct term for L-histidine
runoak -i sqlite:obo:chebi info L-histidine
==> CHEBI:15971
Look this up
cd src/ontology && wget ftp://ftp.expasy.org/databases/rhea/tsv/chebi_pH7_3_mapping.tsv
grep '^15971\t' chebi_pH7_3_mapping.tsv
yields
15971 57595 computation
Check:
runoak -i sqlite:obo:chebi info CHEBI:57595
==> CHEBI:57595 ! L-histidine zwitterion
Signals
- GitHub stars
- 253
- Forks
- 47
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
chemical-entity- Source
- github.com/geneontology/go-ontology