← Back to Skills Marketplace
kaising-openclaw1

Ontology

by kaising-openclaw1 · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
247
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install long-term-memory
Description
Typed knowledge graph for structured agent memory and composable skills. Use when creating/querying entities (Person, Project, Task, Event, Document), linkin...
README (SKILL.md)

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

Trigger Action
"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 work Model as graph transformations
Skill needs shared state Read/write ontology objects

Core Types

# Agents & People
Person: { name, email?, phone?, notes? }
Organization: { name, type?, members[] }

# Work
Project: { name, status, goals[], owner? }
Task: { title, status, due?, priority?, assignee?, blockers[] }
Goal: { description, target_date?, metrics[] }

# Time & Place
Event: { title, start, end?, location?, attendees[], recurrence? }
Location: { name, address?, coordinates? }

# Information
Document: { title, path?, url?, summary? }
Message: { content, sender, recipients[], thread? }
Thread: { subject, participants[], messages[] }
Note: { content, tags[], refs[] }

# Resources
Account: { service, username, credential_ref? }
Device: { name, type, identifiers[] }
Credential: { service, secret_ref }  # Never store secrets directly

# Meta
Action: { type, target, timestamp, outcome? }
Policy: { scope, rule, enforcement }

Storage

Default: memory/ontology/graph.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.

Append-Only Rule

When working with existing ontology data or schema, append/merge changes instead of overwriting files. This preserves history and avoids clobbering prior definitions.

Workflows

Create Entity

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

Query

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

Link Entities

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

Validate

python3 scripts/ontology.py validate  # Check all constraints

Constraints

Define in memory/ontology/schema.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:

# In SKILL.md frontmatter or header
ontology:
  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_001
3. CREATE Task { title: "Prepare agenda", assignee: p_001 }
4. RELATE Task -> for_event -> event_001
5. 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:

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

Cross-Skill Communication

# Email skill creates commitment
commitment = ontology.create("Commitment", {
    "source_message": msg_id,
    "description": "Send report by Friday",
    "due": "2026-01-31"
})

# Task skill picks it up
tasks = ontology.query("Commitment", {"status": "pending"})
for c in tasks:
    ontology.create("Task", {
        "title": c.description,
        "due": c.due,
        "source": c.id
    })

Quick Start

# Initialize ontology storage
mkdir -p memory/ontology
touch memory/ontology/graph.jsonl

# Create schema (optional but recommended)
python3 scripts/ontology.py schema-append --data '{
  "types": {
    "Task": { "required": ["title", "status"] },
    "Project": { "required": ["name"] },
    "Person": { "required": ["name"] }
  }
}'

# Start using
python3 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

Instruction Scope

Runtime instructions operate on local files (memory/ontology/graph.jsonl and memory/ontology/schema.yaml) and provide CLI usage for create/query/relate/validate; this is within scope. The skill reads/writes workspace files and will create the memory/ontology directory when used. Validation includes property/enum/forbidden checks, relation type/cardinality validation, acyclicity for relations marked acyclic: true, and Event end >= start checks; other higher-level constraints may still be documentation-only unless implemented in code.

Usage Guidance
This skill appears to be what it claims: a local, file-backed typed knowledge graph with a CLI Python script. It does not ask for network credentials or contact external endpoints. However, a concrete implementation issue raises risk: the code includes a resolve_safe_path helper that would restrict file access to the workspace, but the core load/append functions shown do not call it — meaning a crafted or mistaken --graph-path argument can make the script read or append to arbitrary files. Before installing or enabling this skill: (1) inspect the full scripts/ontology.py to confirm all file paths are validated (or patch the code to use resolve_safe_path for any user-supplied path), (2) run the skill in an isolated workspace or sandbox (with limited permissions) to prevent accidental overwrites or exposure of sensitive files, (3) avoid storing secrets in the ontology (use external secret stores and the secret_ref pattern), and (4) if you will allow autonomous agent invocation, consider restricting which graph paths the agent may use. If you want, I can point to the exact functions to change and provide a minimal patch that enforces resolve_safe_path for append_op and load_graph.
Capability Analysis
Type: OpenClaw Skill Name: long-term-memory Version: 1.0.0 The skill bundle implements a structured knowledge graph (ontology) for agent memory, allowing for the creation and querying of entities and relations stored in local JSONL files. The implementation in `scripts/ontology.py` includes proactive security measures such as path validation to prevent directory traversal and a schema in `references/schema.md` that explicitly forbids storing raw secrets (passwords/tokens), requiring indirect references instead. No evidence of data exfiltration, malicious execution, or prompt injection was found.
Capability Tags
requires-sensitive-credentials
Capability Assessment
Purpose & Capability
Name/description (ontology/typed knowledge graph) align with the included SKILL.md and the Python script. No unexpected credentials, binaries, or external services are requested; the functionality described (entity CRUD, relations, validation, local storage) matches the code and docs.
Instruction Scope
SKILL.md instructs the agent and user to use a workspace-local storage path (memory/ontology/graph.jsonl) and provides CLI examples. However, while a helper resolve_safe_path that enforces staying within a workspace exists in the code, the primary graph load/append functions shown (load_graph, append_op) operate directly on arbitrary provided paths (Path(path)) without using resolve_safe_path. That means an attacker or mistaken invocation that supplies a custom --graph-path could cause the skill to read or append to arbitrary files on the filesystem, potentially overwriting or exfiltrating local data. The instructions themselves do not tell the agent to access other system state or external endpoints.
Install Mechanism
No install spec — instruction-only plus a Python script. This is low-risk from a supply-chain perspective because nothing is downloaded or executed by an automated installer. The agent/user is expected to run the included Python script locally.
Credentials
The skill declares no required environment variables or credentials and the documented ontology schema purposely forbids storing secrets directly. That is proportionate for a local ontology manager. Note: schema references to secret_ref are guidelines only; there is no integration with a secret manager in the shipped code.
Persistence & Privilege
The skill does not request always:true and is user-invocable only. It writes to local files (append-only graph.jsonl) by design. The main concern is that file writes are not strongly sandboxed in the implementation; persistence is expected but could affect arbitrary paths if invoked with custom arguments.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install long-term-memory
  3. After installation, invoke the skill by name or use /long-term-memory
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
v1.0 长期记忆技能 - 结构化知识图谱
Metadata
Slug long-term-memory
Version 1.0.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is Ontology?

Typed knowledge graph for structured agent memory and composable skills. Use when creating/querying entities (Person, Project, Task, Event, Document), linkin... It is an AI Agent Skill for Claude Code / OpenClaw, with 247 downloads so far.

How do I install Ontology?

Run "/install long-term-memory" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Ontology free?

Yes, Ontology is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Ontology support?

Ontology is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Ontology?

It is built and maintained by kaising-openclaw1 (@kaising-openclaw1); the current version is v1.0.0.

💬 Comments