Running ODK commands in this repo
SkillDev toolsUse when running any ODK-backed command in this repo — owltools, robot, make NORM,
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 Running ODK commands in this repo skill
What this skill tells your AI
The instructions your AI receives, as published by monarch-initiative/mondo in .claude/skills/odk/SKILL.md and read by ahel’s review.
TL;DR
src/ontology/run.sh is the official wrapper, but it ends in docker run -ti so it fails silently in any non-TTY context (Claude Code, CI, non-interactive shells) with the input device is not a TTY and exits without running the command.
If you have a TTY, prefer run.sh. If you don't, call docker directly with -i only.
When you have a TTY (interactive terminal)
cd src/ontology && sh run.sh <command> <args...>
Examples:
sh run.sh make NORM
sh run.sh owltools --use-catalog mondo-edit.obo --obsolete-replace MONDO:A MONDO:B -o -f obo mondo-edit.obo
sh run.sh robot verify --catalog catalog-v001.xml -i mondo-edit.obo --queries ../sparql/qc/general/qc-foo.sparql -O reports/
When you don't have a TTY (Claude Code, CI, scripts)
Symptom: sh run.sh <anything> prints the input device is not a TTY and exits with no further output, no file changes.
Workaround — invoke docker directly using the same image and mounts as run.sh, but with -i only:
docker run --memory=8g \
-v /ABSOLUTE/PATH/TO/REPO:/work \
-w /work/src/ontology \
-e ROBOT_JAVA_ARGS=-Xmx8G -e JAVA_OPTS=-Xmx8G \
--rm -i obolibrary/odkfull:<TAG-FROM-RUN.SH> \
<command> <args...>
Where:
/ABSOLUTE/PATH/TO/REPO= the repo root (the parent ofsrc/).<TAG-FROM-RUN.SH>= whatever tag is set inIMAGE=insrc/ontology/run.sh. Always readrun.shfirst to look up the current tag — do not hardcodev1.6or any other version.
Reading the right image tag
Don't memorize the version. The line in run.sh is the source of truth:
grep '^IMAGE=' src/ontology/run.sh
# IMAGE=${IMAGE:-odkfull:v1.6}
Common ODK commands you'll need
| What | Command body (after run.sh or after the docker run ... -i obolibrary/odkfull:<TAG> prefix) |
|---|---|
| Normalize edit file | make NORM then mv NORM mondo-edit.obo (run from src/ontology) |
| Convert / syntax check | robot convert --catalog catalog-v001.xml -i mondo-edit.obo -f obo -o mondo-edit.TMP.obo |
| Run a QC query | robot verify --catalog catalog-v001.xml -i mondo-edit.obo --queries ../sparql/qc/general/qc-X.sparql -O reports/ |
| Merge / obsolete with replacement | owltools --use-catalog mondo-edit.obo --obsolete-replace MONDO:A MONDO:B -o -f obo mondo-edit.obo |
Notes
- All ODK commands assume CWD is
src/ontology/. make NORMwrites to a file calledNORMinsrc/ontology/. You mustmv NORM mondo-edit.oboafterward.robot verifyexits non-zero on QC failures and writes one TSV per failing query under-O reports/. Empty exit +PASS Rule ... 0 violation(s)= clean.- If
run.shreportsthe input device is not a TTY, do not retry the same command — it will keep failing. Switch to the docker-direct invocation.
Signals
- GitHub stars
- 322
- Forks
- 65
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
odk- Source
- github.com/monarch-initiative/mondo