AOE 0.2 · Agent Ontology Engine is out Read the update →

Agent Ontology Engine

Domain knowledge, made executable.

AOE compiles your domain model and knowledge into a versioned runtime. Agents and applications query it, get a plan they can inspect, and change state only through declared actions.

What you author, and how an agent reaches itsnapshot verified
Corpus packages
9
independently owned
Compiled units
933
with provenance
External types
28
declared by owners
Transports
3
SDK · MCP · HTTP

What AOE is

For domains that are more than a pile of documents.

AOE is useful once your domain has named things, relationships between them, retrieval you can predict, and operations that need to stay safe. You declare that domain in a package you own: the types and relations, the material released against them, and the actions an agent may request.

The engine compiles those declarations into an immutable snapshot and serves it. It fixes the declaration schema and the runtime contracts, and nothing else. There is no built-in list of business types to reuse, so a support model, a recipe model, and a compliance model all compile through the same path.

Read how selection works
A request from your application
{
  "corpus": "com.example/support",
  "query": "open incidents affecting the checkout service",
  "topK": 8,
  "projection": "core"
}
What comes back

A Selection Plan, which your application can log, diff, and test.

selected units
what matched, in load order
score contributions
why each unit ranked where it did
constraint decisions
which limits applied, and to what
relation expansion
which links were followed or excluded
projection loads
summary, core, or full, per unit
budget use
tokens spent against the request budget
snapshot identity
the exact release and digest that answered

The packages you own

A package tells AOE what your domain is.

Keep all four in one repository while you prototype, then publish them separately when different teams own the model, the data, or the providers.

How a request travels

From a declaration to a reliable action.

Scroll through the four boundaries a domain crosses inside the runtime.

  1. 01 / 04 Declare

    You write the vocabulary.

    The Model Package defines what a valid object and relationship look like. The Corpus Package supplies the objects and their sources. The engine reads both as data and holds no domain of its own.

    Input
    types · relations · units
    Owner
    your team
    Output
    declarations
  2. 02 / 04 Compile

    Declarations become a reproducible build.

    The compiler joins the model with each source unit and emits projections, an index, a manifest, and a model lock that pins the exact schema digest. The same input produces the same bytes.

    Checks
    schema · relation · licence
    Output
    unit artifacts + index
    Guarantee
    deterministic
  3. 03 / 04 Verify

    The runtime only loads complete snapshots.

    Snapshot identity binds model, corpus, release, and digest. The runtime recomputes identity and content before it serves anything, so a host can answer whether the release is the one its corpus expects and whether it arrived untampered.

    Identity
    tenant · corpus · release
    Proof
    manifest + content digest
    State
    immutable
  4. 04 / 04 Serve

    Reading and writing are separate contracts.

    A query returns a Selection Plan with its constraints and evidence. An action starts from a model declaration, passes principal, capability, precondition, idempotency, and policy checks, and runs only after any required approval. Evidence appends to the event store.

    Read
    SDK · MCP · HTTP
    Plan
    explainable + budgeted
    Write
    policy-gated

Choose your boundary

Put the runtime where your work already is.

The same model and corpus run in-process, mount into an agent through MCP, or sit behind an HTTP service. The query, plan, and action contracts stay the same.

Read the integration guide
Embedded SDK
import { AoeClient } from '@aoe/sdk';

const aoe = new AoeClient({
  snapshot: './dist/snapshot',
  model: './model',
});

const plan = await aoe.query({
  corpus: 'com.example/support',
  query: 'open incidents affecting checkout',
  topK: 8,
});

// plan.selected, plan.constraints, plan.snapshot

What people build with it

Anywhere an agent needs to know your objects by name.

Each of these needs the same three things: a vocabulary the application shares with the agent, material with traceable sources, and writes that stay under policy.

  • 01

    Support assistant

    Incidents, services, teams, and releases with the relations between them, so an assistant can follow impact instead of guessing from ticket text.

    A question it answers Which open incidents affect checkout, and who owns them?

  • 02

    Compliance review

    Controls, evidence, and exceptions under a versioned release, so a review can cite the exact snapshot it read.

    A question it answers Which controls lack evidence for this quarter?

  • 03

    Operations knowledge base

    Runbooks and procedures as typed units with preconditions, where the risky steps are declared actions rather than prose an agent improvises.

    A question it answers What is the rollback procedure, and may I run it?

  • 04

    Data catalogue

    Datasets, owners, lineage, and access rules, retrieved through a profile you configure instead of a similarity score you cannot inspect.

    A question it answers Which datasets carry customer data, and who approves access?

  • 05

    Design system guidance

    The reference Frontend Design package: 797 units of patterns, anti-patterns, and rules an agent consults while writing interface code.

    A question it answers What breaks keyboard access in this component?

The five-minute path

Three commands to a verified runtime.

The engine repository ships a small example so you can watch the whole path before you create a domain of your own.

  1. 01

    Install the engine

    Clone the repository and install with a frozen lockfile.

    git clone https://github.com/kernary-aoe/aoe-engine.git
    cd aoe-engine
    bun install --frozen-lockfile
  2. 02

    Build an example

    The model path is explicit, because the example vocabulary belongs to the example package and not to AOE Core.

    bun scripts/build-atom-dirs.ts \
      --src examples/hello-world/primes/sources \
      --out examples/hello-world/primes/compiled \
      --model compat/prime-v1-model \
      --corpus org.example/hello-world \
      --release 2026-08-31
  3. 03

    Connect a client

    Mount the same snapshot and model you built. The SDK and HTTP transports expose the same contracts.

    AOE_CORPUS_DIR=examples/hello-world/primes/compiled \
    AOE_MODEL_DIR=compat/prime-v1-model \
    bun packages/mcp-server-core/src/index.ts

Open the getting-started guide

Questions

Frequently asked.

01 How is this different from putting documents in a prompt or a vector store?

A prompt or a vector index stores text and returns passages ranked by similarity. AOE stores a compiled domain: typed units, directional relations, model-defined projections, and declared actions, all under a versioned snapshot. A query returns a Selection Plan that records what matched and which constraints applied, so you can log it, diff it between releases, and write tests against it.

02 Does AOE ship an ontology I have to adopt?

No. The engine fixes the declaration meta-schema and the stable IR. Types, fields, relations, retrieval profiles, and actions come from external Model Packages. Frontend Design, Security, Backend, and the mobile corpora in the registry are reference packages you can read, replace, or ignore.

03 What does a verified snapshot actually guarantee?

Every release carries a manifest and a content digest bound to a model lock. Before serving, the runtime recomputes identity and content, so a host can check that the snapshot is the release its corpus expects and that it is complete. A changed file fails the release instead of being served quietly.

04 Can an agent change state, or only read?

Both, through separate contracts. Queries and plans are read-only. An action validates inputs, principal, capability, preconditions, provider binding, side-effect class, idempotency, and policy, then returns an effect plan before running anything. Execution waits for any required approval, and the run and its evidence append to the event store. Deny is the default.

05 Which clients can connect today?

Any MCP-capable agent can mount a package directly. Applications can embed the SDK in-process or call the HTTP transport from another service. All three share the same query, plan, and action contracts, so the choice is about deployment rather than semantics.

06 What does it cost to keep a package current?

Editing sources and rebuilding. Generated files such as the index, manifest, and model lock are never hand-edited; a build regenerates them atomically so the digest and provenance stay trustworthy. Model and corpus releases carry their own versions, and a corpus declares the model range it was built for.

07 Is AOE ready for production?

AOE is 0.2 and Apache-2.0 licensed. The package, snapshot, query, and action contracts described in these docs are current, and the registry here is a static discovery site rather than a hosted registry service. Read the release notes before you depend on a contract.

Start with your domain

Give your agent a domain it can name.

Start with a small model and a handful of units. In a few minutes you have a runtime you can query, inspect, and govern.