import Link from "next/link"; import type { ReactNode } from "react"; import type { Metadata } from "next"; import { specMetadata } from "@/lib/page-meta"; import { SiteShell } from "@/components/site-shell"; export const metadata: Metadata = specMetadata( "/openontology", "LogicSRC OpenOntology is an open contract for durable, source-backed domain knowledge shared by humans and AI agents: typed entities, claims with provenance and time, portable queries, and governed change sets." ); const card = { border: "1px solid #e3e6e0", borderRadius: "0.6rem", padding: "1rem 1.15rem", background: "#fff", } as const; const mono = { fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontSize: "0.85rem", } as const; const pre = { ...mono, background: "#101418", color: "#e8eef5", padding: "1rem 1.1rem", borderRadius: "0.6rem", overflowX: "auto" as const, lineHeight: 1.6, margin: 0, }; const NOUNS: Array<[string, string, string]> = [ ["Type", "What kind of thing something is", "Person, Project, Codebase"], ["Entity", "A specific thing with a stable id", "eth:person:avery-lindqvist"], ["Claim", "A typed statement about an entity, or between two", "Avery —worksOn→ ZK Prover"], ["Source", "Where the claim came from", "a commit, a page, an API response"], ["Change set", "A reviewable proposal to add, correct, merge, or retract", "“Add Alice to ZK Prover”"], ]; const LAYERS: Array<[string, string]> = [ [ "Ontology schema", "The types, properties, relationships, constraints, and saved queries that describe a domain. Fetchable on its own, with no data in it.", ], [ "Knowledge graph", "The populated entities, claims, sources, and evidence. Append-only: corrections add history rather than overwriting it.", ], [ "Storage engine", "Where those objects happen to live — SQLite, Turso/libSQL, Postgres, an RDF store. Swappable behind one adapter interface.", ], [ "Vector search", "Optional, rebuildable, derived data that improves discovery. Never authoritative, never the only representation of a fact.", ], [ "Agent runtime", "The thing that reads, queries, and proposes. It holds scopes, not privileges: it proposes; a human applies.", ], ]; export default function OpenOntologyPage(): ReactNode { return (

LogicSRC standards surface

OpenOntology

An open contract for durable, source-backed domain knowledge shared by humans and AI agents. Define the things in a domain, connect them with typed claims, preserve where each fact came from, and let agents query or propose changes through governed interfaces.

OpenOntology is a standard, not a hosted graph product. The normative contracts are JSON Schemas; @logicsrc/openontology is a reference implementation of them, not the definition. It is storage-agnostic, model-provider-neutral, and works with no account, no API key, and no network.

Status: 0.1 Draft. Ontologies are decades-old work and OpenOntology did not invent them — it is one open, agent-shaped contract among several, and it maps to JSON-LD and PROV-O rather than replacing them.

Five nouns

Learn these and you can read any package.

{NOUNS.map(([noun, what, example]) => (
{noun}
{what}
{example}
))}

A map of an ecosystem

People, organizations, projects, codebases, and the research topics they serve — connected by typed, queryable relationships instead of prose.

{`   Person ──worksAt──▶ Organization ──maintains──▶ Codebase
     │                    │                          │
  worksOn              builds                   implements
     │                    │                          │
     ▼                    ▼                          ▼
  Project ──investigates──▶ ResearchTopic        Protocol
     ▲
   funds
     │
FundingProgram`}

Ask it a three-hop question — which organizations maintain the codebases the applications on this network depend on? — and get back rows you can trace to evidence.

Every claim carries its receipts

Status, confidence, both clocks, and the sources it rests on.

{`openontology: "0.1"
kind: Claim
subject: "eth:person:avery-lindqvist"
predicate: worksOn
object:
  entity: "eth:project:zk-prover"
status: asserted           # asserted | proposed | disputed
                           # retracted | superseded | derived
confidence: 0.94           # metadata, never permission
validTime:                 # when it was true in the world
  from: 2026-04-01T00:00:00Z
  to: null
assertedAt: 2026-07-25T19:43:12Z   # when we recorded it
assertedBy: "agent:research-mapper"
runId: "run_01J3EXAMPLE"
sources: ["eth:source:commit-a41f"]
evidence: ["eth:evidence:007"]`}

We say claim, not fact. A clean graph makes uncertain things look definitive, so status, confidence, source count, valid time, and dispute history stay visible everywhere — in query results, in the CLI, and in the UI.

Five things people conflate

OpenOntology is the first two. The rest are implementation choices.

{LAYERS.map(([name, detail]) => (
{name}
{detail}
))}

Agents propose. Humans apply.

The safety model in one line, and what enforces it.

Five minutes, offline

No login, no hosted database, no model key.

{`logicsrc ontology init my-ecosystem
logicsrc ontology validate my-ecosystem --strict
logicsrc ontology query run contributors --dir my-ecosystem
logicsrc ontology query explain contributors --dir my-ecosystem --row 0`}
{`  ✓ 3 entity types
  ✓ 4 relationship types
  ✓ 8 entities
  ✓ 14 claims
  ✓ 2 sources
  ✓ 1 constraints
OpenOntology package is valid.`}

Where everything lives

); }