Running ODK commands in this repo

SkillDev tools

Use when running any ODK-backed command in this repo — owltools, robot, make NORM,

Available today. Use it from your connected AI after setup.

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 of src/).
  • <TAG-FROM-RUN.SH> = whatever tag is set in IMAGE= in src/ontology/run.sh. Always read run.sh first to look up the current tag — do not hardcode v1.6 or 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

WhatCommand body (after run.sh or after the docker run ... -i obolibrary/odkfull:<TAG> prefix)
Normalize edit filemake NORM then mv NORM mondo-edit.obo (run from src/ontology)
Convert / syntax checkrobot convert --catalog catalog-v001.xml -i mondo-edit.obo -f obo -o mondo-edit.TMP.obo
Run a QC queryrobot verify --catalog catalog-v001.xml -i mondo-edit.obo --queries ../sparql/qc/general/qc-X.sparql -O reports/
Merge / obsolete with replacementowltools --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 NORM writes to a file called NORM in src/ontology/. You must mv NORM mondo-edit.obo afterward.
  • robot verify exits 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.sh reports the 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