OTO
tutorials

Your vocabulary becomes a pack

A vocabulary designed for one project is the starting point for the next. This tutorial takes the claims project from the complete tutorial, records its vocabulary, exports it as an ontology, wraps it in a pack, and shows what a colleague types to start from it.

Acceptthe vocabulary is the baseline; every class has a reason and a name
→
Exportan ontology: vocabulary, rules, reasoning; an invented sample; confirmations blanked
→
Packthe ontology embedded, a start skill, your skills and views
→
Publisha tag in a registry; a Claude Code marketplace entry
→
Install/plugin install @; the start skill begins a project
From one project's vocabulary to the next team's starting point.

1. Record the baseline

oto ontology accept --project claims
oto ontology rationale --project claims
accepted vocabulary version 1 (17 classes, 27 relations, 1 rules)
wrote ontology.lock.json
recorded reasoning: 17 of 17 class(es), 5 relation(s)
confirmed by a named person: 0 class(es), 0 relation(s)

17 class(es) have no `validated_by`. Until a person who knows the domain fills
that in, the model is a draft. Leave it empty rather than guessing.
accept

writes the lock so every later change is diffed against it. rationale reports whether each class has a recorded reason and who confirmed it. A class without a confirmed reason is a draft; --strict refuses until every class has both, which is what a team gate should use.

2. Export it as an ontology

oto ontology export --project claims --name meridian-claims \
    --summary "Claims as Meridian handles them, with total loss settlement"
wrote ontology 'meridian-claims' to ~/.oto/ontologies/meridian-claims
  self-check clean. Use it with: oto init --ontology meridian-claims
  The sample is invented, one node per class. validated_by is empty:
  confirmation does not carry to a new domain.

The export carries the vocabulary, its rules and its recorded reasoning. It invents a sample graph so nothing from the source project leaks, and it blanks every confirmation, because an expert's sign-off in one company is not a sign-off in another. --from-graph 12 takes twelve real nodes as the sample instead, refused if the privacy scan finds personal data.

Try it before sharing it:

oto init --name "Try" --ontology meridian-claims --project try
oto build --project try

3. Wrap it in a pack

A pack is what a person installs into Claude Code: the ontology, embedded with what it extends, the skills that know how to use it, and the views that show its graph.

oto pack new meridian-claims --ontology meridian-claims \
    --summary "Claims handling for a motor insurer" --maintainer "Claims operations"
oto pack check ~/.oto/packs/meridian-claims
wrote pack 'meridian-claims' to ~/.oto/packs/meridian-claims
  embeds the ontology meridian-claims@1
  wrote: .claude-plugin/plugin.json, skills/start/SKILL.md, README.md
  check clean.
meridian-claims/
  manifest.json                  name, release, domain, summary, the ontology it embeds
  .claude-plugin/plugin.json     the Claude Code plugin, depending on the engine plugin
  ontology/meridian-claims/      the ontology, with its bases embedded
  skills/start/SKILL.md          starts a project from the installed copy
  views/                         yours, if the domain deserves its own page

Add skills beside start for the judgment your domain needs, and a view if the explorer is not the right face for it. oto pack check validates the whole thing, and oto pack refresh re-embeds the ontology when you release a newer one.

4. Publish it to a registry

oto pack publish --to https://github.com/<org>/oto-registry --note "first cut"

The registry is a git repository. The first publish creates its index and its marketplace; every publish tags a release, meridian-claims--v1.0.0, and refuses if the publishability scan finds a deny term. A company runs a private registry; the public catalog is one registry among them.

5. What a colleague types

In Claude Code:

/plugin marketplace add <org>/oto-registry
/plugin install meridian-claims@<org>

The pack installs, and the engine plugin with it. The pack's start skill begins a project from the installed copy. At a terminal, the same two lines are:

oto registry add https://github.com/<org>/oto-registry
oto pack add meridian-claims
oto init --name "Meridian Claims EU" --pack meridian-claims --project claims-eu

The new project remembers where its ontology came from. When you publish release 2, oto status in that project says so, oto ontology diff classifies the change and counts the nodes it touches, and oto ontology update brings it.