Ontology

by sundial-orgb80cde2ef852No license663 starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 7 months ago

Typed knowledge graph for structured agent memory and composable skills. Use when creating/querying entities (Person, Project, Task, Event, Document), linking related objects, enforcing constraints, planning multi-step actions as graph transformations, or when skills need to share state. Trigger on "remember", "what do I know about", "link X to Y", "show dependencies", entity CRUD, or cross-skill data access.

Includes scriptsAI & Agents
AI-generated overview

Maintains a typed knowledge graph of entities and relations for structured agent memory and cross-skill state.

What it does
Provides a typed vocabulary and constraint system that stores entities (Person, Project, Task, Event, Document and others) with properties and relations in a JSONL graph file. A bundled Python script supports creating, querying, linking and validating entities, and schema rules enforce required fields, enumerations and relation cardinality. It also describes modelling multi-step plans as validated graph transformations and sharing state between skills.
When to use it
Use it when an agent needs persistent structured memory, such as remembering facts, querying what is known about an entity, linking objects, or tracing dependencies. It also fits multi-step planning and skills that must exchange state through a shared graph.
Requirements
Requires Python 3 to run scripts/ontology.py and a writable storage location, by default memory/ontology/graph.jsonl with an optional schema.yaml. No credentials or network access are described; the skill ships an executable script plus two reference documents.

Ontology

A typed vocabulary + constraint system for representing knowledge as a verifiable graph.

Core Concept

Everything is an entity with a type, properties, and relations to other entities. Every mutation is validated against type constraints before committing.

Entity: { id, type, properties, relations, created, updated }Relation: { from_id, relation_type, to_id, properties }

When to Use

TriggerAction
"Remember that..."Create/update entity
"What do I know about X?"Query graph
"Link X to Y"Create relation
"Show all tasks for project Z"Graph traversal
"What depends on X?"Dependency query
Planning multi-step workModel as graph transformations
Skill needs shared stateRead/write ontology objects

Core Types

yaml
# Agents & PeoplePerson: { name, email?, phone?, notes? }Organization: { name, type?, members[] }
# WorkProject: { name, status, goals[], owner? }Task: { title, status, due?, priority?, assignee?, blockers[] }Goal: { description, target_date?, metrics[] }
# Time & PlaceEvent: { title, start, end?, location?, attendees[], recurrence? }Location: { name, address?, coordinates? }
# InformationDocument: { title, path?, url?, summary? }Message: { content, sender, recipients[], thread? }Thread: { subject, participants[], messages[] }Note: { content, tags[], refs[] }
# ResourcesAccount: { service, username, credential_ref? }Device: { name, type, identifiers[] }Credential: { service, secret_ref }  # Never store secrets directly
# MetaAction: { type, target, timestamp, outcome? }Policy: { scope, rule, enforcement }

Storage

Default: memory/ontology/graph.jsonl

jsonl
{"op":"create","entity":{"id":"p_001","type":"Person","properties":{"name":"Alice"}}}{"op":"create","entity":{"id":"proj_001","type":"Project","properties":{"name":"Website Redesign","status":"active"}}}{"op":"relate","from":"proj_001","rel":"has_owner","to":"p_001"}

Query via scripts or direct file ops. For complex graphs, migrate to SQLite.

Workflows

Create Entity

bash
python3 scripts/ontology.py create --type Person --props '{"name":"Alice","email":"[email protected]"}'

Query

bash
python3 scripts/ontology.py query --type Task --where '{"status":"open"}'python3 scripts/ontology.py get --id task_001python3 scripts/ontology.py related --id proj_001 --rel has_task

Link Entities

bash
python3 scripts/ontology.py relate --from proj_001 --rel has_task --to task_001

Validate

bash
python3 scripts/ontology.py validate  # Check all constraints

Constraints

Define in memory/ontology/schema.yaml:

yaml
types:  Task:    required: [title, status]    status_enum: [open, in_progress, blocked, done]    Event:    required: [title, start]    validate: "end >= start if end exists"
  Credential:    required: [service, secret_ref]    forbidden_properties: [password, secret, token]  # Force indirection
relations:  has_owner:    from_types: [Project, Task]    to_types: [Person]    cardinality: many_to_one    blocks:    from_types: [Task]    to_types: [Task]    acyclic: true  # No circular dependencies

Skill Contract

Skills that use ontology should declare:

yaml
# In SKILL.md frontmatter or headerontology:  reads: [Task, Project, Person]  writes: [Task, Action]  preconditions:    - "Task.assignee must exist"  postconditions:    - "Created Task has status=open"

Planning as Graph Transformation

Model multi-step plans as a sequence of graph operations:

Plan: "Schedule team meeting and create follow-up tasks"
1. CREATE Event { title: "Team Sync", attendees: [p_001, p_002] }2. RELATE Event -> has_project -> proj_0013. CREATE Task { title: "Prepare agenda", assignee: p_001 }4. RELATE Task -> for_event -> event_0015. CREATE Task { title: "Send summary", assignee: p_001, blockers: [task_001] }

Each step is validated before execution. Rollback on constraint violation.

Integration Patterns

With Causal Inference

Log ontology mutations as causal actions:

python
# When creating/updating entities, also log to causal action logaction = {    "action": "create_entity",    "domain": "ontology",     "context": {"type": "Task", "project": "proj_001"},    "outcome": "created"}

Cross-Skill Communication

python
# Email skill creates commitmentcommitment = ontology.create("Commitment", {    "source_message": msg_id,    "description": "Send report by Friday",    "due": "2026-01-31"})
# Task skill picks it uptasks = ontology.query("Commitment", {"status": "pending"})for c in tasks:    ontology.create("Task", {        "title": c.description,        "due": c.due,        "source": c.id    })

Quick Start

bash
# Initialize ontology storagemkdir -p memory/ontologytouch memory/ontology/graph.jsonl
# Create schema (optional but recommended)cat > memory/ontology/schema.yaml << 'EOF'types:  Task:    required: [title, status]  Project:    required: [name]  Person:    required: [name]EOF
# Start usingpython3 scripts/ontology.py create --type Person --props '{"name":"Alice"}'python3 scripts/ontology.py list --type Person

References

  • references/schema.md — Full type definitions and constraint patterns
  • references/queries.md — Query language and traversal examples

Source and attribution

Source:sundial-org/awesome-openclaw-skillsinskills/ontologyat commitb80cde2

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal